webAuth method

  1. @override
Future webAuth(
  1. Uri url, {
  2. String? callbackUrlScheme,
})
override

Handle OAuth2 session creation.

Implementation

@override
Future webAuth(Uri url, {String? callbackUrlScheme}) async {
  if (!_loopbackCallback) {
    return _saveSession(
      await _authenticate(
        url,
        "appwrite-callback-${config['project']!}",
      ),
    );
  }

  final callback = callbackUrlScheme ?? await _loopbackUrl();
  final exchange = url.path.contains(_sessionOAuth2Path);
  final result = await _authenticate(
    url.replace(
      path: exchange
          ? url.path.replaceFirst(_sessionOAuth2Path, _tokenOAuth2Path)
          : url.path,
      queryParameters: {
        ...url.queryParametersAll,
        'success': [callback],
        'failure': [callback],
      },
    ),
    callback,
  );
  if (!exchange) {
    return _saveSession(result);
  }

  final userId = result.queryParameters['userId'];
  final secret = result.queryParameters['secret'];
  if (userId == null || secret == null) {
    _throwCallbackError(result);
  }
  await call(
    HttpMethod.post,
    path: _tokenSessionPath,
    params: {'userId': userId, 'secret': secret},
  );
}