use of com.nexblocks.authguard.service.model.AccountBO in project AuthGuard by AuthGuard.
the class SmsPasswordlessSubscriberTest method onValidMessageNoPhoneNumber.
@Test
void onValidMessageNoPhoneNumber() {
final AccountTokenDO accountToken = AccountTokenDO.builder().token("token").build();
final AccountBO account = AccountBO.builder().build();
final PasswordlessMessageBody messageBody = new PasswordlessMessageBody(accountToken, account);
final Message message = Messages.passwordlessGenerated(messageBody);
smsPasswordlessSubscriber.onMessage(message);
Mockito.verify(smsProvider, Mockito.never()).send(Mockito.any());
}
use of com.nexblocks.authguard.service.model.AccountBO 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.service.model.AccountBO in project AuthGuard by AuthGuard.
the class OAuthService method getOrCreateAccount.
private AccountBO getOrCreateAccount(final OAuthServiceClient serviceClient, final String authorizationCode, final String idToken) {
final ImmutableOAuthClientConfiguration configuration = serviceClient.getConfiguration();
final DecodedJWT decoded = JWT.decode(idToken);
final String externalId = decoded.getSubject();
final Optional<AccountBO> account = accountsService.getByExternalId(externalId);
if (account.isPresent()) {
return account.get();
}
final AccountBO.Builder newAccount = AccountBO.builder().externalId(externalId).social(true).identityProvider(configuration.getProvider());
if (configuration.getEmailField() != null) {
final Claim emailClaim = decoded.getClaim(configuration.getEmailField());
if (!emailClaim.isNull()) {
newAccount.email(AccountEmailBO.builder().email(emailClaim.asString()).build());
}
}
final RequestContextBO requestContext = RequestContextBO.builder().source(configuration.getProvider()).idempotentKey(authorizationCode).build();
return accountsService.create(newAccount.build(), requestContext);
}
use of com.nexblocks.authguard.service.model.AccountBO in project AuthGuard by AuthGuard.
the class IdTokenProviderTest method generateEncrypted.
@Test
void generateEncrypted() {
final IdTokenProvider idTokenProvider = newProviderInstance(jwtConfigWithEncryption());
Mockito.when(tokenEncryptor.encryptAndEncode(Mockito.any())).thenAnswer(invocation -> Either.right("encrypted"));
final AccountBO account = RANDOM.nextObject(AccountBO.class).withActive(true);
final AuthResponseBO tokens = idTokenProvider.generateToken(account);
assertThat(tokens).isNotNull();
assertThat(tokens.getToken()).isEqualTo("encrypted");
assertThat(tokens.getRefreshToken()).isNotNull();
assertThat(tokens.getToken()).isNotEqualTo(tokens.getRefreshToken());
}
use of com.nexblocks.authguard.service.model.AccountBO in project AuthGuard by AuthGuard.
the class JwtPermissionsMapperTest method map.
@Test
void map() {
final AccountBO account = AccountBO.builder().permissions(Arrays.asList(PermissionBO.builder().group("test").name("read").build(), PermissionBO.builder().group("test").name("write").build(), PermissionBO.builder().group("test").name("nothing").build())).build();
final TokenRestrictionsBO restrictions = TokenRestrictionsBO.builder().addPermissions("test:read", "test:nothing").build();
final String[] expected = new String[] { "test:read", "test:nothing" };
final String[] actual = JwtPermissionsMapper.map(account, restrictions);
assertThat(Arrays.asList(actual)).isEqualTo(Arrays.asList(expected));
}
Aggregations