getAuthorizationUrl static method
Implementation
static Future<String> getAuthorizationUrl(OAuthProvider provider) async {
_state = CryptoUtils.generateRandomString(32);
_codeVerifier = CryptoUtils.generateRandomString(128);
_codeChallenge = CryptoUtils.generateCodeChallenge(_codeVerifier);
try {
final discoveryResponse =
await http.get(Uri.parse(provider.discoveryUrl));
if (discoveryResponse.statusCode != 200) {
throw Exception('Failed to fetch discovery document');
}
final discoveryData = json.decode(discoveryResponse.body);
final authorizationEndpoint = discoveryData['authorization_endpoint'];
return Uri.parse(authorizationEndpoint).replace(
queryParameters: {
'response_type': 'code',
'client_id': provider.clientId,
'redirect_uri': provider.redirectUrl,
'scope': provider.scopes.join(' '),
'state': _state,
'code_challenge': _codeChallenge,
'code_challenge_method': 'S256',
},
).toString();
} catch (e) {
throw Exception('Failed to get authorization URL: $e');
}
}