Skip to content
This repository has been archived by the owner on Apr 8, 2019. It is now read-only.

Commit

Permalink
GTNPORTAL-3092 Improve error handling in Facebook code request
Browse files Browse the repository at this point in the history
  • Loading branch information
mposolda authored and bdaw committed Jun 3, 2013
1 parent ae35b2e commit 5940ad7
Showing 1 changed file with 52 additions and 36 deletions.
Expand Up @@ -20,6 +20,7 @@
import java.io.IOException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
Expand Down Expand Up @@ -86,49 +87,42 @@ public boolean initialInteraction(HttpServletRequest request, HttpServletRespons
}

public String getAccessToken(HttpServletRequest request, HttpServletResponse response) throws OAuthException {
String error = request.getParameter(OAuthConstants.ERROR_PARAMETER);
if (error != null) {
if (OAuthConstants.ERROR_ACCESS_DENIED.equals(error)) {
throw new OAuthException(OAuthExceptionCode.USER_DENIED_SCOPE, error);
} else {
throw new OAuthException(OAuthExceptionCode.UNKNOWN_ERROR, error);
}
} else {
String authorizationCode = request.getParameter(OAuthConstants.CODE_PARAMETER);
if (authorizationCode == null) {
log.error("Authorization code parameter not found");
return null;
}
String authorizationCode = request.getParameter(OAuthConstants.CODE_PARAMETER);
if (authorizationCode == null) {
log.error("Authorization code parameter not found");
handleCodeRequestError(request, response);
return null;
}

String stateFromSession = (String)request.getSession().getAttribute(OAuthConstants.ATTRIBUTE_VERIFICATION_STATE);
String stateFromRequest = request.getParameter(OAuthConstants.STATE_PARAMETER);
if (stateFromSession == null || stateFromRequest == null || !stateFromSession.equals(stateFromRequest)) {
throw new OAuthException(OAuthExceptionCode.INVALID_STATE, "Validation of state parameter failed. stateFromSession="
+ stateFromSession + ", stateFromRequest=" + stateFromRequest);
}

String accessToken = new FacebookRequest<String>() {
String stateFromSession = (String)request.getSession().getAttribute(OAuthConstants.ATTRIBUTE_VERIFICATION_STATE);
String stateFromRequest = request.getParameter(OAuthConstants.STATE_PARAMETER);
if (stateFromSession == null || stateFromRequest == null || !stateFromSession.equals(stateFromRequest)) {
throw new OAuthException(OAuthExceptionCode.INVALID_STATE, "Validation of state parameter failed. stateFromSession="
+ stateFromSession + ", stateFromRequest=" + stateFromRequest);
}

@Override
protected URL createURL(String authorizationCode) throws IOException {
return sendAccessTokenRequest(authorizationCode);
}
String accessToken = new FacebookRequest<String>() {

@Override
protected String parseResponse(String httpResponse) throws JSONException {
Map<String, String> params = OAuthUtils.formUrlDecode(httpResponse);
String accessToken = params.get(OAuthConstants.ACCESS_TOKEN_PARAMETER);
String expires = params.get(FacebookConstants.EXPIRES);
if (trace)
log.trace("Access Token=" + accessToken + " :: Expires=" + expires);
@Override
protected URL createURL(String authorizationCode) throws IOException {
return sendAccessTokenRequest(authorizationCode);
}

return accessToken;
}
@Override
protected String parseResponse(String httpResponse) throws JSONException {
Map<String, String> params = OAuthUtils.formUrlDecode(httpResponse);
String accessToken = params.get(OAuthConstants.ACCESS_TOKEN_PARAMETER);
String expires = params.get(FacebookConstants.EXPIRES);
if (trace)
log.trace("Access Token=" + accessToken + " :: Expires=" + expires);

}.executeRequest(authorizationCode);
return accessToken;
}

return accessToken;
}
}.executeRequest(authorizationCode);

return accessToken;
}

protected URL sendAccessTokenRequest(String authorizationCode) throws IOException {
Expand Down Expand Up @@ -255,5 +249,27 @@ public void revokeToken(String accessToken) {
}
}

private void handleCodeRequestError(HttpServletRequest request, HttpServletResponse response) {
// Log all possible error parameters
StringBuilder errorBuilder = new StringBuilder();
Enumeration<String> paramNames = request.getParameterNames();
while (paramNames.hasMoreElements()) {
String paramName = paramNames.nextElement();
if (paramName.startsWith("error")) {
errorBuilder.append(paramName + ": " + request.getParameter(paramName) + System.getProperty("line.separator"));
}
}
String errorMessage = errorBuilder.toString();

String error = request.getParameter(OAuthConstants.ERROR_PARAMETER);
if (error != null) {
if (OAuthConstants.ERROR_ACCESS_DENIED.equals(error)) {
throw new OAuthException(OAuthExceptionCode.USER_DENIED_SCOPE, errorMessage);
}
}

throw new OAuthException(OAuthExceptionCode.FACEBOOK_ERROR, errorMessage);
}

}

0 comments on commit 5940ad7

Please sign in to comment.