generate method Null safety

  1. @override
Future<Token> generate()
override

generate and persist the OAuth2 refresh token from a single use auth code

Implementation

@override
Future<Token> generate() async {
  final OAuthClient oAuthClient = new OAuthClient(dio);

  final tokenFile = File('.refreshToken.json');

  // Map<String, String>? tokenStore;

  final tokenStore = <String, dynamic>{};

  String? refreshToken;

  if (tokenFile.existsSync()) {
    tokenStore.addAll(json.decode(tokenFile.readAsStringSync()));
  }

  if (tokenStore.containsKey(oauthCredentials.clientId)) {
    refreshToken = tokenStore[oauthCredentials.clientId];
  } else {
    final token = await oAuthClient.getToken({
      'client_id': oauthCredentials.clientId,
      'client_secret': oauthCredentials.clientSecret,
      'code': oauthCredentials.code,
      'redirect_uri': 'urn:ietf:wg:oauth:2.0:oob',
      'grant_type': 'authorization_code'
    });

    if (token.refreshToken == null) throw Exception();

    refreshToken = token.refreshToken!;

    tokenStore[oauthCredentials.clientId] = refreshToken;

    tokenFile.writeAsStringSync(json.encode(tokenStore));
  }

  return await oAuthClient.getToken({
    'client_id': oauthCredentials.clientId,
    'client_secret': oauthCredentials.clientSecret,
    'refresh_token': refreshToken,
    'grant_type': 'refresh_token'
  });
}