use of com.nexblocks.authguard.jwt.oauth.TokensResponse in project AuthGuard by AuthGuard.
the class OAuthServiceTest method exchangeAuthorizationCodeAndGetAccount.
@Test
void exchangeAuthorizationCodeAndGetAccount() {
Mockito.when(sessionsService.getByToken(Mockito.any())).thenAnswer(invocation -> {
final SessionBO session = SessionBO.builder().sessionToken(invocation.getArgument(0)).expiresAt(OffsetDateTime.now().plus(Duration.ofMinutes(2))).build();
return Optional.of(session);
});
Mockito.when(accountsService.getByExternalId("1")).thenReturn(Optional.of(AccountBO.builder().id("1").build()));
final TokensResponse actual = oAuthService.exchangeAuthorizationCode("account_test", "random", "code").join();
final TokensResponse expected = testIdentityServer.getSuccessResponse();
expected.setAccountId("1");
assertThat(actual).isEqualTo(expected);
}
use of com.nexblocks.authguard.jwt.oauth.TokensResponse in project AuthGuard by AuthGuard.
the class OAuthServiceTest method exchangeAuthorizationCode.
@Test
void exchangeAuthorizationCode() {
Mockito.when(sessionsService.getByToken(Mockito.any())).thenAnswer(invocation -> {
final SessionBO session = SessionBO.builder().sessionToken(invocation.getArgument(0)).expiresAt(OffsetDateTime.now().plus(Duration.ofMinutes(2))).build();
return Optional.of(session);
});
final TokensResponse actual = oAuthService.exchangeAuthorizationCode("test", "random", "code").join();
final TokensResponse expected = testIdentityServer.getSuccessResponse();
assertThat(actual).isEqualTo(expected);
}
use of com.nexblocks.authguard.jwt.oauth.TokensResponse in project AuthGuard by AuthGuard.
the class OAuthService method exchangeAuthorizationCode.
/**
* Exchanges an authorization code with OAuth tokens. It'll verify that
* a session containing that state exists before performing the exchange.
* If the state has expired or no record of it existed then the future
* will complete with {@link ServiceAuthorizationException}.
*
* @param provider The name of a provider as stated in the configuration.
* @param state The state the identity provider returned.
* @param authorizationCode The authorization code generated by the identity provider.
*/
public CompletableFuture<TokensResponse> exchangeAuthorizationCode(final String provider, final String state, final String authorizationCode) {
final OAuthServiceClient client = Optional.ofNullable(providersClients.get(provider)).orElseThrow(() -> new ServiceException(ErrorCode.GENERIC_AUTH_FAILURE, "Invalid identity provider"));
return CompletableFuture.supplyAsync(() -> sessionsService.getByToken(state)).thenCompose(sessionOptional -> sessionOptional.map(session -> doExchange(client, authorizationCode, session)).orElseThrow(() -> new ServiceAuthorizationException(ErrorCode.TOKEN_EXPIRED_OR_DOES_NOT_EXIST, "The provided state is either invalid or has expired"))).thenApply(tokensResponse -> {
if (client.getConfiguration().isAccountProvider()) {
if (tokensResponse.getIdToken() == null) {
LOG.warn("Provider {} was set as an account provider but no ID was found in the response", provider);
} else {
final AccountBO account = getOrCreateAccount(client, authorizationCode, tokensResponse.getIdToken());
tokensResponse.setAccountId(account.getId());
}
}
return tokensResponse;
});
}
use of com.nexblocks.authguard.jwt.oauth.TokensResponse in project AuthGuard by AuthGuard.
the class OAuthServiceTest method exchangeAuthorizationCodeAndCreateAccount.
@Test
void exchangeAuthorizationCodeAndCreateAccount() {
final RequestContextBO expectedContext = RequestContextBO.builder().idempotentKey("code").source("account_test").build();
Mockito.when(sessionsService.getByToken(Mockito.any())).thenAnswer(invocation -> {
final SessionBO session = SessionBO.builder().sessionToken(invocation.getArgument(0)).expiresAt(OffsetDateTime.now().plus(Duration.ofMinutes(2))).build();
return Optional.of(session);
});
Mockito.when(accountsService.create(Mockito.any(), Mockito.eq(expectedContext))).thenAnswer(invocation -> invocation.getArgument(0, AccountBO.class).withId("1"));
final TokensResponse actual = oAuthService.exchangeAuthorizationCode("account_test", "random", "code").join();
final TokensResponse expected = testIdentityServer.getSuccessResponse();
expected.setAccountId("1");
assertThat(actual).isEqualTo(expected);
}
Aggregations