/*
 * Copyright (c) 2015 Memorial Sloan-Kettering Cancer Center.
 *
 * This library is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS
 * FOR A PARTICULAR PURPOSE. The software and documentation provided hereunder
 * is on an "as is" basis, and Memorial Sloan-Kettering Cancer Center has no
 * obligations to provide maintenance, support, updates, enhancements or
 * modifications. In no event shall Memorial Sloan-Kettering Cancer Center be
 * liable to any party for direct, indirect, special, incidental or
 * consequential damages, including lost profits, arising out of the use of this
 * software and its documentation, even if Memorial Sloan-Kettering Cancer
 * Center has been advised of the possibility of such damage.
 */

/*
 * This file is part of cBioPortal.
 *
 * cBioPortal is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

package org.cbioportal.security.spring.authentication.googleplus;

import org.springframework.social.connect.UserProfile;
import org.springframework.social.connect.support.OAuth2ConnectionFactory;
import org.springframework.social.google.api.Google;
import org.springframework.social.google.connect.GoogleAdapter;
import org.springframework.social.google.connect.GoogleServiceProvider;
import org.springframework.social.oauth2.AccessGrant;
/**
 * @author criscuof
 *
 */
public class GoogleplusConnectionFactory extends OAuth2ConnectionFactory<Google> {
	


	public GoogleplusConnectionFactory(String clientId, String clientSecret) {
		super("google", new GoogleServiceProvider(clientId, clientSecret),
				new GoogleAdapter());
	}

	/*
	 * modification of original factory class to support using the user's email address as his/her id
	 * original method utilized the google id, a numeric string
	 */
	@Override
	protected String extractProviderUserId(AccessGrant accessGrant) {
		Google api = ((GoogleServiceProvider)getServiceProvider()).getApi(accessGrant.getAccessToken());
	    UserProfile userProfile = getApiAdapter().fetchUserProfile(api);
	    return userProfile.getEmail();
	}


}

@@ -1562,63 +1562,8 @@
 s;%0A%0A
-import org.springframework.social.connect.UserProfile;%0A
 impo
@@ -1876,16 +1876,87 @@
 sGrant;%0A
+import org.springframework.social.google.api.oauth2.OAuth2Operations;%0A%0A
 /**%0A * @
@@ -2065,13 +2065,13 @@
 %3E %7B%0A
-%09%0A%0A%0A%09
+%0A    
 publ
@@ -2141,18 +2141,28 @@
 cret) %7B%0A
-%09%09
+            
 super(%22g
@@ -2224,12 +2224,36 @@
 t),%0A
-%09%09%09%09
+                            
 new 
@@ -2274,17 +2274,27 @@
 ));%0A
-%09%7D%0A%0A%09/*%0A%09
+    %7D%0A%0A    /**%0A    
  * m
@@ -2387,17 +2387,20 @@
 /her id%0A
-%09
+    
  * origi
@@ -2455,14 +2455,19 @@
 ing%0A
-%09
+   
  */%0A
-%09
+    
 @Ove
@@ -2472,17 +2472,20 @@
 verride%0A
-%09
+    
 protecte
@@ -2546,10 +2546,16 @@
 ) %7B%0A
-%09%09
+        
 Goog
@@ -2651,101 +2651,93 @@
 ));%0A
-%09    UserProfile userProfile = getApiAdapter().fetchUserProfile(api);%0A%09    return userProfile
+        OAuth2Operations op = api.oauth2Operations();%0A        return op.getUserinfo()
 .get
@@ -2749,11 +2749,13 @@
 ();%0A
-%09%7D%0A
+    %7D
 %0A%0A%7D%0A

Use OAuth2Operations to fetch user email