Bug 499930 - MPC will need a client_id and client_secret for Eclipse USS SDK

Enable MPC to use USS OAuth for authorization.

Signed-off-by: Brian de Alwis <bsd@mt.ca>
Change-Id: I97e8c31c2a8f26a7c5cabc9a2f4a804845ec3641
diff --git a/org.eclipse.epp.mpc-target/oxygen.target b/org.eclipse.epp.mpc-target/oxygen.target
index 7989bcd..da5aca9 100644
--- a/org.eclipse.epp.mpc-target/oxygen.target
+++ b/org.eclipse.epp.mpc-target/oxygen.target
@@ -29,7 +29,7 @@
 </location>

 <location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">

 <unit id="org.eclipse.userstorage.sdk.feature.group" version="0.0.0"/>

-<repository location="http://download.eclipse.org/oomph/uss/updates/latest"/>

+<repository location="http://download.eclipse.org/usssdk/updates/latest"/>

 </location>

 </locations>

 </target>

diff --git a/org.eclipse.epp.mpc-target/staging.target b/org.eclipse.epp.mpc-target/staging.target
index 2870293..f67a7bd 100644
--- a/org.eclipse.epp.mpc-target/staging.target
+++ b/org.eclipse.epp.mpc-target/staging.target
@@ -29,7 +29,7 @@
 </location>
 <location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
 <unit id="org.eclipse.userstorage.sdk.feature.group" version="0.0.0"/>
-<repository location="http://download.eclipse.org/oomph/uss/updates/latest"/>
+<repository location="http://download.eclipse.org/usssdk/updates/latest"/>
 </location>
 </locations>
 </target>
diff --git a/org.eclipse.epp.mpc.core/META-INF/MANIFEST.MF b/org.eclipse.epp.mpc.core/META-INF/MANIFEST.MF
index 307c956..851632b 100644
--- a/org.eclipse.epp.mpc.core/META-INF/MANIFEST.MF
+++ b/org.eclipse.epp.mpc.core/META-INF/MANIFEST.MF
@@ -13,8 +13,9 @@
  org.eclipse.equinox.ds;bundle-version="1.4.100",
  org.eclipse.osgi.services;bundle-version="3.3.100",
  org.eclipse.equinox.util;bundle-version="1.0.500",
- org.eclipse.userstorage;bundle-version="[1.0.1,1.1.0)",
- org.eclipse.equinox.security
+ org.eclipse.equinox.security,
+ org.eclipse.userstorage;bundle-version="[1.1.0,2.0.0)",
+ org.eclipse.userstorage.oauth;bundle-version="[1.0.0,2.0.0)"
 Export-Package: org.eclipse.epp.internal.mpc.core;x-friends:="org.eclipse.epp.mpc.ui",
  org.eclipse.epp.internal.mpc.core.model;x-friends:="org.eclipse.epp.mpc.ui",
  org.eclipse.epp.internal.mpc.core.service;x-friends:="org.eclipse.epp.mpc.ui",
diff --git a/org.eclipse.epp.mpc.core/src/org/eclipse/epp/internal/mpc/core/service/MarketplaceStorageService.java b/org.eclipse.epp.mpc.core/src/org/eclipse/epp/internal/mpc/core/service/MarketplaceStorageService.java
index 22ba4ff..8b341ff 100644
--- a/org.eclipse.epp.mpc.core/src/org/eclipse/epp/internal/mpc/core/service/MarketplaceStorageService.java
+++ b/org.eclipse.epp.mpc.core/src/org/eclipse/epp/internal/mpc/core/service/MarketplaceStorageService.java
@@ -33,6 +33,7 @@
 import org.eclipse.userstorage.IStorageService;
 import org.eclipse.userstorage.StorageFactory;
 import org.eclipse.userstorage.internal.StorageService;
+import org.eclipse.userstorage.oauth.EclipseOAuthCredentialsProvider;
 import org.eclipse.userstorage.spi.Credentials;
 import org.eclipse.userstorage.spi.ICredentialsProvider;
 import org.eclipse.userstorage.spi.ISettings;
@@ -98,7 +99,18 @@
 	protected IStorage createStorage() {
 		IStorage storage = getStorageFactory().create(applicationToken,
 				new FileStorageCache.SingleApplication(this.applicationToken));
-		storage.setCredentialsProvider(ICredentialsProvider.CANCEL);
+		// FIXME: these should be the uss_project_* alternatives
+		//String[] scopes = { "profile", "uss_project_retrieve", "uss_project_update", "uss_project_delete" };
+		String[] scopes = { "profile", "uss_all_retrieve", "uss_all_update", "uss_all_delete" };
+		// FIXME: constants should be baked in at compile-time
+		String oauthClientId = System.getProperty("mpc.oauth.clientId", "@mpc.oauth.clientId@");
+		String oauthClientSecret = System.getProperty("mpc.oauth.clientSecret", "@mpc.oauth.clientSecret@");
+		try {
+			storage.setCredentialsProvider(new EclipseOAuthCredentialsProvider(new URI("https://accounts.eclipse.org/"),
+					oauthClientId, oauthClientSecret, scopes, new URI("http://localhost/")));
+		} catch (URISyntaxException ex) {
+			throw new RuntimeException(ex);
+		}
 		return storage;
 	}
 
@@ -125,15 +137,15 @@
 	public <T> T runWithLogin(Callable<T> c) throws Exception {
 		final IStorage storage = getStorage();
 		final ICredentialsProvider originalCredentialsProvider = storage.getCredentialsProvider();
-		storage.setCredentialsProvider(null);
-		String oldUser = getCurrentUser();
+		//storage.setCredentialsProvider(null);
+//		String oldUser = getCurrentUser();
 		try {
 			T result = c.call();
 			return result;
 		} finally {
-			storage.setCredentialsProvider(originalCredentialsProvider);
-			String newUser = getCurrentUser();
-			notifyLoginChanged(oldUser, newUser);
+//			storage.setCredentialsProvider(originalCredentialsProvider);
+//			String newUser = getCurrentUser();
+			//notifyLoginChanged(oldUser, newUser);
 		}
 	}
 
@@ -172,9 +184,11 @@
 	}
 
 	private Credentials getStorageCredentials() {
-		StorageService service = (StorageService) getStorage().getService();
-		Credentials credentials = service.getCredentials();
-		return credentials;
+		ICredentialsProvider provider = getStorage().getCredentialsProvider();
+		if (provider == null) {
+			return null;
+		}
+		return provider.getCredentials(getStorage().getService());
 	}
 
 	public void activate(BundleContext context, Map<?, ?> properties) {
diff --git a/org.eclipse.epp.mpc.tests/META-INF/MANIFEST.MF b/org.eclipse.epp.mpc.tests/META-INF/MANIFEST.MF
index 8af43ae..5dc1cf4 100644
--- a/org.eclipse.epp.mpc.tests/META-INF/MANIFEST.MF
+++ b/org.eclipse.epp.mpc.tests/META-INF/MANIFEST.MF
@@ -24,7 +24,7 @@
  org.hamcrest.library;bundle-version="1.3.0",
  org.eclipse.core.net;bundle-version="1.2.200",
  org.eclipse.equinox.p2.metadata;bundle-version="2.2.0",
- org.eclipse.userstorage;bundle-version="[1.0.1,1.1.0)",
+ org.eclipse.userstorage;bundle-version="[1.1.0,2.0.0)",
  org.apache.httpcomponents.httpclient;bundle-version="[4.3.6,4.4.0)",
  org.apache.httpcomponents.httpcore;bundle-version="[4.3.3,4.4.0)",
  org.mockito;bundle-version="1.9.5"
diff --git a/org.eclipse.epp.mpc.tests/src/org/eclipse/epp/mpc/tests/service/UserFavoritesServiceTest.java b/org.eclipse.epp.mpc.tests/src/org/eclipse/epp/mpc/tests/service/UserFavoritesServiceTest.java
index 38d3b46..2b33add 100644
--- a/org.eclipse.epp.mpc.tests/src/org/eclipse/epp/mpc/tests/service/UserFavoritesServiceTest.java
+++ b/org.eclipse.epp.mpc.tests/src/org/eclipse/epp/mpc/tests/service/UserFavoritesServiceTest.java
@@ -10,7 +10,10 @@
  *******************************************************************************/
 package org.eclipse.epp.mpc.tests.service;
 
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertSame;
 
 import java.io.IOException;
 import java.net.URI;
@@ -28,8 +31,8 @@
 import org.eclipse.userstorage.IStorageService;
 import org.eclipse.userstorage.internal.StorageService;
 import org.eclipse.userstorage.internal.StorageServiceRegistry;
+import org.eclipse.userstorage.spi.AbstractCredentialsProvider;
 import org.eclipse.userstorage.spi.Credentials;
-import org.eclipse.userstorage.spi.ICredentialsProvider;
 import org.junit.After;
 import org.junit.Assume;
 import org.junit.Before;
@@ -50,7 +53,7 @@
 		marketplaceStorageService = ServiceHelper.getMarketplaceServiceLocator().getDefaultStorageService();
 		assertNotNull(marketplaceStorageService);
 		assertEquals(USERSTORAGE_SERVICE_URI, marketplaceStorageService.getServiceUri());
-		marketplaceStorageService.getStorage().setCredentialsProvider(new ICredentialsProvider() {
+		marketplaceStorageService.getStorage().setCredentialsProvider(new AbstractCredentialsProvider() {
 
 			@Override
 			public Credentials provideCredentials(IStorageService service, boolean reauthentication) {
diff --git a/org.eclipse.epp.mpc.ui/META-INF/MANIFEST.MF b/org.eclipse.epp.mpc.ui/META-INF/MANIFEST.MF
index 06bac7d..538887a 100644
--- a/org.eclipse.epp.mpc.ui/META-INF/MANIFEST.MF
+++ b/org.eclipse.epp.mpc.ui/META-INF/MANIFEST.MF
@@ -22,8 +22,8 @@
  org.eclipse.equinox.p2.director,
  org.eclipse.osgi.services;bundle-version="3.3.100",
  org.eclipse.equinox.ds;bundle-version="1.4.100",
- org.eclipse.userstorage;bundle-version="[1.0.1,1.1.0)",
- org.eclipse.userstorage.ui;bundle-version="[1.0.1,1.1.0)",
+ org.eclipse.userstorage;bundle-version="[1.1.0,2.0.0)",
+ org.eclipse.userstorage.ui;bundle-version="[1.0.0,2.0.0)",
  org.eclipse.ui.ide;bundle-version="3.12.0"
 Export-Package: org.eclipse.epp.internal.mpc.ui;x-internal:=true,
  org.eclipse.epp.internal.mpc.ui.actions;x-internal:=true,