getAuthorizationUrl static method

Future<String> getAuthorizationUrl(
  1. OAuthProvider provider
)

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');
  }
}