/*******************************************************************************
* 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.google;
import java.net.MalformedURLException;
import java.net.URL;
import javax.servlet.http.HttpServletRequest;
import org.apache.oltu.oauth2.client.request.OAuthClientRequest.AuthenticationRequestBuilder;
import org.apache.oltu.oauth2.client.response.OAuthAccessTokenResponse;
import org.apache.oltu.oauth2.common.OAuthProviderType;
import org.apache.oltu.oauth2.common.message.types.GrantType;
import org.eclipse.orion.server.authentication.oauth.OAuthConsumer;
import org.eclipse.orion.server.authentication.oauth.OAuthException;
import org.eclipse.orion.server.authentication.oauth.OAuthParams;
import org.eclipse.orion.server.authentication.oauth.OAuthTokenResponse;
import org.eclipse.orion.server.core.PreferenceHelper;
/**
* Google specific OAuthParams containing all information related to google
* oauth requests and responses.
* @author Aidan Redpath
*
*/
public class GoogleOAuthParams extends OAuthParams {
private static final OAuthProviderType PROVIDER_TYPE = OAuthProviderType.GOOGLE;
private static final String RESPONSE_TYPE = "code";
private static final String SCOPE = "openid email";
private static final String OPEN_ID_PARAMETER = "openid.realm";
private static final GrantType GRANT_TYPE = GrantType.AUTHORIZATION_CODE;
private static final String CLIENT_KEY = "orion.oauth.google.client";
private static final String CLIENT_SECRET = "orion.oauth.google.secret";
private static final Class<? extends OAuthAccessTokenResponse> TOKEN_RESPONSE_CLASS = OAuthTokenResponse.class;
private String client_key = null;
private String client_secret = null;
public GoogleOAuthParams(HttpServletRequest req, boolean login) throws OAuthException {
super(req, login);
}
public OAuthProviderType getProviderType() {
return PROVIDER_TYPE;
}
public String getClientKey() throws OAuthException {
if(client_key == null) {
client_key = PreferenceHelper.getString(CLIENT_KEY);
}
return client_key;
}
public String getClientSecret() throws OAuthException {
if(client_secret == null) {
client_secret = PreferenceHelper.getString(CLIENT_SECRET);
}
return client_secret;
}
public String getResponseType() {
return RESPONSE_TYPE;
}
public String getScope() {
return SCOPE;
}
public GrantType getGrantType() {
return GRANT_TYPE;
}
public Class<? extends OAuthAccessTokenResponse> getTokenResponseClass() {
return TOKEN_RESPONSE_CLASS;
}
public OAuthConsumer getNewOAuthConsumer(OAuthAccessTokenResponse oauthAccessTokenResponse) throws OAuthException {
return new GoogleOAuthConsumer(oauthAccessTokenResponse, getRedirect());
}
public void addAdditionsParams(AuthenticationRequestBuilder requestBuiler) throws OAuthException {
try {
URL currentURL = getCurrentURL();
// Add realm for openId 2.0 migration
String realm = new URL(currentURL.getProtocol(), currentURL.getHost(), currentURL.getPort(), "").toString();
requestBuiler.setParameter(OPEN_ID_PARAMETER, realm);
} catch (MalformedURLException e) {
throw new OAuthException("An Error occured while building the request URL");
}
}
}