diff --git a/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/main/java/org/wso2/carbon/apimgt/webapp/publisher/APIPublisherServiceImpl.java b/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/main/java/org/wso2/carbon/apimgt/webapp/publisher/APIPublisherServiceImpl.java index 47757b4cf8b..6d1eb4c3a90 100644 --- a/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/main/java/org/wso2/carbon/apimgt/webapp/publisher/APIPublisherServiceImpl.java +++ b/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/main/java/org/wso2/carbon/apimgt/webapp/publisher/APIPublisherServiceImpl.java @@ -22,6 +22,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.wso2.carbon.apimgt.api.APIManagementException; import org.wso2.carbon.apimgt.api.APIProvider; +import org.wso2.carbon.apimgt.api.FaultGatewaysException; import org.wso2.carbon.apimgt.api.model.API; import org.wso2.carbon.apimgt.api.model.APIIdentifier; import org.wso2.carbon.apimgt.impl.APIManagerFactory; @@ -48,10 +49,15 @@ public class APIPublisherServiceImpl implements APIPublisherService { log.info("Successfully published API '" + api.getId().getApiName() + "' with context '" + api.getContext() + "' and version '" + api.getId().getVersion() + "'"); } else { - provider.updateAPI(api); - log.info("An API already exists with the name '" + api.getId().getApiName() + "', context '" + - api.getContext() + "' and version '" + api.getId().getVersion() + - "'. Thus, the API config is updated"); + try { + provider.updateAPI(api); + log.info("An API already exists with the name '" + api.getId().getApiName() + "', context '" + + api.getContext() + "' and version '" + api.getId().getVersion() + + "'. Thus, the API config is updated"); + } catch (FaultGatewaysException e) { + throw new APIManagementException("Error occurred while updating API " + api.getId().getApiName() + + "' with context '" + api.getContext() + "' and version '" + api.getId().getVersion() + "'"); + } } } else { throw new APIManagementException("API provider configured for the given API configuration is null. " + diff --git a/components/identity-extensions/dynamic-client-registration/dynamic-client-web/pom.xml b/components/identity-extensions/dynamic-client-registration/dynamic-client-web/pom.xml index 927f8e1f778..066b6207a33 100644 --- a/components/identity-extensions/dynamic-client-registration/dynamic-client-web/pom.xml +++ b/components/identity-extensions/dynamic-client-registration/dynamic-client-web/pom.xml @@ -67,30 +67,31 @@ org.apache.cxf cxf-rt-frontend-jaxws + provided org.apache.cxf cxf-rt-frontend-jaxrs + provided org.apache.cxf cxf-rt-transports-http + provided org.apache.cxf cxf-rt-bindings-soap - 2.6.1 compile org.apache.cxf cxf-rt-bindings-http - 2.5.11 + provided org.apache.cxf cxf-rt-rs-extension-providers - 2.6.1 compile @@ -102,10 +103,12 @@ slf4j-api + provided org.testng testng + provided @@ -143,6 +146,11 @@ org.codehaus.jackson jackson-jaxrs + + com.google.code.gson + gson + provided + 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 51bce89c192..88b54304e89 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 @@ -47,7 +47,7 @@ ${project.artifactId} ${carbon.device.mgt.version} Dynamic Client Registration Bundle - org.wso2.carbon.dynamic.client.registration.internal.DynamicClientRegistrationBundleActivator + org.wso2.carbon.dynamic.client.registration.internal.DynamicClientRegistrationServiceComponent org.wso2.carbon.dynamic.client.registration.internal !org.wso2.carbon.dynamic.client.registration.internal, diff --git a/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.registration/src/main/java/org/wso2/carbon/dynamic/client/registration/DynamicClientRegistrationService.java b/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.registration/src/main/java/org/wso2/carbon/dynamic/client/registration/DynamicClientRegistrationService.java index e6aea31a713..7346ac1f69a 100644 --- a/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.registration/src/main/java/org/wso2/carbon/dynamic/client/registration/DynamicClientRegistrationService.java +++ b/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.registration/src/main/java/org/wso2/carbon/dynamic/client/registration/DynamicClientRegistrationService.java @@ -25,37 +25,39 @@ import org.wso2.carbon.dynamic.client.registration.profile.RegistrationProfile; */ public interface DynamicClientRegistrationService { - /** - * This method will register a new OAuth application using the data provided by - * RegistrationProfile. - * - * @param profile - RegistrationProfile of the OAuth application to be created. - * @return OAuthApplicationInfo object which holds the necessary data of created OAuth app. - * @throws DynamicClientRegistrationException - */ - public OAuthApplicationInfo registerOAuthApplication(RegistrationProfile profile) throws - DynamicClientRegistrationException; + /** + * This method will register a new OAuth application using the data provided by + * RegistrationProfile. + * + * @param profile - RegistrationProfile of the OAuth application to be created. + * @return OAuthApplicationInfo object which holds the necessary data of created OAuth app. + * @throws DynamicClientRegistrationException + * + */ + public OAuthApplicationInfo registerOAuthApplication( + RegistrationProfile profile) throws DynamicClientRegistrationException; - /** - * This method will unregister a created OAuth application. - * - * @param userName - Username of the owner - * @param applicationName - OAuth application name - * @param consumerKey - ConsumerKey of the OAuth application - * @return The status of the operation - * @throws DynamicClientRegistrationException - */ - public boolean unregisterOAuthApplication(String userName, String applicationName, - String consumerKey) throws DynamicClientRegistrationException; + /** + * This method will unregister a created OAuth application. + * + * @param userName - Username of the owner + * @param applicationName - OAuth application name + * @param consumerKey - ConsumerKey of the OAuth application + * @return The status of the operation + * @throws DynamicClientRegistrationException + * + */ + public boolean unregisterOAuthApplication(String userName, String applicationName, + String consumerKey) throws DynamicClientRegistrationException; - /** - * This method will check the existence of an OAuth application provided application-name. - * - * @param applicationName - OAuth application name - * @return The status of the operation - * @throws DynamicClientRegistrationException - */ - public boolean isOAuthApplicationExists(String applicationName) - throws DynamicClientRegistrationException; + /** + * This method will check the existence of an OAuth application provided application-name. + * + * @param applicationName - OAuth application name + * @return The status of the operation + * @throws DynamicClientRegistrationException + * + */ + public boolean isOAuthApplicationExists(String applicationName) throws DynamicClientRegistrationException; } 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/DynamicClientRegistrationUtil.java new file mode 100644 index 00000000000..dd835dad97c --- /dev/null +++ b/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.registration/src/main/java/org/wso2/carbon/dynamic/client/registration/DynamicClientRegistrationUtil.java @@ -0,0 +1,40 @@ +/* + * 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.registration; + +public class DynamicClientRegistrationUtil { + + public static void validateUsername(String username) { + if (username == null || username.isEmpty()) { + throw new IllegalArgumentException("Username cannot be null or empty"); + } + } + + public static void validateApplicationName(String applicationName) { + if (applicationName == null || applicationName.isEmpty()) { + throw new IllegalArgumentException("Application name cannot be null or empty"); + } + } + + public static void validateConsumerKey(String consumerKey) { + if (consumerKey == null || consumerKey.isEmpty()) { + throw new IllegalArgumentException("Consumer Key cannot be null or empty"); + } + } + +} 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/DynamicClientRegistrationImpl.java b/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.registration/src/main/java/org/wso2/carbon/dynamic/client/registration/impl/DynamicClientRegistrationImpl.java index 94cc4bf81cf..cc09b05be5d 100644 --- a/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.registration/src/main/java/org/wso2/carbon/dynamic/client/registration/impl/DynamicClientRegistrationImpl.java +++ b/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.registration/src/main/java/org/wso2/carbon/dynamic/client/registration/impl/DynamicClientRegistrationImpl.java @@ -15,7 +15,6 @@ * specific language governing permissions and limitations * under the License. */ - package org.wso2.carbon.dynamic.client.registration.impl; import org.apache.commons.logging.Log; @@ -25,21 +24,13 @@ import org.json.JSONObject; import org.wso2.carbon.context.CarbonContext; import org.wso2.carbon.context.PrivilegedCarbonContext; import org.wso2.carbon.context.RegistryType; -import org.wso2.carbon.dynamic.client.registration.ApplicationConstants; -import org.wso2.carbon.dynamic.client.registration.DynamicClientRegistrationException; -import org.wso2.carbon.dynamic.client.registration.DynamicClientRegistrationService; -import org.wso2.carbon.dynamic.client.registration.OAuthApplicationInfo; +import org.wso2.carbon.dynamic.client.registration.*; import org.wso2.carbon.dynamic.client.registration.profile.RegistrationProfile; import org.wso2.carbon.identity.application.common.IdentityApplicationManagementException; -import org.wso2.carbon.identity.application.common.model.AuthenticationStep; -import org.wso2.carbon.identity.application.common.model.InboundAuthenticationConfig; -import org.wso2.carbon.identity.application.common.model.InboundAuthenticationRequestConfig; -import org.wso2.carbon.identity.application.common.model.LocalAndOutboundAuthenticationConfig; -import org.wso2.carbon.identity.application.common.model.LocalAuthenticatorConfig; -import org.wso2.carbon.identity.application.common.model.Property; -import org.wso2.carbon.identity.application.common.model.ServiceProvider; +import org.wso2.carbon.identity.application.common.model.*; import org.wso2.carbon.identity.application.mgt.ApplicationManagementService; import org.wso2.carbon.identity.base.IdentityException; +import org.wso2.carbon.identity.oauth.IdentityOAuthAdminException; import org.wso2.carbon.identity.oauth.OAuthAdminService; import org.wso2.carbon.identity.oauth.dto.OAuthConsumerAppDTO; import org.wso2.carbon.identity.sso.saml.admin.SAMLSSOConfigAdmin; @@ -155,6 +146,10 @@ public class DynamicClientRegistrationImpl implements DynamicClientRegistrationS // Create the Service Provider ServiceProvider serviceProvider = new ServiceProvider(); serviceProvider.setApplicationName(applicationName); + User user = new User(); + user.setUserName(userName); + user.setTenantDomain(tenantDomain); + serviceProvider.setOwner(user); serviceProvider.setDescription("Service Provider for application " + applicationName); @@ -167,7 +162,7 @@ public class DynamicClientRegistrationImpl implements DynamicClientRegistrationS ServiceProvider existingServiceProvider = appMgtService.getApplication(applicationName); - if(existingServiceProvider == null) { + if (existingServiceProvider == null) { appMgtService.createApplication(serviceProvider); } @@ -181,16 +176,16 @@ public class DynamicClientRegistrationImpl implements DynamicClientRegistrationS // Then Create OAuthApp OAuthAdminService oAuthAdminService = new OAuthAdminService(); - OAuthConsumerAppDTO oAuthConsumerAppDTO = new OAuthConsumerAppDTO(); - oAuthConsumerAppDTO.setApplicationName(applicationName); - oAuthConsumerAppDTO.setCallbackUrl(callbackUrl); - oAuthConsumerAppDTO.setGrantTypes(grantType); + OAuthConsumerAppDTO oAuthConsumerApp = new OAuthConsumerAppDTO(); + oAuthConsumerApp.setApplicationName(applicationName); + oAuthConsumerApp.setCallbackUrl(callbackUrl); + oAuthConsumerApp.setGrantTypes(grantType); if (log.isDebugEnabled()) { log.debug("Creating OAuth App " + applicationName); } - if(existingServiceProvider == null) { - oAuthAdminService.registerOAuthApplicationData(oAuthConsumerAppDTO); + if (existingServiceProvider == null) { + oAuthAdminService.registerOAuthApplicationData(oAuthConsumerApp); } if (log.isDebugEnabled()) { @@ -198,8 +193,7 @@ public class DynamicClientRegistrationImpl implements DynamicClientRegistrationS } OAuthConsumerAppDTO createdApp = - oAuthAdminService.getOAuthApplicationDataByAppName(oAuthConsumerAppDTO - .getApplicationName()); + oAuthAdminService.getOAuthApplicationDataByAppName(oAuthConsumerApp.getApplicationName()); if (log.isDebugEnabled()) { log.debug("Retrieved Details for OAuth App " + createdApp.getApplicationName()); } @@ -219,7 +213,7 @@ public class DynamicClientRegistrationImpl implements DynamicClientRegistrationS Property property = new Property(); property.setName("oauthConsumerSecret"); property.setValue(createdApp.getOauthConsumerSecret()); - Property[] properties = { property }; + Property[] properties = {property}; inboundAuthenticationRequestConfig.setProperties(properties); } @@ -289,14 +283,17 @@ public class DynamicClientRegistrationImpl implements DynamicClientRegistrationS } protected Registry getConfigSystemRegistry() { - return (Registry)PrivilegedCarbonContext.getThreadLocalCarbonContext(). + return (Registry) PrivilegedCarbonContext.getThreadLocalCarbonContext(). getRegistry(RegistryType.SYSTEM_CONFIGURATION); } @Override public boolean unregisterOAuthApplication(String userId, String applicationName, - String consumerKey) - throws DynamicClientRegistrationException { + String consumerKey) throws DynamicClientRegistrationException { + DynamicClientRegistrationUtil.validateUsername(userId); + DynamicClientRegistrationUtil.validateApplicationName(applicationName); + DynamicClientRegistrationUtil.validateConsumerKey(consumerKey); + boolean status = false; String tenantDomain = MultitenantUtils.getTenantDomain(userId); String baseUser = CarbonContext.getThreadLocalCarbonContext().getUsername(); @@ -306,21 +303,23 @@ public class DynamicClientRegistrationImpl implements DynamicClientRegistrationS PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantDomain(tenantDomain, true); PrivilegedCarbonContext.getThreadLocalCarbonContext().setUsername(userName); - if (userId == null || userId.isEmpty()) { + OAuthAdminService oAuthAdminService; + OAuthConsumerAppDTO oAuthConsumerApp; + try { + oAuthAdminService = new OAuthAdminService(); + oAuthConsumerApp = oAuthAdminService.getOAuthApplicationData(consumerKey); + } catch (IdentityOAuthAdminException e) { + throw new DynamicClientRegistrationException("Error occurred while retrieving application data", e); + } catch (Exception e) { + throw new DynamicClientRegistrationException("Error occurred while retrieving application data", e); + } + + if (oAuthConsumerApp == null) { throw new DynamicClientRegistrationException( - "Error occurred while unregistering Application: userId cannot " + - "be null/empty"); + "No OAuth Consumer Application is associated with the given consumer key: " + consumerKey); } - try { - OAuthAdminService oAuthAdminService = new OAuthAdminService(); - OAuthConsumerAppDTO oAuthConsumerAppDTO = - oAuthAdminService.getOAuthApplicationData(consumerKey); - if (oAuthConsumerAppDTO == null) { - throw new DynamicClientRegistrationException( - "Couldn't retrieve OAuth Consumer Application associated with the " + - "given consumer key: " + consumerKey); - } + try { oAuthAdminService.removeOAuthApplicationData(consumerKey); ApplicationManagementService appMgtService = ApplicationManagementService.getInstance(); @@ -331,7 +330,6 @@ public class DynamicClientRegistrationImpl implements DynamicClientRegistrationS "Service"); } ServiceProvider createdServiceProvider = appMgtService.getApplication(applicationName); - if (createdServiceProvider == null) { throw new DynamicClientRegistrationException( "Couldn't retrieve Service Provider Application " + applicationName); @@ -340,10 +338,13 @@ public class DynamicClientRegistrationImpl implements DynamicClientRegistrationS status = true; } catch (IdentityApplicationManagementException e) { throw new DynamicClientRegistrationException( - "Error occurred while removing ServiceProvider for app " + applicationName, e); + "Error occurred while removing ServiceProvider for application '" + applicationName + "'", e); + } catch (IdentityOAuthAdminException e) { + throw new DynamicClientRegistrationException("Error occurred while removing application '" + + applicationName + "'", e); } catch (Exception e) { - throw new DynamicClientRegistrationException( - "Error occurred while removing OAuthApp " + applicationName, e); + throw new DynamicClientRegistrationException("Error occurred while removing application '" + + applicationName + "'", e); } finally { PrivilegedCarbonContext.endTenantFlow(); PrivilegedCarbonContext.getThreadLocalCarbonContext().setUsername(baseUser); @@ -352,8 +353,7 @@ public class DynamicClientRegistrationImpl implements DynamicClientRegistrationS } @Override - public boolean isOAuthApplicationExists(String applicationName) - throws DynamicClientRegistrationException { + public boolean isOAuthApplicationExists(String applicationName) throws DynamicClientRegistrationException { ApplicationManagementService appMgtService = ApplicationManagementService.getInstance(); if (appMgtService == null) { throw new IllegalStateException( @@ -361,14 +361,14 @@ public class DynamicClientRegistrationImpl implements DynamicClientRegistrationS "Service"); } try { - if (appMgtService.getApplication(applicationName) != null) { + if (ApplicationManagementService.getInstance().getApplication(applicationName) != null) { return true; } } catch (IdentityApplicationManagementException e) { throw new DynamicClientRegistrationException( - "Error occurred while retrieving information of OAuthApp " + applicationName, - e); + "Error occurred while retrieving information of OAuthApp " + applicationName, e); } return false; } + } diff --git a/components/identity-extensions/org.wso2.carbon.device.mgt.oauth.extensions/src/main/java/org/wso2/carbon/device/mgt/oauth/extensions/validators/ScopeValidator.java b/components/identity-extensions/org.wso2.carbon.device.mgt.oauth.extensions/src/main/java/org/wso2/carbon/device/mgt/oauth/extensions/validators/ScopeValidator.java index 2f534f38fe8..0432238face 100644 --- a/components/identity-extensions/org.wso2.carbon.device.mgt.oauth.extensions/src/main/java/org/wso2/carbon/device/mgt/oauth/extensions/validators/ScopeValidator.java +++ b/components/identity-extensions/org.wso2.carbon.device.mgt.oauth.extensions/src/main/java/org/wso2/carbon/device/mgt/oauth/extensions/validators/ScopeValidator.java @@ -70,8 +70,8 @@ public class ScopeValidator extends OAuth2ScopeValidator { getPermissionManagerService(); try { Permission permission = permissionManagerService.getPermission(properties); - if(permission != null){ - String username = accessTokenDO.getAuthzUser(); + if((permission != null) && (accessTokenDO.getAuthzUser() != null)) { + String username = accessTokenDO.getAuthzUser().getUserName(); UserRealm userRealm = CarbonContext.getThreadLocalCarbonContext().getUserRealm(); if(userRealm != null && userRealm.getAuthorizationManager() != null){ status = userRealm.getAuthorizationManager().isUserAuthorized(username, permission.getPath(), diff --git a/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/main/java/org/wso2/carbon/webapp/authenticator/framework/internal/WebappAuthenticatorFrameworkServiceComponent.java b/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/main/java/org/wso2/carbon/webapp/authenticator/framework/internal/WebappAuthenticatorFrameworkServiceComponent.java index b99233bbbad..d00164ea9a3 100644 --- a/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/main/java/org/wso2/carbon/webapp/authenticator/framework/internal/WebappAuthenticatorFrameworkServiceComponent.java +++ b/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/main/java/org/wso2/carbon/webapp/authenticator/framework/internal/WebappAuthenticatorFrameworkServiceComponent.java @@ -31,14 +31,12 @@ import org.wso2.carbon.webapp.authenticator.framework.DataHolder; import org.wso2.carbon.webapp.authenticator.framework.WebappAuthenticationHandler; import org.wso2.carbon.webapp.authenticator.framework.authenticator.WebappAuthenticator; import org.wso2.carbon.webapp.authenticator.framework.WebappAuthenticatorRepository; -import org.wso2.carbon.webapp.authenticator.framework.authorizer.PermissionAuthorizationValve; import org.wso2.carbon.webapp.authenticator.framework.config.AuthenticatorConfig; import org.wso2.carbon.webapp.authenticator.framework.config.WebappAuthenticatorConfig; import java.util.ArrayList; import java.util.List; - /** * @scr.component name="org.wso2.carbon.webapp.authenticator" immediate="true" * @scr.reference name="user.realmservice.default" diff --git a/pom.xml b/pom.xml index 3b21efdc1fa..c2bec61b78e 100644 --- a/pom.xml +++ b/pom.xml @@ -17,8 +17,7 @@ ~ under the License. --> - 4.0.0 @@ -383,8 +382,8 @@ bcprov-jdk15on - - + + org.wso2.carbon @@ -1019,13 +1018,17 @@ json ${json.wso2.version} + + com.google.code.gson + gson + ${google.gson.version} + https://github.com/wso2/carbon-device-mgt.git - scm:git:https://github.com/wso2/carbon-device-mgt.git - + scm:git:https://github.com/wso2/carbon-device-mgt.git scm:git:https://github.com/wso2/carbon-device-mgt.git HEAD @@ -1212,7 +1215,7 @@ 6.1.1 - 4.4.0 + 4.4.1 1.5.4 1.3 @@ -1225,7 +1228,7 @@ 1.5.4 - 0.10.0 + 0.10.2 1.3.0 1.3.0 1.3.0 @@ -1249,19 +1252,19 @@ 7.0.34.wso2v2 - 4.4.0 + 4.5.2 - 4.4.0 + 4.6.0-M2 - 4.4.0 + 4.5.0-m1 - 4.4.1 + 4.4.8 - 4.4.1 + 4.5.8 1.2.11-wso2v5 @@ -1272,13 +1275,13 @@ 0.9.2-SNAPSHOT - 4.4.0 + 4.4.7 1.4.0.wso2v1 2.4.0.wso2v1 2.6.0.wso2v1 - 1.4.0 + 4.3.0-SNAPSHOT 2.6.1 @@ -1300,6 +1303,7 @@ 2.26.1.wso2v3 2.0.0.wso2v1 + 2.3.1