diff --git a/components/identity-extensions/dynamic-client-registration/dynamic-client-web/src/main/java/org/wso2/carbon/dynamic/client/web/ConfigurationService.java b/components/identity-extensions/dynamic-client-registration/dynamic-client-web/src/main/java/org/wso2/carbon/dynamic/client/web/ConfigurationService.java
deleted file mode 100644
index 0d97308f541..00000000000
--- a/components/identity-extensions/dynamic-client-registration/dynamic-client-web/src/main/java/org/wso2/carbon/dynamic/client/web/ConfigurationService.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
- *
- * WSO2 Inc. licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except
- * in compliance with the License.
- * you may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.wso2.carbon.dynamic.client.web;
-
-import javax.ws.rs.*;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-
-@Produces(MediaType.APPLICATION_JSON)
-@Consumes(MediaType.APPLICATION_JSON)
-@Path("/connect")
-public interface ConfigurationService {
-
- @GET
- @Path("/register")
- Response getProfile(@PathParam("client_id") String clientId);
-
-}
diff --git a/components/identity-extensions/dynamic-client-registration/dynamic-client-web/src/main/java/org/wso2/carbon/dynamic/client/web/impl/RegistrationServiceImpl.java b/components/identity-extensions/dynamic-client-registration/dynamic-client-web/src/main/java/org/wso2/carbon/dynamic/client/web/impl/RegistrationServiceImpl.java
index 5d8e7bc5fb1..028b6df1f63 100644
--- a/components/identity-extensions/dynamic-client-registration/dynamic-client-web/src/main/java/org/wso2/carbon/dynamic/client/web/impl/RegistrationServiceImpl.java
+++ b/components/identity-extensions/dynamic-client-registration/dynamic-client-web/src/main/java/org/wso2/carbon/dynamic/client/web/impl/RegistrationServiceImpl.java
@@ -89,7 +89,7 @@ public class RegistrationServiceImpl implements RegistrationService {
boolean status = dynamicClientRegistrationService.unregisterOAuthApplication(userId, applicationName,
consumerKey);
if (status) {
- return Response.status(Response.Status.ACCEPTED).build();
+ return Response.status(Response.Status.OK).build();
}
return Response.status(Response.Status.BAD_REQUEST).build();
}
diff --git a/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.registration/pom.xml b/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.registration/pom.xml
index 9b44329b6b3..4d01bd86978 100644
--- a/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.registration/pom.xml
+++ b/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.registration/pom.xml
@@ -66,6 +66,7 @@
org.wso2.carbon.identity.application.common,
org.wso2.carbon.identity.application.common.model,
org.wso2.carbon.identity.application.mgt,
+ org.wso2.carbon.identity.application.mgt.stub,
org.wso2.carbon.identity.base,
org.wso2.carbon.identity.oauth,
org.wso2.carbon.identity.oauth.dto,
diff --git a/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.registration/src/main/java/org/wso2/carbon/dynamic/client/registration/OAuthApplicationInfo.java b/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.registration/src/main/java/org/wso2/carbon/dynamic/client/registration/OAuthApplicationInfo.java
index 547844869ab..5fdb049aaf6 100644
--- a/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.registration/src/main/java/org/wso2/carbon/dynamic/client/registration/OAuthApplicationInfo.java
+++ b/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.registration/src/main/java/org/wso2/carbon/dynamic/client/registration/OAuthApplicationInfo.java
@@ -18,6 +18,7 @@
package org.wso2.carbon.dynamic.client.registration;
import org.json.simple.JSONObject;
+import org.wso2.carbon.dynamic.client.registration.util.DCRConstants;
import java.util.HashMap;
import java.util.Map;
@@ -87,10 +88,10 @@ public class OAuthApplicationInfo {
public String toString() {
JSONObject obj = new JSONObject();
- obj.put(ApplicationConstants.ClientMetadata.OAUTH_CLIENT_ID, this.getClientId());
- obj.put(ApplicationConstants.ClientMetadata.OAUTH_CLIENT_NAME, this.getClientName());
- obj.put(ApplicationConstants.ClientMetadata.OAUTH_CALLBACK_URIS, this.getCallBackURL());
- obj.put(ApplicationConstants.ClientMetadata.OAUTH_CLIENT_SECRET, this.getClientSecret());
+ obj.put(DCRConstants.ClientMetadata.OAUTH_CLIENT_ID, this.getClientId());
+ obj.put(DCRConstants.ClientMetadata.OAUTH_CLIENT_NAME, this.getClientName());
+ obj.put(DCRConstants.ClientMetadata.OAUTH_CALLBACK_URIS, this.getCallBackURL());
+ obj.put(DCRConstants.ClientMetadata.OAUTH_CLIENT_SECRET, this.getClientSecret());
return obj.toString();
}
diff --git a/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.registration/src/main/java/org/wso2/carbon/dynamic/client/registration/impl/DynamicClientRegistrationServiceImpl.java b/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.registration/src/main/java/org/wso2/carbon/dynamic/client/registration/impl/DynamicClientRegistrationServiceImpl.java
index a5640b97eae..7938ba355ac 100644
--- a/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.registration/src/main/java/org/wso2/carbon/dynamic/client/registration/impl/DynamicClientRegistrationServiceImpl.java
+++ b/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.registration/src/main/java/org/wso2/carbon/dynamic/client/registration/impl/DynamicClientRegistrationServiceImpl.java
@@ -27,6 +27,8 @@ import org.wso2.carbon.context.RegistryType;
import org.wso2.carbon.dynamic.client.registration.*;
import org.wso2.carbon.dynamic.client.registration.internal.DynamicClientRegistrationDataHolder;
import org.wso2.carbon.dynamic.client.registration.profile.RegistrationProfile;
+import org.wso2.carbon.dynamic.client.registration.util.DCRConstants;
+import org.wso2.carbon.dynamic.client.registration.util.DynamicClientRegistrationUtil;
import org.wso2.carbon.identity.application.common.IdentityApplicationManagementException;
import org.wso2.carbon.identity.application.common.model.*;
import org.wso2.carbon.identity.application.mgt.ApplicationManagementService;
@@ -94,15 +96,15 @@ public class DynamicClientRegistrationServiceImpl implements DynamicClientRegist
try {
JSONObject jsonObject = new JSONObject(info.getJsonString());
- if (jsonObject.has(ApplicationConstants.ClientMetadata.OAUTH_REDIRECT_URIS)) {
- oAuthApplicationInfo.addParameter(ApplicationConstants.ClientMetadata.OAUTH_REDIRECT_URIS,
+ if (jsonObject.has(DCRConstants.ClientMetadata.OAUTH_REDIRECT_URIS)) {
+ oAuthApplicationInfo.addParameter(DCRConstants.ClientMetadata.OAUTH_REDIRECT_URIS,
jsonObject
- .get(ApplicationConstants.ClientMetadata.OAUTH_REDIRECT_URIS));
+ .get(DCRConstants.ClientMetadata.OAUTH_REDIRECT_URIS));
}
- if (jsonObject.has(ApplicationConstants.ClientMetadata.OAUTH_CLIENT_GRANT)) {
- oAuthApplicationInfo.addParameter(ApplicationConstants.ClientMetadata.OAUTH_CLIENT_GRANT, jsonObject
- .get(ApplicationConstants.ClientMetadata.OAUTH_CLIENT_GRANT));
+ if (jsonObject.has(DCRConstants.ClientMetadata.OAUTH_CLIENT_GRANT)) {
+ oAuthApplicationInfo.addParameter(DCRConstants.ClientMetadata.OAUTH_CLIENT_GRANT, jsonObject
+ .get(DCRConstants.ClientMetadata.OAUTH_CLIENT_GRANT));
}
} catch (JSONException e) {
throw new DynamicClientRegistrationException(
@@ -160,7 +162,6 @@ public class DynamicClientRegistrationServiceImpl implements DynamicClientRegist
}
ServiceProvider existingServiceProvider = appMgtService.getServiceProvider(applicationName, tenantDomain);
-
if (existingServiceProvider == null) {
appMgtService.createApplication(serviceProvider, tenantDomain, userName);
}
@@ -267,9 +268,9 @@ public class DynamicClientRegistrationServiceImpl implements DynamicClientRegist
oAuthApplicationInfo.setClientName(createdApp.getApplicationName());
oAuthApplicationInfo.addParameter(
- ApplicationConstants.ClientMetadata.OAUTH_REDIRECT_URIS, createdApp.getCallbackUrl());
+ DCRConstants.ClientMetadata.OAUTH_REDIRECT_URIS, createdApp.getCallbackUrl());
oAuthApplicationInfo.addParameter(
- ApplicationConstants.ClientMetadata.OAUTH_CLIENT_GRANT, createdApp.getGrantTypes());
+ DCRConstants.ClientMetadata.OAUTH_CLIENT_GRANT, createdApp.getGrantTypes());
return oAuthApplicationInfo;
} catch (IdentityApplicationManagementException e) {
diff --git a/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.registration/src/main/java/org/wso2/carbon/dynamic/client/registration/internal/DynamicClientRegistrationServiceComponent.java b/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.registration/src/main/java/org/wso2/carbon/dynamic/client/registration/internal/DynamicClientRegistrationServiceComponent.java
index 6717742ac39..4a1ee1a6413 100644
--- a/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.registration/src/main/java/org/wso2/carbon/dynamic/client/registration/internal/DynamicClientRegistrationServiceComponent.java
+++ b/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.registration/src/main/java/org/wso2/carbon/dynamic/client/registration/internal/DynamicClientRegistrationServiceComponent.java
@@ -20,7 +20,6 @@ package org.wso2.carbon.dynamic.client.registration.internal;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.osgi.framework.ServiceRegistration;
import org.osgi.service.component.ComponentContext;
import org.wso2.carbon.dynamic.client.registration.DynamicClientRegistrationService;
import org.wso2.carbon.dynamic.client.registration.impl.DynamicClientRegistrationServiceImpl;
@@ -44,10 +43,8 @@ public class DynamicClientRegistrationServiceComponent {
if(log.isDebugEnabled()){
log.debug("Starting DynamicClientRegistrationServiceComponent");
}
- DynamicClientRegistrationService dynamicClientRegistrationService =
- new DynamicClientRegistrationServiceImpl();
componentContext.getBundleContext().registerService(
- DynamicClientRegistrationService.class.getName(), dynamicClientRegistrationService, null);
+ DynamicClientRegistrationService.class.getName(), new DynamicClientRegistrationServiceImpl(), null);
}
@SuppressWarnings("unused")
diff --git a/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.registration/src/main/java/org/wso2/carbon/dynamic/client/registration/ApplicationConstants.java b/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.registration/src/main/java/org/wso2/carbon/dynamic/client/registration/util/DCRConstants.java
similarity index 95%
rename from components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.registration/src/main/java/org/wso2/carbon/dynamic/client/registration/ApplicationConstants.java
rename to components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.registration/src/main/java/org/wso2/carbon/dynamic/client/registration/util/DCRConstants.java
index d9f26334c33..12c59e2de18 100644
--- a/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.registration/src/main/java/org/wso2/carbon/dynamic/client/registration/ApplicationConstants.java
+++ b/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.registration/src/main/java/org/wso2/carbon/dynamic/client/registration/util/DCRConstants.java
@@ -15,18 +15,18 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.wso2.carbon.dynamic.client.registration;
+package org.wso2.carbon.dynamic.client.registration.util;
/**
* This class holds the constants used by DynamicClientRegistration component.
*/
-public final class ApplicationConstants {
+public final class DCRConstants {
public static class ClientMetadata {
private ClientMetadata() {
throw new AssertionError();
}
- //todo refactor names
+
public static final String OAUTH_CLIENT_ID = "client_id"; //this means consumer key
public static final String OAUTH_CLIENT_SECRET = "client_secret";
public static final String OAUTH_REDIRECT_URIS = "redirect_uris";
@@ -55,4 +55,4 @@ public final class ApplicationConstants {
public static final String VALIDITY_PERIOD = "validityPeriod";
}
-}
+}
\ No newline at end of file
diff --git a/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.registration/src/main/java/org/wso2/carbon/dynamic/client/registration/DynamicClientRegistrationUtil.java b/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.registration/src/main/java/org/wso2/carbon/dynamic/client/registration/util/DynamicClientRegistrationUtil.java
similarity index 91%
rename from components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.registration/src/main/java/org/wso2/carbon/dynamic/client/registration/DynamicClientRegistrationUtil.java
rename to components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.registration/src/main/java/org/wso2/carbon/dynamic/client/registration/util/DynamicClientRegistrationUtil.java
index dd835dad97c..b4e53c797b3 100644
--- a/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.registration/src/main/java/org/wso2/carbon/dynamic/client/registration/DynamicClientRegistrationUtil.java
+++ b/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.registration/src/main/java/org/wso2/carbon/dynamic/client/registration/util/DynamicClientRegistrationUtil.java
@@ -15,8 +15,11 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.wso2.carbon.dynamic.client.registration;
+package org.wso2.carbon.dynamic.client.registration.util;
+/**
+ * This class holds the util methods used by DCR component.
+ */
public class DynamicClientRegistrationUtil {
public static void validateUsername(String username) {
@@ -36,5 +39,4 @@ public class DynamicClientRegistrationUtil {
throw new IllegalArgumentException("Consumer Key cannot be null or empty");
}
}
-
-}
+}
\ No newline at end of file
diff --git a/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.web.app.registration/pom.xml b/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.web.app.registration/pom.xml
index 438dbcefd98..4b3e1f5aea7 100644
--- a/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.web.app.registration/pom.xml
+++ b/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.web.app.registration/pom.xml
@@ -115,5 +115,13 @@
org.wso2.carbon.devicemgt
org.wso2.carbon.dynamic.client.registration
+
+ org.apache.httpcomponents
+ httpclient
+
+
+ com.google.code.gson
+ gson
+
\ No newline at end of file
diff --git a/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.web.app.registration/src/main/java/org/wso2/carbon/dynamic/client/web/app/registration/DynamicClientWebAppRegistrationManager.java b/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.web.app.registration/src/main/java/org/wso2/carbon/dynamic/client/web/app/registration/DynamicClientWebAppRegistrationManager.java
index 3d9e0083cd7..ef8f643c889 100644
--- a/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.web.app.registration/src/main/java/org/wso2/carbon/dynamic/client/web/app/registration/DynamicClientWebAppRegistrationManager.java
+++ b/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.web.app.registration/src/main/java/org/wso2/carbon/dynamic/client/web/app/registration/DynamicClientWebAppRegistrationManager.java
@@ -52,8 +52,7 @@ public class DynamicClientWebAppRegistrationManager {
if (dynamicClientWebAppRegistrationManager == null) {
synchronized (DynamicClientWebAppRegistrationManager.class) {
if (dynamicClientWebAppRegistrationManager == null) {
- dynamicClientWebAppRegistrationManager =
- new DynamicClientWebAppRegistrationManager();
+ dynamicClientWebAppRegistrationManager = new DynamicClientWebAppRegistrationManager();
}
}
}
@@ -65,11 +64,9 @@ public class DynamicClientWebAppRegistrationManager {
log.debug("Registering OAuth application for web app : " + registrationProfile.getClientName());
}
if (DynamicClientWebAppRegistrationUtil.validateRegistrationProfile(registrationProfile)) {
- DynamicClientRegistrationService dynamicClientRegistrationService =
- DynamicClientWebAppRegistrationDataHolder.getInstance().getDynamicClientRegistrationService();
try {
OAuthApplicationInfo oAuthApplicationInfo =
- dynamicClientRegistrationService.registerOAuthApplication(registrationProfile);
+ DynamicClientWebAppRegistrationUtil.registerOAuthApplication(registrationProfile);
OAuthAppDetails oAuthAppDetails = new OAuthAppDetails();
oAuthAppDetails.setWebAppName(registrationProfile.getClientName());
oAuthAppDetails.setClientName(oAuthApplicationInfo.getClientName());
@@ -79,7 +76,7 @@ public class DynamicClientWebAppRegistrationManager {
if (DynamicClientWebAppRegistrationUtil.putOAuthApplicationData(oAuthAppDetails)) {
return oAuthAppDetails;
} else {
- dynamicClientRegistrationService.unregisterOAuthApplication(registrationProfile.getOwner(),
+ DynamicClientWebAppRegistrationUtil.unregisterOAuthApplication(registrationProfile.getOwner(),
oAuthApplicationInfo.getClientName(),
oAuthApplicationInfo.getClientId());
log.warn("Error occurred while persisting the OAuth application data in registry.");
diff --git a/components/identity-extensions/dynamic-client-registration/dynamic-client-web/src/main/java/org/wso2/carbon/dynamic/client/web/impl/ConfigurationServiceImpl.java b/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.web.app.registration/src/main/java/org/wso2/carbon/dynamic/client/web/app/registration/dto/DynamicClientRegistrationSettings.java
similarity index 56%
rename from components/identity-extensions/dynamic-client-registration/dynamic-client-web/src/main/java/org/wso2/carbon/dynamic/client/web/impl/ConfigurationServiceImpl.java
rename to components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.web.app.registration/src/main/java/org/wso2/carbon/dynamic/client/web/app/registration/dto/DynamicClientRegistrationSettings.java
index 7fcf7fa0753..6bbe47eb5a2 100644
--- a/components/identity-extensions/dynamic-client-registration/dynamic-client-web/src/main/java/org/wso2/carbon/dynamic/client/web/impl/ConfigurationServiceImpl.java
+++ b/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.web.app.registration/src/main/java/org/wso2/carbon/dynamic/client/web/app/registration/dto/DynamicClientRegistrationSettings.java
@@ -15,18 +15,30 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.wso2.carbon.dynamic.client.web.impl;
-import org.wso2.carbon.dynamic.client.web.ConfigurationService;
+package org.wso2.carbon.dynamic.client.web.app.registration.dto;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.core.Response;
+/**
+ * Represents Configuration setting related to OAuth in authenticators.xml.
+ */
+public class DynamicClientRegistrationSettings {
+
+ private boolean isRemote;
+ private String host;
+
+ public boolean isRemote() {
+ return isRemote;
+ }
-public class ConfigurationServiceImpl implements ConfigurationService {
+ public void setIsRemote(boolean isRemote) {
+ this.isRemote = isRemote;
+ }
- @Override
- public Response getProfile(@PathParam("client_id") String clientId) {
- return null;
+ public String getHost() {
+ return host;
}
-}
\ No newline at end of file
+ public void setHost(String host) {
+ this.host = host;
+ }
+}
diff --git a/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.web.app.registration/src/main/java/org/wso2/carbon/dynamic/client/web/app/registration/util/DynamicClientWebAppRegistrationConstants.java b/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.web.app.registration/src/main/java/org/wso2/carbon/dynamic/client/web/app/registration/util/DynamicClientWebAppRegistrationConstants.java
index 778063b7228..12697ceb316 100644
--- a/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.web.app.registration/src/main/java/org/wso2/carbon/dynamic/client/web/app/registration/util/DynamicClientWebAppRegistrationConstants.java
+++ b/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.web.app.registration/src/main/java/org/wso2/carbon/dynamic/client/web/app/registration/util/DynamicClientWebAppRegistrationConstants.java
@@ -46,4 +46,23 @@ public class DynamicClientWebAppRegistrationConstants {
public static final String CHARSET_UTF8 = "UTF8";
}
-}
+
+ public static class ConfigurationProperties {
+ private ConfigurationProperties() {
+ throw new AssertionError();
+ }
+
+ public static final String AUTHENTICATOR_NAME = "OAuthAuthenticator";
+ public static final String AUTHENTICATOR_CONFIG_IS_REMOTE = "isRemote";
+ public static final String AUTHENTICATOR_CONFIG_HOST_URL = "hostURL";
+ }
+
+ public static class RemoteServiceProperties {
+ private RemoteServiceProperties() {
+ throw new AssertionError();
+ }
+
+ public static final String DYNAMIC_CLIENT_SERVICE_ENDPOINT = "/dynamic-client-web/register";
+ public static final String DYNAMIC_CLIENT_SERVICE_PROTOCOL = "https";
+ }
+}
\ No newline at end of file
diff --git a/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.web.app.registration/src/main/java/org/wso2/carbon/dynamic/client/web/app/registration/util/DynamicClientWebAppRegistrationUtil.java b/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.web.app.registration/src/main/java/org/wso2/carbon/dynamic/client/web/app/registration/util/DynamicClientWebAppRegistrationUtil.java
index 03550d9896c..23729976558 100644
--- a/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.web.app.registration/src/main/java/org/wso2/carbon/dynamic/client/web/app/registration/util/DynamicClientWebAppRegistrationUtil.java
+++ b/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.web.app.registration/src/main/java/org/wso2/carbon/dynamic/client/web/app/registration/util/DynamicClientWebAppRegistrationUtil.java
@@ -22,8 +22,11 @@ import com.google.gson.stream.JsonReader;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.context.PrivilegedCarbonContext;
+import org.wso2.carbon.core.security.AuthenticatorsConfiguration;
import org.wso2.carbon.dynamic.client.registration.DynamicClientRegistrationException;
+import org.wso2.carbon.dynamic.client.registration.OAuthApplicationInfo;
import org.wso2.carbon.dynamic.client.registration.profile.RegistrationProfile;
+import org.wso2.carbon.dynamic.client.web.app.registration.dto.DynamicClientRegistrationSettings;
import org.wso2.carbon.dynamic.client.web.app.registration.dto.OAuthAppDetails;
import org.wso2.carbon.dynamic.client.web.app.registration.dto.JaggeryOAuthConfigurationSettings;
import org.wso2.carbon.dynamic.client.web.app.registration.internal.DynamicClientWebAppRegistrationDataHolder;
@@ -315,4 +318,65 @@ public class DynamicClientWebAppRegistrationUtil {
public static String replaceInvalidChars(String username) {
return username.replaceAll("@","_AT_");
}
+
+ private static DynamicClientRegistrationSettings getDynamicClientRegistrationSettings()
+ throws IllegalArgumentException {
+ AuthenticatorsConfiguration authenticatorsConfiguration = AuthenticatorsConfiguration.getInstance();
+ AuthenticatorsConfiguration.AuthenticatorConfig authenticatorConfig = authenticatorsConfiguration.
+ getAuthenticatorConfig(DynamicClientWebAppRegistrationConstants.
+ ConfigurationProperties.AUTHENTICATOR_NAME);
+ DynamicClientRegistrationSettings dynamicClientRegistrationSettings = new DynamicClientRegistrationSettings();
+ if (authenticatorConfig != null && authenticatorConfig.getParameters() != null) {
+ dynamicClientRegistrationSettings.setIsRemote(Boolean.parseBoolean(
+ authenticatorConfig.getParameters().get(
+ DynamicClientWebAppRegistrationConstants.ConfigurationProperties.
+ AUTHENTICATOR_CONFIG_IS_REMOTE)));
+ dynamicClientRegistrationSettings.setHost(authenticatorConfig.getParameters().
+ get(DynamicClientWebAppRegistrationConstants.ConfigurationProperties.AUTHENTICATOR_CONFIG_HOST_URL));
+
+ }else{
+ throw new IllegalArgumentException("Configuration parameters need to be defined in Authenticators.xml.");
+ }
+ return dynamicClientRegistrationSettings;
+ }
+
+ //This method will choose the best DynamicClientRegistrationService based on server configurations and
+ //registers OAuth client.
+ public static OAuthApplicationInfo registerOAuthApplication(RegistrationProfile registrationProfile)
+ throws DynamicClientRegistrationException {
+ DynamicClientRegistrationSettings dynamicClientRegistrationSettings = getDynamicClientRegistrationSettings();
+ if (dynamicClientRegistrationSettings.isRemote()) {
+ return RemoteDCRClient.createOAuthApplication(registrationProfile,
+ getHostName(dynamicClientRegistrationSettings.getHost()));
+ } else {
+ return DynamicClientWebAppRegistrationDataHolder.getInstance().
+ getDynamicClientRegistrationService().registerOAuthApplication(registrationProfile);
+ }
+ }
+
+ //This method will choose the best DynamicClientRegistrationService based on server configurations and
+ //unregisters OAuth client.
+ public static boolean unregisterOAuthApplication(String owner, String clientName, String clientId)
+ throws DynamicClientRegistrationException {
+ DynamicClientRegistrationSettings dynamicClientRegistrationSettings = getDynamicClientRegistrationSettings();
+ if (dynamicClientRegistrationSettings.isRemote()) {
+ return RemoteDCRClient.deleteOAuthApplication(owner, clientName, clientId,
+ getHostName(dynamicClientRegistrationSettings.getHost()));
+ } else {
+ return DynamicClientWebAppRegistrationDataHolder.getInstance().
+ getDynamicClientRegistrationService().unregisterOAuthApplication(owner, clientName, clientId);
+ }
+ }
+
+ private static String getHostName(String host) {
+ if (host != null && !host.isEmpty()) {
+ if (host.contains("https://")) {
+ return host.replace("https://","");
+ }
+ } else {
+ throw new IllegalArgumentException("Remote Host parameter must defined in Authenticators.xml.");
+ }
+ return null;
+ }
+
}
\ No newline at end of file
diff --git a/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.web.app.registration/src/main/java/org/wso2/carbon/dynamic/client/web/app/registration/util/RemoteDCRClient.java b/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.web.app.registration/src/main/java/org/wso2/carbon/dynamic/client/web/app/registration/util/RemoteDCRClient.java
new file mode 100644
index 00000000000..120b2f056fb
--- /dev/null
+++ b/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.web.app.registration/src/main/java/org/wso2/carbon/dynamic/client/web/app/registration/util/RemoteDCRClient.java
@@ -0,0 +1,182 @@
+/*
+ * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * WSO2 Inc. licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License.
+ * you may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.wso2.carbon.dynamic.client.web.app.registration.util;
+
+import com.google.gson.Gson;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.methods.HttpDelete;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.client.utils.URIBuilder;
+import org.apache.http.conn.scheme.Scheme;
+import org.apache.http.conn.scheme.SchemeRegistry;
+import org.apache.http.conn.ssl.SSLSocketFactory;
+import org.apache.http.conn.ssl.X509HostnameVerifier;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.DefaultHttpClient;
+import org.apache.http.impl.conn.SingleClientConnManager;
+import org.apache.http.util.EntityUtils;
+import org.wso2.carbon.dynamic.client.registration.DynamicClientRegistrationException;
+import org.wso2.carbon.dynamic.client.registration.OAuthApplicationInfo;
+import org.wso2.carbon.dynamic.client.registration.profile.RegistrationProfile;
+import org.wso2.carbon.dynamic.client.web.app.registration.internal.DynamicClientWebAppRegistrationDataHolder;
+import org.wso2.carbon.utils.CarbonUtils;
+import org.wso2.carbon.utils.ConfigurationContextService;
+
+import javax.net.ssl.HostnameVerifier;
+import javax.net.ssl.HttpsURLConnection;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URI;
+import java.net.URISyntaxException;
+
+/**
+ * This class holds the necessary logic to create and delete service-providers by invoking the
+ * dynamic-client-registration endpoint.
+ */
+public class RemoteDCRClient {
+
+ private static final String CONTENT_TYPE_APPLICATION_JSON = "application/json";
+ private static final String CHARSET_UTF_8 = "UTF-8";
+
+ public static OAuthApplicationInfo createOAuthApplication(RegistrationProfile registrationProfile, String host)
+ throws DynamicClientRegistrationException {
+ DefaultHttpClient httpClient = new DefaultHttpClient();
+ String clientName = registrationProfile.getClientName();
+ try {
+ // Setup the HTTPS settings to accept any certificate.
+ HostnameVerifier hostnameVerifier = org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER;
+
+ SchemeRegistry registry = new SchemeRegistry();
+ SSLSocketFactory socketFactory = SSLSocketFactory.getSocketFactory();
+ socketFactory.setHostnameVerifier((X509HostnameVerifier) hostnameVerifier);
+ registry.register(new Scheme(DynamicClientWebAppRegistrationConstants.RemoteServiceProperties.
+ DYNAMIC_CLIENT_SERVICE_PROTOCOL, socketFactory, getServerHTTPSPort()));
+ SingleClientConnManager mgr = new SingleClientConnManager(httpClient.getParams(), registry);
+ httpClient = new DefaultHttpClient(mgr, httpClient.getParams());
+
+ // Set verifier
+ HttpsURLConnection.setDefaultHostnameVerifier(hostnameVerifier);
+
+ URI uri = new URIBuilder().setScheme(DynamicClientWebAppRegistrationConstants.RemoteServiceProperties.
+ DYNAMIC_CLIENT_SERVICE_PROTOCOL).setHost(host).setPath(
+ DynamicClientWebAppRegistrationConstants.RemoteServiceProperties.DYNAMIC_CLIENT_SERVICE_ENDPOINT).build();
+ Gson gson = new Gson();
+ StringEntity entity = new StringEntity(gson.toJson(registrationProfile), CONTENT_TYPE_APPLICATION_JSON,
+ CHARSET_UTF_8);
+ HttpPost httpPost = new HttpPost(uri);
+ httpPost.setEntity(entity);
+ HttpResponse response = httpClient.execute(httpPost);
+ int status = response.getStatusLine().getStatusCode();
+ HttpEntity responseData = response.getEntity();
+ String responseString = EntityUtils.toString(responseData, CHARSET_UTF_8);
+ if (status != 201) {
+ throw new DynamicClientRegistrationException("Backend server error occurred while invoking DCR endpoint for " +
+ "registering service-provider for web-app : " + clientName);
+ }
+ return getOAuthApplicationInfo(gson.fromJson(responseString, JsonElement.class));
+ } catch (URISyntaxException e) {
+ throw new DynamicClientRegistrationException("Exception occurred while constructing the URI for invoking " +
+ "DCR endpoint for registering service-provider for web-app : "
+ + clientName, e);
+ } catch (UnsupportedEncodingException e) {
+ throw new DynamicClientRegistrationException("Exception occurred while constructing the payload for invoking " +
+ "DCR endpoint for registering service-provider for web-app : "
+ + clientName, e);
+ } catch (IOException e) {
+ throw new DynamicClientRegistrationException("Connection error occurred while invoking DCR endpoint for" +
+ " registering service-provider for web-app : " + clientName, e);
+ }
+ }
+
+ public static boolean deleteOAuthApplication(String user, String appName, String clientid, String host)
+ throws DynamicClientRegistrationException {
+ DefaultHttpClient httpClient = new DefaultHttpClient();
+ try {
+ // Setup the HTTPS settings to accept any certificate.
+ HostnameVerifier hostnameVerifier = org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER;
+
+ SchemeRegistry registry = new SchemeRegistry();
+ SSLSocketFactory socketFactory = SSLSocketFactory.getSocketFactory();
+ socketFactory.setHostnameVerifier((X509HostnameVerifier) hostnameVerifier);
+ registry.register(new Scheme(DynamicClientWebAppRegistrationConstants.RemoteServiceProperties.
+ DYNAMIC_CLIENT_SERVICE_PROTOCOL, socketFactory, getServerHTTPSPort()));
+ SingleClientConnManager mgr = new SingleClientConnManager(httpClient.getParams(), registry);
+ httpClient = new DefaultHttpClient(mgr, httpClient.getParams());
+
+ // Set verifier
+ HttpsURLConnection.setDefaultHostnameVerifier(hostnameVerifier);
+
+ URI uri = new URIBuilder().setScheme(DynamicClientWebAppRegistrationConstants.RemoteServiceProperties.
+ DYNAMIC_CLIENT_SERVICE_PROTOCOL).setHost(host).setPath(
+ DynamicClientWebAppRegistrationConstants.RemoteServiceProperties.DYNAMIC_CLIENT_SERVICE_ENDPOINT)
+ .setParameter("applicationName", appName)
+ .setParameter("userId", user)
+ .setParameter("consumerKey", clientid).build();
+ HttpDelete httpDelete = new HttpDelete(uri);
+ HttpResponse response = httpClient.execute(httpDelete);
+ int status = response.getStatusLine().getStatusCode();
+ if (status == 200) {
+ return true;
+ }
+ } catch (IOException e) {
+ throw new DynamicClientRegistrationException("Connection error occurred while constructing the payload for " +
+ "invoking DCR endpoint for unregistering the web-app : " + appName, e);
+ } catch (URISyntaxException e) {
+ throw new DynamicClientRegistrationException("Exception occurred while constructing the URI for invoking " +
+ "DCR endpoint for unregistering the web-app : " + appName, e);
+ }
+ return false;
+ }
+
+ private static int getServerHTTPSPort() {
+ // HTTPS port
+ String mgtConsoleTransport = CarbonUtils.getManagementTransport();
+ ConfigurationContextService configContextService =
+ DynamicClientWebAppRegistrationDataHolder.getInstance().getConfigurationContextService();
+ int port = CarbonUtils.getTransportPort(configContextService, mgtConsoleTransport);
+ int httpsProxyPort =
+ CarbonUtils.getTransportProxyPort(configContextService.getServerConfigContext(),
+ mgtConsoleTransport);
+ if (httpsProxyPort > 0) {
+ port = httpsProxyPort;
+ }
+ return port;
+ }
+
+ private static OAuthApplicationInfo getOAuthApplicationInfo(JsonElement jsonData) {
+ JsonObject jsonObject = jsonData.getAsJsonObject();
+ OAuthApplicationInfo oAuthApplicationInfo = new OAuthApplicationInfo();
+ JsonElement property = jsonObject.get("client_id");
+ if (property != null) {
+ oAuthApplicationInfo.setClientId(property.getAsString());
+ }
+ property = jsonObject.get("client_name");
+ if (property != null) {
+ oAuthApplicationInfo.setClientName(property.getAsString());
+ }
+ property = jsonObject.get("client_secret");
+ if (property != null) {
+ oAuthApplicationInfo.setClientSecret(property.getAsString());
+ }
+ return oAuthApplicationInfo;
+ }
+}
diff --git a/pom.xml b/pom.xml
index d041463e527..e648027d2da 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1247,6 +1247,11 @@
gson
${google.gson.version}
+
+ org.apache.httpcomponents
+ httpclient
+ ${apache.http.version}
+
@@ -1491,7 +1496,7 @@
4.6.0
- 5.0.3-SNAPSHOT
+ 5.0.3
4.5.0
@@ -1542,6 +1547,7 @@
2.3.1
1.1.1
1.2
+ 4.5.1
github-scm