/******************************************************************************* * Copyright (c) 2014 IBM Corporation and others * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.orion.server.authentication.oauth.github; import org.apache.oltu.oauth2.client.response.OAuthAccessTokenResponse; import org.eclipse.orion.server.authentication.oauth.OAuthConsumer; import org.eclipse.orion.server.authentication.oauth.OAuthException; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; /** * GitHub specific OAuthConsumer used to handle GitHubs oauth token responses. * @author Aidan Redpath * */ public class GitHubOAuthConsumer extends OAuthConsumer{ // Parameters private static final String EMAIL_PARAMETER = "email"; private static final String USERNAME_PARAMETER = "login"; private static final String ID_PARAMETER = "id"; private static final String URL_PARAMETER = "url"; private static final String PRIMARY_PARAMETER = "primary"; private static final String VERIFIED_PARAMETER = "verified"; private static final String PROFILE_URL = "https://api.github.com/user"; private static final String EMAIL_URL = "https://api.github.com/user/emails"; private String email; private String username; private String id; private String url; private boolean email_verified; public GitHubOAuthConsumer(OAuthAccessTokenResponse oauthAccessTokenResponse, String redirect) throws OAuthException { super(oauthAccessTokenResponse, redirect); getGitHubProfile(); getGitHubEmail(); } private void getGitHubProfile() throws OAuthException{ String body = getServerResponse(PROFILE_URL); JSONObject json; try { json = new JSONObject(body); username = json.getString(USERNAME_PARAMETER); id = json.getString(ID_PARAMETER); url = json.getString(URL_PARAMETER); } catch (JSONException e) { throw new OAuthException("An error occured while authenticating the user"); } } private void getGitHubEmail() throws OAuthException{ String body = getServerResponse(EMAIL_URL); JSONArray json; try { json = new JSONArray(body); for(int i = 0; i < json.length(); i++){ JSONObject emailObject = json.getJSONObject(i); boolean primary = emailObject.getBoolean(PRIMARY_PARAMETER); if(primary){ email_verified = emailObject.getBoolean(VERIFIED_PARAMETER); email = emailObject.getString(EMAIL_PARAMETER); break; } } } catch (JSONException e) { throw new OAuthException("An error occured while authenticating the user"); } } @Override public String getIdentifier() { return url + "/" + id; } @Override public String getEmail() { return email; } @Override public String getUsername() { // github allows a dash in the username, so remove any dashes return username.replaceAll("-", ""); } @Override public boolean isEmailVerifiecd() { return email_verified; } }