use of ca.corefacility.bioinformatics.irida.model.RemoteAPIToken in project irida by phac-nml.
the class RemoteAPITokenServiceImpl method createTokenFromAuthCode.
/**
* Get a new token from the given auth code
* @param authcode the auth code to create a token for
* @param remoteAPI the remote api to get a token for
* @param tokenRedirect a redirect url to get the token from
* @return a new token
* @throws OAuthSystemException If building the token request fails
* @throws OAuthProblemException If the token request fails
*/
@Transactional
public RemoteAPIToken createTokenFromAuthCode(String authcode, RemoteAPI remoteAPI, String tokenRedirect) throws OAuthSystemException, OAuthProblemException {
String serviceURI = remoteAPI.getServiceURI();
// Build the token location for this service
URI serviceTokenLocation = UriBuilder.fromUri(serviceURI).path("oauth").path("token").build();
logger.debug("Remote token location: " + serviceTokenLocation);
// Create the token request form the given auth code
OAuthClientRequest tokenRequest = OAuthClientRequest.tokenLocation(serviceTokenLocation.toString()).setClientId(remoteAPI.getClientId()).setClientSecret(remoteAPI.getClientSecret()).setRedirectURI(tokenRedirect).setCode(authcode).setGrantType(GrantType.AUTHORIZATION_CODE).buildBodyMessage();
// execute the request
OAuthJSONAccessTokenResponse accessTokenResponse = oauthClient.accessToken(tokenRequest);
// read the response for the access token
String accessToken = accessTokenResponse.getAccessToken();
// Handle Refresh Tokens
String refreshToken = accessTokenResponse.getRefreshToken();
// check the token expiry
Long expiresIn = accessTokenResponse.getExpiresIn();
Long currentTime = System.currentTimeMillis();
Date expiry = new Date(currentTime + (expiresIn * ONE_SECOND_IN_MS));
logger.debug("Token expiry: " + expiry);
// create the OAuth2 token and store it
RemoteAPIToken token = new RemoteAPIToken(accessToken, refreshToken, remoteAPI, expiry);
return create(token);
}
use of ca.corefacility.bioinformatics.irida.model.RemoteAPIToken in project irida by phac-nml.
the class RemoteAPITokenServiceImpl method delete.
/**
* {@inheritDoc}
*/
@Transactional
@Override
public void delete(RemoteAPI remoteAPI) throws EntityNotFoundException {
RemoteAPIToken token = getToken(remoteAPI);
tokenRepository.delete(token);
}
use of ca.corefacility.bioinformatics.irida.model.RemoteAPIToken in project irida by phac-nml.
the class RemoteAPITokenServiceImpl method updateTokenFromRefreshToken.
/**
* {@inheritDoc}
*/
@Transactional
public RemoteAPIToken updateTokenFromRefreshToken(RemoteAPI api) {
RemoteAPIToken token = null;
try {
token = getToken(api);
String refreshToken = token.getRefreshToken();
if (refreshToken != null) {
URI serviceTokenLocation = UriBuilder.fromUri(api.getServiceURI()).path("oauth").path("token").build();
OAuthClientRequest tokenRequest = OAuthClientRequest.tokenLocation(serviceTokenLocation.toString()).setClientId(api.getClientId()).setClientSecret(api.getClientSecret()).setRefreshToken(refreshToken).setGrantType(GrantType.REFRESH_TOKEN).buildBodyMessage();
OAuthJSONAccessTokenResponse accessToken = oauthClient.accessToken(tokenRequest);
token = buildTokenFromResponse(accessToken, api);
delete(api);
token = create(token);
logger.debug("Token for api " + api + " updated by refresh token.");
} else {
logger.debug("No refresh token for api " + api + ". Cannot update access token.");
}
} catch (EntityNotFoundException ex) {
logger.debug("Token not found for api " + api + ". Cannot update access token.");
} catch (OAuthProblemException | OAuthSystemException ex) {
logger.error("Updating token by refresh token failed", ex.getMessage());
}
return token;
}
use of ca.corefacility.bioinformatics.irida.model.RemoteAPIToken in project irida by phac-nml.
the class OAuthTokenRestTemplate method createRequest.
/**
* Add an OAuth token from the tokenRepository to the request
*/
@Override
protected ClientHttpRequest createRequest(URI uri, HttpMethod method) throws IOException {
RemoteAPIToken token;
try {
token = tokenService.getToken(remoteAPI);
} catch (EntityNotFoundException ex) {
logger.debug("No token found for service " + remoteAPI);
throw new IridaOAuthException("No token fround for service", remoteAPI, ex);
}
if (token.isExpired()) {
logger.debug("Token for service is expired " + remoteAPI);
throw new IridaOAuthException("Token is expired for service", remoteAPI);
}
ClientHttpRequest createRequest = super.createRequest(uri, method);
createRequest.getHeaders().add("Authorization", "Bearer " + token.getTokenString());
return createRequest;
}
use of ca.corefacility.bioinformatics.irida.model.RemoteAPIToken in project irida by phac-nml.
the class RemoteAPITokenServiceImplIT method testGetToken.
@Test
public void testGetToken() {
RemoteAPI api = apiService.read(1L);
RemoteAPIToken token = tokenService.getToken(api);
assertNotNull(token);
assertEquals("123456789", token.getTokenString());
}
Aggregations