refresh method
Get a new access token for the current user based on the previously granted refresh token.
Implementation
Future<OAuthToken> refresh() async {
if (_app == null) {
throw CarpServiceException(
message:
"CARP Service not initialized. Call 'CarpService().configure()' first.");
}
if (_currentUser == null) {
throw CarpServiceException(
message:
"No user is authenticated. Call 'CarpService().authenticate()' first.");
}
// --data "refresh_token=my-refresh-token&grant_type=refresh_token"
final loginBody = {
"refresh_token": _currentUser!.token!.refreshToken,
"grant_type": "refresh_token"
};
final http.Response response = await httpr.post(
Uri.encodeFull(authEndpointUri),
headers: _authenticationHeader,
body: loginBody,
);
int httpStatusCode = response.statusCode;
Map<String, dynamic> responseJson =
json.decode(response.body) as Map<String, dynamic>;
if (httpStatusCode == HttpStatus.ok) {
OAuthToken refreshedToken = OAuthToken.fromMap(responseJson);
_currentUser!.authenticated(refreshedToken);
_authEventController.add(AuthEvent.refreshed);
return refreshedToken;
}
// All other cases are treated as a failed attempt and throws an error
_authEventController.add(AuthEvent.failed);
_currentUser = null;
throw CarpServiceException(
httpStatus: HTTPStatus(httpStatusCode, response.reasonPhrase),
message: responseJson["error_description"].toString(),
);
}