webAuth method
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},
);
}