private OAuthAccessToken parseUrlEncodedToken(HttpMessage response) { Map<String, String[]> params = new HashMap<String, String[]>(); AuthUtils.parseFormUrlEncoded(response, params); if (response.getStatus() == 200) { String accessTokenE = AuthUtils.getParamValue(params, "access_token"); if (accessTokenE != null) { String accessToken = accessTokenE; WDate expires = null; String expiresE = AuthUtils.getParamValue(params, "expires"); if (expiresE != null) { expires = new WDate(new Date()).addSeconds(Integer.parseInt(expiresE)); } return new OAuthAccessToken(accessToken, expires, ""); } else { throw new OAuthProcess.TokenError(WString.tr("Wt.Auth.OAuthService.badresponse")); } } else { String errorE = AuthUtils.getParamValue(params, "error"); if (errorE != null) { throw new OAuthProcess.TokenError(WString.tr("Wt.Auth.OAuthService." + errorE)); } else { throw new OAuthProcess.TokenError(WString.tr("Wt.Auth.OAuthService.badresponse")); } } }
/** * Parses the response for a token request. * * <p>Throws a {@link TokenError} when the response indicates an error, or when the response could * not be properly parsed. * * <p>Some OAuth implementations may uses a non-standard encoding of the token. */ protected OAuthAccessToken parseTokenResponse(HttpMessage response) { if (response.getStatus() == 200 || response.getStatus() == 400) { String type = response.getHeader("Content-Type"); if (type != null) { if (type.startsWith("text/plain; charset=UTF-8")) { return this.parseUrlEncodedToken(response); } else { if (type.startsWith("application/json")) { return this.parseJsonToken(response); } else { throw new OAuthProcess.TokenError(WString.tr("Wt.Auth.OAuthService.badresponse")); } } } else { throw new OAuthProcess.TokenError(WString.tr("Wt.Auth.OAuthService.badresponse")); } } else { throw new OAuthProcess.TokenError(WString.tr("Wt.Auth.OAuthService.badresponse")); } }
private OAuthAccessToken parseJsonToken(HttpMessage response) { com.google.gson.JsonObject root = new com.google.gson.JsonObject(); com.google.gson.JsonParseException pe = null; try { root = (com.google.gson.JsonObject) new com.google.gson.JsonParser().parse(response.getBody()); } catch (com.google.gson.JsonParseException error) { pe = error; } boolean ok = root != null; if (!ok) { logger.error( new StringWriter().append("parseJsonToken(): ").append(pe.toString()).toString()); throw new OAuthProcess.TokenError(WString.tr("Wt.Auth.OAuthService.badjson")); } else { if (response.getStatus() == 200) { try { String accessToken = root.get("access_token").getAsString(); int secs = JsonUtils.orIfNullInt(root.get("expires_in"), -1); WDate expires = null; if (secs > 0) { expires = new WDate(new Date()).addSeconds(secs); } String refreshToken = JsonUtils.orIfNullString(root.get("refreshToken"), ""); return new OAuthAccessToken(accessToken, expires, refreshToken); } catch (RuntimeException e) { logger.error( new StringWriter().append("token response error: ").append(e.toString()).toString()); throw new OAuthProcess.TokenError(WString.tr("Wt.Auth.OAuthService.badresponse")); } } else { throw new OAuthProcess.TokenError( WString.tr( "Wt.Auth.OAuthService." + JsonUtils.orIfNullString(root.get("error"), "missing error"))); } } }