@Override public Object authenticate(final Context context, final Object payload) throws AuthException { final Request request = context.request(); final String uri = request.uri(); if (Logger.isDebugEnabled()) { Logger.debug("Returned with URL: '" + uri + "'"); } final Configuration c = getConfiguration(); final ConsumerKey key = new ConsumerKey( c.getString(SettingKeys.CONSUMER_KEY), c.getString(SettingKeys.CONSUMER_SECRET)); final String requestTokenURL = c.getString(SettingKeys.REQUEST_TOKEN_URL); final String accessTokenURL = c.getString(SettingKeys.ACCESS_TOKEN_URL); final String authorizationURL = c.getString(SettingKeys.AUTHORIZATION_URL); final ServiceInfo info = new ServiceInfo(requestTokenURL, accessTokenURL, authorizationURL, key); final OAuth service = new OAuth(info, true); checkError(request); if (uri.contains(Constants.OAUTH_VERIFIER)) { final RequestToken rtoken = (RequestToken) PlayAuthenticate.removeFromCache(context.session(), CACHE_TOKEN); final String verifier = Authenticate.getQueryString(request, Constants.OAUTH_VERIFIER); final Either<OAuthException, RequestToken> retrieveAccessToken = service.retrieveAccessToken(rtoken, verifier); if (retrieveAccessToken.isLeft()) { throw new AuthException(retrieveAccessToken.left().get().getLocalizedMessage()); } else { final I i = buildInfo(retrieveAccessToken.right().get()); return transform(i); } } else { final String callbackURL = getRedirectUrl(request); final Either<OAuthException, RequestToken> reponse = service.retrieveRequestToken(callbackURL); if (reponse.isLeft()) { // Exception happened throw new AuthException(reponse.left().get().getLocalizedMessage()); } else { // All good, we have the request token final RequestToken rtoken = reponse.right().get(); final String token = rtoken.token(); final String redirectUrl = service.redirectUrl(token); PlayAuthenticate.storeInCache(context.session(), CACHE_TOKEN, rtoken); return redirectUrl; } } }
protected void checkError(Request request) throws AuthException { final String error = Authenticate.getQueryString(request, Constants.OAUTH_PROBLEM); if (error != null) { if (error.equals(Constants.OAUTH_ACCESS_DENIED)) { throw new AccessDeniedException(getKey()); } else { throw new AuthException(error); } } }