/** * Returns access token based on client credentials. Following rules are applied before getting * new access token 1. Check to see whether the access token is expired 2. Check to see whether * the token can be refreshed 3. If all the above fails then retrieves new token and save it to * supplied JSP file for later retrieval * * @param scope * @param clientIdAut * @param clientSecretAut * @return */ public OAUTHResponse getAccessToken(String scope, String clientIdAut, String clientSecretAut) { if (!validateClientCredentials(scope, clientIdAut, clientSecretAut)) return oauthResponse; Long currentTime = System.currentTimeMillis(); if (currentTime < savedAccessTokenExpiry) { oauthResponse.setStatus(true); oauthResponse.setAccessToken(savedAccessToken); oauthResponse.setRefreshToken(savedRefreshToken); oauthResponse.setAccessTokenExpiry(savedAccessTokenExpiry); oauthResponse.setRefreshTokenExpiry(savedRefreshTokenExpiry); return oauthResponse; } else if (currentTime < savedRefreshTokenExpiry) { // Otherwise if there is a refresh token that has not expired, // use that to renew and save to file refreshTokens(clientIdAut, clientSecretAut, currentTime); } else if (currentTime > savedRefreshTokenExpiry) { // Otherwise get a new access token and refresh token, and save // them to file getNewTokens(scope, clientIdAut, clientSecretAut, currentTime); } return oauthResponse; }
/** * Parse successful JSON response * * @param method * @param currentTime * @return */ private void parseResponse(PostMethod method, Long currentTime) { int statusCode = method.getStatusCode(); String accessToken = ""; if (statusCode == 200) { JSONObject rpcObject; try { rpcObject = new JSONObject(method.getResponseBodyAsString()); accessToken = rpcObject.getString("access_token"); String refreshToken = rpcObject.getString("refresh_token"); String expires_in = rpcObject.getString("expires_in"); Long accessTokenExpiry = null; if (expires_in.equals("0")) { accessTokenExpiry = currentTime + ACCESSTOKEN_EXPIRY; // 100 // years } Long refreshTokenExpiry = currentTime + REFRESHTOKEN_EXPIRY; oauthResponse.setStatus(true); oauthResponse.setAccessToken(accessToken); oauthResponse.setRefreshToken(refreshToken); oauthResponse.setAccessTokenExpiry(accessTokenExpiry); oauthResponse.setRefreshTokenExpiry(refreshTokenExpiry); } catch (ParseException e) { setErrorResponse(statusCode, e.getMessage()); } catch (IOException e) { setErrorResponse(statusCode, e.getMessage()); } } else { try { String errorResponse = method.getResponseBodyAsString() == null ? method.getStatusText() : method.getResponseBodyAsString(); setErrorResponse(statusCode, errorResponse); } catch (IOException e) { setErrorResponse(statusCode, e.getMessage()); } } }