updateToken method
Requests a new access token if it expires within the given duration.
Implementation
Future<void> updateToken([Duration? duration]) async {
final securedRefreshToken =
await _secureStorage.read(key: _refreshTokenKey);
if (securedRefreshToken == null) {
developer.log('No refresh token found.', name: 'keycloak_wrapper');
_streamController.add(false);
} else if (JWT
.decode(securedRefreshToken)
.willExpired(duration ?? Duration.zero)) {
developer.log('Expired refresh token', name: 'keycloak_wrapper');
_streamController.add(false);
} else {
final isConnected = await hasNetwork();
if (isConnected) {
tokenResponse = await _appAuth.token(
TokenRequest(
_keycloakConfig.clientId,
_keycloakConfig.redirectUri,
issuer: _keycloakConfig.issuer,
scopes: _keycloakConfig.scopes,
refreshToken: securedRefreshToken,
allowInsecureConnections: _keycloakConfig.allowInsecureConnections,
clientSecret: _keycloakConfig.clientSecret,
),
);
if (tokenResponse.isValid) {
if (refreshToken != null) {
await _secureStorage.write(
key: _refreshTokenKey,
value: refreshToken,
);
}
} else {
developer.log('Invalid token response.', name: 'keycloak_wrapper');
}
_streamController.add(tokenResponse.isValid);
} else {
developer.log('No internet connection.', name: 'keycloak_wrapper');
_streamController.add(true);
}
}
}