refreshSession method
Future<Either<Failure, AuthenticationData>>
refreshSession(
)
inherited
Implementation
@override
Future<Either<Failure, AuthenticationData>> refreshSession() async {
final currentSessionResult = await getAuthenticatedSession();
return currentSessionResult.fold((l) => left(l), (session) async {
if (session == null) {
return left(NoAuthenticatedFailure());
}
if (config.refreshTokenAPIendpoint != null) {
return wrapAndHandleHttpBaseRequest<AuthenticationData>(
() {
final Uri uri = config.refreshTokenAPIendpoint!(session.id, JWT.parse(session.token));
return Request(
config.refreshTokenMethod ?? "POST",
uri,
)
..headers.addAll({
AuthHttpClientKeys.noAuthenticateOverride: "true",
})
..body = jsonEncode(config.customRefreshTokenRequestBodyMapper?.call(
session.refreshToken!,
session.token,
session.deviceInfo,
) ??
{
"refreshToken": session.refreshToken,
"deviceInfo": session.deviceInfo?.toMap(),
});
},
onResponse: (response, left, right) async {
final tokens = await config.customRefreshTokenResponseParser?.call(
jsonDecode(response.body),
) ??
_defaultRefreshTokenResponseParser(response.body);
// store the new session
await storeAuthDataSession(session.copyWith(
token: tokens[AuthSharedPrefKeys.TOKEN_KEY],
refreshToken: tokens[AuthSharedPrefKeys.REFRESH_KEY],
));
final newSessionResult = await getAuthenticatedSession();
return newSessionResult.fold((l) {
return left(l);
}, (r) {
if (r == null) {
return left(UnknownFailure(
message: "Error while retrieving refreshed session",
));
}
return right(r);
});
},
);
} else if (config.customRefreshTokenCallback != null) {
return handleDefault<AuthenticationData>((left, right) async {
final tokens =
await config.customRefreshTokenCallback?.call(session.token, session.refreshToken, session.deviceInfo);
if (tokens == null || !tokens.containsKey(AuthSharedPrefKeys.TOKEN_KEY)) {
throw Exception("config.customRefreshTokenCallback were not able to provide auth tokens");
}
return right(
session.copyWith(
token: tokens[AuthSharedPrefKeys.TOKEN_KEY],
refreshToken: tokens[AuthSharedPrefKeys.REFRESH_KEY],
),
);
});
}
return left<Failure, AuthenticationData>(
UnknownFailure(
message:
"Cannot refresh authentication since no 'config.refreshTokenAPIendpoint' nor 'config.customRefreshTokenCallback' defined",
),
);
});
}