generate method Null safety
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'
});
}