diff --git a/components/apimgt-extensions/org.wso2.carbon.apimgt.application.extension.api/pom.xml b/components/apimgt-extensions/org.wso2.carbon.apimgt.application.extension.api/pom.xml index bfe5a9177ba..b1c7c57bcbd 100644 --- a/components/apimgt-extensions/org.wso2.carbon.apimgt.application.extension.api/pom.xml +++ b/components/apimgt-extensions/org.wso2.carbon.apimgt.application.extension.api/pom.xml @@ -77,7 +77,18 @@ commons-httpclient provided - + + org.wso2.carbon + org.wso2.carbon.base + + + com.googlecode.json-simple.wso2 + json-simple + + + org.wso2.carbon + org.wso2.carbon.user.api + org.wso2.carbon org.wso2.carbon.utils diff --git a/components/apimgt-extensions/org.wso2.carbon.apimgt.application.extension.api/src/main/java/org/wso2/carbon/apimgt/application/extension/api/ApiApplicationRegistrationService.java b/components/apimgt-extensions/org.wso2.carbon.apimgt.application.extension.api/src/main/java/org/wso2/carbon/apimgt/application/extension/api/ApiApplicationRegistrationService.java index f6404de2d65..8a81a8a5ec6 100644 --- a/components/apimgt-extensions/org.wso2.carbon.apimgt.application.extension.api/src/main/java/org/wso2/carbon/apimgt/application/extension/api/ApiApplicationRegistrationService.java +++ b/components/apimgt-extensions/org.wso2.carbon.apimgt.application.extension.api/src/main/java/org/wso2/carbon/apimgt/application/extension/api/ApiApplicationRegistrationService.java @@ -53,6 +53,11 @@ public interface ApiApplicationRegistrationService { @Consumes(MediaType.APPLICATION_JSON) Response register(RegistrationProfile registrationProfile); + /** + * This method is used to unregister an API application. + * @param applicationName name of the application that needs to be unregistered. + * @return the response status of request. + */ @DELETE Response unregister(@QueryParam("applicationName") String applicationName); } diff --git a/components/apimgt-extensions/org.wso2.carbon.apimgt.application.extension.api/src/main/java/org/wso2/carbon/apimgt/application/extension/api/ApiApplicationRegistrationServiceImpl.java b/components/apimgt-extensions/org.wso2.carbon.apimgt.application.extension.api/src/main/java/org/wso2/carbon/apimgt/application/extension/api/ApiApplicationRegistrationServiceImpl.java index 00f537c0863..7c24b40ffdd 100644 --- a/components/apimgt-extensions/org.wso2.carbon.apimgt.application.extension.api/src/main/java/org/wso2/carbon/apimgt/application/extension/api/ApiApplicationRegistrationServiceImpl.java +++ b/components/apimgt-extensions/org.wso2.carbon.apimgt.application.extension.api/src/main/java/org/wso2/carbon/apimgt/application/extension/api/ApiApplicationRegistrationServiceImpl.java @@ -26,6 +26,7 @@ import org.wso2.carbon.apimgt.application.extension.api.util.RegistrationProfile import org.wso2.carbon.apimgt.application.extension.constants.ApiApplicationConstants; import org.wso2.carbon.apimgt.application.extension.dto.ApiApplicationKey; import org.wso2.carbon.apimgt.application.extension.exception.APIManagerException; +import org.wso2.carbon.base.MultitenantConstants; import org.wso2.carbon.context.PrivilegedCarbonContext; import org.wso2.carbon.apimgt.application.extension.api.util.APIUtil; import org.wso2.carbon.user.api.UserStoreException; @@ -45,13 +46,16 @@ public class ApiApplicationRegistrationServiceImpl implements ApiApplicationRegi @POST public Response register(@PathParam("tenantDomain") String tenantDomain, @QueryParam("applicationName") String applicationName) { - Response response; + String authenticatedTenantDomain = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantDomain(); + if (authenticatedTenantDomain.equals(MultitenantConstants.SUPER_TENANT_DOMAIN_NAME)) { + return Response.status(Response.Status.NOT_ACCEPTABLE).build(); + } try { PrivilegedCarbonContext.startTenantFlow(); PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantDomain(tenantDomain, true); if (PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId() == -1) { String msg = "Invalid tenant domain : " + tenantDomain; - response = Response.status(Response.Status.NOT_ACCEPTABLE).entity(msg).build(); + return Response.status(Response.Status.NOT_ACCEPTABLE).entity(msg).build(); } String username = PrivilegedCarbonContext.getThreadLocalCarbonContext().getUserRealm() .getRealmConfiguration().getAdminUserName(); @@ -63,21 +67,19 @@ public class ApiApplicationRegistrationServiceImpl implements ApiApplicationRegi } catch (APIManagerException e) { String msg = "Error occurred while registering an application '" + applicationName + "'"; log.error(msg, e); - response = Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } catch (UserStoreException e) { String msg = "Failed to retrieve the tenant" + tenantDomain + "'"; log.error(msg, e); - response = Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } finally { PrivilegedCarbonContext.endTenantFlow(); } - return response; } @Path("register") @POST public Response register(RegistrationProfile registrationProfile) { - Response response; try { String username = APIUtil.getAuthenticatedUser(); APIManagementProviderService apiManagementProviderService = APIUtil.getAPIManagementProviderService(); @@ -93,8 +95,9 @@ public class ApiApplicationRegistrationServiceImpl implements ApiApplicationRegi ApiApplicationConstants.DEFAULT_VALIDITY_PERIOD); apiManagementProviderService.registerExistingOAuthApplicationToAPIApplication( jsonStringObject.toJSONString(), registrationProfile.getApplicationName(), - registrationProfile.getConsumerKey(), username, registrationProfile.isAllowedToAllDomains()); - return Response.status(Response.Status.ACCEPTED).entity("OAuth App is mapped as APIM App").build(); + registrationProfile.getConsumerKey(), username, registrationProfile.isAllowedToAllDomains(), + ApiApplicationConstants.DEFAULT_TOKEN_TYPE); + return Response.status(Response.Status.ACCEPTED).entity("true").build(); } else { ApiApplicationKey apiApplicationKey = apiManagementProviderService.generateAndRetrieveApplicationKeys( registrationProfile.getApplicationName(), registrationProfile.getTags(), @@ -103,17 +106,15 @@ public class ApiApplicationRegistrationServiceImpl implements ApiApplicationRegi } } catch (APIManagerException e) { String msg = "Error occurred while registering an application '" - + registrationProfile.getApplicationName() + "'"; + + registrationProfile.getApplicationName() + "'"; log.error(msg, e); - response = Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("false").build(); } - return response; } @Path("unregister") @DELETE public Response unregister(@QueryParam("applicationName") String applicationName) { - Response response; try { String username = APIUtil.getAuthenticatedUser(); APIManagementProviderService apiManagementProviderService = APIUtil.getAPIManagementProviderService(); @@ -122,8 +123,7 @@ public class ApiApplicationRegistrationServiceImpl implements ApiApplicationRegi } catch (APIManagerException e) { String msg = "Error occurred while removing the application '" + applicationName; log.error(msg, e); - response = Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } - return response; } } \ No newline at end of file diff --git a/components/apimgt-extensions/org.wso2.carbon.apimgt.application.extension.api/src/main/webapp/META-INF/permissions.xml b/components/apimgt-extensions/org.wso2.carbon.apimgt.application.extension.api/src/main/webapp/META-INF/permissions.xml index 104c34fe3ee..213141cc67b 100644 --- a/components/apimgt-extensions/org.wso2.carbon.apimgt.application.extension.api/src/main/webapp/META-INF/permissions.xml +++ b/components/apimgt-extensions/org.wso2.carbon.apimgt.application.extension.api/src/main/webapp/META-INF/permissions.xml @@ -30,7 +30,7 @@ Register tenant specific application - /permission/super admin + /device-mgt /register/tenants/* POST super_admin_user diff --git a/components/apimgt-extensions/org.wso2.carbon.apimgt.application.extension/src/main/java/org/wso2/carbon/apimgt/application/extension/APIManagementProviderService.java b/components/apimgt-extensions/org.wso2.carbon.apimgt.application.extension/src/main/java/org/wso2/carbon/apimgt/application/extension/APIManagementProviderService.java index 643d66c23d9..33003b97682 100644 --- a/components/apimgt-extensions/org.wso2.carbon.apimgt.application.extension/src/main/java/org/wso2/carbon/apimgt/application/extension/APIManagementProviderService.java +++ b/components/apimgt-extensions/org.wso2.carbon.apimgt.application.extension/src/main/java/org/wso2/carbon/apimgt/application/extension/APIManagementProviderService.java @@ -59,7 +59,7 @@ public interface APIManagementProviderService { * Register existing Oauth application as apim application. */ void registerExistingOAuthApplicationToAPIApplication(String jsonString, String applicationName, String clientId, - String username, boolean isAllowedAllDomains) + String username, boolean isAllowedAllDomains, String keyType) throws APIManagerException; /** diff --git a/components/apimgt-extensions/org.wso2.carbon.apimgt.application.extension/src/main/java/org/wso2/carbon/apimgt/application/extension/APIManagementProviderServiceImpl.java b/components/apimgt-extensions/org.wso2.carbon.apimgt.application.extension/src/main/java/org/wso2/carbon/apimgt/application/extension/APIManagementProviderServiceImpl.java index 7a2af128d88..8c0e51a7f9c 100644 --- a/components/apimgt-extensions/org.wso2.carbon.apimgt.application.extension/src/main/java/org/wso2/carbon/apimgt/application/extension/APIManagementProviderServiceImpl.java +++ b/components/apimgt-extensions/org.wso2.carbon.apimgt.application.extension/src/main/java/org/wso2/carbon/apimgt/application/extension/APIManagementProviderServiceImpl.java @@ -118,13 +118,47 @@ public class APIManagementProviderServiceImpl implements APIManagementProviderSe @Override public void registerExistingOAuthApplicationToAPIApplication(String jsonString, String applicationName, String clientId, String username, - boolean isAllowedAllDomains) + boolean isAllowedAllDomains, String keyType) throws APIManagerException { try { APIConsumer apiConsumer = APIManagerFactory.getInstance().getAPIConsumer(username); if (apiConsumer != null) { String groupId = getLoggedInUserGroupId(username, APIManagerUtil.getTenantDomain()); - createApplication(apiConsumer, applicationName, username, groupId); + int applicationId = createApplication(apiConsumer, applicationName, username, groupId); + Subscriber subscriber = apiConsumer.getSubscriber(username); + if (subscriber == null) { + String tenantDomain = MultitenantUtils.getTenantDomain(username); + addSubscriber(username, "", groupId, APIManagerUtil.getTenantId(tenantDomain)); + subscriber = apiConsumer.getSubscriber(username); + } + Application[] applications = apiConsumer.getApplications(subscriber, groupId); + Application application = null; + for (Application app : applications) { + if (app.getId() == applicationId) { + application = app; + } + } + if (application == null) { + throw new APIManagerException( + "Api application creation failed for " + applicationName + " to the user " + username); + } + + APIKey retrievedApiApplicationKey = null; + for (APIKey apiKey : application.getKeys()) { + String applicationKeyType = apiKey.getType(); + if (applicationKeyType != null && applicationKeyType.equals(keyType)) { + retrievedApiApplicationKey = apiKey; + break; + } + } + if (retrievedApiApplicationKey != null) { + if (retrievedApiApplicationKey.getConsumerKey().equals(clientId)) { + return; + } else { + throw new APIManagerException("Api application already mapped to another OAuth App"); + } + } + String[] allowedDomains = new String[1]; if (isAllowedAllDomains) { allowedDomains[0] = ApiApplicationConstants.ALLOWED_DOMAINS; @@ -286,14 +320,18 @@ public class APIManagementProviderServiceImpl implements APIManagementProviderSe try { APIConsumer consumer = APIManagerFactory.getInstance().getAPIConsumer(subscriberName); if (consumer != null) { - Subscriber subscriber = new Subscriber(subscriberName); - subscriber.setSubscribedDate(new Date()); - subscriber.setEmail(subscriberEmail); - subscriber.setTenantId(tenantId); - consumer.addSubscriber(subscriber, groupId); - if (log.isDebugEnabled()) { - log.debug("Successfully created subscriber with name : " + subscriberName + " with groupID : " + - groupId); + synchronized (consumer) { + if (consumer.getSubscriber(subscriberName) == null) { + Subscriber subscriber = new Subscriber(subscriberName); + subscriber.setSubscribedDate(new Date()); + subscriber.setEmail(subscriberEmail); + subscriber.setTenantId(tenantId); + consumer.addSubscriber(subscriber, groupId); + if (log.isDebugEnabled()) { + log.debug("Successfully created subscriber with name : " + subscriberName + + " with groupID : " + groupId); + } + } } } else { throw new APIManagerException("API provider configured for the given API configuration is null. " + @@ -332,8 +370,8 @@ public class APIManagementProviderServiceImpl implements APIManagementProviderSe if (userVisibleAPIs != null) { Set subscribedAPIs = apiConsumer.getSubscribedAPIs(subscriber, apiApplicationName, groupId); - for (API userVisbleAPI : userVisibleAPIs) { - APIIdentifier apiIdentifier = userVisbleAPI.getId(); + for (API userVisibleAPI : userVisibleAPIs) { + APIIdentifier apiIdentifier = userVisibleAPI.getId(); boolean isSubscribed = false; if (subscribedAPIs != null) { for (SubscribedAPI subscribedAPI : subscribedAPIs) { 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 dae050d1d79..3ce653c6c87 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 @@ -26,18 +26,22 @@ 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.api.model.APIStatus; import org.wso2.carbon.apimgt.api.model.URITemplate; import org.wso2.carbon.apimgt.impl.APIManagerFactory; import org.wso2.carbon.apimgt.webapp.publisher.internal.APIPublisherDataHolder; +import org.wso2.carbon.context.PrivilegedCarbonContext; import org.wso2.carbon.governance.lcm.util.CommonUtil; import org.wso2.carbon.registry.core.exceptions.RegistryException; import org.wso2.carbon.registry.core.service.RegistryService; -import org.wso2.carbon.user.api.UserStoreException; import org.wso2.carbon.utils.multitenancy.MultitenantUtils; import javax.xml.stream.XMLStreamException; import java.io.FileNotFoundException; +import java.util.HashMap; +import java.util.Iterator; import java.util.List; +import java.util.Map; /** * This class represents the concrete implementation of the APIPublisherService that corresponds to providing all @@ -46,83 +50,96 @@ import java.util.List; public class APIPublisherServiceImpl implements APIPublisherService { private static final Log log = LogFactory.getLog(APIPublisherServiceImpl.class); + private static final String PUBLISH_ACTION = "Publish"; - @Override - public void publishAPI(API api) throws APIManagementException, FaultGatewaysException { - if (log.isDebugEnabled()) { - log.debug("Publishing API '" + api.getId() + "'"); - } - try { - String tenantDomain = MultitenantUtils.getTenantDomain(api.getApiOwner()); - int tenantId = - APIPublisherDataHolder.getInstance().getRealmService().getTenantManager().getTenantId(tenantDomain); - // Below code snippet is added load API Lifecycle in tenant mode, where in it does not load when tenant is loaded. - RegistryService registryService = APIPublisherDataHolder.getInstance().getRegistryService(); - CommonUtil.addDefaultLifecyclesIfNotAvailable(registryService.getConfigSystemRegistry(tenantId), - CommonUtil.getRootSystemRegistry(tenantId)); - APIProvider provider = APIManagerFactory.getInstance().getAPIProvider(api.getApiOwner()); - MultitenantUtils.getTenantDomain(api.getApiOwner()); - if (provider != null) { - if (!provider.isAPIAvailable(api.getId())) { - provider.addAPI(api); - 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"); - } - provider.saveSwagger20Definition(api.getId(), createSwaggerDefinition(api)); - } else { - throw new APIManagementException("API provider configured for the given API configuration is null. " + - "Thus, the API is not published"); - } - } catch (UserStoreException e) { - throw new APIManagementException("Failed to get the tenant id for the user " + api.getApiOwner(), e); - } catch (FileNotFoundException e) { - throw new APIManagementException("Failed to retrieve life cycle file ", e); - } catch (RegistryException e) { - throw new APIManagementException("Failed to access the registry ", e); - } catch (XMLStreamException e) { - throw new APIManagementException("Failed parsing the lifecycle xml.", e); - } - } - - private String createSwaggerDefinition(API api) { - //{"paths":{"/controller/*":{"get":{"responses":{"200":{}}}},"/manager/*":{"get":{"responses":{"200":{}}}}}, - // "swagger":"2.0","info":{"title":"RaspberryPi","version":"1.0.0"}} - JsonObject swaggerDefinition = new JsonObject(); + @Override + public void publishAPI(final API api) throws APIManagementException, FaultGatewaysException { + String tenantDomain = MultitenantUtils.getTenantDomain(api.getApiOwner()); + PrivilegedCarbonContext.startTenantFlow(); + PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantDomain(tenantDomain, true); + try { + int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); + // Below code snippet is added to load API Lifecycle in tenant mode. + RegistryService registryService = APIPublisherDataHolder.getInstance().getRegistryService(); + CommonUtil.addDefaultLifecyclesIfNotAvailable(registryService.getConfigSystemRegistry(tenantId), + CommonUtil.getRootSystemRegistry(tenantId)); + APIProvider provider = APIManagerFactory.getInstance().getAPIProvider(api.getApiOwner()); + MultitenantUtils.getTenantDomain(api.getApiOwner()); + if (provider != null) { + if (provider.isDuplicateContextTemplate(api.getContext())) { + throw new APIManagementException( + "Error occurred while adding the API. A duplicate API" + + " context already exists for " + api.getContext()); + } + if (!provider.isAPIAvailable(api.getId())) { + provider.addAPI(api); + provider.changeLifeCycleStatus(api.getId(), PUBLISH_ACTION); + if (log.isDebugEnabled()) { + log.debug("Successfully published API '" + api.getId().getApiName() + + "' with context '" + api.getContext() + "' and version '" + + api.getId().getVersion() + "'"); + } + } else { + api.setStatus(APIStatus.PUBLISHED); + provider.updateAPI(api); + if (log.isDebugEnabled()) { + log.debug("An API already exists with the name '" + api.getId().getApiName() + + "', context '" + api.getContext() + "' and version '" + + api.getId().getVersion() + "'. Thus, the API config is updated"); + } + } + provider.saveSwagger20Definition(api.getId(), createSwaggerDefinition(api)); + } else { + throw new APIManagementException("API provider configured for the given API configuration " + + "is null. Thus, the API is not published"); + } + } catch (FileNotFoundException e) { + throw new APIManagementException("Failed to retrieve life cycle file ", e); + } catch (RegistryException e) { + throw new APIManagementException("Failed to access the registry ", e); + } catch (XMLStreamException e) { + throw new APIManagementException("Failed parsing the lifecycle xml.", e); + } finally { + PrivilegedCarbonContext.endTenantFlow(); + } + } - JsonObject paths = new JsonObject(); - for (URITemplate uriTemplate : api.getUriTemplates()) { - JsonObject response = new JsonObject(); - response.addProperty("200", ""); + private String createSwaggerDefinition(API api) { + Map httpVerbsMap = new HashMap<>(); - JsonObject responses = new JsonObject(); - responses.add("responses", response); + for (URITemplate uriTemplate : api.getUriTemplates()) { + JsonObject response = new JsonObject(); + response.addProperty("200", ""); - JsonObject httpVerb = new JsonObject(); - httpVerb.add(uriTemplate.getHTTPVerb().toLowerCase(), responses); + JsonObject responses = new JsonObject(); + responses.add("responses", response); + JsonObject httpVerbs = httpVerbsMap.get(uriTemplate.getUriTemplate()); + if (httpVerbs == null) { + httpVerbs = new JsonObject(); + } + httpVerbs.add(uriTemplate.getHTTPVerb().toLowerCase(), responses); + httpVerbsMap.put(uriTemplate.getUriTemplate(), httpVerbs); + } - JsonObject path = new JsonObject(); - path.add(uriTemplate.getUriTemplate(), httpVerb); + Iterator it = httpVerbsMap.entrySet().iterator(); + JsonObject paths = new JsonObject(); + while (it.hasNext()) { + Map.Entry pair = (Map.Entry) it.next(); + paths.add(pair.getKey(), pair.getValue()); + it.remove(); + } - paths.add(uriTemplate.getUriTemplate(), httpVerb); - } - swaggerDefinition.add("paths", paths); - swaggerDefinition.addProperty("swagger", "2.0"); + JsonObject info = new JsonObject(); + info.addProperty("title", api.getId().getApiName()); + info.addProperty("version", api.getId().getVersion()); - JsonObject info = new JsonObject(); - info.addProperty("title", api.getId().getApiName()); - info.addProperty("version", api.getId().getVersion()); - swaggerDefinition.add("info", info); + JsonObject swaggerDefinition = new JsonObject(); + swaggerDefinition.add("paths", paths); + swaggerDefinition.addProperty("swagger", "2.0"); + swaggerDefinition.add("info", info); - return swaggerDefinition.toString(); - //return "{\"paths\":{\"/controller/*\":{\"get\":{\"responses\":{\"200\":{}}}}, - // \"/manager/*\":{\"get\":{\"responses\":{\"200\":{}}}}},\"swagger\":\"2.0\", - // \"info\":{\"title\":\"RaspberryPi\",\"version\":\"1.0.0\"}}"; - } + return swaggerDefinition.toString(); + } @Override public void removeAPI(APIIdentifier id) throws APIManagementException { diff --git a/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/main/java/org/wso2/carbon/apimgt/webapp/publisher/APIPublisherUtil.java b/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/main/java/org/wso2/carbon/apimgt/webapp/publisher/APIPublisherUtil.java index 2a502825adc..9ae9340513f 100644 --- a/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/main/java/org/wso2/carbon/apimgt/webapp/publisher/APIPublisherUtil.java +++ b/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/main/java/org/wso2/carbon/apimgt/webapp/publisher/APIPublisherUtil.java @@ -37,6 +37,7 @@ public class APIPublisherUtil { private static final String DEFAULT_API_VERSION = "1.0.0"; public static final String API_VERSION_PARAM="{version}"; + public static final String API_PUBLISH_ENVIRONEMENT = "Production and Sandbox"; enum HTTPMethod { GET, POST, DELETE, PUT, OPTIONS @@ -75,10 +76,13 @@ public class APIPublisherUtil { api.setUrl(config.getEndpoint()); api.addAvailableTiers(provider.getTiers()); api.setEndpointSecured(true); - api.setStatus(APIStatus.PUBLISHED); + api.setStatus(APIStatus.CREATED); api.setTransports(config.getTransports()); api.setContextTemplate(config.getContextTemplate()); api.setUriTemplates(config.getUriTemplates()); + Set environements = new HashSet<>(); + environements.add(API_PUBLISH_ENVIRONEMENT); + api.setEnvironments(environements); Set tiers = new HashSet(); tiers.add(new Tier(APIConstants.UNLIMITED_TIER)); api.addAvailableTiers(tiers); @@ -91,7 +95,7 @@ public class APIPublisherUtil { } api.setResponseCache(APIConstants.DISABLED); - String endpointConfig = "{\"production_endpoints\":{\"url\":\" " + config.getEndpoint() + "\",\"config\":null},\"endpoint_type\":\"http\"}"; + String endpointConfig = "{\"production_endpoints\":{\"url\":\" " + config.getEndpoint() + "\",\"config\":null},\"implementation_status\":\"managed\",\"endpoint_type\":\"http\"}"; api.setEndpointConfig(endpointConfig); if ("".equals(id.getVersion()) || (DEFAULT_API_VERSION.equals(id.getVersion()))) { diff --git a/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/main/java/org/wso2/carbon/apimgt/webapp/publisher/internal/APIPublisherServiceComponent.java b/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/main/java/org/wso2/carbon/apimgt/webapp/publisher/internal/APIPublisherServiceComponent.java index 10a20d9a48f..2a67c78713d 100644 --- a/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/main/java/org/wso2/carbon/apimgt/webapp/publisher/internal/APIPublisherServiceComponent.java +++ b/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/main/java/org/wso2/carbon/apimgt/webapp/publisher/internal/APIPublisherServiceComponent.java @@ -59,7 +59,6 @@ public class APIPublisherServiceComponent { if (log.isDebugEnabled()) { log.debug("Initializing device management core bundle"); } - /* Registering declarative service instances exposed by DeviceManagementServiceComponent */ this.registerServices(componentContext); diff --git a/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/main/java/org/wso2/carbon/apimgt/webapp/publisher/lifecycle/listener/APIPublisherLifecycleListener.java b/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/main/java/org/wso2/carbon/apimgt/webapp/publisher/lifecycle/listener/APIPublisherLifecycleListener.java index a611a321ea3..0b4a3cff914 100644 --- a/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/main/java/org/wso2/carbon/apimgt/webapp/publisher/lifecycle/listener/APIPublisherLifecycleListener.java +++ b/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/main/java/org/wso2/carbon/apimgt/webapp/publisher/lifecycle/listener/APIPublisherLifecycleListener.java @@ -25,6 +25,7 @@ import org.apache.catalina.core.StandardContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.wso2.carbon.apimgt.api.model.*; +import org.wso2.carbon.apimgt.impl.APIConstants; import org.wso2.carbon.apimgt.webapp.publisher.*; import org.wso2.carbon.apimgt.webapp.publisher.config.APIResource; import org.wso2.carbon.apimgt.webapp.publisher.config.APIResourceConfiguration; @@ -51,7 +52,6 @@ public class APIPublisherLifecycleListener implements LifecycleListener { private static final String PARAM_MANAGED_API_TRANSPORTS = "managed-api-transports"; private static final String PARAM_MANAGED_API_IS_SECURED = "managed-api-isSecured"; private static final String PARAM_MANAGED_API_APPLICATION = "managed-api-application"; - private static final String PARAM_MANAGED_API_CONTEXT_TEMPLATE = "managed-api-context-template"; private static final String PARAM_SHARED_WITH_ALL_TENANTS = "isSharedWithAllTenants"; private static final String PARAM_PROVIDER_TENANT_DOMAIN = "providerTenantDomain"; private static final Log log = LogFactory.getLog(APIPublisherLifecycleListener.class); @@ -69,7 +69,7 @@ public class APIPublisherLifecycleListener implements LifecycleListener { AnnotationUtil annotationUtil = new AnnotationUtil(context); Set annotatedAPIClasses = annotationUtil. scanStandardContext(org.wso2.carbon.apimgt.annotations.api.API.class.getName()); - List apiDefinitions = annotationUtil.extractAPIInfo(annotatedAPIClasses); + List apiDefinitions = annotationUtil.extractAPIInfo(servletContext, annotatedAPIClasses); for (APIResourceConfiguration apiDefinition : apiDefinitions) { APIConfig apiConfig = this.buildApiConfig(servletContext, apiDefinition); @@ -156,14 +156,13 @@ public class APIPublisherLifecycleListener implements LifecycleListener { apiConfig.setTags(tags); } - String contextTemplate = servletContext.getInitParameter(PARAM_MANAGED_API_CONTEXT_TEMPLATE); - if (contextTemplate == null || contextTemplate.isEmpty()) { - if (log.isDebugEnabled()) { - log.debug("'managed-api-context-template' attribute is not configured. Therefore, using the default," + - " " + - "which is the original context template assigned to the web application"); - } - contextTemplate = servletContext.getContextPath(); + String tenantDomain = servletContext.getInitParameter(PARAM_PROVIDER_TENANT_DOMAIN); + tenantDomain = (tenantDomain != null && !tenantDomain.isEmpty()) ? tenantDomain : + MultitenantConstants.SUPER_TENANT_DOMAIN_NAME; + apiConfig.setTenantDomain(tenantDomain); + String contextTemplate = context + "/" + APIConstants.VERSION_PLACEHOLDER; + if (!tenantDomain.equals(MultitenantConstants.SUPER_TENANT_DOMAIN_NAME)) { + contextTemplate = context + "/t/" + tenantDomain + "/" + APIConstants.VERSION_PLACEHOLDER; } apiConfig.setContextTemplate(contextTemplate); @@ -172,7 +171,8 @@ public class APIPublisherLifecycleListener implements LifecycleListener { if (log.isDebugEnabled()) { log.debug("'managed-api-endpoint' attribute is not configured"); } - endpoint = APIPublisherUtil.getApiEndpointUrl(context); + String endpointContext = servletContext.getContextPath(); + endpoint = APIPublisherUtil.getApiEndpointUrl(endpointContext); } apiConfig.setEndpoint(endpoint); @@ -208,13 +208,10 @@ public class APIPublisherLifecycleListener implements LifecycleListener { apiConfig.setTransports(transports); String sharingValueParam = servletContext.getInitParameter(PARAM_SHARED_WITH_ALL_TENANTS); - boolean isSharedWithAllTenants = (sharingValueParam == null || (!sharingValueParam.isEmpty()) && Boolean.parseBoolean(sharingValueParam) ); + boolean isSharedWithAllTenants = (sharingValueParam == null || (!sharingValueParam.isEmpty()) && Boolean.parseBoolean( + sharingValueParam)); apiConfig.setSharedWithAllTenants(isSharedWithAllTenants); - String tenantDomain = servletContext.getInitParameter(PARAM_PROVIDER_TENANT_DOMAIN); - tenantDomain = (tenantDomain!= null && !tenantDomain.isEmpty()) ? tenantDomain : MultitenantConstants.SUPER_TENANT_DOMAIN_NAME; - apiConfig.setTenantDomain(tenantDomain); - Set uriTemplates = new LinkedHashSet(); for (APIResource apiResource : apidef.getResources()) { URITemplate template = new URITemplate(); diff --git a/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/main/java/org/wso2/carbon/apimgt/webapp/publisher/lifecycle/util/AnnotationUtil.java b/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/main/java/org/wso2/carbon/apimgt/webapp/publisher/lifecycle/util/AnnotationUtil.java index 31372e70c35..a26c2042f1b 100644 --- a/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/main/java/org/wso2/carbon/apimgt/webapp/publisher/lifecycle/util/AnnotationUtil.java +++ b/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/main/java/org/wso2/carbon/apimgt/webapp/publisher/lifecycle/util/AnnotationUtil.java @@ -92,7 +92,7 @@ public class AnnotationUtil { * @param entityClasses * @return */ - public List extractAPIInfo(Set entityClasses) + public List extractAPIInfo(final ServletContext servletContext, Set entityClasses) throws ClassNotFoundException { List apiResourceConfigs = new ArrayList(); @@ -111,7 +111,7 @@ public class AnnotationUtil { classLoader.loadClass(org.wso2.carbon.apimgt.annotations.api.API.class.getName()); Annotation apiAnno = clazz.getAnnotation(apiClazz); - List resourceList = null; + List resourceList; apiResourceConfig = new APIResourceConfiguration(); if (apiAnno != null) { @@ -139,21 +139,27 @@ public class AnnotationUtil { break; } } - - String rootContext = ""; + // All the apis should map to same root "/" + String rootContext = servletContext.getContextPath(); pathClazz = (Class) classLoader.loadClass(Path.class.getName()); pathClazzMethods = pathClazz.getMethods(); Annotation rootContectAnno = clazz.getAnnotation(pathClazz); + String subContext = ""; if (rootContectAnno != null) { - rootContext = invokeMethod(pathClazzMethods[0], rootContectAnno, STRING); + subContext = invokeMethod(pathClazzMethods[0], rootContectAnno, STRING); + if (subContext != null && !subContext.isEmpty()) { + rootContext = rootContext + "/" + subContext; + } else { + subContext = ""; + } if (log.isDebugEnabled()) { log.debug("API Root Context = " + rootContext); } } Method[] annotatedMethods = clazz.getDeclaredMethods(); - resourceList = getApiResources(rootContext, annotatedMethods); + resourceList = getApiResources(rootContext, subContext, annotatedMethods); apiResourceConfig.setResources(resourceList); } catch (Throwable throwable) { log.error("Error encountered while scanning for annotations", throwable); @@ -171,7 +177,7 @@ public class AnnotationUtil { return apiResourceConfigs; } - private List getApiResources(String rootContext, Method[] annotatedMethods) throws Throwable { + private List getApiResources(String resourceRootContext, String apiRootContext, Method[] annotatedMethods) throws Throwable { List resourceList; resourceList = new ArrayList(); for (Method method : annotatedMethods) { @@ -179,12 +185,13 @@ public class AnnotationUtil { if (methodContextAnno != null) { String subCtx = invokeMethod(pathClazzMethods[0], methodContextAnno, STRING); APIResource resource = new APIResource(); - resource.setUriTemplate(makeContextURLReady(subCtx)); + resource.setUriTemplate(makeContextURLReady(apiRootContext + subCtx)); String serverIP = System.getProperty(SERVER_HOST); String httpServerPort = System.getProperty(HTTP_PORT); - resource.setUri(PROTOCOL_HTTP + "://" + serverIP + ":" + httpServerPort + makeContextURLReady(rootContext) + makeContextURLReady(subCtx)); + resource.setUri(PROTOCOL_HTTP + "://" + serverIP + ":" + httpServerPort + makeContextURLReady( + resourceRootContext) + makeContextURLReady(subCtx)); resource.setAuthType(AUTH_TYPE); Annotation[] annotations = method.getDeclaredAnnotations(); diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/pom.xml b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/pom.xml index e0c6345ebb8..d5b807adb7b 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/pom.xml +++ b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/pom.xml @@ -80,10 +80,6 @@ org.wso2.carbon.analytics-common org.wso2.carbon.databridge.commons - - org.wso2.carbon.analytics - org.wso2.carbon.analytics.api - org.wso2.carbon.registry org.wso2.carbon.registry.indexing @@ -123,7 +119,6 @@ org.wso2.carbon.context;version="${carbon.kernel.version.range}", org.wso2.carbon.utils;version="${carbon.kernel.version.range}", org.wso2.carbon.databridge.*;version="${carbon.analytics.common.version.range}", - org.wso2.carbon.analytics.*;version="${carbon.analytics.version.range}", org.wso2.carbon.registry.core.*;resolution:=optional, org.wso2.carbon.registry.common.*;version="${carbon.registry.imp.pkg.version.range}", org.wso2.carbon.registry.indexing.*; version="${carbon.registry.imp.pkg.version.range}", diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/AnalyticsDataRecord.java b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/AnalyticsDataRecord.java deleted file mode 100644 index ac1f50f13a5..00000000000 --- a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/AnalyticsDataRecord.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (c) 2016, 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.device.mgt.analytics.data.publisher; - -import java.util.HashMap; -import java.util.Map; - -public class AnalyticsDataRecord { - private Map values; - private long timestamp; - - public AnalyticsDataRecord() { - values = new HashMap<>(); - } - - public AnalyticsDataRecord(Map values) { - this.values = values; - } - - public Map getValues() { - return this.values; - } - - public void setValue(String name, Object value) { - values.put(name, value); - } - - public Object getValue(String name) { - return this.values.get(name); - } - - public void setValues(Map values) { - this.values = values; - } - - public long getTimestamp() { - return this.timestamp; - } - - public void setTimestamp(long timestamp) { - this.timestamp = timestamp; - } -} diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/DeviceAnalyticsUtil.java b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/DataPublisherUtil.java similarity index 97% rename from components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/DeviceAnalyticsUtil.java rename to components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/DataPublisherUtil.java index c622369b18b..a13310ee942 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/DeviceAnalyticsUtil.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/DataPublisherUtil.java @@ -25,7 +25,7 @@ import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import java.io.File; -public class DeviceAnalyticsUtil { +public class DataPublisherUtil { public static Document convertToDocument(File file) throws DataPublisherConfigurationException { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/DeviceDataPublisher.java b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/DeviceDataPublisher.java index 2891904561e..bcf51ebdae8 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/DeviceDataPublisher.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/DeviceDataPublisher.java @@ -34,7 +34,7 @@ import org.wso2.carbon.databridge.commons.exception.TransportException; import org.wso2.carbon.device.mgt.analytics.data.publisher.config.AnalyticsConfiguration; import org.wso2.carbon.device.mgt.analytics.data.publisher.exception.DataPublisherAlreadyExistsException; import org.wso2.carbon.device.mgt.analytics.data.publisher.exception.DataPublisherConfigurationException; -import org.wso2.carbon.device.mgt.analytics.data.publisher.internal.DeviceAnalyticsDataHolder; +import org.wso2.carbon.device.mgt.analytics.data.publisher.internal.DataPublisherDataHolder; import org.wso2.carbon.registry.core.Registry; import org.wso2.carbon.registry.core.Resource; import org.wso2.carbon.registry.core.exceptions.RegistryException; @@ -71,7 +71,7 @@ public class DeviceDataPublisher { return deviceDataPublisher; } - private DeviceDataPublisher() { + public DeviceDataPublisher() { dataPublisherMap = new ConcurrentHashMap<>(); } @@ -196,7 +196,7 @@ public class DeviceDataPublisher { try { PrivilegedCarbonContext.startTenantFlow(); PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantId(tenantId, true); - RegistryService registryService = DeviceAnalyticsDataHolder.getInstance().getRegistryService(); + RegistryService registryService = DataPublisherDataHolder.getInstance().getRegistryService(); if (registryService != null) { Registry registry = registryService.getConfigSystemRegistry(tenantId); this.loadTenantRegistry(tenantId); @@ -213,8 +213,8 @@ public class DeviceDataPublisher { } private void loadTenantRegistry(int tenantId) throws RegistryException { - TenantRegistryLoader tenantRegistryLoader = DeviceAnalyticsDataHolder.getInstance().getTenantRegistryLoader(); - DeviceAnalyticsDataHolder.getInstance().getIndexLoaderService().loadTenantIndex(tenantId); + TenantRegistryLoader tenantRegistryLoader = DataPublisherDataHolder.getInstance().getTenantRegistryLoader(); + DataPublisherDataHolder.getInstance().getIndexLoaderService().loadTenantIndex(tenantId); tenantRegistryLoader.loadTenantRegistry(tenantId); } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/config/AnalyticsConfiguration.java b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/config/AnalyticsConfiguration.java index c08dfc420ff..8c08d5eccf4 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/config/AnalyticsConfiguration.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/config/AnalyticsConfiguration.java @@ -21,7 +21,7 @@ package org.wso2.carbon.device.mgt.analytics.data.publisher.config; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.w3c.dom.Document; -import org.wso2.carbon.device.mgt.analytics.data.publisher.DeviceAnalyticsUtil; +import org.wso2.carbon.device.mgt.analytics.data.publisher.DataPublisherUtil; import org.wso2.carbon.device.mgt.analytics.data.publisher.exception.DataPublisherConfigurationException; import org.wso2.carbon.utils.CarbonUtils; @@ -100,7 +100,7 @@ public class AnalyticsConfiguration { public static void init() throws DataPublisherConfigurationException { try { File authConfig = new File(AnalyticsConfiguration.DEVICE_ANALYTICS_CONFIG_PATH); - Document doc = DeviceAnalyticsUtil.convertToDocument(authConfig); + Document doc = DataPublisherUtil.convertToDocument(authConfig); /* Un-marshaling device analytics configuration */ JAXBContext ctx = JAXBContext.newInstance(AnalyticsConfiguration.class); diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/exception/DeviceManagementAnalyticsException.java b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/exception/DeviceManagementAnalyticsException.java deleted file mode 100644 index 021ddc9b1e5..00000000000 --- a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/exception/DeviceManagementAnalyticsException.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (c) 2016, 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.device.mgt.analytics.data.publisher.exception; - -public class DeviceManagementAnalyticsException extends Exception { - public DeviceManagementAnalyticsException() { - super(); - } - - public DeviceManagementAnalyticsException(String message) { - super(message); - } - - public DeviceManagementAnalyticsException(String message, Throwable cause) { - super(message, cause); - } - - public DeviceManagementAnalyticsException(Throwable cause) { - super(cause); - } - - protected DeviceManagementAnalyticsException(String message, Throwable cause, - boolean enableSuppression, - boolean writableStackTrace) { - super(message, cause, enableSuppression, writableStackTrace); - } -} diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/internal/DeviceAnalyticsDataHolder.java b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/internal/DataPublisherDataHolder.java similarity index 74% rename from components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/internal/DeviceAnalyticsDataHolder.java rename to components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/internal/DataPublisherDataHolder.java index 9de111fb9c2..6f132b3fb82 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/internal/DeviceAnalyticsDataHolder.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/internal/DataPublisherDataHolder.java @@ -18,36 +18,24 @@ */ package org.wso2.carbon.device.mgt.analytics.data.publisher.internal; -import org.wso2.carbon.analytics.api.AnalyticsDataAPI; import org.wso2.carbon.registry.core.service.RegistryService; import org.wso2.carbon.registry.core.service.TenantRegistryLoader; import org.wso2.carbon.registry.indexing.service.TenantIndexingLoader; -public class DeviceAnalyticsDataHolder { - private static DeviceAnalyticsDataHolder thisInstance = new DeviceAnalyticsDataHolder(); - /** - * AnalyticsDataAPI is service used to retrieve data from DAS. - */ - private AnalyticsDataAPI analyticsDataAPI; +public class DataPublisherDataHolder { + private static DataPublisherDataHolder thisInstance = new DataPublisherDataHolder(); + private TenantRegistryLoader tenantRegistryLoader; private TenantIndexingLoader indexLoader; private RegistryService registryService; - private DeviceAnalyticsDataHolder() { + private DataPublisherDataHolder() { } - public static DeviceAnalyticsDataHolder getInstance() { + public static DataPublisherDataHolder getInstance() { return thisInstance; } - public AnalyticsDataAPI getAnalyticsDataAPI() { - return analyticsDataAPI; - } - - public void setAnalyticsDataAPI(AnalyticsDataAPI analyticsDataAPI) { - this.analyticsDataAPI = analyticsDataAPI; - } - public void setTenantRegistryLoader(TenantRegistryLoader tenantRegistryLoader){ this.tenantRegistryLoader = tenantRegistryLoader; } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/internal/DeviceAnalyticsServiceComponent.java b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/internal/DataPublisherServiceComponent.java similarity index 67% rename from components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/internal/DeviceAnalyticsServiceComponent.java rename to components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/internal/DataPublisherServiceComponent.java index 83f71348ac8..2314b738061 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/internal/DeviceAnalyticsServiceComponent.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/internal/DataPublisherServiceComponent.java @@ -23,23 +23,16 @@ import org.apache.commons.logging.LogFactory; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceRegistration; import org.osgi.service.component.ComponentContext; -import org.wso2.carbon.analytics.api.AnalyticsDataAPI; import org.wso2.carbon.device.mgt.analytics.data.publisher.config.AnalyticsConfiguration; -import org.wso2.carbon.device.mgt.analytics.data.publisher.service.DeviceAnalyticsService; -import org.wso2.carbon.device.mgt.analytics.data.publisher.service.DeviceAnalyticsServiceImpl; +import org.wso2.carbon.device.mgt.analytics.data.publisher.service.EventsPublisherService; +import org.wso2.carbon.device.mgt.analytics.data.publisher.service.EventsPublisherServiceImpl; import org.wso2.carbon.registry.core.service.RegistryService; import org.wso2.carbon.registry.core.service.TenantRegistryLoader; import org.wso2.carbon.registry.indexing.service.TenantIndexingLoader; /** - * @scr.component name="org.wso2.carbon.device.mgt.analytics.internal.DeviceAnalyticsServiceComponent" + * @scr.component name="org.wso2.carbon.device.mgt.analytics.data.publisher.internal.DataPublisherServiceComponent" * immediate="true" - * @scr.reference name="device.analytics.api" - * interface="org.wso2.carbon.analytics.api.AnalyticsDataAPI" - * cardinality="1..1" - * policy="dynamic" - * bind="setAnalyticsDataAPI" - * unbind="unsetAnalyticsDataAPI" * @scr.reference name="registry.service" * interface="org.wso2.carbon.registry.core.service.RegistryService" * cardinality="1..1" @@ -58,10 +51,10 @@ import org.wso2.carbon.registry.indexing.service.TenantIndexingLoader; * bind="setIndexLoader" * unbind="unsetIndexLoader" */ -public class DeviceAnalyticsServiceComponent { +public class DataPublisherServiceComponent { private ServiceRegistration analyticsServiceRef; - private static Log log = LogFactory.getLog(DeviceAnalyticsServiceComponent.class); + private static Log log = LogFactory.getLog(DataPublisherServiceComponent.class); protected void activate(ComponentContext componentCtx) { try { @@ -72,7 +65,7 @@ public class DeviceAnalyticsServiceComponent { BundleContext bundleCtx = componentCtx.getBundleContext(); this.analyticsServiceRef = - bundleCtx.registerService(DeviceAnalyticsService.class, new DeviceAnalyticsServiceImpl(), null); + bundleCtx.registerService(EventsPublisherService.class, new EventsPublisherServiceImpl(), null); if (log.isDebugEnabled()) { log.debug("Device management analytics bundle has been successfully initialized"); @@ -94,58 +87,34 @@ public class DeviceAnalyticsServiceComponent { } } - /** - * Sets AnalyticsDataAPI Service. - * - * @param analyticsDataAPI An instance of AnalyticsDataAPI - */ - protected void setAnalyticsDataAPI(AnalyticsDataAPI analyticsDataAPI) { - if (log.isDebugEnabled()) { - log.debug("Setting AnalyticsDataAPI Service"); - } - DeviceAnalyticsDataHolder.getInstance().setAnalyticsDataAPI(analyticsDataAPI); - } - - /** - * Un sets AnalyticsDataAPI Service. - * - * @param analyticsDataAPI An instance of AnalyticsDataAPI - */ - protected void unsetAnalyticsDataAPI(AnalyticsDataAPI analyticsDataAPI) { - if (log.isDebugEnabled()) { - log.debug("Un-Setting AnalyticsDataAPI Service"); - } - DeviceAnalyticsDataHolder.getInstance().setAnalyticsDataAPI(null); - } - protected void setRegistryService(RegistryService registryService) { if (registryService != null && log.isDebugEnabled()) { log.debug("Registry service initialized"); } - DeviceAnalyticsDataHolder.getInstance().setRegistryService(registryService); + DataPublisherDataHolder.getInstance().setRegistryService(registryService); } protected void unsetRegistryService(RegistryService registryService) { - DeviceAnalyticsDataHolder.getInstance().setRegistryService(null); + DataPublisherDataHolder.getInstance().setRegistryService(null); } protected void setTenantRegistryLoader(TenantRegistryLoader tenantRegistryLoader) { - DeviceAnalyticsDataHolder.getInstance().setTenantRegistryLoader(tenantRegistryLoader); + DataPublisherDataHolder.getInstance().setTenantRegistryLoader(tenantRegistryLoader); } protected void unsetTenantRegistryLoader(TenantRegistryLoader tenantRegistryLoader) { - DeviceAnalyticsDataHolder.getInstance().setTenantRegistryLoader(null); + DataPublisherDataHolder.getInstance().setTenantRegistryLoader(null); } protected void setIndexLoader(TenantIndexingLoader indexLoader) { if (indexLoader != null && log.isDebugEnabled()) { log.debug("IndexLoader service initialized"); } - DeviceAnalyticsDataHolder.getInstance().setIndexLoaderService(indexLoader); + DataPublisherDataHolder.getInstance().setIndexLoaderService(indexLoader); } protected void unsetIndexLoader(TenantIndexingLoader indexLoader) { - DeviceAnalyticsDataHolder.getInstance().setIndexLoaderService(null); + DataPublisherDataHolder.getInstance().setIndexLoaderService(null); } } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/service/DeviceAnalyticsServiceImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/service/DeviceAnalyticsServiceImpl.java deleted file mode 100644 index c0f2ab6ad52..00000000000 --- a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/service/DeviceAnalyticsServiceImpl.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright (c) 2016, 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.device.mgt.analytics.data.publisher.service; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.analytics.api.AnalyticsDataAPI; -import org.wso2.carbon.analytics.dataservice.commons.AnalyticsDataResponse; -import org.wso2.carbon.analytics.dataservice.commons.AnalyticsDrillDownRequest; -import org.wso2.carbon.analytics.dataservice.commons.SearchResultEntry; -import org.wso2.carbon.analytics.dataservice.core.AnalyticsDataServiceUtils; -import org.wso2.carbon.analytics.datasource.commons.Record; -import org.wso2.carbon.analytics.datasource.commons.exception.AnalyticsException; -import org.wso2.carbon.context.CarbonContext; -import org.wso2.carbon.databridge.agent.DataPublisher; -import org.wso2.carbon.databridge.commons.utils.DataBridgeCommonsUtils; -import org.wso2.carbon.device.mgt.analytics.data.publisher.AnalyticsDataRecord; -import org.wso2.carbon.device.mgt.analytics.data.publisher.DeviceDataPublisher; -import org.wso2.carbon.device.mgt.analytics.data.publisher.exception.DataPublisherConfigurationException; -import org.wso2.carbon.device.mgt.analytics.data.publisher.exception.DeviceManagementAnalyticsException; -import org.wso2.carbon.device.mgt.analytics.data.publisher.internal.DeviceAnalyticsDataHolder; - -import java.util.ArrayList; -import java.util.List; - -/** - * This is the implementation of Osgi Service which can be used to publish and retireved - * event/records. - */ -public class DeviceAnalyticsServiceImpl implements DeviceAnalyticsService { - private static Log log = LogFactory.getLog(DeviceAnalyticsServiceImpl.class); - - /** - * @param streamName is the name of the stream that the data needs to pushed - * @param version is the version of the stream - * @param metaDataArray - meta data that needs to pushed - * @param correlationDataArray - correlation data that needs to be pushed - * @param payloadDataArray - payload data that needs to be pushed - * @return - * @throws DataPublisherConfigurationException - */ - @Override - public boolean publishEvent(String streamName, String version, Object[] metaDataArray, - Object[] correlationDataArray, - Object[] payloadDataArray) throws DataPublisherConfigurationException { - DataPublisher dataPublisher = DeviceDataPublisher.getInstance().getDataPublisher(); - if (dataPublisher != null) { - String streamId = DataBridgeCommonsUtils.generateStreamId(streamName, version); - return dataPublisher.tryPublish(streamId, System.currentTimeMillis(), metaDataArray, correlationDataArray, - payloadDataArray); - } else { - return false; - } - } - - /** - * @param tableName is the name of the table that events need to be retrieved - * @param query is query to be executed. - * @return - * @throws AnalyticsException - */ - @Override - public List getAllEventsForDevice(String tableName, String query) throws - DeviceManagementAnalyticsException { - try { - int tenantId = CarbonContext.getThreadLocalCarbonContext().getTenantId(); - AnalyticsDataAPI analyticsDataAPI = DeviceAnalyticsDataHolder.getInstance().getAnalyticsDataAPI(); - int eventCount = analyticsDataAPI.searchCount(tenantId, tableName, query); - if (eventCount == 0) { - return new ArrayList<>(); - } - AnalyticsDrillDownRequest drillDownRequest = new AnalyticsDrillDownRequest(); - drillDownRequest.setQuery(query); - drillDownRequest.setTableName(tableName); - drillDownRequest.setRecordCount(eventCount); - List resultEntries = analyticsDataAPI.drillDownSearch(tenantId, drillDownRequest); - List recordIds = getRecordIds(resultEntries); - AnalyticsDataResponse response = analyticsDataAPI.get(tenantId, tableName, 1, null, recordIds); - List records = AnalyticsDataServiceUtils.listRecords(analyticsDataAPI, response); - return getAnalyticsDataRecords(records); - } catch (AnalyticsException e) { - throw new DeviceManagementAnalyticsException( - "Failed fetch data for table " + tableName + "with the query " + query); - } - } - - private List getRecordIds(List searchResults) { - List ids = new ArrayList<>(); - for (SearchResultEntry searchResult : searchResults) { - ids.add(searchResult.getId()); - } - return ids; - } - - private List getAnalyticsDataRecords(List records) { - List analyticsDataRecords = new ArrayList<>(); - for (Record record : records) { - AnalyticsDataRecord analyticsDataRecord = new AnalyticsDataRecord(record.getValues()); - analyticsDataRecords.add(analyticsDataRecord); - } - return analyticsDataRecords; - } - -} \ No newline at end of file diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/service/DeviceAnalyticsService.java b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/service/EventsPublisherService.java similarity index 69% rename from components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/service/DeviceAnalyticsService.java rename to components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/service/EventsPublisherService.java index 4b918d03850..7be1ac574b8 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/service/DeviceAnalyticsService.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/service/EventsPublisherService.java @@ -18,16 +18,12 @@ */ package org.wso2.carbon.device.mgt.analytics.data.publisher.service; -import org.wso2.carbon.device.mgt.analytics.data.publisher.AnalyticsDataRecord; import org.wso2.carbon.device.mgt.analytics.data.publisher.exception.DataPublisherConfigurationException; -import org.wso2.carbon.device.mgt.analytics.data.publisher.exception.DeviceManagementAnalyticsException; - -import java.util.List; /** * This service can be used to publish and retreive data from the Analytics Server. */ -public interface DeviceAnalyticsService { +public interface EventsPublisherService { /** * This is used to publish an event to DAS. @@ -42,14 +38,4 @@ public interface DeviceAnalyticsService { boolean publishEvent(String streamName, String version, Object[] metaDataArray, Object[] correlationDataArray, Object[] payloadDataArray) throws DataPublisherConfigurationException; - /** - * This service can be used to retrieve all the event for the query. - * @param tableName is the name of the table that events need to be retrieved - * @param query is query to be executed. - * @return the record list - * @throws DeviceManagementAnalyticsException - */ - List getAllEventsForDevice(String tableName, - String query) throws DeviceManagementAnalyticsException; - } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/service/EventsPublisherServiceImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/service/EventsPublisherServiceImpl.java new file mode 100644 index 00000000000..63e5bee1a60 --- /dev/null +++ b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/service/EventsPublisherServiceImpl.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2016, 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.device.mgt.analytics.data.publisher.service; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.wso2.carbon.databridge.agent.DataPublisher; +import org.wso2.carbon.databridge.commons.utils.DataBridgeCommonsUtils; +import org.wso2.carbon.device.mgt.analytics.data.publisher.DeviceDataPublisher; +import org.wso2.carbon.device.mgt.analytics.data.publisher.exception.DataPublisherConfigurationException; + +/** + * This is the implementation of Osgi Service which can be used to publish and retireved + * event/records. + */ +public class EventsPublisherServiceImpl implements EventsPublisherService { + private static Log log = LogFactory.getLog(EventsPublisherServiceImpl.class); + + /** + * @param streamName is the name of the stream that the data needs to pushed + * @param version is the version of the stream + * @param metaDataArray - meta data that needs to pushed + * @param correlationDataArray - correlation data that needs to be pushed + * @param payloadDataArray - payload data that needs to be pushed + * @return + * @throws DataPublisherConfigurationException + */ + @Override + public boolean publishEvent(String streamName, String version, Object[] metaDataArray, + Object[] correlationDataArray, + Object[] payloadDataArray) throws DataPublisherConfigurationException { + DataPublisher dataPublisher = DeviceDataPublisher.getInstance().getDataPublisher(); + if (dataPublisher != null) { + String streamId = DataBridgeCommonsUtils.generateStreamId(streamName, version); + return dataPublisher.tryPublish(streamId, System.currentTimeMillis(), metaDataArray, correlationDataArray, + payloadDataArray); + } else { + return false; + } + } + + + +} \ No newline at end of file diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/pom.xml b/components/device-mgt/org.wso2.carbon.device.mgt.api/pom.xml index a187c985602..f6c02925293 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/pom.xml +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/pom.xml @@ -50,7 +50,7 @@ 2.2 WEB-INF/lib/*cxf*.jar - mdm-admin + devicemgt_admin @@ -77,7 +77,7 @@ - + diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/Certificate.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/Certificate.java index e7ba2fd3e79..e1714c2c298 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/Certificate.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/Certificate.java @@ -18,7 +18,6 @@ package org.wso2.carbon.mdm.api; -import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.wso2.carbon.certificate.mgt.core.dao.CertificateManagementDAOException; @@ -29,14 +28,19 @@ import org.wso2.carbon.context.PrivilegedCarbonContext; import org.wso2.carbon.device.mgt.common.PaginationRequest; import org.wso2.carbon.device.mgt.common.PaginationResult; import org.wso2.carbon.mdm.api.common.MDMAPIException; -import org.wso2.carbon.mdm.api.util.MDMAPIUtils; -import org.wso2.carbon.mdm.api.util.ResponsePayload; +import org.wso2.carbon.mdm.api.util.DeviceMgtAPIUtils; import org.wso2.carbon.mdm.beans.EnrollmentCertificate; -import org.wso2.carbon.mdm.exception.*; -import org.wso2.carbon.mdm.exception.BadRequestException; -import org.wso2.carbon.mdm.util.MDMUtil; +import org.wso2.carbon.mdm.exception.Message; -import javax.ws.rs.*; +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.HeaderParam; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import java.util.ArrayList; @@ -45,7 +49,8 @@ import java.util.List; /** * All the certificate related tasks such as saving certificates, can be done through this endpoint. */ -@Produces({ "application/json", "application/xml" }) +@SuppressWarnings("NonJaxWsWebServices") +@Produces({"application/json", "application/xml"}) @Consumes({ "application/json", "application/xml" }) public class Certificate { @@ -57,18 +62,16 @@ public class Certificate { * @param enrollmentCertificates List of all the certificates which includes the tenant id, certificate as * a pem and a serial number. * @return Status of the data persist operation. - * @throws MDMAPIException */ @POST @Path("saveCertificate") public Response saveCertificate(@HeaderParam("Accept") String acceptHeader, - EnrollmentCertificate[] enrollmentCertificates) throws MDMAPIException { - MediaType responseMediaType = MDMAPIUtils.getResponseMediaType(acceptHeader); + EnrollmentCertificate[] enrollmentCertificates) { + MediaType responseMediaType = DeviceMgtAPIUtils.getResponseMediaType(acceptHeader); CertificateManagementService certificateService; - List certificates = new ArrayList(); + List certificates = new ArrayList<>(); org.wso2.carbon.certificate.mgt.core.bean.Certificate certificate; - certificateService = MDMAPIUtils.getCertificateManagementService(); + certificateService = DeviceMgtAPIUtils.getCertificateManagementService(); try { for (EnrollmentCertificate enrollmentCertificate : enrollmentCertificates) { certificate = new org.wso2.carbon.certificate.mgt.core.bean.Certificate(); @@ -83,7 +86,7 @@ public class Certificate { } catch (KeystoreException e) { String msg = "Error occurred while converting PEM file to X509Certificate."; log.error(msg, e); - throw new MDMAPIException(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).type(responseMediaType).build(); } } @@ -92,22 +95,21 @@ public class Certificate { * * @param serialNumber serial of the certificate needed. * @return certificate response. - * @throws MDMAPIException */ @GET @Path("{serialNumber}") public Response getCertificate(@HeaderParam("Accept") String acceptHeader, - @PathParam("serialNumber") String serialNumber) throws MDMAPIException { - MediaType responseMediaType = MDMAPIUtils.getResponseMediaType(acceptHeader); + @PathParam("serialNumber") String serialNumber) { + MediaType responseMediaType = DeviceMgtAPIUtils.getResponseMediaType(acceptHeader); Message message = new Message(); if (serialNumber == null || serialNumber.isEmpty()) { message.setErrorMessage("Invalid serial number"); message.setDiscription("Serial number is missing or invalid."); - throw new BadRequestException(message, responseMediaType); + return Response.status(Response.Status.BAD_REQUEST).entity(message).type(responseMediaType).build(); } - CertificateManagementService certificateService = MDMAPIUtils.getCertificateManagementService(); + CertificateManagementService certificateService = DeviceMgtAPIUtils.getCertificateManagementService(); CertificateResponse certificateResponse; try { certificateResponse = certificateService.getCertificateBySerial(serialNumber); @@ -118,7 +120,7 @@ public class Certificate { } catch (KeystoreException e) { String msg = "Error occurred while converting PEM file to X509Certificate"; log.error(msg, e); - return Response.serverError().build(); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).type(responseMediaType).build(); } } @@ -136,20 +138,20 @@ public class Certificate { @QueryParam("start") int startIndex, @QueryParam("length") int length) throws MDMAPIException { - MediaType responseMediaType = MDMAPIUtils.getResponseMediaType(acceptHeader); + MediaType responseMediaType = DeviceMgtAPIUtils.getResponseMediaType(acceptHeader); Message message = new Message(); if (startIndex < 0) { message.setErrorMessage("Invalid start index."); message.setDiscription("Start index cannot be less that 0."); - throw new BadRequestException(message, responseMediaType); + return Response.status(Response.Status.BAD_REQUEST).entity(message).type(responseMediaType).build(); } else if (length <= 0) { message.setErrorMessage("Invalid length value."); message.setDiscription("Length should be a positive integer."); - throw new BadRequestException(message, responseMediaType); + return Response.status(Response.Status.BAD_REQUEST).entity(message).type(responseMediaType).build(); } - CertificateManagementService certificateService = MDMAPIUtils.getCertificateManagementService(); + CertificateManagementService certificateService = DeviceMgtAPIUtils.getCertificateManagementService(); PaginationRequest paginationRequest = new PaginationRequest(startIndex, length); try { PaginationResult certificates = certificateService.getAllCertificates(paginationRequest); @@ -157,7 +159,7 @@ public class Certificate { } catch (CertificateManagementDAOException e) { String msg = "Error occurred while fetching all certificates."; log.error(msg, e); - throw new MDMAPIException(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).type(responseMediaType).build(); } } @@ -165,16 +167,16 @@ public class Certificate { @Path("{serialNumber}") public Response removeCertificate(@HeaderParam("Accept") String acceptHeader, @PathParam("serialNumber") String serialNumber) throws MDMAPIException { - MediaType responseMediaType = MDMAPIUtils.getResponseMediaType(acceptHeader); + MediaType responseMediaType = DeviceMgtAPIUtils.getResponseMediaType(acceptHeader); Message message = new Message(); if (serialNumber == null || serialNumber.isEmpty()) { message.setErrorMessage("Invalid serial number"); message.setDiscription("Serial number is missing or invalid."); - throw new BadRequestException(message, responseMediaType); + return Response.status(Response.Status.BAD_REQUEST).entity(message).type(responseMediaType).build(); } - CertificateManagementService certificateService = MDMAPIUtils.getCertificateManagementService(); + CertificateManagementService certificateService = DeviceMgtAPIUtils.getCertificateManagementService(); boolean deleted; try { deleted = certificateService.removeCertificate(serialNumber); @@ -186,7 +188,7 @@ public class Certificate { } catch (CertificateManagementDAOException e) { String msg = "Error occurred while converting PEM file to X509Certificate"; log.error(msg, e); - return Response.serverError().build(); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).type(responseMediaType).build(); } } } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/Configuration.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/Configuration.java index eb8a5e13885..ac305b20084 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/Configuration.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/Configuration.java @@ -24,14 +24,16 @@ import org.apache.commons.logging.LogFactory; import org.wso2.carbon.device.mgt.common.configuration.mgt.ConfigurationEntry; import org.wso2.carbon.device.mgt.common.configuration.mgt.ConfigurationManagementException; import org.wso2.carbon.device.mgt.common.configuration.mgt.TenantConfiguration; -import org.wso2.carbon.mdm.api.common.MDMAPIException; -import org.wso2.carbon.mdm.api.util.MDMAPIUtils; +import org.wso2.carbon.mdm.api.util.DeviceMgtAPIUtils; import org.wso2.carbon.mdm.api.util.MDMAppConstants; import org.wso2.carbon.mdm.api.util.ResponsePayload; import org.wso2.carbon.policy.mgt.core.util.PolicyManagerUtil; -import javax.jws.WebService; -import javax.ws.rs.*; +import javax.ws.rs.Consumes; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.PUT; +import javax.ws.rs.Produces; import javax.ws.rs.core.Response; import java.util.ArrayList; import java.util.List; @@ -40,74 +42,72 @@ import java.util.List; * General Tenant Configuration REST-API implementation. * All end points support JSON, XMl with content negotiation. */ -@WebService -@Produces({ "application/json", "application/xml" }) + +@SuppressWarnings("NonJaxWsWebServices") +@Produces({"application/json", "application/xml"}) @Consumes({ "application/json", "application/xml" }) public class Configuration { private static Log log = LogFactory.getLog(Configuration.class); @POST - public ResponsePayload saveTenantConfiguration(TenantConfiguration configuration) - throws MDMAPIException { - ResponsePayload responseMsg = new ResponsePayload(); - try { - MDMAPIUtils.getTenantConfigurationManagementService().saveConfiguration(configuration, - MDMAppConstants.RegistryConstants.GENERAL_CONFIG_RESOURCE_PATH); + public Response saveTenantConfiguration(TenantConfiguration configuration) { + ResponsePayload responseMsg = new ResponsePayload(); + try { + DeviceMgtAPIUtils.getTenantConfigurationManagementService().saveConfiguration(configuration, + MDMAppConstants.RegistryConstants.GENERAL_CONFIG_RESOURCE_PATH); //Schedule the task service - MDMAPIUtils.scheduleTaskService(MDMAPIUtils.getNotifierFrequency(configuration)); - Response.status(HttpStatus.SC_CREATED); - responseMsg.setMessageFromServer("Tenant configuration saved successfully."); + DeviceMgtAPIUtils.scheduleTaskService(DeviceMgtAPIUtils.getNotifierFrequency(configuration)); + responseMsg.setMessageFromServer("Tenant configuration saved successfully."); responseMsg.setStatusCode(HttpStatus.SC_CREATED); - return responseMsg; - } catch (ConfigurationManagementException e) { + return Response.status(Response.Status.CREATED).entity(responseMsg).build(); + } catch (ConfigurationManagementException e) { String msg = "Error occurred while saving the tenant configuration."; log.error(msg, e); - throw new MDMAPIException(msg, e); - } - } + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + } @GET - public TenantConfiguration getConfiguration() throws MDMAPIException { - String msg; - try { - TenantConfiguration tenantConfiguration = MDMAPIUtils.getTenantConfigurationManagementService(). - getConfiguration(MDMAppConstants.RegistryConstants.GENERAL_CONFIG_RESOURCE_PATH); + public Response getConfiguration() { + String msg; + try { + TenantConfiguration tenantConfiguration = DeviceMgtAPIUtils.getTenantConfigurationManagementService(). + getConfiguration(MDMAppConstants.RegistryConstants.GENERAL_CONFIG_RESOURCE_PATH); ConfigurationEntry configurationEntry = new ConfigurationEntry(); configurationEntry.setContentType("text"); configurationEntry.setName("notifierFrequency"); configurationEntry.setValue(PolicyManagerUtil.getMonitoringFequency()); List configList = tenantConfiguration.getConfiguration(); if (configList == null) { - configList = new ArrayList(); - } - configList.add(configurationEntry); - tenantConfiguration.setConfiguration(configList); - return tenantConfiguration; - } catch (ConfigurationManagementException e) { - msg = "Error occurred while retrieving the tenant configuration."; - log.error(msg, e); - throw new MDMAPIException(msg, e); - } - } + configList = new ArrayList<>(); + } + configList.add(configurationEntry); + tenantConfiguration.setConfiguration(configList); + return Response.status(Response.Status.OK).entity(tenantConfiguration).build(); + } catch (ConfigurationManagementException e) { + msg = "Error occurred while retrieving the tenant configuration."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + } @PUT - public ResponsePayload updateConfiguration(TenantConfiguration configuration) throws MDMAPIException { - ResponsePayload responseMsg = new ResponsePayload(); - try { - MDMAPIUtils.getTenantConfigurationManagementService().saveConfiguration(configuration, - MDMAppConstants.RegistryConstants.GENERAL_CONFIG_RESOURCE_PATH); + public Response updateConfiguration(TenantConfiguration configuration) { + ResponsePayload responseMsg = new ResponsePayload(); + try { + DeviceMgtAPIUtils.getTenantConfigurationManagementService().saveConfiguration(configuration, + MDMAppConstants.RegistryConstants.GENERAL_CONFIG_RESOURCE_PATH); //Schedule the task service - MDMAPIUtils.scheduleTaskService(MDMAPIUtils.getNotifierFrequency(configuration)); - Response.status(HttpStatus.SC_CREATED); - responseMsg.setMessageFromServer("Tenant configuration updated successfully."); + DeviceMgtAPIUtils.scheduleTaskService(DeviceMgtAPIUtils.getNotifierFrequency(configuration)); + responseMsg.setMessageFromServer("Tenant configuration updated successfully."); responseMsg.setStatusCode(HttpStatus.SC_CREATED); - return responseMsg; - } catch (ConfigurationManagementException e) { + return Response.status(Response.Status.CREATED).entity(responseMsg).build(); + } catch (ConfigurationManagementException e) { String msg = "Error occurred while updating the tenant configuration."; log.error(msg, e); - throw new MDMAPIException(msg, e); - } - } + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + } } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/MobileDevice.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/Device.java similarity index 51% rename from components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/MobileDevice.java rename to components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/Device.java index f377817473c..487c93ada52 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/MobileDevice.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/Device.java @@ -21,14 +21,20 @@ package org.wso2.carbon.mdm.api; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.device.mgt.common.*; +import org.wso2.carbon.device.mgt.common.DeviceIdentifier; +import org.wso2.carbon.device.mgt.common.DeviceManagementException; +import org.wso2.carbon.device.mgt.common.EnrolmentInfo; +import org.wso2.carbon.device.mgt.common.PaginationRequest; import org.wso2.carbon.device.mgt.core.dto.DeviceType; import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService; -import org.wso2.carbon.mdm.api.common.MDMAPIException; -import org.wso2.carbon.mdm.api.util.MDMAPIUtils; +import org.wso2.carbon.mdm.api.util.DeviceMgtAPIUtils; import org.wso2.carbon.mdm.api.util.ResponsePayload; -import javax.ws.rs.*; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import java.util.List; @@ -36,25 +42,24 @@ import java.util.List; /** * Device related operations */ -public class MobileDevice { - private static Log log = LogFactory.getLog(MobileDevice.class); +@SuppressWarnings("NonJaxWsWebServices") +public class Device { + private static Log log = LogFactory.getLog(Device.class); /** * Get all devices. We have to use accept all the necessary query parameters sent by datatable. * Hence had to put lot of query params here. * * @return Device List - * @throws MDMAPIException */ @GET - public Object getAllDevices(@QueryParam("type") String type, @QueryParam("user") String user, - @QueryParam("role") String role, @QueryParam("status") EnrolmentInfo.Status status, - @QueryParam("start") int startIdx, @QueryParam("length") int length, - @QueryParam("device-name") String deviceName, - @QueryParam("ownership") EnrolmentInfo.OwnerShip ownership - ) throws MDMAPIException { + public Response getAllDevices(@QueryParam("type") String type, @QueryParam("user") String user, + @QueryParam("role") String role, @QueryParam("status") EnrolmentInfo.Status status, + @QueryParam("start") int startIdx, @QueryParam("length") int length, + @QueryParam("device-name") String deviceName, + @QueryParam("ownership") EnrolmentInfo.OwnerShip ownership) { try { - DeviceManagementProviderService service = MDMAPIUtils.getDeviceManagementService(); + DeviceManagementProviderService service = DeviceMgtAPIUtils.getDeviceManagementService(); //Length > 0 means this is a pagination request. if (length > 0) { PaginationRequest paginationRequest = new PaginationRequest(startIdx, length); @@ -67,10 +72,10 @@ public class MobileDevice { paginationRequest.setStatus(status.toString()); } paginationRequest.setDeviceType(type); - return service.getAllDevices(paginationRequest); + return Response.status(Response.Status.OK).entity(service.getAllDevices(paginationRequest)).build(); } - List allDevices = null; + List allDevices; if ((type != null) && !type.isEmpty()) { allDevices = service.getAllDevices(type); } else if ((user != null) && !user.isEmpty()) { @@ -84,11 +89,11 @@ public class MobileDevice { } else { allDevices = service.getAllDevices(); } - return allDevices; + return Response.status(Response.Status.OK).entity(allDevices).build(); } catch (DeviceManagementException e) { String msg = "Error occurred while fetching the device list."; log.error(msg, e); - throw new MDMAPIException(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } } @@ -96,60 +101,75 @@ public class MobileDevice { * Fetch device details for a given device type and device Id. * * @return Device wrapped inside Response - * @throws MDMAPIException */ @GET @Path("view") @Produces({MediaType.APPLICATION_JSON}) public Response getDevice(@QueryParam("type") String type, - @QueryParam("id") String id) throws MDMAPIException { - DeviceIdentifier deviceIdentifier = MDMAPIUtils.instantiateDeviceIdentifier(type, id); - DeviceManagementProviderService deviceManagementProviderService = MDMAPIUtils.getDeviceManagementService(); - Device device; + @QueryParam("id") String id) { + DeviceIdentifier deviceIdentifier = DeviceMgtAPIUtils.instantiateDeviceIdentifier(type, id); + DeviceManagementProviderService deviceManagementProviderService = DeviceMgtAPIUtils.getDeviceManagementService(); + org.wso2.carbon.device.mgt.common.Device device; try { device = deviceManagementProviderService.getDevice(deviceIdentifier); } catch (DeviceManagementException e) { - String error = "Error occurred while fetching the device information."; - log.error(error, e); - throw new MDMAPIException(error, e); + String msg = "Error occurred while fetching the device information."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } ResponsePayload responsePayload = new ResponsePayload(); if (device == null) { responsePayload.setStatusCode(HttpStatus.SC_NOT_FOUND); responsePayload.setMessageFromServer("Requested device by type: " + type + " and id: " + id + " does not exist."); - return Response.status(HttpStatus.SC_NOT_FOUND).entity(responsePayload).build(); + return Response.status(Response.Status.NOT_FOUND).entity(responsePayload).build(); } else { responsePayload.setStatusCode(HttpStatus.SC_OK); responsePayload.setMessageFromServer("Sending Requested device by type: " + type + " and id: " + id + "."); responsePayload.setResponseContent(device); - return Response.status(HttpStatus.SC_OK).entity(responsePayload).build(); + return Response.status(Response.Status.OK).entity(responsePayload).build(); } } /** - * Fetch Android device details of a given user. + * Fetch device details of a given user. * * @param user User Name - * @param tenantDomain tenant domain * @return Device - * @throws MDMAPIException */ @GET - @Path("user/{user}/{tenantDomain}") - public List getDeviceByUser(@PathParam("user") String user, - @PathParam("tenantDomain") String tenantDomain) throws MDMAPIException { - List devices; + @Path("user/{user}") + public Response getDevice(@PathParam("user") String user) { + List devices; try { - devices = MDMAPIUtils.getDeviceManagementService().getDevicesOfUser(user); + devices = DeviceMgtAPIUtils.getDeviceManagementService().getDevicesOfUser(user); if (devices == null) { - Response.status(Response.Status.NOT_FOUND); + return Response.status(Response.Status.NOT_FOUND).build(); } - return devices; + return Response.status(Response.Status.OK).entity(devices).build(); + } catch (DeviceManagementException e) { + String msg = "Error occurred while fetching the devices list of given user."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + } + + /** + * Fetch device count of a given user. + * + * @param user User Name + * @return Device + */ + @GET + @Path("user/{user}/count") + public Response getDeviceCount(@PathParam("user") String user) { + try { + Integer count = DeviceMgtAPIUtils.getDeviceManagementService().getDeviceCount(user); + return Response.status(Response.Status.OK).entity(count).build(); } catch (DeviceManagementException e) { String msg = "Error occurred while fetching the devices list of given user."; log.error(msg, e); - throw new MDMAPIException(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } } @@ -157,17 +177,17 @@ public class MobileDevice { * Get current device count * * @return device count - * @throws MDMAPIException */ @GET @Path("count") - public int getDeviceCount() throws MDMAPIException { + public Response getDeviceCount() { try { - return MDMAPIUtils.getDeviceManagementService().getDeviceCount(); + Integer count = DeviceMgtAPIUtils.getDeviceManagementService().getDeviceCount(); + return Response.status(Response.Status.OK).entity(count).build(); } catch (DeviceManagementException e) { String msg = "Error occurred while fetching the device count."; log.error(msg, e); - throw new MDMAPIException(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } } @@ -177,42 +197,38 @@ public class MobileDevice { * @param deviceName Device name * @param tenantDomain Callee tenant domain * @return list of devices. - * @throws MDMAPIException If some unusual behaviour is observed while fetching the device list */ @GET @Path("name/{name}/{tenantDomain}") - public List getDevicesByName(@PathParam("name") String deviceName, - @PathParam("tenantDomain") String tenantDomain) throws MDMAPIException { - - List devices; + public Response getDevicesByName(@PathParam("name") String deviceName, + @PathParam("tenantDomain") String tenantDomain) { + List devices; try { - devices = MDMAPIUtils.getDeviceManagementService().getDevicesByName(deviceName); + devices = DeviceMgtAPIUtils.getDeviceManagementService().getDevicesByName(deviceName); + return Response.status(Response.Status.OK).entity(devices).build(); } catch (DeviceManagementException e) { String msg = "Error occurred while fetching the devices list of device name."; log.error(msg, e); - throw new MDMAPIException(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } - return devices; } /** * Get the list of available device types. * * @return list of device types. - * @throws MDMAPIException If some unusual behaviour is observed while fetching the device list */ @GET @Path("types") - public List getDeviceTypes() throws MDMAPIException { - - List deviceTypes; - try { - deviceTypes = MDMAPIUtils.getDeviceManagementService().getAvailableDeviceTypes(); - } catch (DeviceManagementException e) { - String msg = "Error occurred while fetching the list of device types."; - log.error(msg, e); - throw new MDMAPIException(msg, e); - } - return deviceTypes; - } + public Response getDeviceTypes() { + List deviceTypes; + try { + deviceTypes = DeviceMgtAPIUtils.getDeviceManagementService().getAvailableDeviceTypes(); + return Response.status(Response.Status.OK).entity(deviceTypes).build(); + } catch (DeviceManagementException e) { + String msg = "Error occurred while fetching the list of device types."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + } } \ No newline at end of file diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/DeviceInformation.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/DeviceInformation.java index c8503d32f32..81fe19e73cc 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/DeviceInformation.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/DeviceInformation.java @@ -19,7 +19,6 @@ package org.wso2.carbon.mdm.api; -import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.wso2.carbon.device.mgt.common.DeviceIdentifier; @@ -27,57 +26,55 @@ import org.wso2.carbon.device.mgt.common.device.details.DeviceInfo; import org.wso2.carbon.device.mgt.common.device.details.DeviceLocation; import org.wso2.carbon.device.mgt.core.device.details.mgt.DeviceDetailsMgtException; import org.wso2.carbon.device.mgt.core.device.details.mgt.DeviceInformationManager; -import org.wso2.carbon.mdm.api.common.MDMAPIException; -import org.wso2.carbon.mdm.api.util.MDMAPIUtils; +import org.wso2.carbon.mdm.api.util.DeviceMgtAPIUtils; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.core.Response; +@SuppressWarnings("NonJaxWsWebServices") public class DeviceInformation { private static Log log = LogFactory.getLog(DeviceInformation.class); @GET @Path("{type}/{id}") - public Response getDeviceInfo(@PathParam("type") String type, @PathParam("id") String id) throws MDMAPIException { + public Response getDeviceInfo(@PathParam("type") String type, @PathParam("id") String id) { DeviceInformationManager informationManager; DeviceInfo deviceInfo; try { DeviceIdentifier deviceIdentifier = new DeviceIdentifier(); deviceIdentifier.setId(id); deviceIdentifier.setType(type); - informationManager = MDMAPIUtils.getDeviceInformationManagerService(); + informationManager = DeviceMgtAPIUtils.getDeviceInformationManagerService(); deviceInfo = informationManager.getDeviceInfo(deviceIdentifier); - } catch (DeviceDetailsMgtException e) { String msg = "Error occurred while getting the device information."; log.error(msg, e); - throw new MDMAPIException(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } - return Response.status(HttpStatus.SC_OK).entity(deviceInfo).build(); + return Response.status(Response.Status.OK).entity(deviceInfo).build(); } @GET @Path("location/{type}/{id}") - public Response getDeviceLocation(@PathParam("type") String type, @PathParam("id") String id) throws MDMAPIException { + public Response getDeviceLocation(@PathParam("type") String type, @PathParam("id") String id) { DeviceInformationManager informationManager; DeviceLocation deviceLocation; try { DeviceIdentifier deviceIdentifier = new DeviceIdentifier(); deviceIdentifier.setId(id); deviceIdentifier.setType(type); - informationManager = MDMAPIUtils.getDeviceInformationManagerService(); + informationManager = DeviceMgtAPIUtils.getDeviceInformationManagerService(); deviceLocation = informationManager.getDeviceLocation(deviceIdentifier); - } catch (DeviceDetailsMgtException e) { String msg = "Error occurred while getting the device location."; log.error(msg, e); - throw new MDMAPIException(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } - return Response.status(HttpStatus.SC_OK).entity(deviceLocation).build(); + return Response.status(Response.Status.OK).entity(deviceLocation).build(); } } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/DeviceNotification.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/DeviceNotification.java index 9a8567572d2..0f85351571b 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/DeviceNotification.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/DeviceNotification.java @@ -1,17 +1,17 @@ /* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. + * Copyright (c) 2016, 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 + * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * 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 + * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ @@ -21,14 +21,18 @@ package org.wso2.carbon.mdm.api; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.device.mgt.common.notification.mgt.NotificationManagementException; import org.wso2.carbon.device.mgt.common.notification.mgt.Notification; -import org.wso2.carbon.mdm.api.common.MDMAPIException; -import org.wso2.carbon.mdm.api.util.MDMAPIUtils; +import org.wso2.carbon.device.mgt.common.notification.mgt.NotificationManagementException; +import org.wso2.carbon.mdm.api.util.DeviceMgtAPIUtils; import org.wso2.carbon.mdm.api.util.ResponsePayload; -import javax.jws.WebService; -import javax.ws.rs.*; +import javax.ws.rs.Consumes; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; import javax.ws.rs.core.Response; import java.util.List; @@ -36,73 +40,70 @@ import java.util.List; * DeviceNotification management REST-API implementation. * All end points support JSON, XMl with content negotiation. */ -@WebService -@Produces({ "application/json", "application/xml" }) +@SuppressWarnings("NonJaxWsWebServices") +@Produces({"application/json", "application/xml"}) @Consumes({ "application/json", "application/xml" }) public class DeviceNotification { private static Log log = LogFactory.getLog(Configuration.class); @GET - public List getNotifications() throws MDMAPIException { - String msg; - try { - return MDMAPIUtils.getNotificationManagementService().getAllNotifications(); - } catch (NotificationManagementException e) { - msg = "Error occurred while retrieving the notification list."; - log.error(msg, e); - throw new MDMAPIException(msg, e); - } - } + public Response getNotifications() { + String msg; + try { + List notifications = DeviceMgtAPIUtils.getNotificationManagementService().getAllNotifications(); + return Response.status(Response.Status.OK).entity(notifications).build(); + } catch (NotificationManagementException e) { + msg = "Error occurred while retrieving the notification list."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + } @GET @Path("{status}") - public List getNotificationsByStatus(@PathParam("status") Notification.Status status) - throws MDMAPIException { - String msg; - try { - return MDMAPIUtils.getNotificationManagementService().getNotificationsByStatus(status); - } catch (NotificationManagementException e) { - msg = "Error occurred while retrieving the notification list."; - log.error(msg, e); - throw new MDMAPIException(msg, e); - } - } + public Response getNotificationsByStatus(@PathParam("status") Notification.Status status) { + String msg; + try { + List notifications = DeviceMgtAPIUtils.getNotificationManagementService().getNotificationsByStatus(status); + return Response.status(Response.Status.OK).entity(notifications).build(); + } catch (NotificationManagementException e) { + msg = "Error occurred while retrieving the notification list."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + } @PUT @Path("{id}/{status}") - public ResponsePayload updateNotificationStatus(@PathParam("id") int id, - @PathParam("status") Notification.Status status) - throws MDMAPIException{ - ResponsePayload responseMsg = new ResponsePayload(); - try { - MDMAPIUtils.getNotificationManagementService().updateNotificationStatus(id, status); - Response.status(HttpStatus.SC_ACCEPTED); - responseMsg.setMessageFromServer("Notification status updated successfully."); + public Response updateNotificationStatus(@PathParam("id") int id, + @PathParam("status") Notification.Status status) { + ResponsePayload responseMsg = new ResponsePayload(); + try { + DeviceMgtAPIUtils.getNotificationManagementService().updateNotificationStatus(id, status); + responseMsg.setMessageFromServer("Notification status updated successfully."); responseMsg.setStatusCode(HttpStatus.SC_ACCEPTED); - return responseMsg; - } catch (NotificationManagementException e) { - String msg = "Error occurred while updating notification status."; - log.error(msg, e); - throw new MDMAPIException(msg, e); - } - } + return Response.status(Response.Status.ACCEPTED).entity(responseMsg).build(); + } catch (NotificationManagementException e) { + String msg = "Error occurred while updating notification status."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + } @POST - public ResponsePayload addNotification(Notification notification) - throws MDMAPIException{ - ResponsePayload responseMsg = new ResponsePayload(); - try { - MDMAPIUtils.getNotificationManagementService().addNotification(notification); - Response.status(HttpStatus.SC_CREATED); - responseMsg.setMessageFromServer("Notification has added successfully."); + public Response addNotification(Notification notification) { + ResponsePayload responseMsg = new ResponsePayload(); + try { + DeviceMgtAPIUtils.getNotificationManagementService().addNotification(notification); + responseMsg.setMessageFromServer("Notification has added successfully."); responseMsg.setStatusCode(HttpStatus.SC_CREATED); - return responseMsg; - } catch (NotificationManagementException e) { - String msg = "Error occurred while updating notification status."; - log.error(msg, e); - throw new MDMAPIException(msg, e); - } - } + return Response.status(Response.Status.CREATED).entity(responseMsg).build(); + } catch (NotificationManagementException e) { + String msg = "Error occurred while updating notification status."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + } } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/DeviceSearch.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/DeviceSearch.java index ab1bf519432..fc9a7bd3a63 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/DeviceSearch.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/DeviceSearch.java @@ -19,38 +19,37 @@ package org.wso2.carbon.mdm.api; -import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.wso2.carbon.device.mgt.common.device.details.DeviceWrapper; import org.wso2.carbon.device.mgt.common.search.SearchContext; import org.wso2.carbon.device.mgt.core.search.mgt.SearchManagerService; import org.wso2.carbon.device.mgt.core.search.mgt.SearchMgtException; -import org.wso2.carbon.mdm.api.common.MDMAPIException; -import org.wso2.carbon.mdm.api.util.MDMAPIUtils; +import org.wso2.carbon.mdm.api.util.DeviceMgtAPIUtils; import javax.ws.rs.GET; import javax.ws.rs.core.Response; import java.util.List; +@SuppressWarnings("NonJaxWsWebServices") public class DeviceSearch { private static Log log = LogFactory.getLog(DeviceSearch.class); @GET - public Response getDeviceInfo(SearchContext searchContext) throws MDMAPIException { + public Response getDeviceInfo(SearchContext searchContext) { SearchManagerService searchManagerService; List devices; try { - searchManagerService = MDMAPIUtils.getSearchManagerService(); + searchManagerService = DeviceMgtAPIUtils.getSearchManagerService(); devices = searchManagerService.search(searchContext); } catch (SearchMgtException e) { String msg = "Error occurred while searching the device information."; log.error(msg, e); - throw new MDMAPIException(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } - return Response.status(HttpStatus.SC_OK).entity(devices).build(); + return Response.status(Response.Status.OK).entity(devices).build(); } } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/Feature.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/Feature.java index b98baab4817..9cd8c305e3f 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/Feature.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/Feature.java @@ -22,15 +22,20 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.wso2.carbon.device.mgt.common.DeviceManagementException; import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService; -import org.wso2.carbon.mdm.api.common.MDMAPIException; -import org.wso2.carbon.mdm.api.util.MDMAPIUtils; +import org.wso2.carbon.mdm.api.util.DeviceMgtAPIUtils; -import javax.ws.rs.*; +import javax.ws.rs.Consumes; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Response; import java.util.List; /** * Features */ +@SuppressWarnings("NonJaxWsWebServices") @Produces({"application/json", "application/xml"}) @Consumes({"application/json", "application/xml"}) public class Feature { @@ -40,24 +45,21 @@ public class Feature { * Get all features for Mobile Device Type * * @return Feature - * @throws MDMAPIException - * */ @GET @Path("/{type}") - public List getFeatures(@PathParam("type") String type) - throws MDMAPIException { + public Response getFeatures(@PathParam("type") String type) { List features; DeviceManagementProviderService dmService; try { - dmService = MDMAPIUtils.getDeviceManagementService(); + dmService = DeviceMgtAPIUtils.getDeviceManagementService(); features = dmService.getFeatureManager(type).getFeatures(); } catch (DeviceManagementException e) { String msg = "Error occurred while retrieving the list of features"; log.error(msg, e); - throw new MDMAPIException(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } - return features; + return Response.status(Response.Status.OK).entity(features).build(); } } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/Group.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/Group.java new file mode 100644 index 00000000000..8c86419aea4 --- /dev/null +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/Group.java @@ -0,0 +1,443 @@ +/* + * Copyright (c) 2016, 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.mdm.api; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.wso2.carbon.context.PrivilegedCarbonContext; +import org.wso2.carbon.device.mgt.common.Device; +import org.wso2.carbon.device.mgt.common.DeviceIdentifier; +import org.wso2.carbon.device.mgt.common.PaginationResult; +import org.wso2.carbon.device.mgt.common.group.mgt.DeviceGroup; +import org.wso2.carbon.device.mgt.common.group.mgt.GroupAlreadyEixistException; +import org.wso2.carbon.device.mgt.common.group.mgt.GroupManagementException; +import org.wso2.carbon.device.mgt.common.group.mgt.GroupUser; +import org.wso2.carbon.device.mgt.core.service.GroupManagementProviderService; +import org.wso2.carbon.mdm.api.util.DeviceMgtAPIUtils; + +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.FormParam; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.Response; +import java.util.Date; +import java.util.List; + +@SuppressWarnings("NonJaxWsWebServices") +public class Group { + + private static final String DEFAULT_ADMIN_ROLE = "admin"; + private static final String DEFAULT_OPERATOR_ROLE = "invoke-device-operations"; + private static final String DEFAULT_STATS_MONITOR_ROLE = "view-statistics"; + private static final String DEFAULT_VIEW_POLICIES = "view-policies"; + private static final String DEFAULT_MANAGE_POLICIES = "mange-policies"; + private static final String DEFAULT_VIEW_EVENTS = "view-events"; + private static final String[] DEFAULT_ADMIN_PERMISSIONS = {"/permission/device-mgt/admin/groups", + "/permission/device-mgt/user/groups"}; + private static final String[] DEFAULT_OPERATOR_PERMISSIONS = {"/permission/device-mgt/user/groups/device_operation"}; + private static final String[] DEFAULT_STATS_MONITOR_PERMISSIONS = {"/permission/device-mgt/user/groups/device_monitor"}; + private static final String[] DEFAULT_MANAGE_POLICIES_PERMISSIONS = {"/permission/device-mgt/user/groups/device_policies/add"}; + private static final String[] DEFAULT_VIEW_POLICIES_PERMISSIONS = {"/permission/device-mgt/user/groups/device_policies/view"}; + private static final String[] DEFAULT_VIEW_EVENTS_PERMISSIONS = {"/permission/device-mgt/user/groups/device_events"}; + + private static Log log = LogFactory.getLog(Group.class); + + @POST + @Consumes("application/json") + public Response createGroup(DeviceGroup group) { + String owner = PrivilegedCarbonContext.getThreadLocalCarbonContext().getUsername(); + if (group == null) { + return Response.status(Response.Status.BAD_REQUEST).build(); + } + group.setOwner(owner); + group.setDateOfCreation(new Date().getTime()); + group.setDateOfLastUpdate(new Date().getTime()); + try { + GroupManagementProviderService groupManagementService = DeviceMgtAPIUtils.getGroupManagementProviderService(); + groupManagementService.createGroup(group, DEFAULT_ADMIN_ROLE, DEFAULT_ADMIN_PERMISSIONS); + groupManagementService.addGroupSharingRole(owner, group.getName(), owner, + DEFAULT_OPERATOR_ROLE, + DEFAULT_OPERATOR_PERMISSIONS); + groupManagementService.addGroupSharingRole(owner, group.getName(), owner, DEFAULT_STATS_MONITOR_ROLE, + DEFAULT_STATS_MONITOR_PERMISSIONS); + groupManagementService.addGroupSharingRole(owner, group.getName(), owner, DEFAULT_VIEW_POLICIES, + DEFAULT_VIEW_POLICIES_PERMISSIONS); + groupManagementService.addGroupSharingRole(owner, group.getName(), owner, DEFAULT_MANAGE_POLICIES, + DEFAULT_MANAGE_POLICIES_PERMISSIONS); + groupManagementService.addGroupSharingRole(owner, group.getName(), owner, DEFAULT_VIEW_EVENTS, + DEFAULT_VIEW_EVENTS_PERMISSIONS); + return Response.status(Response.Status.CREATED).build(); + } catch (GroupAlreadyEixistException e) { + return Response.status(Response.Status.CONFLICT).entity(e.getMessage()).build(); + } catch (GroupManagementException e) { + log.error(e.getErrorMessage(), e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); + } + } + + @Path("/{owner}/{groupName}") + @PUT + @Consumes("application/json") + @Produces("application/json") + public Response updateGroup(@PathParam("groupName") String groupName, @PathParam("owner") String owner, + DeviceGroup deviceGroup) { + try { + DeviceMgtAPIUtils.getGroupManagementProviderService().updateGroup(deviceGroup, groupName, owner); + return Response.status(Response.Status.OK).build(); + } catch (GroupManagementException e) { + log.error(e.getErrorMessage(), e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); + } + } + + @Path("/{owner}/{groupName}") + @DELETE + public Response deleteGroup(@PathParam("groupName") String groupName, @PathParam("owner") String owner) { + try { + DeviceMgtAPIUtils.getGroupManagementProviderService().deleteGroup(groupName, owner); + return Response.status(Response.Status.OK).build(); + } catch (GroupManagementException e) { + log.error(e.getMessage()); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); + } + } + + @GET + @Produces("application/json") + public Response getGroups(@QueryParam("start") int startIndex, @PathParam("rowCount") int rowCount) { + try { + PaginationResult paginationResult = DeviceMgtAPIUtils.getGroupManagementProviderService() + .getGroups(startIndex, rowCount); + if (paginationResult.getRecordsTotal() > 0) { + return Response.status(Response.Status.OK).entity(paginationResult).build(); + } else { + return Response.status(Response.Status.NOT_FOUND).build(); + } + } catch (GroupManagementException e) { + log.error(e.getMessage(), e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); + } + } + + @Path("/user/{user}") + @GET + @Produces("application/json") + public Response getGroups(@PathParam("user") String userName, @QueryParam("start") int startIndex, + @QueryParam("rowCount") int rowCount) { + try { + PaginationResult paginationResult = DeviceMgtAPIUtils.getGroupManagementProviderService() + .getGroups(userName, startIndex, rowCount); + if (paginationResult.getRecordsTotal() > 0) { + return Response.status(Response.Status.OK).entity(paginationResult).build(); + } else { + return Response.status(Response.Status.NOT_FOUND).build(); + } + } catch (GroupManagementException e) { + log.error(e.getMessage(), e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); + } + } + + @Path("/{owner}/{groupName}") + @GET + @Produces("application/json") + public Response getGroup(@PathParam("groupName") String groupName, @PathParam("owner") String owner) { + try { + DeviceGroup deviceGroup = DeviceMgtAPIUtils.getGroupManagementProviderService().getGroup(groupName, owner); + if (deviceGroup != null) { + return Response.status(Response.Status.OK).entity(deviceGroup).build(); + } else { + return Response.status(Response.Status.NOT_FOUND).build(); + } + } catch (GroupManagementException e) { + log.error(e.getMessage(), e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); + } + } + + @Path("/search") + @GET + @Produces("application/json") + public Response findGroups(@QueryParam("groupName") String groupName, + @QueryParam("userName") String userName) { + try { + List groups = DeviceMgtAPIUtils.getGroupManagementProviderService() + .findInGroups(groupName, userName); + DeviceGroup[] deviceGroups = new DeviceGroup[groups.size()]; + groups.toArray(deviceGroups); + return Response.status(Response.Status.OK).entity(deviceGroups).build(); + } catch (GroupManagementException e) { + log.error(e.getMessage(), e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); + } + } + + @Path("/user/{user}/all") + @GET + @Produces("application/json") + public Response getGroups(@PathParam("user") String userName, + @QueryParam("permission") String permission) { + try { + GroupManagementProviderService groupManagementService = DeviceMgtAPIUtils.getGroupManagementProviderService(); + List groups; + if (permission != null) { + groups = groupManagementService.getGroups(userName, permission); + } else { + groups = groupManagementService.getGroups(userName); + } + DeviceGroup[] deviceGroups = new DeviceGroup[groups.size()]; + groups.toArray(deviceGroups); + return Response.status(Response.Status.OK).entity(deviceGroups).build(); + } catch (GroupManagementException e) { + log.error(e.getMessage(), e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); + } + } + + @Path("/user/{user}/count") + @GET + @Produces("application/json") + public Response getGroupCount(@PathParam("user") String userName) { + try { + int count = DeviceMgtAPIUtils.getGroupManagementProviderService().getGroupCount(userName); + return Response.status(Response.Status.OK).entity(count).build(); + } catch (GroupManagementException e) { + log.error(e.getMessage(), e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); + } + } + + @Path("/{owner}/{groupName}/share") + @PUT + @Produces("application/json") + public Response shareGroup(@PathParam("groupName") String groupName, @PathParam("owner") String owner, + @FormParam("shareUser") String shareUser, + @FormParam("roleName") String sharingRole) { + + try { + boolean isShared = DeviceMgtAPIUtils.getGroupManagementProviderService().shareGroup( + shareUser, groupName, owner, sharingRole); + if (isShared) { + return Response.status(Response.Status.OK).build(); + } else { + return Response.status(Response.Status.NOT_FOUND).build(); + } + } catch (GroupManagementException e) { + log.error(e.getMessage(), e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); + } + } + + @Path("/{owner}/{groupName}/unshare") + @PUT + @Produces("application/json") + public Response unShareGroup(@PathParam("groupName") String groupName, @PathParam("owner") String owner, + @FormParam("unShareUser") String unShareUser, + @FormParam("roleName") String sharingRole) { + try { + boolean isUnShared = DeviceMgtAPIUtils.getGroupManagementProviderService().unshareGroup( + unShareUser, groupName, owner, sharingRole); + if (isUnShared) { + return Response.status(Response.Status.OK).build(); + } else { + return Response.status(Response.Status.NOT_FOUND).build(); + } + } catch (GroupManagementException e) { + log.error(e.getMessage(), e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); + } + } + + @Path("/{owner}/{groupName}/share/roles/{roleName}/permissions") + @PUT + @Produces("application/json") + public Response addSharing(@QueryParam("shareUser") String shareUser, @PathParam("groupName") String groupName, + @PathParam("owner") String owner, + @PathParam("roleName") String roleName, + @FormParam("permissions") String[] permissions) { + + try { + boolean isAdded = DeviceMgtAPIUtils.getGroupManagementProviderService().addGroupSharingRole( + shareUser, groupName, owner, roleName, permissions); + if (isAdded) { + return Response.status(Response.Status.OK).build(); + } else { + return Response.status(Response.Status.NOT_FOUND).build(); + } + } catch (GroupManagementException e) { + log.error(e.getMessage(), e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); + } + } + + @DELETE + @Path("/{owner}/{groupName}/share/roles/{roleName}/permissions") + @Produces("application/json") + public Response removeSharing(@QueryParam("userName") String userName, @PathParam("groupName") String groupName, + @PathParam("owner") String owner, + @PathParam("roleName") String roleName) { + try { + boolean isRemoved = DeviceMgtAPIUtils.getGroupManagementProviderService().removeGroupSharingRole( + groupName, owner, roleName); + if (isRemoved) { + return Response.status(Response.Status.OK).build(); + } else { + return Response.status(Response.Status.NOT_FOUND).build(); + } + } catch (GroupManagementException e) { + log.error(e.getMessage(), e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); + } + } + + @GET + @Path("/{owner}/{groupName}/share/roles") + @Produces("application/json") + public Response getRoles(@PathParam("groupName") String groupName, + @PathParam("owner") String owner, @QueryParam("userName") String userName) { + try { + List roles; + if (userName != null && !userName.isEmpty()) { + roles = DeviceMgtAPIUtils.getGroupManagementProviderService().getRoles(userName, groupName, owner); + } else { + roles = DeviceMgtAPIUtils.getGroupManagementProviderService().getRoles(groupName, owner); + } + String[] rolesArray = new String[roles.size()]; + roles.toArray(rolesArray); + return Response.status(Response.Status.OK).entity(rolesArray).build(); + } catch (GroupManagementException e) { + log.error(e.getMessage(), e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); + } + } + + @GET + @Path("/{owner}/{groupName}/users") + @Produces("application/json") + public Response getUsers(@PathParam("groupName") String groupName, + @PathParam("owner") String owner) { + try { + List users = DeviceMgtAPIUtils.getGroupManagementProviderService().getUsers( + groupName, owner); + GroupUser[] usersArray = new GroupUser[users.size()]; + users.toArray(usersArray); + return Response.status(Response.Status.OK).entity(usersArray).build(); + } catch (GroupManagementException e) { + log.error(e.getMessage(), e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); + } + } + + @GET + @Path("/{owner}/{groupName}/devices/all") + @Produces("application/json") + public Response getDevices(@PathParam("groupName") String groupName, + @PathParam("owner") String owner) { + try { + List devices = DeviceMgtAPIUtils.getGroupManagementProviderService().getDevices( + groupName, owner); + Device[] deviceArray = new Device[devices.size()]; + devices.toArray(deviceArray); + return Response.status(Response.Status.OK).entity(deviceArray).build(); + } catch (GroupManagementException e) { + log.error(e.getMessage(), e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); + } + } + + @GET + @Path("/{owner}/{groupName}/devices/count") + @Produces("application/json") + public Response getDeviceCount(@PathParam("groupName") String groupName, + @PathParam("owner") String owner) { + try { + int count = DeviceMgtAPIUtils.getGroupManagementProviderService().getDeviceCount(groupName, owner); + return Response.status(Response.Status.OK).entity(count).build(); + } catch (GroupManagementException e) { + log.error(e.getMessage(), e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); + } + } + + @PUT + @Path("/{owner}/{groupName}/devices/{deviceType}/{deviceId}") + @Produces("application/json") + public Response addDevice(@PathParam("groupName") String groupName, + @PathParam("owner") String owner, @PathParam("deviceId") String deviceId, + @PathParam("deviceType") String deviceType, + @FormParam("userName") String userName) { + try { + DeviceIdentifier deviceIdentifier = new DeviceIdentifier(deviceId, deviceType); + boolean isAdded = DeviceMgtAPIUtils.getGroupManagementProviderService().addDevice( + deviceIdentifier, groupName, owner); + if (isAdded) { + return Response.status(Response.Status.OK).build(); + } else { + return Response.status(Response.Status.NOT_FOUND).build(); + } + } catch (GroupManagementException e) { + log.error(e.getMessage(), e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); + } + } + + @DELETE + @Path("/{owner}/{groupName}/devices/{deviceType}/{deviceId}") + @Produces("application/json") + public Response removeDevice(@PathParam("groupName") String groupName, + @PathParam("owner") String owner, @PathParam("deviceId") String deviceId, + @PathParam("deviceType") String deviceType) { + try { + DeviceIdentifier deviceIdentifier = new DeviceIdentifier(deviceId, deviceType); + boolean isRemoved = DeviceMgtAPIUtils.getGroupManagementProviderService().removeDevice( + deviceIdentifier, groupName, owner); + if (isRemoved) { + return Response.status(Response.Status.OK).build(); + } else { + return Response.status(Response.Status.NOT_FOUND).build(); + } + } catch (GroupManagementException e) { + log.error(e.getMessage(), e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); + } + } + + @GET + @Path("/{owner}/{groupName}/users/{userName}/permissions") + @Produces("application/json") + public Response getPermissions(@PathParam("userName") String userName, + @PathParam("groupName") String groupName, + @PathParam("owner") String owner) { + try { + String[] permissions = DeviceMgtAPIUtils.getGroupManagementProviderService() + .getPermissions(userName, groupName, owner); + return Response.status(Response.Status.OK).entity(permissions).build(); + } catch (GroupManagementException e) { + log.error(e.getMessage(), e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); + } + } + +} diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/License.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/License.java index 1b1e6c3d0fc..fbf0badc9aa 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/License.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/License.java @@ -1,17 +1,17 @@ /* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. + * Copyright (c) 2016, 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 + * 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 + * "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. */ @@ -22,17 +22,21 @@ import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.wso2.carbon.device.mgt.common.DeviceManagementException; -import org.wso2.carbon.mdm.api.common.MDMAPIException; -import org.wso2.carbon.mdm.api.util.MDMAPIUtils; +import org.wso2.carbon.mdm.api.util.DeviceMgtAPIUtils; import org.wso2.carbon.mdm.api.util.ResponsePayload; -import javax.ws.rs.*; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; /** * This class represents license related operations. */ +@SuppressWarnings("NonJaxWsWebServices") public class License { private static Log log = LogFactory.getLog(License.class); @@ -43,18 +47,17 @@ public class License { * @param deviceType Device type, ex: android, ios * @param languageCode Language code, ex: en_US * @return Returns the license text - * @throws MDMAPIException If the device type or language code arguments are not available or invalid. */ @GET @Path ("{deviceType}/{languageCode}") @Produces ({MediaType.APPLICATION_JSON}) public Response getLicense(@PathParam ("deviceType") String deviceType, - @PathParam ("languageCode") String languageCode) throws MDMAPIException { + @PathParam("languageCode") String languageCode) { org.wso2.carbon.device.mgt.common.license.mgt.License license; - ResponsePayload responsePayload = new ResponsePayload(); + ResponsePayload responsePayload; try { - license = MDMAPIUtils.getDeviceManagementService().getLicense(deviceType, languageCode); + license = DeviceMgtAPIUtils.getDeviceManagementService().getLicense(deviceType, languageCode); if (license == null) { return Response.status(HttpStatus.SC_NOT_FOUND).build(); } @@ -65,9 +68,9 @@ public class License { } catch (DeviceManagementException e) { String msg = "Error occurred while retrieving the license configured for '" + deviceType + "' device type"; log.error(msg, e); - throw new MDMAPIException(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } - return Response.status(HttpStatus.SC_OK).entity(responsePayload).build(); + return Response.status(Response.Status.OK).entity(responsePayload).build(); } /** @@ -76,24 +79,23 @@ public class License { * @param deviceType Device type, ex: android, ios * @param license License object * @return Returns the acknowledgement for the action - * @throws MDMAPIException */ @POST @Path ("{deviceType}") public Response addLicense(@PathParam ("deviceType") String deviceType, - org.wso2.carbon.device.mgt.common.license.mgt.License license) throws MDMAPIException { + org.wso2.carbon.device.mgt.common.license.mgt.License license) { ResponsePayload responsePayload; try { - MDMAPIUtils.getDeviceManagementService().addLicense(deviceType, license); + DeviceMgtAPIUtils.getDeviceManagementService().addLicense(deviceType, license); responsePayload = ResponsePayload.statusCode(HttpStatus.SC_OK). messageFromServer("License added successfully for '" + deviceType + "' device type"). build(); } catch (DeviceManagementException e) { String msg = "Error occurred while adding license for '" + deviceType + "' device type"; log.error(msg, e); - throw new MDMAPIException(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } - return Response.status(HttpStatus.SC_OK).entity(responsePayload).build(); + return Response.status(Response.Status.OK).entity(responsePayload).build(); } } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/Operation.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/Operation.java index 84e88c92a39..50b141aa30a 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/Operation.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/Operation.java @@ -33,50 +33,54 @@ import org.wso2.carbon.device.mgt.core.app.mgt.ApplicationManagementProviderServ import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService; import org.wso2.carbon.mdm.api.common.MDMAPIException; import org.wso2.carbon.mdm.api.context.DeviceOperationContext; -import org.wso2.carbon.mdm.api.util.MDMAPIUtils; +import org.wso2.carbon.mdm.api.util.DeviceMgtAPIUtils; import org.wso2.carbon.mdm.api.util.MDMAndroidOperationUtil; import org.wso2.carbon.mdm.api.util.MDMIOSOperationUtil; import org.wso2.carbon.mdm.api.util.ResponsePayload; import org.wso2.carbon.mdm.beans.ApplicationWrapper; import org.wso2.carbon.mdm.beans.MobileApp; -import org.wso2.carbon.utils.multitenancy.MultitenantConstants; -import javax.ws.rs.*; +import javax.ws.rs.Consumes; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; import javax.ws.rs.core.Response; -import java.util.ArrayList; import java.util.List; /** * Operation related REST-API implementation. */ +@SuppressWarnings("NonJaxWsWebServices") @Produces({"application/json", "application/xml"}) @Consumes({"application/json", "application/xml"}) public class Operation { private static Log log = LogFactory.getLog(Operation.class); + /* @deprecated */ @GET - public List getAllOperations() - throws MDMAPIException { + public Response getAllOperations() { List operations; DeviceManagementProviderService dmService; try { - dmService = MDMAPIUtils.getDeviceManagementService(); + dmService = DeviceMgtAPIUtils.getDeviceManagementService(); operations = dmService.getOperations(null); } catch (OperationManagementException e) { String msg = "Error occurred while fetching the operations for the device."; log.error(msg, e); - throw new MDMAPIException(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } - return operations; + return Response.status(Response.Status.OK).entity(operations).build(); } @GET @Path("paginate/{type}/{id}") - public PaginationResult getDeviceOperations( - @PathParam("type") String type, @PathParam("id") String id, @QueryParam("start") int startIdx, - @QueryParam("length") int length, @QueryParam("search") String search) - throws MDMAPIException { + public Response getDeviceOperations( + @PathParam("type") String type, @PathParam("id") String id, @QueryParam("start") int startIdx, + @QueryParam("length") int length, @QueryParam("search") String search) { PaginationResult operations; DeviceManagementProviderService dmService; DeviceIdentifier deviceIdentifier = new DeviceIdentifier(); @@ -84,147 +88,133 @@ public class Operation { try { deviceIdentifier.setType(type); deviceIdentifier.setId(id); - dmService = MDMAPIUtils.getDeviceManagementService(); + dmService = DeviceMgtAPIUtils.getDeviceManagementService(); operations = dmService.getOperations(deviceIdentifier, paginationRequest); } catch (OperationManagementException e) { String msg = "Error occurred while fetching the operations for the device."; log.error(msg, e); - throw new MDMAPIException(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } - return operations; + return Response.status(Response.Status.OK).entity(operations).build(); } - @GET - @Path("{type}/{id}") - public List getDeviceOperations( - @PathParam("type") String type, @PathParam("id") String id) - throws MDMAPIException { - List operations; - DeviceManagementProviderService dmService; - DeviceIdentifier deviceIdentifier = new DeviceIdentifier(); - try { - deviceIdentifier.setType(type); - deviceIdentifier.setId(id); - dmService = MDMAPIUtils.getDeviceManagementService(); - operations = dmService.getOperations(deviceIdentifier); - } catch (OperationManagementException e) { - String msg = "Error occurred while fetching the operations for the device."; - log.error(msg, e); - throw new MDMAPIException(msg, e); - } - return operations; - } + @GET + @Path("{type}/{id}") + public Response getDeviceOperations(@PathParam("type") String type, @PathParam("id") String id) { + List operations; + DeviceManagementProviderService dmService; + DeviceIdentifier deviceIdentifier = new DeviceIdentifier(); + try { + deviceIdentifier.setType(type); + deviceIdentifier.setId(id); + dmService = DeviceMgtAPIUtils.getDeviceManagementService(); + operations = dmService.getOperations(deviceIdentifier); + } catch (OperationManagementException e) { + String msg = "Error occurred while fetching the operations for the device."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + return Response.status(Response.Status.OK).entity(operations).build(); + } /* @deprecated */ @POST - public ResponsePayload addOperation(DeviceOperationContext operationContext) throws MDMAPIException { + public Response addOperation(DeviceOperationContext operationContext) { DeviceManagementProviderService dmService; ResponsePayload responseMsg = new ResponsePayload(); try { - dmService = MDMAPIUtils.getDeviceManagementService(); - int operationId = dmService.addOperation(operationContext.getOperation(), - operationContext.getDevices()); - if (operationId>0) { - Response.status(HttpStatus.SC_CREATED); + dmService = DeviceMgtAPIUtils.getDeviceManagementService(); + int operationId = dmService.addOperation(operationContext.getOperation(), operationContext.getDevices()); + if (operationId > 0) { + responseMsg.setStatusCode(HttpStatus.SC_CREATED); responseMsg.setMessageFromServer("Operation has added successfully."); } - return responseMsg; + return Response.status(Response.Status.CREATED).entity(responseMsg).build(); } catch (OperationManagementException e) { String msg = "Error occurred while saving the operation"; log.error(msg, e); - throw new MDMAPIException(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } } - @GET - @Path("{type}/{id}/apps") - public List getInstalledApps( - @PathParam("type") String type, - @PathParam("id") String id) - throws MDMAPIException { - List applications; - ApplicationManagementProviderService appManagerConnector; - DeviceIdentifier deviceIdentifier = new DeviceIdentifier(); - try { - deviceIdentifier.setType(type); - deviceIdentifier.setId(id); - appManagerConnector = MDMAPIUtils.getAppManagementService(); - applications = appManagerConnector.getApplicationListForDevice(deviceIdentifier); - } catch (ApplicationManagementException e) { - String msg = "Error occurred while fetching the apps of the device."; - log.error(msg, e); - throw new MDMAPIException(msg, e); - } - return applications; - } + @GET + @Path("{type}/{id}/apps") + public Response getInstalledApps(@PathParam("type") String type, @PathParam("id") String id) { + List applications; + ApplicationManagementProviderService appManagerConnector; + DeviceIdentifier deviceIdentifier = new DeviceIdentifier(); + try { + deviceIdentifier.setType(type); + deviceIdentifier.setId(id); + appManagerConnector = DeviceMgtAPIUtils.getAppManagementService(); + applications = appManagerConnector.getApplicationListForDevice(deviceIdentifier); + } catch (ApplicationManagementException e) { + String msg = "Error occurred while fetching the apps of the device."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + return Response.status(Response.Status.CREATED).entity(applications).build(); + } @POST @Path("installApp/{tenantDomain}") - public ResponsePayload installApplication(ApplicationWrapper applicationWrapper, - @PathParam("tenantDomain") String tenantDomain) throws MDMAPIException { + public Response installApplication(ApplicationWrapper applicationWrapper, + @PathParam("tenantDomain") String tenantDomain) { ResponsePayload responseMsg = new ResponsePayload(); ApplicationManager appManagerConnector; org.wso2.carbon.device.mgt.common.operation.mgt.Operation operation = null; - ArrayList deviceIdentifiers; try { - appManagerConnector = MDMAPIUtils.getAppManagementService(); + appManagerConnector = DeviceMgtAPIUtils.getAppManagementService(); MobileApp mobileApp = applicationWrapper.getApplication(); if (applicationWrapper.getDeviceIdentifiers() != null) { for (DeviceIdentifier deviceIdentifier : applicationWrapper.getDeviceIdentifiers()) { - deviceIdentifiers = new ArrayList(); - if (deviceIdentifier.getType().equals(Platform.android.toString())) { operation = MDMAndroidOperationUtil.createInstallAppOperation(mobileApp); } else if (deviceIdentifier.getType().equals(Platform.ios.toString())) { operation = MDMIOSOperationUtil.createInstallAppOperation(mobileApp); } - deviceIdentifiers.add(deviceIdentifier); } appManagerConnector.installApplicationForDevices(operation, applicationWrapper.getDeviceIdentifiers()); } - Response.status(HttpStatus.SC_CREATED); + responseMsg.setStatusCode(HttpStatus.SC_CREATED); responseMsg.setMessageFromServer("Application installation request has been sent to the device."); - return responseMsg; - } catch (ApplicationManagementException e) { + return Response.status(Response.Status.CREATED).entity(responseMsg).build(); + } catch (ApplicationManagementException | MDMAPIException e) { String msg = "Error occurred while saving the operation"; log.error(msg, e); - throw new MDMAPIException(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } } @POST @Path("uninstallApp/{tenantDomain}") - public ResponsePayload uninstallApplication(ApplicationWrapper applicationWrapper, - @PathParam("tenantDomain") String tenantDomain) throws MDMAPIException { + public Response uninstallApplication(ApplicationWrapper applicationWrapper, + @PathParam("tenantDomain") String tenantDomain) { ResponsePayload responseMsg = new ResponsePayload(); ApplicationManager appManagerConnector; org.wso2.carbon.device.mgt.common.operation.mgt.Operation operation = null; - ArrayList deviceIdentifiers; try { - appManagerConnector = MDMAPIUtils.getAppManagementService(); + appManagerConnector = DeviceMgtAPIUtils.getAppManagementService(); MobileApp mobileApp = applicationWrapper.getApplication(); if (applicationWrapper.getDeviceIdentifiers() != null) { for (DeviceIdentifier deviceIdentifier : applicationWrapper.getDeviceIdentifiers()) { - deviceIdentifiers = new ArrayList(); - if (deviceIdentifier.getType().equals(Platform.android.toString())) { operation = MDMAndroidOperationUtil.createAppUninstallOperation(mobileApp); } else if (deviceIdentifier.getType().equals(Platform.ios.toString())) { operation = MDMIOSOperationUtil.createAppUninstallOperation(mobileApp); } - deviceIdentifiers.add(deviceIdentifier); } appManagerConnector.installApplicationForDevices(operation, applicationWrapper.getDeviceIdentifiers()); } - Response.status(HttpStatus.SC_CREATED); + responseMsg.setStatusCode(HttpStatus.SC_CREATED); responseMsg.setMessageFromServer("Application removal request has been sent to the device."); - return responseMsg; - } catch (ApplicationManagementException e) { + return Response.status(Response.Status.CREATED).entity(responseMsg).build(); + } catch (ApplicationManagementException | MDMAPIException e) { String msg = "Error occurred while saving the operation"; log.error(msg, e); - throw new MDMAPIException(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } } } \ No newline at end of file diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/Policy.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/Policy.java index c0dd24d1425..4878b32f9e1 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/Policy.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/Policy.java @@ -23,7 +23,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.wso2.carbon.device.mgt.common.DeviceIdentifier; import org.wso2.carbon.mdm.api.common.MDMAPIException; -import org.wso2.carbon.mdm.api.util.MDMAPIUtils; +import org.wso2.carbon.mdm.api.util.DeviceMgtAPIUtils; import org.wso2.carbon.mdm.api.util.ResponsePayload; import org.wso2.carbon.mdm.beans.PolicyWrapper; import org.wso2.carbon.mdm.beans.PriorityUpdatedPolicyWrapper; @@ -36,20 +36,27 @@ import org.wso2.carbon.policy.mgt.common.monitor.PolicyComplianceException; import org.wso2.carbon.policy.mgt.core.PolicyManagerService; import org.wso2.carbon.policy.mgt.core.task.TaskScheduleService; -import javax.ws.rs.*; +import javax.ws.rs.Consumes; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import java.util.ArrayList; import java.util.List; +@SuppressWarnings("NonJaxWsWebServices") public class Policy { private static Log log = LogFactory.getLog(Policy.class); @POST @Path("inactive-policy") - public ResponsePayload addPolicy(PolicyWrapper policyWrapper) throws MDMAPIException { + public Response addPolicy(PolicyWrapper policyWrapper) { - PolicyManagerService policyManagementService = MDMAPIUtils.getPolicyManagementService(); + PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); ResponsePayload responseMsg = new ResponsePayload(); org.wso2.carbon.policy.mgt.common.Policy policy = new org.wso2.carbon.policy.mgt.common.Policy(); policy.setPolicyName(policyWrapper.getPolicyName()); @@ -62,25 +69,14 @@ public class Policy { policy.setTenantId(policyWrapper.getTenantId()); policy.setCompliance(policyWrapper.getCompliance()); - try { - PolicyAdministratorPoint pap = policyManagementService.getPAP(); - pap.addPolicy(policy); - Response.status(HttpStatus.SC_CREATED); - responseMsg.setStatusCode(HttpStatus.SC_CREATED); - responseMsg.setMessageFromServer("Policy has been added successfully."); - return responseMsg; - } catch (PolicyManagementException e) { - String error = "Policy Management related exception"; - log.error(error, e); - throw new MDMAPIException(error, e); - } + return addPolicy(policyManagementService, responseMsg, policy); } @POST @Path("active-policy") - public ResponsePayload addActivePolicy(PolicyWrapper policyWrapper) throws MDMAPIException { + public Response addActivePolicy(PolicyWrapper policyWrapper) { - PolicyManagerService policyManagementService = MDMAPIUtils.getPolicyManagementService(); + PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); ResponsePayload responseMsg = new ResponsePayload(); org.wso2.carbon.policy.mgt.common.Policy policy = new org.wso2.carbon.policy.mgt.common.Policy(); policy.setPolicyName(policyWrapper.getPolicyName()); @@ -94,87 +90,91 @@ public class Policy { policy.setCompliance(policyWrapper.getCompliance()); policy.setActive(true); + return addPolicy(policyManagementService, responseMsg, policy); + } + + private Response addPolicy(PolicyManagerService policyManagementService, ResponsePayload responseMsg, + org.wso2.carbon.policy.mgt.common.Policy policy) { try { PolicyAdministratorPoint pap = policyManagementService.getPAP(); pap.addPolicy(policy); - Response.status(HttpStatus.SC_CREATED); responseMsg.setStatusCode(HttpStatus.SC_CREATED); responseMsg.setMessageFromServer("Policy has been added successfully."); - return responseMsg; + return Response.status(Response.Status.CREATED).entity(responseMsg).build(); } catch (PolicyManagementException e) { - String error = "Policy Management related exception"; - log.error(error, e); - throw new MDMAPIException(error, e); + String msg = "Policy Management related exception"; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } } @GET @Produces({MediaType.APPLICATION_JSON}) - public Response getAllPolicies() throws MDMAPIException { - PolicyManagerService policyManagementService = MDMAPIUtils.getPolicyManagementService(); + public Response getAllPolicies() { + PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); List policies; try { PolicyAdministratorPoint policyAdministratorPoint = policyManagementService.getPAP(); policies = policyAdministratorPoint.getPolicies(); } catch (PolicyManagementException e) { - String error = "Policy Management related exception"; - log.error(error, e); - throw new MDMAPIException(error, e); + String msg = "Policy Management related exception"; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } ResponsePayload responsePayload = new ResponsePayload(); responsePayload.setStatusCode(HttpStatus.SC_OK); responsePayload.setMessageFromServer("Sending all retrieved device policies."); responsePayload.setResponseContent(policies); - return Response.status(HttpStatus.SC_OK).entity(responsePayload).build(); + return Response.status(Response.Status.OK).entity(responsePayload).build(); } @GET @Produces({MediaType.APPLICATION_JSON}) @Path("{id}") - public Response getPolicy(@PathParam("id") int policyId) throws MDMAPIException { - PolicyManagerService policyManagementService = MDMAPIUtils.getPolicyManagementService(); + public Response getPolicy(@PathParam("id") int policyId) { + PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); final org.wso2.carbon.policy.mgt.common.Policy policy; try { PolicyAdministratorPoint policyAdministratorPoint = policyManagementService.getPAP(); policy = policyAdministratorPoint.getPolicy(policyId); } catch (PolicyManagementException e) { - String error = "Policy Management related exception"; - log.error(error, e); - throw new MDMAPIException(error, e); + String msg = "Policy Management related exception"; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } if (policy == null){ ResponsePayload responsePayload = new ResponsePayload(); responsePayload.setStatusCode(HttpStatus.SC_NOT_FOUND); responsePayload.setMessageFromServer("Policy for ID " + policyId + " not found."); - return Response.status(HttpStatus.SC_OK).entity(responsePayload).build(); + return Response.status(Response.Status.NOT_FOUND).entity(responsePayload).build(); } ResponsePayload responsePayload = new ResponsePayload(); responsePayload.setStatusCode(HttpStatus.SC_OK); responsePayload.setMessageFromServer("Sending all retrieved device policies."); responsePayload.setResponseContent(policy); - return Response.status(HttpStatus.SC_OK).entity(responsePayload).build(); + return Response.status(Response.Status.OK).entity(responsePayload).build(); } @GET @Path("count") - public int getPolicyCount() throws MDMAPIException { - PolicyManagerService policyManagementService = MDMAPIUtils.getPolicyManagementService(); + public Response getPolicyCount() { + PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); try { PolicyAdministratorPoint policyAdministratorPoint = policyManagementService.getPAP(); - return policyAdministratorPoint.getPolicyCount(); + Integer count = policyAdministratorPoint.getPolicyCount(); + return Response.status(Response.Status.OK).entity(count).build(); } catch (PolicyManagementException e) { - String error = "Policy Management related exception"; - log.error(error, e); - throw new MDMAPIException(error, e); + String msg = "Policy Management related exception"; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } } @PUT @Path("{id}") - public ResponsePayload updatePolicy(PolicyWrapper policyWrapper, @PathParam("id") int policyId) - throws MDMAPIException { + public Response updatePolicy(PolicyWrapper policyWrapper, @PathParam("id") int policyId) { - PolicyManagerService policyManagementService = MDMAPIUtils.getPolicyManagementService(); + PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); ResponsePayload responseMsg = new ResponsePayload(); org.wso2.carbon.policy.mgt.common.Policy policy = new org.wso2.carbon.policy.mgt.common.Policy(); policy.setPolicyName(policyWrapper.getPolicyName()); @@ -191,14 +191,13 @@ public class Policy { try { PolicyAdministratorPoint pap = policyManagementService.getPAP(); pap.updatePolicy(policy); - Response.status(HttpStatus.SC_OK); responseMsg.setStatusCode(HttpStatus.SC_CREATED); responseMsg.setMessageFromServer("Policy has been updated successfully."); - return responseMsg; + return Response.status(Response.Status.CREATED).entity(responseMsg).build(); } catch (PolicyManagementException e) { - String error = "Policy Management related exception in policy update."; - log.error(error, e); - throw new MDMAPIException(error, e); + String msg = "Policy Management related exception in policy update."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } } @@ -206,11 +205,10 @@ public class Policy { @Path("priorities") @Consumes({MediaType.APPLICATION_JSON}) @Produces({MediaType.APPLICATION_JSON}) - public Response updatePolicyPriorities(List priorityUpdatedPolicies) - throws MDMAPIException { - PolicyManagerService policyManagementService = MDMAPIUtils.getPolicyManagementService(); + public Response updatePolicyPriorities(List priorityUpdatedPolicies) { + PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); List policiesToUpdate = - new ArrayList(priorityUpdatedPolicies.size()); + new ArrayList<>(priorityUpdatedPolicies.size()); int i; for (i = 0; i < priorityUpdatedPolicies.size(); i++) { org.wso2.carbon.policy.mgt.common.Policy policyObj = new org.wso2.carbon.policy.mgt.common.Policy(); @@ -223,19 +221,19 @@ public class Policy { PolicyAdministratorPoint pap = policyManagementService.getPAP(); policiesUpdated = pap.updatePolicyPriorities(policiesToUpdate); } catch (PolicyManagementException e) { - String error = "Exception in updating policy priorities."; - log.error(error, e); - throw new MDMAPIException(error, e); + String msg = "Exception in updating policy priorities."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } ResponsePayload responsePayload = new ResponsePayload(); if (policiesUpdated) { responsePayload.setStatusCode(HttpStatus.SC_OK); responsePayload.setMessageFromServer("Policy Priorities successfully updated."); - return Response.status(HttpStatus.SC_OK).entity(responsePayload).build(); + return Response.status(Response.Status.OK).entity(responsePayload).build(); } else { responsePayload.setStatusCode(HttpStatus.SC_BAD_REQUEST); responsePayload.setMessageFromServer("Policy priorities did not update. Bad Request."); - return Response.status(HttpStatus.SC_BAD_REQUEST).entity(responsePayload).build(); + return Response.status(Response.Status.BAD_REQUEST).entity(responsePayload).build(); } } @@ -243,8 +241,8 @@ public class Policy { @Path("bulk-remove") @Consumes("application/json") @Produces("application/json") - public Response bulkRemovePolicy(List policyIds) throws MDMAPIException { - PolicyManagerService policyManagementService = MDMAPIUtils.getPolicyManagementService(); + public Response bulkRemovePolicy(List policyIds) { + PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); boolean policyDeleted = true; try { PolicyAdministratorPoint pap = policyManagementService.getPAP(); @@ -255,43 +253,42 @@ public class Policy { } } } catch (PolicyManagementException e) { - String error = "Exception in deleting policies."; - log.error(error, e); - throw new MDMAPIException(error, e); + String msg = "Exception in deleting policies."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } ResponsePayload responsePayload = new ResponsePayload(); if (policyDeleted) { responsePayload.setStatusCode(HttpStatus.SC_OK); responsePayload.setMessageFromServer("Policies have been successfully deleted."); - return Response.status(HttpStatus.SC_OK).entity(responsePayload).build(); + return Response.status(Response.Status.OK).entity(responsePayload).build(); } else { responsePayload.setStatusCode(HttpStatus.SC_BAD_REQUEST); responsePayload.setMessageFromServer("Policy does not exist."); - return Response.status(HttpStatus.SC_BAD_REQUEST).entity(responsePayload).build(); + return Response.status(Response.Status.BAD_REQUEST).entity(responsePayload).build(); } } @PUT @Produces("application/json") @Path("activate") - public Response activatePolicy(List policyIds) throws MDMAPIException { + public Response activatePolicy(List policyIds) { try { - PolicyManagerService policyManagementService = MDMAPIUtils.getPolicyManagementService(); + PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); PolicyAdministratorPoint pap = policyManagementService.getPAP(); for(int i : policyIds) { pap.activatePolicy(i); } } catch (PolicyManagementException e) { - String error = "Exception in activating policies."; - log.error(error, e); - throw new MDMAPIException(error, e); + String msg = "Exception in activating policies."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } ResponsePayload responsePayload = new ResponsePayload(); responsePayload.setStatusCode(HttpStatus.SC_OK); responsePayload.setMessageFromServer("Selected policies have been successfully activated."); - return Response.status(HttpStatus.SC_OK).entity(responsePayload).build(); - + return Response.status(Response.Status.OK).entity(responsePayload).build(); } @PUT @@ -300,132 +297,134 @@ public class Policy { public Response inactivatePolicy(List policyIds) throws MDMAPIException { try { - PolicyManagerService policyManagementService = MDMAPIUtils.getPolicyManagementService(); + PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); PolicyAdministratorPoint pap = policyManagementService.getPAP(); for(int i : policyIds) { pap.inactivatePolicy(i); } } catch (PolicyManagementException e) { - String error = "Exception in inactivating policies."; - log.error(error, e); - throw new MDMAPIException(error, e); + String msg = "Exception in inactivating policies."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } ResponsePayload responsePayload = new ResponsePayload(); responsePayload.setStatusCode(HttpStatus.SC_OK); responsePayload.setMessageFromServer("Selected policies have been successfully inactivated."); - return Response.status(HttpStatus.SC_OK).entity(responsePayload).build(); + return Response.status(Response.Status.OK).entity(responsePayload).build(); } @PUT @Produces("application/json") @Path("apply-changes") - public Response applyChanges() throws MDMAPIException { + public Response applyChanges() { try { - PolicyManagerService policyManagementService = MDMAPIUtils.getPolicyManagementService(); + PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); PolicyAdministratorPoint pap = policyManagementService.getPAP(); pap.publishChanges(); } catch (PolicyManagementException e) { - String error = "Exception in applying changes."; - log.error(error, e); - throw new MDMAPIException(error, e); + String msg = "Exception in applying changes."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } ResponsePayload responsePayload = new ResponsePayload(); responsePayload.setStatusCode(HttpStatus.SC_OK); responsePayload.setMessageFromServer("Changes have been successfully updated."); - return Response.status(HttpStatus.SC_OK).entity(responsePayload).build(); + return Response.status(Response.Status.OK).entity(responsePayload).build(); } @GET @Path("start-task/{milliseconds}") - public Response startTaskService(@PathParam("milliseconds") int monitoringFrequency) throws MDMAPIException { + public Response startTaskService(@PathParam("milliseconds") int monitoringFrequency) { - PolicyManagerService policyManagementService = MDMAPIUtils.getPolicyManagementService(); + PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); try { TaskScheduleService taskScheduleService = policyManagementService.getTaskScheduleService(); taskScheduleService.startTask(monitoringFrequency); } catch (PolicyMonitoringTaskException e) { - String error = "Policy Management related exception."; - log.error(error, e); - throw new MDMAPIException(error, e); + String msg = "Policy Management related exception."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } ResponsePayload responsePayload = new ResponsePayload(); responsePayload.setStatusCode(HttpStatus.SC_OK); responsePayload.setMessageFromServer("Policy monitoring service started successfully."); - return Response.status(HttpStatus.SC_OK).entity(responsePayload).build(); + return Response.status(Response.Status.OK).entity(responsePayload).build(); } @GET @Path("update-task/{milliseconds}") - public Response updateTaskService(@PathParam("milliseconds") int monitoringFrequency) throws MDMAPIException { + public Response updateTaskService(@PathParam("milliseconds") int monitoringFrequency) { - PolicyManagerService policyManagementService = MDMAPIUtils.getPolicyManagementService(); + PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); try { TaskScheduleService taskScheduleService = policyManagementService.getTaskScheduleService(); taskScheduleService.updateTask(monitoringFrequency); } catch (PolicyMonitoringTaskException e) { - String error = "Policy Management related exception."; - log.error(error, e); - throw new MDMAPIException(error, e); + String msg = "Policy Management related exception."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } ResponsePayload responsePayload = new ResponsePayload(); responsePayload.setStatusCode(HttpStatus.SC_OK); responsePayload.setMessageFromServer("Policy monitoring service updated successfully."); - return Response.status(HttpStatus.SC_OK).entity(responsePayload).build(); + return Response.status(Response.Status.OK).entity(responsePayload).build(); } @GET @Path("stop-task") - public Response stopTaskService() throws MDMAPIException { + public Response stopTaskService() { - PolicyManagerService policyManagementService = MDMAPIUtils.getPolicyManagementService(); + PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); try { TaskScheduleService taskScheduleService = policyManagementService.getTaskScheduleService(); taskScheduleService.stopTask(); } catch (PolicyMonitoringTaskException e) { - String error = "Policy Management related exception."; - log.error(error, e); - throw new MDMAPIException(error, e); + String msg = "Policy Management related exception."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } ResponsePayload responsePayload = new ResponsePayload(); responsePayload.setStatusCode(HttpStatus.SC_OK); responsePayload.setMessageFromServer("Policy monitoring service stopped successfully."); - return Response.status(HttpStatus.SC_OK).entity(responsePayload).build(); + return Response.status(Response.Status.OK).entity(responsePayload).build(); } @GET @Path("{type}/{id}") - public ComplianceData getComplianceDataOfDevice(@PathParam("type") String type, @PathParam("id") String id) throws - MDMAPIException { + public Response getComplianceDataOfDevice(@PathParam("type") String type, @PathParam("id") String id) { try { - DeviceIdentifier deviceIdentifier = MDMAPIUtils.instantiateDeviceIdentifier(type, id); - PolicyManagerService policyManagementService = MDMAPIUtils.getPolicyManagementService(); - return policyManagementService.getDeviceCompliance(deviceIdentifier); + DeviceIdentifier deviceIdentifier = DeviceMgtAPIUtils.instantiateDeviceIdentifier(type, id); + PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); + ComplianceData complianceData = policyManagementService.getDeviceCompliance(deviceIdentifier); + return Response.status(Response.Status.OK).entity(complianceData).build(); } catch (PolicyComplianceException e) { - String error = "Error occurred while getting the compliance data."; - log.error(error, e); - throw new MDMAPIException(error, e); + String msg = "Error occurred while getting the compliance data."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } } @GET @Path("{type}/{id}/active-policy") - public org.wso2.carbon.policy.mgt.common.Policy getDeviceActivePolicy(@PathParam("type") String type, - @PathParam("id") String id) throws MDMAPIException { - try { - DeviceIdentifier deviceIdentifier = MDMAPIUtils.instantiateDeviceIdentifier(type, id); - PolicyManagerService policyManagementService = MDMAPIUtils.getPolicyManagementService(); - return policyManagementService.getAppliedPolicyToDevice(deviceIdentifier); - } catch (PolicyManagementException e) { - String error = "Error occurred while getting the current policy."; - log.error(error, e); - throw new MDMAPIException(error, e); - } - } + public Response getDeviceActivePolicy(@PathParam("type") String type, + @PathParam("id") String id) { + try { + DeviceIdentifier deviceIdentifier = DeviceMgtAPIUtils.instantiateDeviceIdentifier(type, id); + PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); + org.wso2.carbon.policy.mgt.common.Policy policy = policyManagementService + .getAppliedPolicyToDevice(deviceIdentifier); + return Response.status(Response.Status.OK).entity(policy).build(); + } catch (PolicyManagementException e) { + String msg = "Error occurred while getting the current policy."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + } } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/Profile.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/Profile.java index 4cf216ec6a6..77569a649c7 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/Profile.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/Profile.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. + * Copyright (c) 2016, 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 @@ -11,17 +11,16 @@ * 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 + * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ + package org.wso2.carbon.mdm.api; -import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.mdm.api.common.MDMAPIException; -import org.wso2.carbon.mdm.api.util.MDMAPIUtils; +import org.wso2.carbon.mdm.api.util.DeviceMgtAPIUtils; import org.wso2.carbon.mdm.api.util.ResponsePayload; import org.wso2.carbon.policy.mgt.common.PolicyAdministratorPoint; import org.wso2.carbon.policy.mgt.common.PolicyManagementException; @@ -33,57 +32,55 @@ import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.core.Response; +@SuppressWarnings("NonJaxWsWebServices") public class Profile { private static Log log = LogFactory.getLog(Profile.class); @POST - public org.wso2.carbon.policy.mgt.common.Profile addProfile(org.wso2.carbon.policy.mgt.common.Profile profile) throws MDMAPIException { - PolicyManagerService policyManagementService = MDMAPIUtils.getPolicyManagementService(); - try { + public Response addProfile(org.wso2.carbon.policy.mgt.common.Profile profile) { + PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); + try { PolicyAdministratorPoint pap = policyManagementService.getPAP(); profile = pap.addProfile(profile); - Response.status(HttpStatus.SC_CREATED); - return profile; - } catch (PolicyManagementException e) { - String error = "Policy Management related exception"; - log.error(error, e); - throw new MDMAPIException(error, e); - } - } + return Response.status(Response.Status.OK).entity(profile).build(); + } catch (PolicyManagementException e) { + String msg = "Policy Management related exception"; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + } @POST @Path("{id}") - public ResponsePayload updateProfile(org.wso2.carbon.policy.mgt.common.Profile profile, @PathParam("id") String profileId) - throws MDMAPIException { - PolicyManagerService policyManagementService = MDMAPIUtils.getPolicyManagementService(); - ResponsePayload responseMsg = new ResponsePayload(); + public Response updateProfile(org.wso2.carbon.policy.mgt.common.Profile profile, + @PathParam("id") String profileId) { + PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); + ResponsePayload responseMsg = new ResponsePayload(); try { PolicyAdministratorPoint pap = policyManagementService.getPAP(); pap.updateProfile(profile); - Response.status(HttpStatus.SC_OK); responseMsg.setMessageFromServer("Profile has been updated successfully."); - return responseMsg; - } catch (PolicyManagementException e) { - String error = "Policy Management related exception"; - log.error(error, e); - throw new MDMAPIException(error, e); - } - } + return Response.status(Response.Status.OK).entity(responseMsg).build(); + } catch (PolicyManagementException e) { + String msg = "Policy Management related exception"; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + } @DELETE @Path("{id}") - public ResponsePayload deleteProfile(@PathParam("id") int profileId) throws MDMAPIException { - PolicyManagerService policyManagementService = MDMAPIUtils.getPolicyManagementService(); - ResponsePayload responseMsg = new ResponsePayload(); + public Response deleteProfile(@PathParam("id") int profileId) { + PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); + ResponsePayload responseMsg = new ResponsePayload(); try { PolicyAdministratorPoint pap = policyManagementService.getPAP(); org.wso2.carbon.policy.mgt.common.Profile profile = pap.getProfile(profileId); pap.deleteProfile(profile); - Response.status(HttpStatus.SC_OK); responseMsg.setMessageFromServer("Profile has been deleted successfully."); - return responseMsg; - } catch (PolicyManagementException e) { - String error = "Policy Management related exception"; - log.error(error, e); - throw new MDMAPIException(error, e); - } - } + return Response.status(Response.Status.OK).entity(responseMsg).build(); + } catch (PolicyManagementException e) { + String msg = "Policy Management related exception"; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + } } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/Role.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/Role.java index f0157ef4e97..d0e434c34f8 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/Role.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/Role.java @@ -24,23 +24,35 @@ import org.apache.commons.logging.LogFactory; import org.wso2.carbon.CarbonConstants; import org.wso2.carbon.base.MultitenantConstants; import org.wso2.carbon.mdm.api.common.MDMAPIException; -import org.wso2.carbon.mdm.api.util.MDMAPIUtils; +import org.wso2.carbon.mdm.api.util.DeviceMgtAPIUtils; import org.wso2.carbon.mdm.api.util.ResponsePayload; import org.wso2.carbon.mdm.beans.RoleWrapper; import org.wso2.carbon.mdm.util.SetReferenceTransformer; -import org.wso2.carbon.user.api.*; +import org.wso2.carbon.user.api.AuthorizationManager; +import org.wso2.carbon.user.api.Permission; +import org.wso2.carbon.user.api.UserRealm; +import org.wso2.carbon.user.api.UserStoreException; +import org.wso2.carbon.user.api.UserStoreManager; import org.wso2.carbon.user.core.common.AbstractUserStoreManager; import org.wso2.carbon.user.mgt.UserRealmProxy; import org.wso2.carbon.user.mgt.common.UIPermissionNode; import org.wso2.carbon.user.mgt.common.UserAdminException; -import javax.ws.rs.*; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +@SuppressWarnings("NonJaxWsWebServices") public class Role { private static Log log = LogFactory.getLog(Role.class); @@ -49,63 +61,49 @@ public class Role { * Get user roles (except all internal roles) from system. * * @return A list of users - * @throws MDMAPIException */ @GET - @Produces ({MediaType.APPLICATION_JSON}) - public Response getRoles() throws MDMAPIException { - UserStoreManager userStoreManager = MDMAPIUtils.getUserStoreManager(); - String[] roles; + @Produces({MediaType.APPLICATION_JSON}) + public Response getRoles() { + List filteredRoles; try { - if (log.isDebugEnabled()) { - log.debug("Getting the list of user roles"); - } - roles = userStoreManager.getRoleNames(); - - } catch (UserStoreException e) { - String msg = "Error occurred while retrieving the list of user roles."; - log.error(msg, e); - throw new MDMAPIException(msg, e); - } - // removing all internal roles and roles created for Service-providers - List filteredRoles = new ArrayList(); - for (String role : roles) { - if (!(role.startsWith("Internal/") || role.startsWith("Application/"))) { - filteredRoles.add(role); - } + filteredRoles = getRolesFromUserStore(); + } catch (MDMAPIException e) { + log.error(e.getErrorMessage(), e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getErrorMessage()).build(); } ResponsePayload responsePayload = new ResponsePayload(); responsePayload.setStatusCode(HttpStatus.SC_OK); responsePayload.setMessageFromServer("All user roles were successfully retrieved."); responsePayload.setResponseContent(filteredRoles); - return Response.status(HttpStatus.SC_OK).entity(responsePayload).build(); + return Response.status(Response.Status.OK).entity(responsePayload).build(); } /** * Get user roles by user store(except all internal roles) from system. * * @return A list of users - * @throws MDMAPIException */ @GET - @Path ("{userStore}") - @Produces ({MediaType.APPLICATION_JSON}) - public Response getRoles(@PathParam ("userStore") String userStore) throws MDMAPIException { - AbstractUserStoreManager abstractUserStoreManager = (AbstractUserStoreManager) MDMAPIUtils.getUserStoreManager(); + @Path("{userStore}") + @Produces({MediaType.APPLICATION_JSON}) + public Response getRoles(@PathParam("userStore") String userStore) { String[] roles; try { + AbstractUserStoreManager abstractUserStoreManager = + (AbstractUserStoreManager) DeviceMgtAPIUtils.getUserStoreManager(); if (log.isDebugEnabled()) { log.debug("Getting the list of user roles"); } - roles = abstractUserStoreManager.getRoleNames(userStore+"/*", -1, false, true, true); + roles = abstractUserStoreManager.getRoleNames(userStore + "/*", -1, false, true, true); - } catch (UserStoreException e) { + } catch (UserStoreException | MDMAPIException e) { String msg = "Error occurred while retrieving the list of user roles."; log.error(msg, e); - throw new MDMAPIException(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } // removing all internal roles and roles created for Service-providers - List filteredRoles = new ArrayList(); + List filteredRoles = new ArrayList<>(); for (String role : roles) { if (!(role.startsWith("Internal/") || role.startsWith("Application/"))) { filteredRoles.add(role); @@ -115,34 +113,34 @@ public class Role { responsePayload.setStatusCode(HttpStatus.SC_OK); responsePayload.setMessageFromServer("All user roles were successfully retrieved."); responsePayload.setResponseContent(filteredRoles); - return Response.status(HttpStatus.SC_OK).entity(responsePayload).build(); + return Response.status(Response.Status.OK).entity(responsePayload).build(); } /** * Get user roles by providing a filtering criteria(except all internal roles & system roles) from system. * * @return A list of users - * @throws MDMAPIException */ @GET - @Path ("search") - @Produces ({MediaType.APPLICATION_JSON}) - public Response getMatchingRoles(@QueryParam ("filter") String filter) throws MDMAPIException { - AbstractUserStoreManager abstractUserStoreManager = (AbstractUserStoreManager) MDMAPIUtils.getUserStoreManager(); + @Path("search") + @Produces({MediaType.APPLICATION_JSON}) + public Response getMatchingRoles(@QueryParam("filter") String filter) { String[] roles; try { + AbstractUserStoreManager abstractUserStoreManager = + (AbstractUserStoreManager) DeviceMgtAPIUtils.getUserStoreManager(); if (log.isDebugEnabled()) { log.debug("Getting the list of user roles using filter : " + filter); } roles = abstractUserStoreManager.getRoleNames("*" + filter + "*", -1, true, true, true); - } catch (UserStoreException e) { + } catch (UserStoreException | MDMAPIException e) { String msg = "Error occurred while retrieving the list of user roles using the filter : " + filter; log.error(msg, e); - throw new MDMAPIException(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } // removing all internal roles and roles created for Service-providers - List filteredRoles = new ArrayList(); + List filteredRoles = new ArrayList<>(); for (String role : roles) { if (!(role.startsWith("Internal/") || role.startsWith("Application/"))) { filteredRoles.add(role); @@ -152,74 +150,57 @@ public class Role { responsePayload.setStatusCode(HttpStatus.SC_OK); responsePayload.setMessageFromServer("All matching user roles were successfully retrieved."); responsePayload.setResponseContent(filteredRoles); - return Response.status(HttpStatus.SC_OK).entity(responsePayload).build(); + return Response.status(Response.Status.OK).entity(responsePayload).build(); } /** * Get role permissions. * * @return list of permissions - * @throws MDMAPIException */ @GET - @Path ("permissions") - @Produces ({MediaType.APPLICATION_JSON}) - public ResponsePayload getPermissions(@QueryParam ("rolename") String roleName) throws MDMAPIException { - final UserRealm userRealm = MDMAPIUtils.getUserRealm(); - org.wso2.carbon.user.core.UserRealm userRealmCore = null; - final UIPermissionNode rolePermissions; - if (userRealm instanceof org.wso2.carbon.user.core.UserRealm) { - userRealmCore = (org.wso2.carbon.user.core.UserRealm) userRealm; - } - + @Path("permissions") + @Produces({MediaType.APPLICATION_JSON}) + public Response getPermissions(@QueryParam("rolename") String roleName) { try { - final UserRealmProxy userRealmProxy = new UserRealmProxy(userRealmCore); - rolePermissions = userRealmProxy.getRolePermissions(roleName, MultitenantConstants.SUPER_TENANT_ID); - UIPermissionNode[] deviceMgtPermissions = new UIPermissionNode[2]; - - for (UIPermissionNode permissionNode : rolePermissions.getNodeList()) { - if (permissionNode.getResourcePath().equals("/permission/admin")) { - for (UIPermissionNode node : permissionNode.getNodeList()) { - if (node.getResourcePath().equals("/permission/admin/device-mgt")) { - deviceMgtPermissions[0] = node; - } else if (node.getResourcePath().equals("/permission/admin/login")) { - deviceMgtPermissions[1] = node; - } - } - } + final UserRealm userRealm = DeviceMgtAPIUtils.getUserRealm(); + org.wso2.carbon.user.core.UserRealm userRealmCore = null; + final UIPermissionNode rolePermissions; + if (userRealm instanceof org.wso2.carbon.user.core.UserRealm) { + userRealmCore = (org.wso2.carbon.user.core.UserRealm) userRealm; } - rolePermissions.setNodeList(deviceMgtPermissions); - } catch (UserAdminException e) { + final UserRealmProxy userRealmProxy = new UserRealmProxy(userRealmCore); + rolePermissions = getUIPermissionNode(roleName, userRealmProxy); + ResponsePayload responsePayload = new ResponsePayload(); + responsePayload.setStatusCode(HttpStatus.SC_OK); + responsePayload.setMessageFromServer("All permissions retrieved"); + responsePayload.setResponseContent(rolePermissions); + return Response.status(Response.Status.OK).entity(responsePayload).build(); + } catch (UserAdminException | MDMAPIException e) { String msg = "Error occurred while retrieving the user role"; log.error(msg, e); - throw new MDMAPIException(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } - ResponsePayload responsePayload = new ResponsePayload(); - responsePayload.setStatusCode(HttpStatus.SC_OK); - responsePayload.setMessageFromServer("All permissions retrieved"); - responsePayload.setResponseContent(rolePermissions); - return responsePayload; } /** * Get user role of the system * * @return user role - * @throws MDMAPIException */ @GET @Path("role") - @Produces ({MediaType.APPLICATION_JSON}) - public ResponsePayload getRole(@QueryParam ("rolename") String roleName) throws MDMAPIException { - final UserStoreManager userStoreManager = MDMAPIUtils.getUserStoreManager(); - final UserRealm userRealm = MDMAPIUtils.getUserRealm(); - org.wso2.carbon.user.core.UserRealm userRealmCore = null; - if (userRealm instanceof org.wso2.carbon.user.core.UserRealm) { - userRealmCore = (org.wso2.carbon.user.core.UserRealm) userRealm; - } - + @Produces({MediaType.APPLICATION_JSON}) + public Response getRole(@QueryParam("rolename") String roleName) { RoleWrapper roleWrapper = new RoleWrapper(); try { + final UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager(); + final UserRealm userRealm = DeviceMgtAPIUtils.getUserRealm(); + org.wso2.carbon.user.core.UserRealm userRealmCore = null; + if (userRealm instanceof org.wso2.carbon.user.core.UserRealm) { + userRealmCore = (org.wso2.carbon.user.core.UserRealm) userRealm; + } + final UserRealmProxy userRealmProxy = new UserRealmProxy(userRealmCore); if (log.isDebugEnabled()) { log.debug("Getting the list of user roles"); @@ -228,56 +209,57 @@ public class Role { roleWrapper.setRoleName(roleName); roleWrapper.setUsers(userStoreManager.getUserListOfRole(roleName)); // Get the permission nodes and hand picking only device management and login perms - final UIPermissionNode rolePermissions = - userRealmProxy.getRolePermissions(roleName, MultitenantConstants.SUPER_TENANT_ID); - UIPermissionNode[] deviceMgtPermissions = new UIPermissionNode[2]; - - for (UIPermissionNode permissionNode : rolePermissions.getNodeList()) { - if (permissionNode.getResourcePath().equals("/permission/admin")) { - for (UIPermissionNode node : permissionNode.getNodeList()) { - if (node.getResourcePath().equals("/permission/admin/device-mgt")) { - deviceMgtPermissions[0] = node; - } else if (node.getResourcePath().equals("/permission/admin/login")) { - deviceMgtPermissions[1] = node; - } - } - } - } - rolePermissions.setNodeList(deviceMgtPermissions); - ArrayList permList = new ArrayList(); + final UIPermissionNode rolePermissions = getUIPermissionNode(roleName, userRealmProxy); + ArrayList permList = new ArrayList<>(); iteratePermissions(rolePermissions, permList); roleWrapper.setPermissionList(rolePermissions); String[] permListAr = new String[permList.size()]; roleWrapper.setPermissions(permList.toArray(permListAr)); } - } catch (UserStoreException e) { + } catch (UserStoreException | UserAdminException | MDMAPIException e) { String msg = "Error occurred while retrieving the user role"; log.error(msg, e); - throw new MDMAPIException(msg, e); - } catch (UserAdminException e) { - String msg = "Error occurred while retrieving the user role"; - log.error(msg, e); - throw new MDMAPIException(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } ResponsePayload responsePayload = new ResponsePayload(); responsePayload.setStatusCode(HttpStatus.SC_OK); responsePayload.setMessageFromServer("All user roles were successfully retrieved."); responsePayload.setResponseContent(roleWrapper); - return responsePayload; + return Response.status(Response.Status.OK).entity(responsePayload).build(); + } + + private UIPermissionNode getUIPermissionNode(String roleName, UserRealmProxy userRealmProxy) + throws UserAdminException { + final UIPermissionNode rolePermissions = + userRealmProxy.getRolePermissions(roleName, MultitenantConstants.SUPER_TENANT_ID); + UIPermissionNode[] deviceMgtPermissions = new UIPermissionNode[2]; + + for (UIPermissionNode permissionNode : rolePermissions.getNodeList()) { + if (permissionNode.getResourcePath().equals("/permission/admin")) { + for (UIPermissionNode node : permissionNode.getNodeList()) { + if (node.getResourcePath().equals("/permission/admin/device-mgt")) { + deviceMgtPermissions[0] = node; + } else if (node.getResourcePath().equals("/permission/admin/login")) { + deviceMgtPermissions[1] = node; + } + } + } + } + rolePermissions.setNodeList(deviceMgtPermissions); + return rolePermissions; } /** * API is used to persist a new Role * - * @param roleWrapper - * @return - * @throws MDMAPIException + * @param roleWrapper for role + * @return response */ @POST - @Produces ({MediaType.APPLICATION_JSON}) - public Response addRole(RoleWrapper roleWrapper) throws MDMAPIException { - UserStoreManager userStoreManager = MDMAPIUtils.getUserStoreManager(); + @Produces({MediaType.APPLICATION_JSON}) + public Response addRole(RoleWrapper roleWrapper) { try { + UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager(); if (log.isDebugEnabled()) { log.debug("Persisting the role to user store"); } @@ -291,29 +273,27 @@ public class Role { } } userStoreManager.addRole(roleWrapper.getRoleName(), roleWrapper.getUsers(), permissions); - } catch (UserStoreException e) { + } catch (UserStoreException | MDMAPIException e) { String msg = e.getMessage(); log.error(msg, e); - throw new MDMAPIException(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } - return Response.status(HttpStatus.SC_CREATED).build(); + return Response.status(Response.Status.OK).build(); } /** * API is used to update a role Role * - * @param roleWrapper - * @return - * @throws MDMAPIException + * @param roleWrapper for role + * @return response */ @PUT - @Produces ({MediaType.APPLICATION_JSON}) - public Response updateRole(@QueryParam ("rolename") String roleName, RoleWrapper roleWrapper) throws - MDMAPIException { - final UserStoreManager userStoreManager = MDMAPIUtils.getUserStoreManager(); - final AuthorizationManager authorizationManager = MDMAPIUtils.getAuthorizationManager(); + @Produces({MediaType.APPLICATION_JSON}) + public Response updateRole(@QueryParam("rolename") String roleName, RoleWrapper roleWrapper) { String newRoleName = roleWrapper.getRoleName(); try { + final UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager(); + final AuthorizationManager authorizationManager = DeviceMgtAPIUtils.getAuthorizationManager(); if (log.isDebugEnabled()) { log.debug("Updating the role to user store"); } @@ -321,13 +301,13 @@ public class Role { userStoreManager.updateRoleName(roleName, newRoleName); } if (roleWrapper.getUsers() != null) { - SetReferenceTransformer transformer = new SetReferenceTransformer(); + SetReferenceTransformer transformer = new SetReferenceTransformer<>(); transformer.transform(Arrays.asList(userStoreManager.getUserListOfRole(newRoleName)), Arrays.asList(roleWrapper.getUsers())); - final String[] usersToAdd = (String[]) - transformer.getObjectsToAdd().toArray(new String[transformer.getObjectsToAdd().size()]); - final String[] usersToDelete = (String[]) - transformer.getObjectsToRemove().toArray(new String[transformer.getObjectsToRemove().size()]); + final String[] usersToAdd = transformer.getObjectsToAdd().toArray(new String[transformer + .getObjectsToAdd().size()]); + final String[] usersToDelete = transformer.getObjectsToRemove().toArray(new String[transformer + .getObjectsToRemove().size()]); userStoreManager.updateUserListOfRole(newRoleName, usersToDelete, usersToAdd); } if (roleWrapper.getPermissions() != null) { @@ -340,77 +320,74 @@ public class Role { } } } - } catch (UserStoreException e) { + } catch (UserStoreException | MDMAPIException e) { String msg = e.getMessage(); log.error(msg, e); - throw new MDMAPIException(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } - return Response.status(HttpStatus.SC_OK).build(); + return Response.status(Response.Status.OK).build(); } /** * API is used to delete a role and authorizations * - * @param roleName - * @return - * @throws MDMAPIException + * @param roleName to delete + * @return response */ @DELETE - @Produces ({MediaType.APPLICATION_JSON}) - public Response deleteRole(@QueryParam ("rolename") String roleName) throws MDMAPIException { - final UserStoreManager userStoreManager = MDMAPIUtils.getUserStoreManager(); - final AuthorizationManager authorizationManager = MDMAPIUtils.getAuthorizationManager(); + @Produces({MediaType.APPLICATION_JSON}) + public Response deleteRole(@QueryParam("rolename") String roleName) { try { + final UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager(); + final AuthorizationManager authorizationManager = DeviceMgtAPIUtils.getAuthorizationManager(); if (log.isDebugEnabled()) { log.debug("Deleting the role in user store"); } userStoreManager.deleteRole(roleName); // Delete all authorizations for the current role before deleting authorizationManager.clearRoleAuthorization(roleName); - } catch (UserStoreException e) { + } catch (UserStoreException | MDMAPIException e) { String msg = "Error occurred while deleting the role: " + roleName; log.error(msg, e); - throw new MDMAPIException(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } - return Response.status(HttpStatus.SC_OK).build(); + return Response.status(Response.Status.OK).build(); } /** * API is used to update users of a role * - * @param roleName - * @param userList - * @return - * @throws MDMAPIException + * @param roleName to update + * @param userList of the users + * @return response */ @PUT - @Path ("users") - @Produces ({MediaType.APPLICATION_JSON}) - public Response updateUsers(@QueryParam ("rolename") String roleName, List userList) - throws MDMAPIException { - final UserStoreManager userStoreManager = MDMAPIUtils.getUserStoreManager(); + @Path("users") + @Produces({MediaType.APPLICATION_JSON}) + public Response updateUsers(@QueryParam("rolename") String roleName, List userList) { try { + final UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager(); if (log.isDebugEnabled()) { log.debug("Updating the users of a role"); } - SetReferenceTransformer transformer = new SetReferenceTransformer(); + SetReferenceTransformer transformer = new SetReferenceTransformer<>(); transformer.transform(Arrays.asList(userStoreManager.getUserListOfRole(roleName)), - userList); - final String[] usersToAdd = (String[]) - transformer.getObjectsToAdd().toArray(new String[transformer.getObjectsToAdd().size()]); - final String[] usersToDelete = (String[]) - transformer.getObjectsToRemove().toArray(new String[transformer.getObjectsToRemove().size()]); + userList); + final String[] usersToAdd = transformer.getObjectsToAdd().toArray(new String[transformer + .getObjectsToAdd().size()]); + final String[] usersToDelete = transformer.getObjectsToRemove().toArray(new String[transformer + .getObjectsToRemove().size()]); userStoreManager.updateUserListOfRole(roleName, usersToDelete, usersToAdd); - } catch (UserStoreException e) { + } catch (UserStoreException | MDMAPIException e) { String msg = "Error occurred while saving the users of the role: " + roleName; log.error(msg, e); - throw new MDMAPIException(e.getMessage(), e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } - return Response.status(HttpStatus.SC_OK).build(); + return Response.status(Response.Status.OK).build(); } - public ArrayList iteratePermissions(UIPermissionNode uiPermissionNode, ArrayList list) { + private ArrayList iteratePermissions(UIPermissionNode uiPermissionNode, ArrayList list) { for (UIPermissionNode permissionNode : uiPermissionNode.getNodeList()) { list.add(permissionNode.getResourcePath()); if (permissionNode.getNodeList() != null && permissionNode.getNodeList().length > 0) { @@ -424,12 +401,22 @@ public class Role { * This method is used to retrieve the role count of the system. * * @return returns the count. - * @throws MDMAPIException */ @GET @Path("count") - public int getRoleCount() throws MDMAPIException { - UserStoreManager userStoreManager = MDMAPIUtils.getUserStoreManager(); + public Response getRoleCount() { + try { + List filteredRoles = getRolesFromUserStore(); + Integer count = filteredRoles.size(); + return Response.status(Response.Status.OK).entity(count).build(); + } catch (MDMAPIException e) { + log.error(e.getErrorMessage(), e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getErrorMessage()).build(); + } + } + + private List getRolesFromUserStore() throws MDMAPIException { + UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager(); String[] roles; try { if (log.isDebugEnabled()) { @@ -439,16 +426,15 @@ public class Role { } catch (UserStoreException e) { String msg = "Error occurred while retrieving the list of user roles."; - log.error(msg, e); throw new MDMAPIException(msg, e); } // removing all internal roles and roles created for Service-providers - List filteredRoles = new ArrayList(); + List filteredRoles = new ArrayList<>(); for (String role : roles) { if (!(role.startsWith("Internal/") || role.startsWith("Application/"))) { filteredRoles.add(role); } } - return filteredRoles.size(); + return filteredRoles; } } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/User.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/User.java index e1e065c1b37..bbfed9dad80 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/User.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/User.java @@ -30,7 +30,7 @@ import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService; import org.wso2.carbon.device.mgt.core.service.EmailMetaInfo; import org.wso2.carbon.mdm.api.common.MDMAPIException; import org.wso2.carbon.mdm.api.util.CredentialManagementResponseBuilder; -import org.wso2.carbon.mdm.api.util.MDMAPIUtils; +import org.wso2.carbon.mdm.api.util.DeviceMgtAPIUtils; import org.wso2.carbon.mdm.api.util.ResponsePayload; import org.wso2.carbon.mdm.beans.UserCredentialWrapper; import org.wso2.carbon.mdm.beans.UserWrapper; @@ -52,30 +52,38 @@ import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import java.io.UnsupportedEncodingException; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Properties; +import java.util.Random; +import java.util.TreeSet; /** * This class represents the JAX-RS services of User related functionality. */ +@SuppressWarnings("NonJaxWsWebServices") public class User { - private static Log log = LogFactory.getLog(User.class); private static final String ROLE_EVERYONE = "Internal/everyone"; + private static Log log = LogFactory.getLog(User.class); /** * Method to add user to emm-user-store. * * @param userWrapper Wrapper object representing input json payload * @return {Response} Status of the request wrapped inside Response object - * @throws MDMAPIException */ @POST @Consumes({MediaType.APPLICATION_JSON}) @Produces({MediaType.APPLICATION_JSON}) - public Response addUser(UserWrapper userWrapper) throws MDMAPIException { - UserStoreManager userStoreManager = MDMAPIUtils.getUserStoreManager(); + public Response addUser(UserWrapper userWrapper) { ResponsePayload responsePayload = new ResponsePayload(); try { + UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager(); if (userStoreManager.isExistingUser(userWrapper.getUsername())) { // if user already exists if (log.isDebugEnabled()) { @@ -87,7 +95,7 @@ public class User { responsePayload. setMessageFromServer("User by username: " + userWrapper.getUsername() + " already exists. Therefore, request made to add user was refused."); - return Response.status(HttpStatus.SC_CONFLICT).entity(responsePayload).build(); + return Response.status(Response.Status.CONFLICT).entity(responsePayload).build(); } else { String initialUserPassword = generateInitialUserPassword(); Map defaultUserClaims = @@ -106,12 +114,12 @@ public class User { responsePayload.setStatusCode(HttpStatus.SC_CREATED); responsePayload.setMessageFromServer("User by username: " + userWrapper.getUsername() + " was successfully added."); - return Response.status(HttpStatus.SC_CREATED).entity(responsePayload).build(); + return Response.status(Response.Status.CREATED).entity(responsePayload).build(); } - } catch (UserStoreException e) { + } catch (UserStoreException | MDMAPIException e) { String msg = "Exception in trying to add user by username: " + userWrapper.getUsername(); log.error(msg, e); - throw new MDMAPIException(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } } @@ -119,16 +127,15 @@ public class User { * Method to get user information from emm-user-store. * * @param username User-name of the user - * @return {Response} Status of the request wrapped inside Response object - * @throws MDMAPIException + * @return {Response} Status of the request wrapped inside Response object. */ @GET @Path("view") @Produces({MediaType.APPLICATION_JSON}) - public Response getUser(@QueryParam("username") String username) throws MDMAPIException { - UserStoreManager userStoreManager = MDMAPIUtils.getUserStoreManager(); + public Response getUser(@QueryParam("username") String username) { ResponsePayload responsePayload = new ResponsePayload(); try { + UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager(); if (userStoreManager.isExistingUser(username)) { UserWrapper user = new UserWrapper(); user.setUsername(username); @@ -142,7 +149,7 @@ public class User { responsePayload.setStatusCode(HttpStatus.SC_OK); responsePayload.setMessageFromServer("User information was retrieved successfully."); responsePayload.setResponseContent(user); - return Response.status(HttpStatus.SC_OK).entity(responsePayload).build(); + return Response.status(Response.Status.OK).entity(responsePayload).build(); } else { // Outputting debug message upon trying to remove non-existing user if (log.isDebugEnabled()) { @@ -152,12 +159,12 @@ public class User { responsePayload.setStatusCode(HttpStatus.SC_BAD_REQUEST); responsePayload.setMessageFromServer( "User by username: " + username + " does not exist."); - return Response.status(HttpStatus.SC_NOT_FOUND).entity(responsePayload).build(); + return Response.status(Response.Status.BAD_REQUEST).entity(responsePayload).build(); } - } catch (UserStoreException e) { + } catch (UserStoreException | MDMAPIException e) { String msg = "Exception in trying to retrieve user by username: " + username; log.error(msg, e); - throw new MDMAPIException(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } } @@ -165,17 +172,15 @@ public class User { * Update user in user store * * @param userWrapper Wrapper object representing input json payload - * @return {Response} Status of the request wrapped inside Response object - * @throws MDMAPIException + * @return {Response} Status of the request wrapped inside Response object. */ @PUT @Consumes({MediaType.APPLICATION_JSON}) @Produces({MediaType.APPLICATION_JSON}) - public Response updateUser(UserWrapper userWrapper, @QueryParam("username") String username) - throws MDMAPIException { - UserStoreManager userStoreManager = MDMAPIUtils.getUserStoreManager(); + public Response updateUser(UserWrapper userWrapper, @QueryParam("username") String username) { ResponsePayload responsePayload = new ResponsePayload(); try { + UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager(); if (userStoreManager.isExistingUser(userWrapper.getUsername())) { Map defaultUserClaims = buildDefaultUserClaims(userWrapper.getFirstname(), userWrapper.getLastname(), @@ -221,7 +226,7 @@ public class User { responsePayload.setStatusCode(HttpStatus.SC_CREATED); responsePayload.setMessageFromServer("User by username: " + userWrapper.getUsername() + " was successfully updated."); - return Response.status(HttpStatus.SC_CREATED).entity(responsePayload).build(); + return Response.status(Response.Status.CREATED).entity(responsePayload).build(); } else { if (log.isDebugEnabled()) { log.debug("User by username: " + userWrapper.getUsername() + @@ -232,12 +237,12 @@ public class User { responsePayload. setMessageFromServer("User by username: " + userWrapper.getUsername() + " doesn't exists. Therefore, request made to update user was refused."); - return Response.status(HttpStatus.SC_CONFLICT).entity(responsePayload).build(); + return Response.status(Response.Status.CONFLICT).entity(responsePayload).build(); } - } catch (UserStoreException | UnsupportedEncodingException e) { + } catch (UserStoreException | UnsupportedEncodingException | MDMAPIException e) { String msg = "Exception in trying to update user by username: " + userWrapper.getUsername(); log.error(msg, e); - throw new MDMAPIException(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } } @@ -291,15 +296,14 @@ public class User { * Method to remove user from emm-user-store. * * @param username Username of the user - * @return {Response} Status of the request wrapped inside Response object - * @throws MDMAPIException + * @return {Response} Status of the request wrapped inside Response object. */ @DELETE @Produces({MediaType.APPLICATION_JSON}) - public Response removeUser(@QueryParam("username") String username) throws MDMAPIException { - UserStoreManager userStoreManager = MDMAPIUtils.getUserStoreManager(); + public Response removeUser(@QueryParam("username") String username) { ResponsePayload responsePayload = new ResponsePayload(); try { + UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager(); if (userStoreManager.isExistingUser(username)) { // if user already exists, trying to remove user userStoreManager.deleteUser(username); @@ -311,7 +315,7 @@ public class User { responsePayload.setStatusCode(HttpStatus.SC_OK); responsePayload.setMessageFromServer( "User by username: " + username + " was successfully removed."); - return Response.status(HttpStatus.SC_OK).entity(responsePayload).build(); + return Response.status(Response.Status.OK).entity(responsePayload).build(); } else { // Outputting debug message upon trying to remove non-existing user if (log.isDebugEnabled()) { @@ -321,12 +325,12 @@ public class User { responsePayload.setStatusCode(HttpStatus.SC_BAD_REQUEST); responsePayload.setMessageFromServer( "User by username: " + username + " does not exist for removal."); - return Response.status(HttpStatus.SC_BAD_REQUEST).entity(responsePayload).build(); + return Response.status(Response.Status.BAD_REQUEST).entity(responsePayload).build(); } - } catch (UserStoreException e) { + } catch (UserStoreException | MDMAPIException e) { String msg = "Exception in trying to remove user by username: " + username; log.error(msg, e); - throw new MDMAPIException(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } } @@ -336,11 +340,14 @@ public class User { * @param userStoreManager User Store Manager associated with the currently logged in user * @param username Username of the currently logged in user * @return the list of filtered roles - * @throws UserStoreException */ - private List getFilteredRoles(UserStoreManager userStoreManager, String username) - throws UserStoreException { - String[] roleListOfUser = userStoreManager.getRoleListOfUser(username); + private List getFilteredRoles(UserStoreManager userStoreManager, String username) { + String[] roleListOfUser = new String[0]; + try { + roleListOfUser = userStoreManager.getRoleListOfUser(username); + } catch (UserStoreException e) { + e.printStackTrace(); + } List filteredRoles = new ArrayList<>(); for (String role : roleListOfUser) { if (!(role.startsWith("Internal/") || role.startsWith("Application/"))) { @@ -354,18 +361,17 @@ public class User { * Get user's roles by username * * @param username Username of the user - * @return {Response} Status of the request wrapped inside Response object - * @throws MDMAPIException + * @return {Response} Status of the request wrapped inside Response object. */ @GET @Path("roles") @Produces({MediaType.APPLICATION_JSON}) - public Response getRoles(@QueryParam("username") String username) throws MDMAPIException { - UserStoreManager userStoreManager = MDMAPIUtils.getUserStoreManager(); + public Response getRoles(@QueryParam("username") String username) { ResponsePayload responsePayload = new ResponsePayload(); try { + UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager(); if (userStoreManager.isExistingUser(username)) { - responsePayload.setResponseContent(Arrays.asList(getFilteredRoles(userStoreManager, username))); + responsePayload.setResponseContent(Collections.singletonList(getFilteredRoles(userStoreManager, username))); // Outputting debug message upon successful removal of user if (log.isDebugEnabled()) { log.debug("User by username: " + username + " was successfully removed."); @@ -374,7 +380,7 @@ public class User { responsePayload.setStatusCode(HttpStatus.SC_OK); responsePayload.setMessageFromServer( "User roles obtained for user " + username); - return Response.status(HttpStatus.SC_OK).entity(responsePayload).build(); + return Response.status(Response.Status.OK).entity(responsePayload).build(); } else { // Outputting debug message upon trying to remove non-existing user if (log.isDebugEnabled()) { @@ -384,12 +390,12 @@ public class User { responsePayload.setStatusCode(HttpStatus.SC_BAD_REQUEST); responsePayload.setMessageFromServer( "User by username: " + username + " does not exist for role retrieval."); - return Response.status(HttpStatus.SC_BAD_REQUEST).entity(responsePayload).build(); + return Response.status(Response.Status.BAD_REQUEST).entity(responsePayload).build(); } - } catch (UserStoreException e) { + } catch (UserStoreException | MDMAPIException e) { String msg = "Exception in trying to retrieve roles for user by username: " + username; log.error(msg, e); - throw new MDMAPIException(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } } @@ -397,17 +403,16 @@ public class User { * Get the list of all users with all user-related info. * * @return A list of users - * @throws MDMAPIException */ @GET @Produces({MediaType.APPLICATION_JSON}) - public Response getAllUsers() throws MDMAPIException { + public Response getAllUsers() { if (log.isDebugEnabled()) { log.debug("Getting the list of users with all user-related information"); } - UserStoreManager userStoreManager = MDMAPIUtils.getUserStoreManager(); List userList; try { + UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager(); String[] users = userStoreManager.listUsers("*", -1); userList = new ArrayList<>(users.length); UserWrapper user; @@ -419,10 +424,10 @@ public class User { user.setLastname(getClaimValue(username, Constants.USER_CLAIM_LAST_NAME)); userList.add(user); } - } catch (UserStoreException e) { + } catch (UserStoreException | MDMAPIException e) { String msg = "Error occurred while retrieving the list of users"; log.error(msg, e); - throw new MDMAPIException(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } ResponsePayload responsePayload = new ResponsePayload(); responsePayload.setStatusCode(HttpStatus.SC_OK); @@ -431,25 +436,24 @@ public class User { responsePayload.setMessageFromServer("All users were successfully retrieved. " + "Obtained user count: " + count); responsePayload.setResponseContent(userList); - return Response.status(HttpStatus.SC_OK).entity(responsePayload).build(); + return Response.status(Response.Status.OK).entity(responsePayload).build(); } /** * Get the list of all users with all user-related info. * * @return A list of users - * @throws MDMAPIException */ @GET @Path("{filter}") @Produces({MediaType.APPLICATION_JSON}) - public Response getMatchingUsers(@PathParam("filter") String filter) throws MDMAPIException { + public Response getMatchingUsers(@PathParam("filter") String filter) { if (log.isDebugEnabled()) { log.debug("Getting the list of users with all user-related information using the filter : " + filter); } - UserStoreManager userStoreManager = MDMAPIUtils.getUserStoreManager(); List userList; try { + UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager(); String[] users = userStoreManager.listUsers(filter + "*", -1); userList = new ArrayList<>(users.length); UserWrapper user; @@ -461,10 +465,10 @@ public class User { user.setLastname(getClaimValue(username, Constants.USER_CLAIM_LAST_NAME)); userList.add(user); } - } catch (UserStoreException e) { + } catch (UserStoreException | MDMAPIException e) { String msg = "Error occurred while retrieving the list of users using the filter : " + filter; log.error(msg, e); - throw new MDMAPIException(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } ResponsePayload responsePayload = new ResponsePayload(); responsePayload.setStatusCode(HttpStatus.SC_OK); @@ -473,24 +477,23 @@ public class User { responsePayload.setMessageFromServer("All users were successfully retrieved. " + "Obtained user count: " + count); responsePayload.setResponseContent(userList); - return Response.status(HttpStatus.SC_OK).entity(responsePayload).build(); + return Response.status(Response.Status.OK).entity(responsePayload).build(); } /** * Get the list of user names in the system. * * @return A list of user names. - * @throws MDMAPIException */ @GET @Path("view-users") - public Response getAllUsersByUsername(@QueryParam("username") String userName) throws MDMAPIException { + public Response getAllUsersByUsername(@QueryParam("username") String userName) { if (log.isDebugEnabled()) { log.debug("Getting the list of users by name"); } - UserStoreManager userStoreManager = MDMAPIUtils.getUserStoreManager(); List userList; try { + UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager(); String[] users = userStoreManager.listUsers("*" + userName + "*", -1); userList = new ArrayList<>(users.length); UserWrapper user; @@ -502,10 +505,10 @@ public class User { user.setLastname(getClaimValue(username, Constants.USER_CLAIM_LAST_NAME)); userList.add(user); } - } catch (UserStoreException e) { + } catch (UserStoreException | MDMAPIException e) { String msg = "Error occurred while retrieving the list of users"; log.error(msg, e); - throw new MDMAPIException(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } ResponsePayload responsePayload = new ResponsePayload(); responsePayload.setStatusCode(HttpStatus.SC_OK); @@ -514,31 +517,30 @@ public class User { responsePayload.setMessageFromServer("All users by username were successfully retrieved. " + "Obtained user count: " + count); responsePayload.setResponseContent(userList); - return Response.status(HttpStatus.SC_OK).entity(responsePayload).build(); + return Response.status(Response.Status.OK).entity(responsePayload).build(); } /** * Get the list of user names in the system. * * @return A list of user names. - * @throws MDMAPIException */ @GET @Path("users-by-username") - public Response getAllUserNamesByUsername(@QueryParam("username") String userName) throws MDMAPIException { + public Response getAllUserNamesByUsername(@QueryParam("username") String userName) { if (log.isDebugEnabled()) { log.debug("Getting the list of users by name"); } - UserStoreManager userStoreManager = MDMAPIUtils.getUserStoreManager(); List userList; try { + UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager(); String[] users = userStoreManager.listUsers("*" + userName + "*", -1); userList = new ArrayList<>(users.length); Collections.addAll(userList, users); - } catch (UserStoreException e) { + } catch (UserStoreException | MDMAPIException e) { String msg = "Error occurred while retrieving the list of users"; log.error(msg, e); - throw new MDMAPIException(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } ResponsePayload responsePayload = new ResponsePayload(); responsePayload.setStatusCode(HttpStatus.SC_OK); @@ -547,7 +549,7 @@ public class User { responsePayload.setMessageFromServer("All users by username were successfully retrieved. " + "Obtained user count: " + count); responsePayload.setResponseContent(userList); - return Response.status(HttpStatus.SC_OK).entity(responsePayload).build(); + return Response.status(Response.Status.OK).entity(responsePayload).build(); } /** @@ -555,11 +557,10 @@ public class User { * * @param username Username of the user * @param claimUri required ClaimUri - * @return A list of usernames - * @throws MDMAPIException, UserStoreException + * @return claim value */ private String getClaimValue(String username, String claimUri) throws MDMAPIException { - UserStoreManager userStoreManager = MDMAPIUtils.getUserStoreManager(); + UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager(); try { return userStoreManager.getUserClaimValue(username, claimUri, null); } catch (UserStoreException e) { @@ -572,10 +573,8 @@ public class User { * Method used to send an invitation email to a new user to enroll a device. * * @param username Username of the user - * @throws MDMAPIException, UserStoreException, DeviceManagementException */ - private void inviteNewlyAddedUserToEnrollDevice( - String username, String password) throws MDMAPIException { + private void inviteNewlyAddedUserToEnrollDevice(String username, String password) throws MDMAPIException { if (log.isDebugEnabled()) { log.debug("Sending invitation mail to user by username: " + username); } @@ -587,7 +586,7 @@ public class User { username = "/" + username; } String[] usernameBits = username.split("/"); - DeviceManagementProviderService deviceManagementProviderService = MDMAPIUtils.getDeviceManagementService(); + DeviceManagementProviderService deviceManagementProviderService = DeviceMgtAPIUtils.getDeviceManagementService(); Properties props = new Properties(); props.setProperty("username", usernameBits[1]); @@ -611,16 +610,15 @@ public class User { * Method used to send an invitation email to a existing user to enroll a device. * * @param usernames Username list of the users to be invited - * @throws MDMAPIException */ @POST @Path("email-invitation") @Produces({MediaType.APPLICATION_JSON}) - public Response inviteExistingUsersToEnrollDevice(List usernames) throws MDMAPIException { + public Response inviteExistingUsersToEnrollDevice(List usernames) { if (log.isDebugEnabled()) { log.debug("Sending enrollment invitation mail to existing user."); } - DeviceManagementProviderService deviceManagementProviderService = MDMAPIUtils.getDeviceManagementService(); + DeviceManagementProviderService deviceManagementProviderService = DeviceMgtAPIUtils.getDeviceManagementService(); try { for (String username : usernames) { String recipient = getClaimValue(username, Constants.USER_CLAIM_EMAIL_ADDRESS); @@ -632,15 +630,15 @@ public class User { EmailMetaInfo metaInfo = new EmailMetaInfo(recipient, props); deviceManagementProviderService.sendEnrolmentInvitation(metaInfo); } - } catch (DeviceManagementException e) { + } catch (DeviceManagementException | MDMAPIException e) { String msg = "Error occurred while inviting user to enrol their device"; log.error(msg, e); - throw new MDMAPIException(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } ResponsePayload responsePayload = new ResponsePayload(); responsePayload.setStatusCode(HttpStatus.SC_OK); responsePayload.setMessageFromServer("Email invitation was successfully sent to user."); - return Response.status(HttpStatus.SC_OK).entity(responsePayload).build(); + return Response.status(Response.Status.OK).entity(responsePayload).build(); } /** @@ -648,27 +646,25 @@ public class User { * * @param username Username of the device owner * @return A list of devices - * @throws MDMAPIException */ @GET @Produces({MediaType.APPLICATION_JSON}) @Path("devices") - public Object getAllDeviceOfUser(@QueryParam("username") String username, @QueryParam("start") int startIdx, - @QueryParam("length") int length) - throws MDMAPIException { + public Response getAllDeviceOfUser(@QueryParam("username") String username, @QueryParam("start") int startIdx, + @QueryParam("length") int length) { DeviceManagementProviderService dmService; try { - dmService = MDMAPIUtils.getDeviceManagementService(); + dmService = DeviceMgtAPIUtils.getDeviceManagementService(); if (length > 0) { PaginationRequest request = new PaginationRequest(startIdx, length); request.setOwner(username); - return dmService.getDevicesOfUser(request); + return Response.status(Response.Status.OK).entity(dmService.getDevicesOfUser(request)).build(); } - return dmService.getDevicesOfUser(username); + return Response.status(Response.Status.OK).entity(dmService.getDevicesOfUser(username)).build(); } catch (DeviceManagementException e) { String msg = "Device management error"; log.error(msg, e); - throw new MDMAPIException(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } } @@ -676,22 +672,23 @@ public class User { * This method is used to retrieve the user count of the system. * * @return returns the count. - * @throws MDMAPIException + * @ */ @GET @Path("count") - public int getUserCount() throws MDMAPIException { + public Response getUserCount() { try { - String[] users = MDMAPIUtils.getUserStoreManager().listUsers("*", -1); - if (users == null) { - return 0; + String[] users = DeviceMgtAPIUtils.getUserStoreManager().listUsers("*", -1); + Integer count = 0; + if (users != null) { + count = users.length; } - return users.length; - } catch (UserStoreException e) { + return Response.status(Response.Status.OK).entity(count).build(); + } catch (UserStoreException | MDMAPIException e) { String msg = "Error occurred while retrieving the list of users that exist within the current tenant"; log.error(msg, e); - throw new MDMAPIException(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } } @@ -701,33 +698,30 @@ public class User { * @param username * @param userList * @return - * @throws MDMAPIException + * @ */ @PUT @Path("{roleName}/users") @Produces({MediaType.APPLICATION_JSON}) - public Response updateRoles(@PathParam("username") String username, List userList) - throws MDMAPIException { - final UserStoreManager userStoreManager = MDMAPIUtils.getUserStoreManager(); + public Response updateRoles(@PathParam("username") String username, List userList) { try { + final UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager(); if (log.isDebugEnabled()) { log.debug("Updating the roles of a user"); } - SetReferenceTransformer transformer = new SetReferenceTransformer(); + SetReferenceTransformer transformer = new SetReferenceTransformer<>(); transformer.transform(Arrays.asList(userStoreManager.getRoleListOfUser(username)), userList); - final String[] rolesToAdd = (String[]) - transformer.getObjectsToAdd().toArray(new String[transformer.getObjectsToAdd().size()]); - final String[] rolesToDelete = (String[]) - transformer.getObjectsToRemove().toArray(new String[transformer.getObjectsToRemove().size()]); + final String[] rolesToAdd = transformer.getObjectsToAdd().toArray(new String[transformer.getObjectsToAdd().size()]); + final String[] rolesToDelete = transformer.getObjectsToRemove().toArray(new String[transformer.getObjectsToRemove().size()]); userStoreManager.updateRoleListOfUser(username, rolesToDelete, rolesToAdd); - } catch (UserStoreException e) { + } catch (UserStoreException | MDMAPIException e) { String msg = "Error occurred while saving the roles for user: " + username; log.error(msg, e); - throw new MDMAPIException(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } - return Response.status(HttpStatus.SC_OK).build(); + return Response.status(Response.Status.OK).build(); } /** @@ -735,13 +729,13 @@ public class User { * * @param credentials Wrapper object representing user credentials. * @return {Response} Status of the request wrapped inside Response object. - * @throws MDMAPIException + * @ */ @POST @Path("change-password") @Consumes({MediaType.APPLICATION_JSON}) @Produces({MediaType.APPLICATION_JSON}) - public Response resetPassword(UserCredentialWrapper credentials) throws MDMAPIException { + public Response resetPassword(UserCredentialWrapper credentials) { return CredentialManagementResponseBuilder.buildChangePasswordResponse(credentials); } @@ -750,13 +744,13 @@ public class User { * * @param credentials Wrapper object representing user credentials. * @return {Response} Status of the request wrapped inside Response object. - * @throws MDMAPIException + * @ */ @POST @Path("reset-password") @Consumes({MediaType.APPLICATION_JSON}) @Produces({MediaType.APPLICATION_JSON}) - public Response resetPasswordByAdmin(UserCredentialWrapper credentials) throws MDMAPIException { + public Response resetPasswordByAdmin(UserCredentialWrapper credentials) { return CredentialManagementResponseBuilder.buildResetPasswordResponse(credentials); } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/util/CredentialManagementResponseBuilder.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/util/CredentialManagementResponseBuilder.java index 6400367585c..94f766f551d 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/util/CredentialManagementResponseBuilder.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/util/CredentialManagementResponseBuilder.java @@ -37,19 +37,16 @@ public class CredentialManagementResponseBuilder { private static Log log = LogFactory.getLog(CredentialManagementResponseBuilder.class); - private ResponsePayload responsePayload; - /** * Builds the response to change the password of a user * @param credentials - User credentials * @return Response Object - * @throws MDMAPIException */ - public static Response buildChangePasswordResponse(UserCredentialWrapper credentials) throws MDMAPIException { - UserStoreManager userStoreManager = MDMAPIUtils.getUserStoreManager(); + public static Response buildChangePasswordResponse(UserCredentialWrapper credentials) { ResponsePayload responsePayload = new ResponsePayload(); try { + UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager(); byte[] decodedNewPassword = Base64.decodeBase64(credentials.getNewPassword()); byte[] decodedOldPassword = Base64.decodeBase64(credentials.getOldPassword()); userStoreManager.updateCredential(credentials.getUsername(), new String( @@ -57,48 +54,52 @@ public class CredentialManagementResponseBuilder { responsePayload.setStatusCode(HttpStatus.SC_CREATED); responsePayload.setMessageFromServer("User password by username: " + credentials.getUsername() + " was successfully changed."); - return Response.status(HttpStatus.SC_CREATED).entity(responsePayload).build(); + return Response.status(Response.Status.CREATED).entity(responsePayload).build(); } catch (UserStoreException e) { log.error(e.getMessage(), e); responsePayload.setStatusCode(HttpStatus.SC_BAD_REQUEST); responsePayload.setMessageFromServer("Old password does not match."); - return Response.status(HttpStatus.SC_BAD_REQUEST).entity(responsePayload).build(); + return Response.status(Response.Status.BAD_REQUEST).entity(responsePayload).build(); } catch (UnsupportedEncodingException e) { String errorMsg = "Could not change the password of the user: " + credentials.getUsername() + ". The Character Encoding is not supported."; log.error(errorMsg, e); - throw new MDMAPIException(errorMsg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(errorMsg).build(); + } catch (MDMAPIException e) { + log.error(e.getErrorMessage(), e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getErrorMessage()).build(); } - } /** * Builds the response to reset the password of a user * @param credentials - User credentials * @return Response Object - * @throws MDMAPIException */ - public static Response buildResetPasswordResponse(UserCredentialWrapper credentials) throws MDMAPIException { - UserStoreManager userStoreManager = MDMAPIUtils.getUserStoreManager(); + public static Response buildResetPasswordResponse(UserCredentialWrapper credentials) { ResponsePayload responsePayload = new ResponsePayload(); try { + UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager(); byte[] decodedNewPassword = Base64.decodeBase64(credentials.getNewPassword()); userStoreManager.updateCredentialByAdmin(credentials.getUsername(), new String( decodedNewPassword, "UTF-8")); responsePayload.setStatusCode(HttpStatus.SC_CREATED); responsePayload.setMessageFromServer("User password by username: " + credentials.getUsername() + " was successfully changed."); - return Response.status(HttpStatus.SC_CREATED).entity(responsePayload).build(); + return Response.status(Response.Status.CREATED).entity(responsePayload).build(); } catch (UserStoreException e) { log.error(e.getMessage(), e); responsePayload.setStatusCode(HttpStatus.SC_BAD_REQUEST); responsePayload.setMessageFromServer("Could not change the password."); - return Response.status(HttpStatus.SC_BAD_REQUEST).entity(responsePayload).build(); + return Response.status(Response.Status.BAD_REQUEST).entity(responsePayload).build(); } catch (UnsupportedEncodingException e) { String errorMsg = "Could not change the password of the user: " + credentials.getUsername() + ". The Character Encoding is not supported."; log.error(errorMsg, e); - throw new MDMAPIException(errorMsg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(errorMsg).build(); + } catch (MDMAPIException e) { + log.error(e.getErrorMessage(), e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getErrorMessage()).build(); } } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/util/MDMAPIUtils.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/util/DeviceMgtAPIUtils.java similarity index 94% rename from components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/util/MDMAPIUtils.java rename to components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/util/DeviceMgtAPIUtils.java index d2a3fb9d2f0..d7cb8f940f5 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/util/MDMAPIUtils.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/api/util/DeviceMgtAPIUtils.java @@ -33,18 +33,16 @@ import org.wso2.carbon.device.mgt.core.app.mgt.ApplicationManagementProviderServ import org.wso2.carbon.device.mgt.core.device.details.mgt.DeviceInformationManager; import org.wso2.carbon.device.mgt.core.search.mgt.SearchManagerService; import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService; +import org.wso2.carbon.device.mgt.core.service.GroupManagementProviderService; import org.wso2.carbon.mdm.api.common.MDMAPIException; -import org.wso2.carbon.ntask.core.TaskManager; import org.wso2.carbon.policy.mgt.common.PolicyMonitoringTaskException; import org.wso2.carbon.policy.mgt.core.PolicyManagerService; import org.wso2.carbon.policy.mgt.core.task.TaskScheduleService; -import org.wso2.carbon.policy.mgt.core.util.PolicyManagementConstants; import org.wso2.carbon.user.api.AuthorizationManager; import org.wso2.carbon.user.api.UserRealm; import org.wso2.carbon.user.api.UserStoreException; import org.wso2.carbon.user.api.UserStoreManager; import org.wso2.carbon.user.core.service.RealmService; -import org.wso2.carbon.utils.multitenancy.MultitenantConstants; import javax.ws.rs.core.MediaType; import java.util.List; @@ -52,12 +50,11 @@ import java.util.List; /** * MDMAPIUtils class provides utility function used by CDM REST-API classes. */ -public class MDMAPIUtils { +public class DeviceMgtAPIUtils { - private static final String NOTIFIER_FREQUENCY = "notifierFrequency"; public static final MediaType DEFAULT_CONTENT_TYPE = MediaType.APPLICATION_JSON_TYPE; - - private static Log log = LogFactory.getLog(MDMAPIUtils.class); + private static final String NOTIFIER_FREQUENCY = "notifierFrequency"; + private static Log log = LogFactory.getLog(DeviceMgtAPIUtils.class); public static int getNotifierFrequency(TenantConfiguration tenantConfiguration) { List configEntryList = tenantConfiguration.getConfiguration(); @@ -97,6 +94,18 @@ public class MDMAPIUtils { return deviceManagementProviderService; } + public static GroupManagementProviderService getGroupManagementProviderService() { + PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext(); + GroupManagementProviderService groupManagementProviderService = + (GroupManagementProviderService) ctx.getOSGiService(GroupManagementProviderService.class, null); + if (groupManagementProviderService == null) { + String msg = "Group Management service has not initialized."; + log.error(msg); + throw new IllegalStateException(msg); + } + return groupManagementProviderService; + } + public static int getTenantId(String tenantDomain) throws MDMAPIException { PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext(); RealmService realmService = (RealmService) ctx.getOSGiService(RealmService.class, null); diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/util/Constants.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/util/Constants.java index e9caa31d276..70651d64c94 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/util/Constants.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/mdm/util/Constants.java @@ -1,17 +1,17 @@ /* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. + * Copyright (c) 2016, 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 + * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * 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 + * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ @@ -19,7 +19,7 @@ package org.wso2.carbon.mdm.util; /** - * Holds the constants used by MDM-Admin web application. + * Holds the constants used by Device Management Admin web application. */ public class Constants { diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/META-INF/permissions.xml b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/META-INF/permissions.xml index d2442641f18..42fd3663695 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/META-INF/permissions.xml +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/META-INF/permissions.xml @@ -22,7 +22,7 @@ (URL) , HTTP method and OAUTH2 authorization scope (not-required). When defining dynamic paths for APIs, path variables are denoted by '*' notation. For ex: - Actual API endpoint: mdm-admin/1.0.0/devices/{device-id} + Actual API endpoint: devicemgt_admin/1.0.0/devices/{device-id} URL to be represented here: /devices/* NOTE: All the endpoints of the web app should be available in this file. Otherwise it will result 403 error at the runtime. @@ -40,7 +40,7 @@ Device Management Admin - /device-mgt/emm-admin + /device-mgt/admin / GET @@ -54,98 +54,98 @@ Devices - /device-mgt/emm-admin/devices + /device-mgt/admin/devices / GET Policies - /device-mgt/emm-admin/policies + /device-mgt/admin/policies / GET Notifications - /device-mgt/emm-admin/notifications + /device-mgt/admin/notifications / GET Users - /device-mgt/emm-admin/users + /device-mgt/admin/users / GET Operations - /device-mgt/emm-admin/operations + /device-mgt/admin/operations / GET Applications - /device-mgt/emm-admin/operations/applications + /device-mgt/admin/operations/applications / GET Roles - /device-mgt/emm-admin/roles + /device-mgt/admin/roles / GET Configurations - /device-mgt/emm-admin/platform-configs + /device-mgt/admin/platform-configs / GET View Dashboard - /device-mgt/emm-admin/dashboard + /device-mgt/admin/dashboard / GET List devices - /device-mgt/emm-admin/devices/list + /device-mgt/admin/devices/list /devices GET List devices - /device-mgt/emm-admin/devices/list + /device-mgt/admin/devices/list /devices/types GET Add policy - /device-mgt/emm-admin/policies/add + /device-mgt/admin/policies/add /devices/types GET Edit policy - /device-mgt/emm-admin/policies/update + /device-mgt/admin/policies/update /devices/types GET View device - /device-mgt/emm-admin/devices/view + /device-mgt/admin/devices/view /devices/view GET @@ -167,21 +167,21 @@ View device - /device-mgt/emm-admin/devices/view + /device-mgt/admin/devices/view /devices/user/*/* GET List devices - /device-mgt/emm-admin/devices/list + /device-mgt/admin/devices/list /devices/count GET List devices - /device-mgt/emm-admin/devices/list + /device-mgt/admin/devices/list /devices/name/*/* GET @@ -190,28 +190,28 @@ View notifications - /device-mgt/emm-admin/notifications/view + /device-mgt/admin/notifications/view /notifications GET Add notification - /device-mgt/emm-admin/notifications/add + /device-mgt/admin/notifications/add /notifications POST Update notification - /device-mgt/emm-admin/notifications/update + /device-mgt/admin/notifications/update /notifications/*/* PUT View notifications - /device-mgt/emm-admin/notifications/view + /device-mgt/admin/notifications/view /notifications/* GET @@ -220,35 +220,35 @@ View user - /device-mgt/emm-admin/users/view + /device-mgt/admin/users/view /operations GET Install application - /device-mgt/emm-admin/operations/applications/install-applications + /device-mgt/admin/operations/applications/install-applications /operations POST Install application - /device-mgt/emm-admin/operations/applications/install-applications + /device-mgt/admin/operations/applications/install-applications /operations/installApp/* POST Uninstall application - /device-mgt/emm-admin/operations/applications/uninstall-applications + /device-mgt/admin/operations/applications/uninstall-applications /operations/uninstallApp/* POST View application - /device-mgt/emm-admin/operations/applications/view-applications + /device-mgt/admin/operations/applications/view-applications /operations/*/*/* GET @@ -262,21 +262,21 @@ View device - /device-mgt/emm-admin/devices/view + /device-mgt/admin/devices/view /operations/*/*/* GET View device - /device-mgt/emm-admin/devices/view + /device-mgt/admin/devices/view /operations/*/* GET View device - /device-mgt/emm-admin/devices/view + /device-mgt/admin/devices/view /operations/paginate/*/* GET @@ -307,14 +307,14 @@ List policies - /device-mgt/emm-admin/policies/list + /device-mgt/admin/policies/list /features/* GET View device - /device-mgt/emm-admin/devices/view + /device-mgt/admin/devices/view /features/* GET @@ -331,63 +331,63 @@ /device-mgt/user/devices/view /features GET - emm_admin + List roles - /device-mgt/emm-admin/roles/list + /device-mgt/admin/roles/list /roles GET View user - /device-mgt/emm-admin/users/view + /device-mgt/admin/users/view /roles GET Add policy - /device-mgt/emm-admin/policies/add + /device-mgt/admin/policies/add /roles GET Update policy - /device-mgt/emm-admin/policies/update + /device-mgt/admin/policies/update /roles GET List roles - /device-mgt/emm-admin/roles/list + /device-mgt/admin/roles/list /roles/permissions GET List roles - /device-mgt/emm-admin/roles/list + /device-mgt/admin/roles/list /roles/* GET Add user - /device-mgt/emm-admin/users/add + /device-mgt/admin/users/add /roles/* GET Update role - /device-mgt/emm-admin/roles/update + /device-mgt/admin/roles/update /roles PUT @@ -397,33 +397,33 @@ - + Update role - /device-mgt/emm-admin/roles/update + /device-mgt/admin/roles/update /roles/users PUT Add role - /device-mgt/emm-admin/roles/add + /device-mgt/admin/roles/add /roles POST Remove role - /device-mgt/emm-admin/roles/remove + /device-mgt/admin/roles/remove /roles DELETE List roles - /device-mgt/emm-admin/roles/list + /device-mgt/admin/roles/list /roles/count GET @@ -432,28 +432,28 @@ List users - /device-mgt/emm-admin/users/list + /device-mgt/admin/users/list /users GET Add user - /device-mgt/emm-admin/users/add + /device-mgt/admin/users/add /users POST View user - /device-mgt/emm-admin/users/view + /device-mgt/admin/users/view /users/view GET Update user - /device-mgt/emm-admin/users/update + /device-mgt/admin/users/update /users PUT @@ -463,40 +463,39 @@ /login /users/change-password POST - emm_admin Reset password - /device-mgt/emm-admin/users/password-reset + /device-mgt/admin/users/password-reset /users/reset-password POST Remove user - /device-mgt/emm-admin/users/remove + /device-mgt/admin/users/remove /users DELETE View user - /device-mgt/emm-admin/users/view + /device-mgt/admin/users/view /users/roles GET - + Add user - /device-mgt/emm-admin/users/add + /device-mgt/admin/users/add /roles POST @@ -510,77 +509,77 @@ List devices - /device-mgt/emm-admin/devices/list + /device-mgt/admin/devices/list /users/devices GET View user - /device-mgt/emm-admin/users/view + /device-mgt/admin/users/view /users/*/* GET List users - /device-mgt/emm-admin/users/list + /device-mgt/admin/users/list /users/count GET List users - /device-mgt/emm-admin/users/list + /device-mgt/admin/users/list /users/view-users GET Add role - /device-mgt/emm-admin/roles/add + /device-mgt/admin/roles/add /users/view-users GET Update role - /device-mgt/emm-admin/roles/update + /device-mgt/admin/roles/update /users/view-users GET Add policy - /device-mgt/emm-admin/policies/add + /device-mgt/admin/policies/add /users/view-users GET Update policy - /device-mgt/emm-admin/policies/update + /device-mgt/admin/policies/update /users/view-users GET List users - /device-mgt/emm-admin/users/list + /device-mgt/admin/users/list /users/users-by-username GET List users - /device-mgt/emm-admin/users/list + /device-mgt/admin/users/list /users/users-by-username/* GET Invite user - /device-mgt/emm-admin/users/invite + /device-mgt/admin/users/invite /users/email-invitation POST @@ -596,28 +595,28 @@ Add Policy - /device-mgt/emm-admin/policies/add + /device-mgt/admin/policies/add /policies/inactive-policy POST List policies - /device-mgt/emm-admin/policies/list + /device-mgt/admin/policies/list /policies/*/* POST List policies - /device-mgt/emm-admin/policies/list + /device-mgt/admin/policies/list /policies/*/*/* GET View device - /device-mgt/emm-admin/devices/view + /device-mgt/admin/devices/view /policies/*/*/* GET @@ -631,119 +630,119 @@ Add policy - /device-mgt/emm-admin/policies/add + /device-mgt/admin/policies/add /policies/active-policy POST Remove policy - /device-mgt/emm-admin/policies/remove + /device-mgt/admin/policies/remove /policies/bulk-remove POST List policies - /device-mgt/emm-admin/policies/list + /device-mgt/admin/policies/list /policies GET List policies - /device-mgt/emm-admin/policies/list + /device-mgt/admin/policies/list /policies/* GET Update policy - /device-mgt/emm-admin/policies/update + /device-mgt/admin/policies/update /policies/* PUT Remove policy - /device-mgt/emm-admin/policies/remove + /device-mgt/admin/policies/remove /policies DELETE List policies - /device-mgt/emm-admin/policies/list + /device-mgt/admin/policies/list /policies/count GET Edit policy - /device-mgt/emm-admin/policies/update + /device-mgt/admin/policies/update /policies/priorities PUT Edit policy - /device-mgt/emm-admin/policies/update + /device-mgt/admin/policies/update /policies/activate PUT Add policy - /device-mgt/emm-admin/policies/add + /device-mgt/admin/policies/add /policies/activate PUT Edit policy - /device-mgt/emm-admin/policies/update + /device-mgt/admin/policies/update /policies/inactivate PUT Add policy - /device-mgt/emm-admin/policies/add + /device-mgt/admin/policies/add /policies/inactivate PUT Edit policy - /device-mgt/emm-admin/policies/update + /device-mgt/admin/policies/update /policies/apply-changes PUT Add policy - /device-mgt/emm-admin/policies/add + /device-mgt/admin/policies/add /policies/start-task/* GET Add policy - /device-mgt/emm-admin/policies/add + /device-mgt/admin/policies/add /policies/update-task/* GET Add policy - /device-mgt/emm-admin/policies/add + /device-mgt/admin/policies/add /policies/stop-task GET List policies - /device-mgt/emm-admin/policies/list + /device-mgt/admin/policies/list /policies/*/* GET @@ -752,21 +751,21 @@ Add policy - /device-mgt/emm-admin/policies/add + /device-mgt/admin/policies/add /profiles POST Edit policy - /device-mgt/emm-admin/policies/update + /device-mgt/admin/policies/update /profiles/* PUT Remove policy - /device-mgt/emm-admin/policies/remove + /device-mgt/admin/policies/remove /profiles/* DELETE @@ -776,14 +775,14 @@ Device Information - /device-mgt/emm-admin/information/get + /device-mgt/admin/information/get /information/*/* GET Device Search - /device-mgt/emm-admin/search + /device-mgt/admin/search /information/* GET @@ -797,35 +796,35 @@ - + - + View configuration - /device-mgt/emm-admin/platform-configs/view + /device-mgt/admin/platform-configs/view /configuration GET Add configuration - /device-mgt/emm-admin/platform-configs/add + /device-mgt/admin/platform-configs/add /configuration POST Update configuration - /device-mgt/emm-admin/platform-configs/modify + /device-mgt/admin/platform-configs/modify /configuration PUT @@ -838,21 +837,161 @@ /device-mgt/android/certificate/save /certificates/saveCertificate POST - emm_admin get certificate in the database /device-mgt/android/certificate/Get /certificates/* GET - emm_admin get certificate in the database /device-mgt/android/certificate/Get /certificates/* DELETE - emm_admin - \ No newline at end of file + + + + Group Management + /device-mgt/admin/groups + /groups + POST + + + + Group Management + /device-mgt/admin/groups + /groups/*/* + PUT + + + + Group Management + /device-mgt/admin/groups + /groups/*/* + DELETE + + + + Group Management + /device-mgt/admin/groups + /groups + GET + + + + Group Management + /device-mgt/admin/groups + /groups/user/* + GET + + + + Group Management + /device-mgt/admin/groups + /groups/*/* + GET + + + + Group Management + /device-mgt/admin/groups + /groups/search + GET + + + + Group Management + /device-mgt/admin/groups + /groups/user/*/all + GET + + + + Group Management + /device-mgt/admin/groups + /groups/user/*/count + GET + + + + Group Management + /device-mgt/admin/groups + /groups/*/*/share + PUT + + + + Group Management + /device-mgt/admin/groups + /groups/*/*/unshare + PUT + + + + Group Management + /device-mgt/admin/groups + /groups/*/*/share/roles/*/permissions + PUT + + + + Group Management + /device-mgt/admin/groups + /groups/*/*/share/roles/*/permissions + DELETE + + + + Group Management + /device-mgt/admin/groups + /groups/*/*/share/roles + GET + + + + Group Management + /device-mgt/admin/groups + /groups/*/*/users + GET + + + + Group Management + /device-mgt/admin/groups + /groups/*/*/devices/all + GET + + + + Group Management + /device-mgt/admin/groups + /groups/*/*/devices/count + GET + + + + Group Management + /device-mgt/admin/groups + /groups/*/*/devices/*/* + PUT + + + + Group Management + /device-mgt/admin/groups + /groups/*/*/devices/*/* + DELETE + + + + Group Management + /device-mgt/admin/groups + /groups/*/*/users/*/permissions + GET + + + + diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/WEB-INF/cxf-servlet.xml b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/WEB-INF/cxf-servlet.xml index e4b794b8a90..c6e489f7f81 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/WEB-INF/cxf-servlet.xml +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/WEB-INF/cxf-servlet.xml @@ -17,9 +17,9 @@ ~ under the License. --> - @@ -51,6 +51,15 @@ + + + + + + + + + @@ -155,7 +164,8 @@ --> - + + diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/WEB-INF/web.xml b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/WEB-INF/web.xml index 1ee664987f5..ab8d04cbe83 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/WEB-INF/web.xml +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/WEB-INF/web.xml @@ -1,6 +1,6 @@ + --> Admin-Webapp - JAX-WS/JAX-RS MDM Endpoint + JAX-WS/JAX-RS Device Management Endpoint JAX-WS/JAX-RS Servlet CXFServlet @@ -63,7 +63,7 @@ - MDM-Admin + DeviceMgt-Admin /* diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/feature/mgt/util/AnnotationUtil.java b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/feature/mgt/util/AnnotationUtil.java index 621de443721..8941ad03125 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/feature/mgt/util/AnnotationUtil.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/feature/mgt/util/AnnotationUtil.java @@ -35,6 +35,9 @@ import javax.ws.rs.HttpMethod; import javax.ws.rs.OPTIONS; import javax.ws.rs.POST; import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.QueryParam; import java.io.IOException; import java.lang.annotation.Annotation; import java.lang.reflect.InvocationHandler; @@ -61,7 +64,8 @@ public class AnnotationUtil { private static final String PACKAGE_ORG_SPRINGFRAMEWORK = "org.springframework"; public static final String STRING_ARR = "string_arr"; public static final String STRING = "string"; - private Class featureClazz; + private Class + featureAnnotationClazz; private ClassLoader classLoader; private ServletContext servletContext; @@ -108,7 +112,7 @@ public class AnnotationUtil { if (deviceTypeAnno != null) { Method[] deviceTypeMethod = deviceTypeClazz.getMethods(); String deviceType = invokeMethod(deviceTypeMethod[0], deviceTypeAnno, STRING); - featureClazz = + featureAnnotationClazz = (Class) classLoader.loadClass( org.wso2.carbon.device.mgt.extensions.feature.mgt @@ -130,80 +134,120 @@ public class AnnotationUtil { return features; } - private List getFeatures(Method[] annotatedMethods) throws Throwable { + private List getFeatures(Method[] methodsList) throws Throwable { List featureList = new ArrayList<>(); - for (Method method : annotatedMethods) { - Annotation methodAnnotation = method.getAnnotation(featureClazz); - if (methodAnnotation != null) { - Annotation[] annotations = method.getDeclaredAnnotations(); + for (Method currentMethod : methodsList) { + Annotation featureAnnotation = currentMethod.getAnnotation(featureAnnotationClazz); + if (featureAnnotation != null) { + Feature feature = new Feature(); + feature = processFeatureAnnotation(feature, currentMethod); + Annotation[] annotations = currentMethod.getDeclaredAnnotations(); + Feature.MetadataEntry metadataEntry = new Feature.MetadataEntry(); + metadataEntry.setId(-1); + Map apiParams = new HashMap<>(); for (int i = 0; i < annotations.length; i++) { - if (annotations[i].annotationType().getName().equals( - org.wso2.carbon.device.mgt.extensions.feature.mgt.annotations.Feature.class.getName())) { - Feature feature = new Feature(); - Method[] featureAnnoMethods = featureClazz.getMethods(); - Annotation featureAnno = method.getAnnotation(featureClazz); - - for (int k = 0; k < featureAnnoMethods.length; k++) { - switch (featureAnnoMethods[k].getName()) { - case "name": - feature.setName(invokeMethod(featureAnnoMethods[k], featureAnno, STRING)); - break; - case "code": - feature.setCode(invokeMethod(featureAnnoMethods[k], featureAnno, STRING)); - break; - case "description": - feature.setDescription(invokeMethod(featureAnnoMethods[k], featureAnno, STRING)); - break; - case "type": - feature.setType(invokeMethod(featureAnnoMethods[k], featureAnno, STRING)); - break; - } - } - //Extracting method with which feature is exposed - if (annotations[i].annotationType().getName().equals(GET.class.getName())) { - feature.setMethod(HttpMethod.GET); - } - if (annotations[i].annotationType().getName().equals(POST.class.getName())) { - feature.setMethod(HttpMethod.POST); - } - if (annotations[i].annotationType().getName().equals(OPTIONS.class.getName())) { - feature.setMethod(HttpMethod.OPTIONS); - } - if (annotations[i].annotationType().getName().equals(DELETE.class.getName())) { - feature.setMethod(HttpMethod.DELETE); - } - if (annotations[i].annotationType().getName().equals(PUT.class.getName())) { - feature.setMethod(HttpMethod.PUT); - } - try { - Class formParamClazz = (Class) classLoader.loadClass( - FormParam.class.getName()); - Method[] formMethods = formParamClazz.getMethods(); - //Extract method parameter information and store same as feature meta info - List metaInfoList = new ArrayList<>(); - Annotation[][] paramAnnotations = method.getParameterAnnotations(); - for (int j = 0; j < paramAnnotations.length; j++) { - for (Annotation anno : paramAnnotations[j]) { - if (anno.annotationType().getName().equals(FormParam.class.getName())) { - Feature.MetadataEntry metadataEntry = new Feature.MetadataEntry(); - metadataEntry.setId(j); - metadataEntry.setValue(invokeMethod(formMethods[0], anno, STRING)); - metaInfoList.add(metadataEntry); - } - } - } - feature.setMetadataEntries(metaInfoList); - } catch (ClassNotFoundException e) { - log.debug("No Form Param found for class " + featureClazz.getName()); - } - featureList.add(feature); + Annotation currentAnnotation = annotations[i]; + feature = processHttpMethodAnnotation(feature, currentAnnotation); + if (currentAnnotation.annotationType().getName().equals(Path.class.getName())) { + String uri = getPathAnnotationValue(currentMethod); + apiParams.put("uri", uri); } + apiParams = processParamAnnotations(apiParams, currentMethod); } + metadataEntry.setValue(apiParams); + List metaInfoList = new ArrayList<>(); + metaInfoList.add(metadataEntry); + feature.setMetadataEntries(metaInfoList); + featureList.add(feature); } } return featureList; } + private Map processParamAnnotations(Map apiParams, Method currentMethod) throws Throwable{ + try { + apiParams.put("pathParams", processParamAnnotations(currentMethod, PathParam.class)); + apiParams.put("queryParams", processParamAnnotations(currentMethod, QueryParam.class)); + apiParams.put("formParams", processParamAnnotations(currentMethod, FormParam.class)); + } catch (ClassNotFoundException e) { + log.debug("No Form Param found for class " + featureAnnotationClazz.getName()); + } + return apiParams; + } + + private List processParamAnnotations(Method currentMethod, Class clazz) throws Throwable{ + List params = new ArrayList<>(); + try { + Class paramClazz = (Class) classLoader.loadClass(clazz.getName()); + Method[] formMethods = paramClazz.getMethods(); + //Extract method parameter information and store same as feature meta info + Annotation[][] paramAnnotations = currentMethod.getParameterAnnotations(); + Method valueMethod = formMethods[0]; + for (int j = 0; j < paramAnnotations.length; j++) { + for (Annotation anno : paramAnnotations[j]) { + if (anno.annotationType().getName().equals(clazz.getName())) { + params.add(invokeMethod(valueMethod, anno, STRING)); + } + } + } + } catch (ClassNotFoundException e) { + log.debug("No "+ clazz.getName() +" Param found for class " + featureAnnotationClazz.getName()); + } + return params; + } + + private Feature processHttpMethodAnnotation(Feature feature, Annotation currentAnnotation) { + //Extracting method with which feature is exposed + if (currentAnnotation.annotationType().getName().equals(GET.class.getName())) { + feature.setMethod(HttpMethod.GET); + } else if (currentAnnotation.annotationType().getName().equals(POST.class.getName())) { + feature.setMethod(HttpMethod.POST); + } else if (currentAnnotation.annotationType().getName().equals(OPTIONS.class.getName())) { + feature.setMethod(HttpMethod.OPTIONS); + } else if (currentAnnotation.annotationType().getName().equals(DELETE.class.getName())) { + feature.setMethod(HttpMethod.DELETE); + } else if (currentAnnotation.annotationType().getName().equals(PUT.class.getName())) { + feature.setMethod(HttpMethod.PUT); + } + return feature; + } + + private Feature processFeatureAnnotation(Feature feature, Method currentMethod) throws Throwable{ + Method[] featureAnnoMethods = featureAnnotationClazz.getMethods(); + Annotation featureAnno = currentMethod.getAnnotation(featureAnnotationClazz); + for (int k = 0; k < featureAnnoMethods.length; k++) { + switch (featureAnnoMethods[k].getName()) { + case "name": + feature.setName(invokeMethod(featureAnnoMethods[k], featureAnno, STRING)); + break; + case "code": + feature.setCode(invokeMethod(featureAnnoMethods[k], featureAnno, STRING)); + break; + case "description": + feature.setDescription(invokeMethod(featureAnnoMethods[k], featureAnno, STRING)); + break; + case "type": + feature.setType(invokeMethod(featureAnnoMethods[k], featureAnno, STRING)); + break; + } + } + return feature; + } + + public String getPathAnnotationValue(Method currentMethod) throws Throwable{ + String uri = ""; + try { + Class pathClazz = (Class) classLoader.loadClass(Path.class.getName()); + Annotation pathAnnno = currentMethod.getAnnotation(pathClazz); + Method[] pathMethods = pathClazz.getMethods(); + Method valueMethod = pathMethods[0]; + uri = invokeMethod(valueMethod, pathAnnno, STRING); + } catch (ClassNotFoundException e) { + log.debug("No Path Param found for class " + featureAnnotationClazz.getName()); + } + return uri; + } + /** * When an annotation and method is passed, this method invokes that executes said method against the annotation */ diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/api/device-api.jag b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/api/device-api.jag index 2d19fd02566..1f7d62b2aa2 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/api/device-api.jag +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/api/device-api.jag @@ -25,6 +25,8 @@ var constants = require("/app/modules/constants.js"); var deviceModule = require("/app/modules/device.js").deviceModule; var utility = require("/app/modules/utility.js").utility; var devicemgtProps = require('/app/conf/devicemgt-props.js').config(); +var userModule = require("/app/modules/user.js").userModule; +var serviceInvokers = require("/app/modules/backend-service-invoker.js").backendServiceInvoker; var CarbonUtils = Packages.org.wso2.carbon.utils.CarbonUtils; var user = session.get(constants.USER_SESSION_KEY); @@ -159,6 +161,88 @@ if (!user) { var deviceType = elements.deviceType; var deviceName = request.getParameter("name"); result = deviceModule.updateDevice(deviceType, deviceId, deviceName); + } else if (uriMatcher.match("/{context}/api/devices")) { + var url = request.getParameter("url"); + var draw = request.getParameter("draw"); + var length = request.getParameter("length"); + var start = request.getParameter("start"); + var search = request.getParameter("search[value]"); + var deviceName = request.getParameter("columns[1][search][value]"); + var owner = request.getParameter("columns[2][search][value]"); + var status = request.getParameter("columns[3][search][value]"); + var platform = request.getParameter("columns[4][search][value]"); + var ownership = request.getParameter("columns[5][search][value]"); + var targetURL; + + function appendQueryParam (url, queryParam , value) { + if (url.indexOf("?") > 0) { + return url + "&" + queryParam + "=" + value; + } + return url + "?" + queryParam + "=" + value; + } + targetURL = devicemgtProps.httpsURL + request.getParameter("url"); + targetURL = appendQueryParam(targetURL, "draw", draw); + targetURL = appendQueryParam(targetURL, "start", start); + targetURL = appendQueryParam(targetURL, "length", length); + + if (search && search !== "") { + targetURL = appendQueryParam(targetURL, "search", search); + } + + if (deviceName && deviceName !== "") { + targetURL = appendQueryParam(targetURL, "device-name", deviceName); + } + + if (owner && owner !== "") { + targetURL = appendQueryParam(targetURL, "user", owner); + } + + if (status && status !== "") { + targetURL = appendQueryParam(targetURL, "status", status); + } + + if (platform && platform !== "") { + targetURL = appendQueryParam(targetURL, "type", platform); + } + + if (ownership && ownership !== "") { + targetURL = appendQueryParam(targetURL, "ownership", ownership); + } + + serviceInvokers.XMLHttp.get( + targetURL, function (responsePayload) { + response.status = 200; + result = responsePayload; + }, + function (responsePayload) { + response.status = responsePayload.status; + result = responsePayload.responseText; + }); + } else if (uriMatcher.match("/{context}/api/devices/")) { + if (userModule.isAuthorized("/permission/admin/device-mgt/admin/devices/list")) { + result = deviceModule.listDevices(); + } else { + response.sendError(403); + } + } else if (uriMatcher.match("/{context}/api/devices/{type}/{deviceId}")) { + elements = uriMatcher.elements(); + deviceId = elements.deviceId; + type = elements.type; + if (userModule.isAuthorized("/permission/admin/device-mgt/admin/devices/list")) { + result = deviceModule.viewDevice(type, deviceId); + }else { + response.sendError(403); + } + } else if (uriMatcher.match("{context}/api/devices/{type}/{deviceId}/{operation}")) { + elements = uriMatcher.elements(); + deviceId = elements.deviceId; + type = elements.type; + operation = elements.operation; + if (userModule.isAuthorized("/permission/admin/device-mgt/admin/devices/operation")) { + result = deviceModule.performOperation(deviceId, operation, [], type); + } else { + response.sendError(403); + } } } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/api/invoker-api.jag b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/api/invoker-api.jag index 45b91271436..ac587def72e 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/api/invoker-api.jag +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/api/invoker-api.jag @@ -30,11 +30,13 @@ var result; if (uriMatcher.match("/{context}/api/invoker/execute/")) { var method = request.getContent().actionMethod; - var targetURL = devicemgtProps.httpsURL + request.getContent().actionUrl; + var targetURL = getTargetUrl(devicemgtProps.httpsURL, request.getContent().actionUrl); var payload = request.getContent().actionPayload; + var contentType = request.getHeader(constants.CONTENT_TYPE_IDENTIFIER); + var acceptType = request.getHeader(constants.ACCEPT_IDENTIFIER); if (method == undefined && payload == undefined) { method = parse(request.getContent()).actionMethod; - targetURL = devicemgtProps.httpsURL + parse(request.getContent()).actionUrl; + targetURL = getTargetUrl(devicemgtProps.httpsURL, parse(request.getContent()).actionUrl); payload = parse(request.getContent()).actionPayload; } try { @@ -48,7 +50,9 @@ if (uriMatcher.match("/{context}/api/invoker/execute/")) { function (responsePayload) { response.status = responsePayload.status; response.content = responsePayload.responseText; - }); + }, + contentType, + acceptType); break; case constants.HTTP_POST: var responseData = serviceInvokers.XMLHttp.post( @@ -59,7 +63,9 @@ if (uriMatcher.match("/{context}/api/invoker/execute/")) { function (responsePayload) { response.status = responsePayload.status; response.content = responsePayload.responseText; - }); + }, + contentType, + acceptType); break; case constants.HTTP_PUT: var responseData = serviceInvokers.XMLHttp.put( @@ -70,19 +76,22 @@ if (uriMatcher.match("/{context}/api/invoker/execute/")) { function (responsePayload) { response.status = responsePayload.status; response.content = responsePayload.responseText; - }); + }, + contentType, + acceptType); break; case constants.HTTP_DELETE: - var responseData = - serviceInvokers.XMLHttp.delete( - targetURL, function (responsePayload) { - response.status = 200; - response.content = responsePayload; - }, - function (responsePayload) { - response.status = responsePayload.status; - response.content = responsePayload.responseText; - }); + var responseData = serviceInvokers.XMLHttp.delete( + targetURL, function (responsePayload) { + response.status = 200; + response.content = responsePayload; + }, + function (responsePayload) { + response.status = responsePayload.status; + response.content = responsePayload.responseText; + }, + contentType, + acceptType); break; } } catch (e) { @@ -90,4 +99,12 @@ if (uriMatcher.match("/{context}/api/invoker/execute/")) { } } +function getTargetUrl(serverUrl, actionUrl){ + if(actionUrl == undefined || actionUrl.lastIndexOf("http", 0) === 0){ + return actionUrl; + } else { + return serverUrl + actionUrl; + } +} + %> diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/api/user-api.jag b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/api/user-api.jag index 88ddca07d24..2dc839f9077 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/api/user-api.jag +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/api/user-api.jag @@ -46,7 +46,6 @@ if (uriMatcher.match("/{context}/api/user/authenticate")) { if (log.isDebugEnabled()) { log.debug("User Logged In : " + user); } - utility.insertAppPermissions(userModule, "login"); apiWrapperUtil.setupAccessTokenPair("password", { "username": username, "password": password @@ -69,7 +68,6 @@ if (uriMatcher.match("/{context}/api/user/authenticate")) { if (log.isDebugEnabled()) { log.debug("User Logged In : " + user); } - utility.insertAppPermissions(userModule, "login"); apiWrapperUtil.setupAccessTokenPair("password", {"username": username, "password": password}); var permissions = userModule.getUIPermissions(); if (permissions.VIEW_DASHBOARD) { diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/api-wrapper-util.js b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/api-wrapper-util.js index 76474fb098a..1a518bcf22b 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/api-wrapper-util.js +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/api-wrapper-util.js @@ -20,6 +20,7 @@ var apiWrapperUtil = function () { var module = {}; var tokenUtil = require("/app/modules/util.js").util; var constants = require("/app/modules/constants.js"); + var constants = require("/app/modules/constants.js"); module.refreshToken = function () { var tokenPair = session.get(constants.ACCESS_TOKEN_PAIR_IDENTIFIER); @@ -32,12 +33,12 @@ var apiWrapperUtil = function () { var clientData = tokenUtil.getDyanmicCredentials(properties); var encodedClientKeys = tokenUtil.encode(clientData.clientId + ":" + clientData.clientSecret); session.put(constants.ENCODED_CLIENT_KEYS_IDENTIFIER, encodedClientKeys); - if (type == "password") { + if (type == constants.GRANT_TYPE_PASSWORD) { tokenPair = tokenUtil.getTokenWithPasswordGrantType(properties.username, encodeURIComponent(properties.password), encodedClientKeys); - } else if (type == "saml") { + } else if (type == constants.GRANT_TYPE_SAML) { tokenPair = tokenUtil. - getTokenWithSAMLGrantType(properties.samlToken, encodedClientKeys, "PRODUCTION"); + getTokenWithSAMLGrantType(properties.samlToken, encodedClientKeys, "PRODUCTION"); } session.put(constants.ACCESS_TOKEN_PAIR_IDENTIFIER, tokenPair); }; diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/backend-service-invoker.js b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/backend-service-invoker.js index 9aeb2e84de4..6e7540b3f00 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/backend-service-invoker.js +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/backend-service-invoker.js @@ -54,11 +54,17 @@ var backendServiceInvoker = function () { * @param errorCallback a function to be called if en error is reserved. * @param count a counter which hold the number of recursive execution */ - privateMethods.execute = function (method, url, successCallback, errorCallback, payload, count) { + privateMethods.execute = function (method, url, successCallback, errorCallback, payload, count, contentType, acceptType) { var xmlHttpRequest = new XMLHttpRequest(); xmlHttpRequest.open(method, url); - xmlHttpRequest.setRequestHeader(constants.CONTENT_TYPE_IDENTIFIER, constants.APPLICATION_JSON); - xmlHttpRequest.setRequestHeader(constants.ACCEPT_IDENTIFIER, constants.APPLICATION_JSON); + if(!contentType){ + contentType = constants.APPLICATION_JSON; + } + if(!acceptType){ + acceptType = constants.APPLICATION_JSON; + } + xmlHttpRequest.setRequestHeader(constants.CONTENT_TYPE_IDENTIFIER, contentType); + xmlHttpRequest.setRequestHeader(constants.ACCEPT_IDENTIFIER, acceptType); if (IS_OAUTH_ENABLED) { var accessToken = privateMethods.getAccessToken(); if (!accessToken) { @@ -98,9 +104,9 @@ var backendServiceInvoker = function () { * @param successCallback a function to be called if the respond if successful. * @param errorCallback a function to be called if en error is reserved. */ - privateMethods.initiateXMLHTTPRequest = function (method, url, successCallback, errorCallback, payload) { + privateMethods.initiateXMLHTTPRequest = function (method, url, successCallback, errorCallback, payload, contentType, acceptType) { if (privateMethods.getAccessToken()) { - return privateMethods.execute(method, url, successCallback, errorCallback, payload, 0); + return privateMethods.execute(method, url, successCallback, errorCallback, payload, 0, contentType, acceptType); } }; @@ -112,7 +118,7 @@ var backendServiceInvoker = function () { * @param successCallback a function to be called if the respond if successful. * @param errorCallback a function to be called if en error is reserved. */ - privateMethods.initiateHTTPClientRequest = function (method, url, successCallback, errorCallback, payload) { + privateMethods.initiateHTTPClientRequest = function (method, url, successCallback, errorCallback, payload, contentType, acceptType) { var HttpClient = Packages.org.apache.commons.httpclient.HttpClient; var httpMethodObject; switch (method) { @@ -138,11 +144,11 @@ var backendServiceInvoker = function () { var Header = Packages.org.apache.commons.httpclient.Header; var header = new Header(); header.setName(constants.CONTENT_TYPE_IDENTIFIER); - header.setValue(constants.APPLICATION_JSON); + header.setValue(contentType); httpMethodObject.addRequestHeader(header); header = new Header(); header.setName(constants.ACCEPT_IDENTIFIER); - header.setValue(constants.APPLICATION_JSON); + header.setValue(acceptType); httpMethodObject.addRequestHeader(header); if (IS_OAUTH_ENABLED) { var accessToken = privateMethods.getAccessToken(); @@ -226,8 +232,8 @@ var backendServiceInvoker = function () { * @param successCallback a function to be called if the respond if successful. * @param errorCallback a function to be called if en error is reserved. */ - publicXMLHTTPInvokers.get = function (url, successCallback, errorCallback) { - return privateMethods.initiateXMLHTTPRequest(constants.HTTP_GET, url, successCallback, errorCallback); + publicXMLHTTPInvokers.get = function (url, successCallback, errorCallback, contentType, acceptType) { + return privateMethods.initiateXMLHTTPRequest(constants.HTTP_GET, url, successCallback, errorCallback, contentType, acceptType); }; /** @@ -237,8 +243,8 @@ var backendServiceInvoker = function () { * @param successCallback a function to be called if the respond if successful. * @param errorCallback a function to be called if en error is reserved. */ - publicXMLHTTPInvokers.post = function (url, payload, successCallback, errorCallback) { - return privateMethods.initiateXMLHTTPRequest(constants.HTTP_POST, url, successCallback, errorCallback, payload); + publicXMLHTTPInvokers.post = function (url, payload, successCallback, errorCallback, contentType, acceptType) { + return privateMethods.initiateXMLHTTPRequest(constants.HTTP_POST, url, successCallback, errorCallback, payload, contentType, acceptType); }; /** @@ -248,8 +254,8 @@ var backendServiceInvoker = function () { * @param successCallback a function to be called if the respond if successful. * @param errorCallback a function to be called if en error is reserved. */ - publicXMLHTTPInvokers.put = function (url, payload, successCallback, errorCallback) { - return privateMethods.initiateXMLHTTPRequest(constants.HTTP_PUT, url, successCallback, errorCallback, payload); + publicXMLHTTPInvokers.put = function (url, payload, successCallback, errorCallback, contentType, acceptType) { + return privateMethods.initiateXMLHTTPRequest(constants.HTTP_PUT, url, successCallback, errorCallback, payload, contentType, acceptType); }; /** @@ -258,8 +264,8 @@ var backendServiceInvoker = function () { * @param successCallback a function to be called if the respond if successful. * @param errorCallback a function to be called if en error is reserved. */ - publicXMLHTTPInvokers.delete = function (url, successCallback, errorCallback) { - return privateMethods.initiateXMLHTTPRequest(constants.HTTP_DELETE, url, successCallback, errorCallback); + publicXMLHTTPInvokers.delete = function (url, successCallback, errorCallback, contentType, acceptType) { + return privateMethods.initiateXMLHTTPRequest(constants.HTTP_DELETE, url, successCallback, errorCallback, contentType, acceptType); }; /** @@ -281,8 +287,8 @@ var backendServiceInvoker = function () { * @param successCallback a function to be called if the respond if successful. * @param errorCallback a function to be called if en error is reserved. */ - publicHTTPClientInvokers.get = function (url, successCallback, errorCallback) { - return privateMethods.initiateHTTPClientRequest(constants.HTTP_GET, url, successCallback, errorCallback); + publicHTTPClientInvokers.get = function (url, successCallback, errorCallback, contentType, acceptType) { + return privateMethods.initiateHTTPClientRequest(constants.HTTP_GET, url, successCallback, errorCallback, contentType, acceptType); }; /** @@ -292,9 +298,9 @@ var backendServiceInvoker = function () { * @param successCallback a function to be called if the respond if successful. * @param errorCallback a function to be called if en error is reserved. */ - publicHTTPClientInvokers.post = function (url, payload, successCallback, errorCallback) { + publicHTTPClientInvokers.post = function (url, payload, successCallback, errorCallback, contentType, acceptType) { return privateMethods. - initiateHTTPClientRequest(constants.HTTP_POST, url, successCallback, errorCallback, payload); + initiateHTTPClientRequest(constants.HTTP_POST, url, successCallback, errorCallback, payload, contentType, acceptType); }; /** @@ -304,8 +310,8 @@ var backendServiceInvoker = function () { * @param successCallback a function to be called if the respond if successful. * @param errorCallback a function to be called if en error is reserved. */ - publicHTTPClientInvokers.put = function (url, payload, successCallback, errorCallback) { - return privateMethods.initiateHTTPClientRequest(constants.HTTP_PUT, url, successCallback, errorCallback, payload); + publicHTTPClientInvokers.put = function (url, payload, successCallback, errorCallback, contentType, acceptType) { + return privateMethods.initiateHTTPClientRequest(constants.HTTP_PUT, url, successCallback, errorCallback, payload, contentType, acceptType); }; /** @@ -314,8 +320,8 @@ var backendServiceInvoker = function () { * @param successCallback a function to be called if the respond if successful. * @param errorCallback a function to be called if en error is reserved. */ - publicHTTPClientInvokers.delete = function (url, successCallback, errorCallback) { - return privateMethods.initiateHTTPClientRequest(constants.HTTP_DELETE, url, successCallback, errorCallback); + publicHTTPClientInvokers.delete = function (url, successCallback, errorCallback, contentType, acceptType) { + return privateMethods.initiateHTTPClientRequest(constants.HTTP_DELETE, url, successCallback, errorCallback, contentType, acceptType); }; var publicInvokers = {}; diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/constants.js b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/constants.js index f5a5b83348b..9e2d1469fbb 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/constants.js +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/constants.js @@ -48,8 +48,8 @@ var LANGUAGE_US = "en_US"; var VENDOR_APPLE = "Apple"; var ERRORS = { - "USER_NOT_FOUND": "USER_NOT_FOUND" - }; + "USER_NOT_FOUND": "USER_NOT_FOUND" +}; var USER_STORES_NOISY_CHAR = "\""; var USER_STORES_SPLITTING_CHAR = "\\n"; @@ -70,6 +70,9 @@ var HTTP_POST = "POST"; var HTTP_PUT = "PUT"; var HTTP_DELETE = "DELETE"; +var GRANT_TYPE_PASSWORD = "password"; +var GRANT_TYPE_SAML = "saml"; + var MQTT_QUEUE_CONFIG_NAME = "MQTT"; var HTTP_CONFLICT = 409; diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/device.js b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/device.js index b06a2e436af..c2865c13b4e 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/device.js +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/device.js @@ -278,9 +278,10 @@ deviceModule = function () { if (device) { var propertiesList = device["properties"]; var properties = {}; - for (var i = 0; i < propertiesList.length; i++) { - properties[propertiesList[i]["name"]] = - propertiesList[i]["value"]; + if (propertiesList){ + for (var i = 0; i < propertiesList.length; i++) { + properties[propertiesList[i]["name"]] = propertiesList[i]["value"]; + } } var deviceObject = {}; deviceObject[constants["DEVICE_IDENTIFIER"]] = device["deviceIdentifier"]; diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/init.js b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/init.js index 1f2c884af69..2a22b1c987a 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/init.js +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/init.js @@ -26,7 +26,6 @@ application.put("carbonServer", carbonServer); var userModule = require("/app/modules/user.js")["userModule"]; var utility = require("/app/modules/utility.js")["utility"]; -utility.insertAppPermissions(userModule, "init"); var permissions = { '/permission/admin/device-mgt/devices': ['ui.execute'], diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/login.js b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/login.js index 5b53589c983..1c014f4ab83 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/login.js +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/login.js @@ -20,16 +20,19 @@ var onSuccess; var onFail; (function () { - var log = new Log("api/user-api.jag"); - + var log = new Log("/app/modules/login.js"); + var constants = require("/app/modules/constants.js"); onSuccess = function (context) { + var properties; var utility = require("/app/modules/utility.js").utility; var apiWrapperUtil = require("/app/modules/api-wrapper-util.js").apiWrapperUtil; - var userModule = require("/app/modules/user.js").userModule; - - utility.insertAppPermissions(userModule, "login"); - var properties = {username: context.input.username, password: context.input.password}; - apiWrapperUtil.setupAccessTokenPair("password", properties); + if(context.input.samlToken){ + properties = {samlToken: context.input.samlToken}; + apiWrapperUtil.setupAccessTokenPair(constants.GRANT_TYPE_SAML, properties); + }else{ + properties = {username: context.input.username, password: context.input.password}; + apiWrapperUtil.setupAccessTokenPair(constants.GRANT_TYPE_PASSWORD, properties); + } }; onFail = function (error) { diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/operation.js b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/operation.js index aded5dac5c8..c6219757082 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/operation.js +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/operation.js @@ -21,6 +21,7 @@ var operationModule = function () { var utility = require('/app/modules/utility.js').utility; var constants = require('/app/modules/constants.js'); var devicemgtProps = require('/app/conf/devicemgt-props.js').config(); + var serviceInvokers = require("/app/modules/backend-service-invoker.js").backendServiceInvoker; var publicMethods = {}; var privateMethods = {}; @@ -39,51 +40,46 @@ var operationModule = function () { privateMethods.getOperationsFromFeatures = function (deviceType, operationType) { var url = devicemgtProps["httpsURL"] + constants.ADMIN_SERVICE_CONTEXT + "/features/" + deviceType; var featuresList = serviceInvokers.XMLHttp.get(url, function (responsePayload) { - var features = responsePayload.responseContent; + var features = responsePayload; var featureList = []; var feature; - for (var i = 0; i < features.size(); i++) { + for (var i = 0; i < features.length; i++) { feature = {}; - if (features.get(i).getType() != operationType) { + if (features[i].type != operationType) { continue; - } else if (features.get(i).getType() == 'monitor') { + } else if (features[i].type == 'monitor') { var analyticStreams = utility.getDeviceTypeConfig(deviceType)["analyticStreams"]; if (analyticStreams) { for (var stream in analyticStreams) { - if (analyticStreams[stream].name == features.get(i).getName()) { + if (analyticStreams[stream].name == features[i].name) { feature.ui_unit = analyticStreams[stream].ui_unit; break; } } } } - feature["operation"] = new String(features.get(i).getCode()); - feature["name"] = new String(features.get(i).getName()); - feature["description"] = new String(features.get(i).getDescription()); - feature["deviceType"] = new String(features.get(i).getDeviceType()); + feature["operation"] = features[i].code; + feature["name"] = features[i].name; + feature["method"] = features[i].method; + feature["description"] = features[i].description; + feature["deviceType"] = deviceType; feature["params"] = []; - var metaData = features.get(i).getMetadataEntries(); - if (metaData && metaData != null) { - for (var j = 0; j < metaData.size(); j++) { - feature["params"].push(new String(metaData.get(j).getValue())); + var metaData = features[i].metadataEntries; + if (metaData) { + for (var j = 0; j < metaData.length; j++) { + feature["params"].push(metaData[j].value); } featureList.push(feature); } } return featureList; - } - , - function (responsePayload) { + }, function (responsePayload) { var response = {}; response["status"] = "error"; return response; } ); return featuresList; - return featureList; - } catch (e) { - throw e; - } }; publicMethods.getControlOperations = function (deviceType) { @@ -108,7 +104,6 @@ var operationModule = function () { '","protocol":"mqtt", "sessionId":"' + session.getId() + '", "' + constants.AUTHORIZATION_HEADER + '":"' + constants.BEARER_PREFIX + getAccessToken(deviceType, user.username, deviceId) + '"}'; - log.warn("header: " + header); return post(endPoint, params, JSON.parse(header), "json"); }; diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/user.js b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/user.js index 69c3ca62eef..1c1139b3aaf 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/user.js +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/user.js @@ -629,44 +629,43 @@ var userModule = function () { publicMethods.getUIPermissions = function () { var permissions = {}; - if (publicMethods.isAuthorized("/permission/admin/device-mgt/emm-admin/devices/list") || - publicMethods.isAuthorized("/permission/admin/device-mgt/user/devices/list")) { + if (publicMethods.isAuthorized("/permission/admin/device-mgt/admin/devices/list")) { permissions["LIST_DEVICES"] = true; } if (publicMethods.isAuthorized("/permission/admin/device-mgt/admin/groups/list")) { permissions["LIST_GROUPS"] = true; } - if (publicMethods.isAuthorized("/permission/admin/device-mgt/emm-admin/users/list")) { + if (publicMethods.isAuthorized("/permission/admin/device-mgt/admin/users/list")) { permissions["LIST_USERS"] = true; } - if (publicMethods.isAuthorized("/permission/admin/device-mgt/emm-admin/roles/list")) { + if (publicMethods.isAuthorized("/permission/admin/device-mgt/admin/roles/list")) { permissions["LIST_ROLES"] = true; } - if (publicMethods.isAuthorized("/permission/admin/device-mgt/emm-admin/policies/list")) { + if (publicMethods.isAuthorized("/permission/admin/device-mgt/admin/policies/list")) { permissions["LIST_POLICIES"] = true; } - if (publicMethods.isAuthorized("/permission/admin/device-mgt/emm-admin/groups/add")) { + if (publicMethods.isAuthorized("/permission/admin/device-mgt/admin/groups/add")) { permissions["ADD_GROUP"] = true; } - if (publicMethods.isAuthorized("/permission/admin/device-mgt/emm-admin/users/add")) { + if (publicMethods.isAuthorized("/permission/admin/device-mgt/admin/users/add")) { permissions["ADD_USER"] = true; } - if (publicMethods.isAuthorized("/permission/admin/device-mgt/emm-admin/users/remove")) { + if (publicMethods.isAuthorized("/permission/admin/device-mgt/admin/users/remove")) { permissions["REMOVE_USER"] = true; } - if (publicMethods.isAuthorized("/permission/admin/device-mgt/emm-admin/roles/add")) { + if (publicMethods.isAuthorized("/permission/admin/device-mgt/admin/roles/add")) { permissions["ADD_ROLE"] = true; } - if (publicMethods.isAuthorized("/permission/admin/device-mgt/emm-admin/policies/add")) { + if (publicMethods.isAuthorized("/permission/admin/device-mgt/admin/policies/add")) { permissions["ADD_POLICY"] = true; } - if (publicMethods.isAuthorized("/permission/admin/device-mgt/emm-admin/policies/priority")) { + if (publicMethods.isAuthorized("/permission/admin/device-mgt/admin/policies/priority")) { permissions["CHANGE_POLICY_PRIORITY"] = true; } - if (publicMethods.isAuthorized("/permission/admin/device-mgt/emm-admin/dashboard/view")) { + if (publicMethods.isAuthorized("/permission/admin/device-mgt/admin/dashboard/view")) { permissions["VIEW_DASHBOARD"] = true; } - if (publicMethods.isAuthorized("/permission/admin/device-mgt/emm-admin/platform-configs/view")) { + if (publicMethods.isAuthorized("/permission/admin/device-mgt/admin/platform-configs/view")) { permissions["TENANT_CONFIGURATION"] = true; } if (publicMethods.isAuthorized("/permission/admin/device-mgt/user/devices/list")) { diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/util.js b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/util.js index 718c79acaf0..6b58c5ae1ed 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/util.js +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/util.js @@ -17,6 +17,7 @@ */ var util = function () { + var log = new Log("/app/modules/util.js"); var module = {}; var Base64 = Packages.org.apache.commons.codec.binary.Base64; var String = Packages.java.lang.String; @@ -123,7 +124,7 @@ var util = function () { xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xhr.setRequestHeader("Authorization", "Basic " + clientKeys); xhr.send("grant_type=urn:ietf:params:oauth:grant-type:saml2-bearer&assertion=" + - encodeURIComponent(encodedExtractedAssertion) + "&scope=" + "PRODUCTION"); + encodeURIComponent(encodedExtractedAssertion) + "&scope=" + "PRODUCTION"); var tokenPair = {}; if (xhr.status == 200) { var data = parse(xhr.responseText); diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/utility.js b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/utility.js index 58a30198ce0..07fbe79cc76 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/utility.js +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/utility.js @@ -61,159 +61,6 @@ utility = function () { return getOsgiService("org.wso2.carbon.policy.mgt.core.PolicyManagerService"); }; - publicMethods.insertAppPermissions = function (userModule, type) { - // Below are the 2 types of users:- Normal users and Admins - userModule.addPermissions([{ - key: "admin", - name: "Device Management Admin" - }], "device-mgt", type); - userModule.addPermissions([{ - key: "user", - name: "Device Management User" - }], "device-mgt", type); - - // adding permission definitions for device-mgt/admin - userModule.addPermissions([{ - key: "dashboard", - name: "Dashboard" - }], "device-mgt/admin", type); - userModule.addPermissions([{ - key: "dashboard/view", - name: "View Dashboard" - }], "device-mgt/admin", type); - - userModule.addPermissions([{ - key: "devices", - name: "Devices" - }], "device-mgt/admin", type); - userModule.addPermissions([{ - key: "devices/list", - name: "List All Devices" - }], "device-mgt/admin", type); - userModule.addPermissions([{ - key: "devices/add", - name: "Add Device" - }], "device-mgt/admin", type); - userModule.addPermissions([{ - key: "devices/edit", - name: "Edit Device" - }], "device-mgt/admin", type); - userModule.addPermissions([{ - key: "devices/remove", - name: "Remove Device" - }], "device-mgt/admin", type); - userModule.addPermissions([{ - key: "groups", - name: "Groups" - }], "device-mgt/admin", type); - userModule.addPermissions([{ - key: "groups/list", - name: "List All Groups" - }], "device-mgt/admin", type); - userModule.addPermissions([{ - key: "groups/add", - name: "Add Group" - }], "device-mgt/admin", type); - userModule.addPermissions([{ - key: "devices/operation", - name: "Perform Operation on Any Device" - }], "device-mgt/admin", type); - - userModule.addPermissions([{key: "users", name: "Users"}], "device-mgt/admin", type); - userModule.addPermissions([{ - key: "users/add", - name: "Add New Users" - }], "device-mgt/admin", type); - userModule.addPermissions([{ - key: "users/invite", - name: "Invite Users" - }], "device-mgt/admin", type); - userModule.addPermissions([{ - key: "users/list", - name: "List Users" - }], "device-mgt/admin", type); - userModule.addPermissions([{ - key: "users/update", - name: "Update Users" - }], "device-mgt/admin", type); - userModule.addPermissions([{ - key: "users/remove", - name: "Remove Users" - }], "device-mgt/admin", type); - userModule.addPermissions([{ - key: "users/reset-password", - name: "Reset User Passwords" - }], "device-mgt/admin", type); - - userModule.addPermissions([{key: "roles", name: "Roles"}], "device-mgt/admin", type); - userModule.addPermissions([{ - key: "roles/add", - name: "Add New Roles" - }], "device-mgt/admin", type); - userModule.addPermissions([{ - key: "roles/invite", - name: "Invite Roles" - }], "device-mgt/admin", type); - userModule.addPermissions([{ - key: "roles/list", - name: "List Roles" - }], "device-mgt/admin", type); - userModule.addPermissions([{ - key: "roles/remove", - name: "Remove Roles" - }], "device-mgt/admin", type); - userModule.addPermissions([{ - key: "roles/permission", - name: "Update Role Permission" - }], "device-mgt/admin", type); - - - userModule.addPermissions([{ - key: "policies", - name: "Policy" - }], "device-mgt/admin", type); - userModule.addPermissions([{ - key: "policies/add", - name: "Add Policy" - }], "device-mgt/admin", type); - userModule.addPermissions([{ - key: "policies/list", - name: "List Policy" - }], "device-mgt/admin", type); - userModule.addPermissions([{ - key: "policies/edit", - name: "Edit Policy" - }], "device-mgt/admin", type); - userModule.addPermissions([{ - key: "policies/remove", - name: "Remove Policy" - }], "device-mgt/admin", type); - userModule.addPermissions([{ - key: "policies/priority", - name: "Policy Priority" - }], "device-mgt/admin", type); - - // adding permission definitions for device-mgt/user - userModule.addPermissions([{key: "devices", name: "Devices"}], "device-mgt/user", type); - userModule.addPermissions([{ - key: "devices/list", - name: "List Individual Devices" - }], "device-mgt/user", type); - userModule.addPermissions([{ - key: "devices/operation", - name: "Perform Operation on an Individual Device" - }], "device-mgt/user", type); - - userModule.addPermissions([{ - key: "platform-configs", - name: "Platform Configurations" - }], "device-mgt/admin", type); - userModule.addPermissions([{ - key: "platform-configs/view", - name: "View Configurations" - }], "device-mgt/admin", type); - }; - publicMethods.getIoTServerConfig = function (configName) { var path = "/config/iot-config.json"; var file = new File(path); diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.devices/devices.hbs b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.devices/devices.hbs index a15a5a84b12..e4663a57ba2 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.devices/devices.hbs +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.devices/devices.hbs @@ -61,7 +61,7 @@
{{unit "cdmf.unit.device.operation-mod"}} {{#if deviceCount}} - +
    @@ -324,7 +324,7 @@ {{/zone}} {{#zone "bottomJs"}} - diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.devices/devices.js b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.devices/devices.js index 88cb32d704e..6a376bb0282 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.devices/devices.js +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.devices/devices.js @@ -31,25 +31,13 @@ function onRequest(context) { page.groupName = groupName; } page.title = title; - page.permissions = {}; var currentUser = session.get(constants.USER_SESSION_KEY); - var permissions = []; if (currentUser) { - if (userModule.isAuthorized("/permission/admin/device-mgt/admin/devices/list")) { - permissions.push("LIST_DEVICES"); - } else if (userModule.isAuthorized("/permission/admin/device-mgt/user/devices/list")) { - permissions.push("LIST_OWN_DEVICES"); - } else if (userModule.isAuthorized("/permission/admin/device-mgt/emm-admin/policies/list")) { - permissions.push("LIST_POLICIES"); - } + page.permissions = {}; + page.permissions.list = stringify(userModule.getUIPermissions()); if (userModule.isAuthorized("/permission/admin/device-mgt/admin/devices/add")) { permissions.enroll = true; } - if (userModule.isAuthorized("/permission/admin/device-mgt/admin/devices/remove")) { - permissions.push("REMOVE_DEVICE"); - } - - page.permissions.list = permissions; page.currentUser = currentUser; var deviceCount = 0; if (groupName && groupOwner) { @@ -64,15 +52,17 @@ function onRequest(context) { var utility = require("/app/modules/utility.js").utility; var data = deviceModule.getDeviceTypes(); var deviceTypes = []; - if (data.data) { - for (var i = 0; i < data.data.length; i++) { + if (data) { + for (var i = 0; i < data.length; i++) { + var deviceType = utility.getDeviceTypeConfig(data[i].name).deviceType; deviceTypes.push({ - "type": data.data[i].name, - "category": utility.getDeviceTypeConfig(data.data[i].name).deviceType.category - }); + "type": data[i].name, + "category": deviceType.category, + "label": deviceType.label + }); } } - page.deviceTypes = deviceTypes; + page.deviceTypes = stringify(deviceTypes); } } return page; diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.devices/public/js/listing.js b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.devices/public/js/listing.js index 2711b2b29c5..767c37f6848 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.devices/public/js/listing.js +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.devices/public/js/listing.js @@ -72,8 +72,10 @@ $(document).ready(function () { var i; var permissionList = $("#permission").data("permission"); - for (i = 0; i < permissionList.length; i++) { - $.setPermission(permissionList[i]); + for (var key in permissionList) { + if (permissionList.hasOwnProperty(key)) { + $.setPermission(key); + } } /* for device list sorting drop down */ @@ -171,7 +173,7 @@ function loadDevices(searchType, searchParam){ serviceURL = "/devicemgt_admin/devices"; } else if ($.hasPermission("LIST_OWN_DEVICES")) { //Get authenticated users devices - serviceURL = "/devicemgt_admin/users/devices?username="+currentUser; + serviceURL = "/devicemgt_admin/users/devices?username=" + currentUser; } else { $("#loading-content").remove(); $('#device-table').addClass('hidden'); @@ -181,8 +183,11 @@ function loadDevices(searchType, searchParam){ } function getPropertyValue(deviceProperties, propertyName) { + if (!deviceProperties) { + return; + } var property; - for (var i =0; i < deviceProperties.length; i++) { + for (var i = 0; i < deviceProperties.length; i++) { property = deviceProperties[i]; if (property.name == propertyName) { return property.value; @@ -191,6 +196,16 @@ function loadDevices(searchType, searchParam){ return {}; } + function getDeviceTypeLabel(type){ + var deviceTypes = deviceListing.data("deviceTypes"); + for (var i = 0; i < deviceTypes.length; i++){ + if (deviceTypes[i].type == type){ + return deviceTypes[i].label; + } + } + return type; + } + $('#device-grid').datatables_extended ({ serverSide: true, processing: false, @@ -242,7 +257,10 @@ function loadDevices(searchType, searchParam){ } return html; }}, - { targets: 4, data: 'type' , className: 'fade-edge remove-padding-top' }, + { targets: 4, data: 'type' , className: 'fade-edge remove-padding-top' , + render: function ( status, type, row, meta ) { + return getDeviceTypeLabel(row.type); + }}, { targets: 5, data: 'enrolmentInfo.ownership' , className: 'fade-edge remove-padding-top' }, { targets: 6, data: 'enrolmentInfo.status' , className: 'text-right content-fill text-left-on-grid-view no-wrap' , render: function ( status, type, row, meta ) { diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.lib.service-invoker-utility/public/js/invoker-lib.js b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.lib.service-invoker-utility/public/js/invoker-lib.js index 00aa67e7d58..15679db0630 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.lib.service-invoker-utility/public/js/invoker-lib.js +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.lib.service-invoker-utility/public/js/invoker-lib.js @@ -22,33 +22,42 @@ var invokerUtil = function () { var END_POINT = window.location.origin+"/devicemgt/api/invoker/execute/"; - module.get = function (url, successCallback, errorCallback) { + module.get = function (url, successCallback, errorCallback, contentType, acceptType) { var payload = null; - execute("GET", url, payload, successCallback, errorCallback); + execute("GET", url, payload, successCallback, errorCallback, contentType, acceptType); }; - module.post = function (url, payload, successCallback, errorCallback) { - execute("POST", url, payload, successCallback, errorCallback); + module.post = function (url, payload, successCallback, errorCallback, contentType, acceptType) { + execute("POST", url, payload, successCallback, errorCallback, contentType, acceptType); }; - module.put = function (url, payload, successCallback, errorCallback) { - execute("PUT", url, payload, successCallback, errorCallback); + module.put = function (url, payload, successCallback, errorCallback, contentType, acceptType) { + execute("PUT", url, payload, successCallback, errorCallback, contentType, acceptType); }; - module.delete = function (url, successCallback, errorCallback) { + module.delete = function (url, successCallback, errorCallback, contentType, acceptType) { var payload = null; - execute("DELETE", url, payload, successCallback, errorCallback); + execute("DELETE", url, payload, successCallback, errorCallback, contentType, acceptType); }; - function execute (methoad, url, payload, successCallback, errorCallback) { + function execute (methoad, url, payload, successCallback, errorCallback, contentType, acceptType) { + if(contentType == undefined){ + contentType = "application/json"; + } + if(acceptType == undefined){ + acceptType = "application/json"; + } var data = { url: END_POINT, type: "POST", - contentType: "application/json", - accept: "application/json", + contentType: contentType, + accept: acceptType, success: successCallback }; console.log(data); var paramValue = {}; paramValue.actionMethod = methoad; paramValue.actionUrl = url; - paramValue.actionPayload = JSON.stringify(payload); + paramValue.actionPayload = payload; + if(contentType == "application/json"){ + paramValue.actionPayload = JSON.stringify(payload); + } data.data = JSON.stringify(paramValue); $.ajax(data).fail(function (jqXHR) { if (jqXHR.status == "401") { diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/uuf-template-app/lib/modules/auth/auth.js b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/uuf-template-app/lib/modules/auth/auth.js index 73563a8c57b..922563ed6bf 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/uuf-template-app/lib/modules/auth/auth.js +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/uuf-template-app/lib/modules/auth/auth.js @@ -56,7 +56,7 @@ var module = {}; cachedAuthModuleConfigs = authModuleConfigs; } else { log.error("Cannot find User module configurations in application configuration file '" - + constants.FILE_APP_CONF + "'."); + + constants.FILE_APP_CONF + "'."); cachedAuthModuleConfigs = {}; } return cachedAuthModuleConfigs; @@ -85,7 +85,7 @@ var module = {}; return (rv) ? rv : {}; } else { log.error("Cannot find login configurations in Auth module configurations in " - + "application configuration file '" + constants.FILE_APP_CONF + "'."); + + "application configuration file '" + constants.FILE_APP_CONF + "'."); return {}; } } @@ -113,7 +113,7 @@ var module = {}; return (rv) ? rv : {}; } else { log.error("Cannot find logout configurations in Auth module configurations in " - + "application configuration file '" + constants.FILE_APP_CONF + "'."); + + "application configuration file '" + constants.FILE_APP_CONF + "'."); return {}; } } @@ -133,7 +133,7 @@ var module = {}; cachedSsoConfigs = ssoConfigs; } else { log.error("Cannot find SSO configurations in Auth module configurations in application " - + "configuration file '" + constants.FILE_APP_CONF + "'."); + + "configuration file '" + constants.FILE_APP_CONF + "'."); cachedSsoConfigs = {}; } return cachedSsoConfigs; @@ -156,13 +156,13 @@ var module = {}; if (operation == OPERATION_LOGIN) { configs = getLoginConfigurations(event); pageFullName = (event == EVENT_SUCCESS) ? - configs[constants.APP_CONF_AUTH_MODULE_LOGIN_ON_SUCCESS_PAGE] : - configs[constants.APP_CONF_AUTH_MODULE_LOGIN_ON_FAIL_PAGE]; + configs[constants.APP_CONF_AUTH_MODULE_LOGIN_ON_SUCCESS_PAGE] : + configs[constants.APP_CONF_AUTH_MODULE_LOGIN_ON_FAIL_PAGE]; } else { configs = getLogoutConfigurations(event); pageFullName = (event == EVENT_SUCCESS) ? - configs[constants.APP_CONF_AUTH_MODULE_LOGOUT_ON_SUCCESS_PAGE] : - configs[constants.APP_CONF_AUTH_MODULE_LOGOUT_ON_FAIL_PAGE]; + configs[constants.APP_CONF_AUTH_MODULE_LOGOUT_ON_SUCCESS_PAGE] : + configs[constants.APP_CONF_AUTH_MODULE_LOGOUT_ON_FAIL_PAGE]; } if (pageFullName) { @@ -173,13 +173,13 @@ var module = {}; return page.definition[constants.PAGE_DEFINITION_URI]; } log.warn("Page '" + pageFullName + "' mentioned in Auth module configurations in " - + "application configuration file '" + constants.FILE_APP_CONF - + "' is disabled."); + + "application configuration file '" + constants.FILE_APP_CONF + + "' is disabled."); } else { log.error("Page '" + pageFullName + "' mentioned in Auth module configurations in " - + "application configuration file '" + constants.FILE_APP_CONF - + "' does not exists."); + + "application configuration file '" + constants.FILE_APP_CONF + + "' does not exists."); } } return "/"; @@ -207,13 +207,13 @@ var module = {}; if (operation == OPERATION_LOGIN) { configs = getLoginConfigurations(event); scriptFilePath = (event == EVENT_SUCCESS) ? - configs[constants.APP_CONF_AUTH_MODULE_LOGIN_ON_SUCCESS_SCRIPT] : - configs[constants.APP_CONF_AUTH_MODULE_LOGIN_ON_FAIL_SCRIPT]; + configs[constants.APP_CONF_AUTH_MODULE_LOGIN_ON_SUCCESS_SCRIPT] : + configs[constants.APP_CONF_AUTH_MODULE_LOGIN_ON_FAIL_SCRIPT]; } else { configs = getLogoutConfigurations(event); scriptFilePath = (event == EVENT_SUCCESS) ? - configs[constants.APP_CONF_AUTH_MODULE_LOGOUT_ON_SUCCESS_SCRIPT] : - configs[constants.APP_CONF_AUTH_MODULE_LOGOUT_ON_FAIL_SCRIPT]; + configs[constants.APP_CONF_AUTH_MODULE_LOGOUT_ON_SUCCESS_SCRIPT] : + configs[constants.APP_CONF_AUTH_MODULE_LOGOUT_ON_FAIL_SCRIPT]; } if (!scriptFilePath || (scriptFilePath.length == 0)) { @@ -222,8 +222,8 @@ var module = {}; var scriptFile = new File(scriptFilePath); if (!scriptFile.isExists() || scriptFile.isDirectory()) { log.error("Script '" + scriptFilePath + "' mentioned in Auth module configurations in " - + "application configuration file '" + constants.FILE_APP_CONF - + "' does not exists."); + + "application configuration file '" + constants.FILE_APP_CONF + + "' does not exists."); return true; } @@ -265,7 +265,7 @@ var module = {}; } else { // event == EVENT_FAIL redirectUri = getRedirectUri(operation, EVENT_FAIL) + "?error=" + scriptArgument.message - + "&" + constants.URL_PARAM_REFERER + "=" + getRelayState(operation); + + "&" + constants.URL_PARAM_REFERER + "=" + getRelayState(operation); } response.sendRedirect(encodeURI(module.getAppContext() + redirectUri)); } @@ -276,8 +276,8 @@ var module = {}; var identityProviderUrl = ssoConfigs[constants.APP_CONF_AUTH_MODULE_SSO_IDENTITY_PROVIDER_URL]; if (!identityProviderUrl || (identityProviderUrl.length == 0)) { var msg = "Identity Provider URL is not given in SSO configurations in Auth module " - + "configurations in application configuration file '" - + constants.FILE_APP_CONF + "'."; + + "configurations in application configuration file '" + + constants.FILE_APP_CONF + "'."; log.error(msg); response.sendError(500, msg); return null; @@ -286,7 +286,7 @@ var module = {}; var issuer = ssoConfigs[constants.APP_CONF_AUTH_MODULE_SSO_ISSUER]; if (!issuer || (issuer.length == 0)) { var msg = "Issuer is not given in SSO configurations in Auth module configurations in " - + "application configuration file '" + constants.FILE_APP_CONF + "'."; + + "application configuration file '" + constants.FILE_APP_CONF + "'."; log.error(msg); response.sendError(500, msg); return null; @@ -316,8 +316,8 @@ var module = {}; var identityProviderUrl = ssoConfigs[constants.APP_CONF_AUTH_MODULE_SSO_IDENTITY_PROVIDER_URL]; if (!identityProviderUrl || (identityProviderUrl.length == 0)) { var msg = "Identity Provider URL is not given in SSO configurations in Auth module " - + "configurations in application configuration file '" - + constants.FILE_APP_CONF + "'."; + + "configurations in application configuration file '" + + constants.FILE_APP_CONF + "'."; log.error(msg); response.sendError(500, msg); return null; @@ -331,7 +331,7 @@ var module = {}; var issuer = ssoConfigs[constants.APP_CONF_AUTH_MODULE_SSO_ISSUER]; if (!issuer || (issuer.length == 0)) { var msg = "Issuer is not given in SSO configurations in Auth module configurations in " - + "application configuration file '" + constants.FILE_APP_CONF + "'."; + + "application configuration file '" + constants.FILE_APP_CONF + "'."; log.error(msg); response.sendError(500, msg); return null; @@ -341,10 +341,10 @@ var module = {}; try { var ssoClient = require("sso").client; encodedSAMLAuthRequest = ssoClient.getEncodedSAMLLogoutRequest(username, - ssoSessionIndex, issuer); + ssoSessionIndex, issuer); } catch (e) { log.error("Cannot create SAML logout authorization token for user '" + username - + "' with issuer '" + issuer + "'."); + + "' with issuer '" + issuer + "'."); log.error(e.message, e); response.sendError(500, e.message); return null; @@ -446,17 +446,17 @@ var module = {}; intermediatePage = utils.getFurthestChild(intermediatePage); if (!intermediatePage.disabled) { renderer.renderUiComponent(intermediatePage, requestParams, renderingContext, - lookupTable, response); + lookupTable, response); return; } log.warn("Intermediate page '" + intermediatePageName + " mentioned in Auth module " - + "configurations in application configuration file '" - + constants.FILE_APP_CONF + "' is disabled."); + + "configurations in application configuration file '" + + constants.FILE_APP_CONF + "' is disabled."); } else { log.error("Intermediate page '" + intermediatePageName - + " mentioned in Auth module " - + "configurations in application configuration file '" - + constants.FILE_APP_CONF + "' does not exists."); + + " mentioned in Auth module " + + "configurations in application configuration file '" + + constants.FILE_APP_CONF + "' does not exists."); } } @@ -528,13 +528,13 @@ var module = {}; * string}} */ var ssoSession = ssoClient.decodeSAMLLoginResponse(samlResponseObj, samlResponse, - session.getId()); + session.getId()); if (ssoSession.sessionId) { var ssoSessions = getSsoSessions(); ssoSessions[ssoSession.sessionId] = ssoSession; var carbonUser = (require("carbon")).server.tenantUser(ssoSession.loggedInUser); utils.setCurrentUser(carbonUser.username, carbonUser.domain, carbonUser.tenantId); - var scriptArgument = {input: {}, user: module.getCurrentUser()}; + var scriptArgument = {input: {samlToken: ssoSession.samlToken}, user: module.getCurrentUser()}; handleEvent(OPERATION_LOGIN, EVENT_SUCCESS, scriptArgument); } else { var msg = "Cannot decode SAML login response."; diff --git a/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/pom.xml b/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/pom.xml index 0f86757cea3..5592ee46a39 100644 --- a/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/pom.xml +++ b/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/pom.xml @@ -90,10 +90,6 @@ commons-lang.wso2 commons-lang - - org.wso2.carbon.analytics - org.wso2.carbon.analytics.api - org.wso2.carbon.registry org.wso2.carbon.registry.indexing diff --git a/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/src/main/java/org/wso2/carbon/identity/jwt/client/extension/JWTClient.java b/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/src/main/java/org/wso2/carbon/identity/jwt/client/extension/JWTClient.java index fc50292de54..8251a1bceed 100644 --- a/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/src/main/java/org/wso2/carbon/identity/jwt/client/extension/JWTClient.java +++ b/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/src/main/java/org/wso2/carbon/identity/jwt/client/extension/JWTClient.java @@ -18,13 +18,6 @@ package org.wso2.carbon.identity.jwt.client.extension; -import com.nimbusds.jose.JOSEException; -import com.nimbusds.jose.JWSAlgorithm; -import com.nimbusds.jose.JWSHeader; -import com.nimbusds.jose.JWSSigner; -import com.nimbusds.jose.crypto.RSASSASigner; -import com.nimbusds.jwt.JWTClaimsSet; -import com.nimbusds.jwt.SignedJWT; import org.apache.commons.codec.binary.Base64; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -36,32 +29,21 @@ import org.apache.http.client.methods.HttpPost; import org.apache.http.message.BasicNameValuePair; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; -import org.json.simple.parser.ParseException; -import org.wso2.carbon.context.PrivilegedCarbonContext; -import org.wso2.carbon.core.util.KeyStoreManager; +import org.json.simple.parser.ParseException;; import org.wso2.carbon.identity.jwt.client.extension.constant.JWTConstants; import org.wso2.carbon.identity.jwt.client.extension.dto.AccessTokenInfo; import org.wso2.carbon.identity.jwt.client.extension.dto.JWTConfig; import org.wso2.carbon.identity.jwt.client.extension.exception.JWTClientException; import org.wso2.carbon.identity.jwt.client.extension.util.JWTClientUtil; -import java.io.File; import java.io.IOException; -import java.io.InputStream; import java.net.MalformedURLException; -import java.net.URI; import java.net.URL; import java.security.KeyManagementException; -import java.security.KeyStore; import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; -import java.security.UnrecoverableKeyException; -import java.security.cert.CertificateException; -import java.security.interfaces.RSAPrivateKey; import java.util.ArrayList; -import java.util.Date; import java.util.List; -import java.util.Random; /** * this class represents an implementation of Token Client which is based on JWT @@ -69,12 +51,6 @@ import java.util.Random; public class JWTClient { private static Log log = LogFactory.getLog(JWTClient.class); - private static final String JWT_GRANT_TYPE = "urn:ietf:params:oauth:grant-type:jwt-bearer"; - private static final String GRANT_TYPE_PARAM_NAME = "grant_type"; - private static final String REFRESH_TOKEN_GRANT_TYPE = "refresh_token"; - private static final String REFRESH_TOKEN_GRANT_TYPE_PARAM_NAME = "refresh_token"; - private static final String JWT_PARAM_NAME = "assertion"; - private static final String SCOPE_PARAM_NAME = "scope"; private JWTConfig jwtConfig; public JWTClient(JWTConfig jwtConfig) { @@ -87,13 +63,13 @@ public class JWTClient { public AccessTokenInfo getAccessToken(String consumerKey, String consumerSecret, String username, String scopes) throws JWTClientException { List params = new ArrayList<>(); - params.add(new BasicNameValuePair(GRANT_TYPE_PARAM_NAME, JWT_GRANT_TYPE)); - String assertion = generateSignedJWTAssertion(username); + params.add(new BasicNameValuePair(JWTConstants.GRANT_TYPE_PARAM_NAME, JWTConstants.JWT_GRANT_TYPE)); + String assertion = JWTClientUtil.generateSignedJWTAssertion(username, jwtConfig); if (assertion == null) { throw new JWTClientException("JWT is not configured properly for user : " + username); } - params.add(new BasicNameValuePair(JWT_PARAM_NAME, assertion)); - params.add(new BasicNameValuePair(SCOPE_PARAM_NAME, scopes)); + params.add(new BasicNameValuePair(JWTConstants.JWT_PARAM_NAME, assertion)); + params.add(new BasicNameValuePair(JWTConstants.SCOPE_PARAM_NAME, scopes)); return getTokenInfo(params, consumerKey, consumerSecret); } @@ -104,9 +80,9 @@ public class JWTClient { String consumerKey, String consumerSecret) throws JWTClientException { List params = new ArrayList<>(); - params.add(new BasicNameValuePair(GRANT_TYPE_PARAM_NAME, REFRESH_TOKEN_GRANT_TYPE)); - params.add(new BasicNameValuePair(REFRESH_TOKEN_GRANT_TYPE_PARAM_NAME, refreshToken)); - params.add(new BasicNameValuePair(SCOPE_PARAM_NAME, scopes)); + params.add(new BasicNameValuePair(JWTConstants.GRANT_TYPE_PARAM_NAME, JWTConstants.REFRESH_TOKEN_GRANT_TYPE)); + params.add(new BasicNameValuePair(JWTConstants.REFRESH_TOKEN_GRANT_TYPE_PARAM_NAME, refreshToken)); + params.add(new BasicNameValuePair(JWTConstants.SCOPE_PARAM_NAME, scopes)); return getTokenInfo(params, consumerKey, consumerSecret); } @@ -132,10 +108,10 @@ public class JWTClient { JSONParser jsonParser = new JSONParser(); JSONObject jsonObject = (JSONObject) jsonParser.parse(response); AccessTokenInfo accessTokenInfo = new AccessTokenInfo(); - accessTokenInfo.setAccess_token((String) jsonObject.get(JWTConstants.OAUTH_ACCESS_TOKEN)); - accessTokenInfo.setRefresh_token((String) jsonObject.get(JWTConstants.OAUTH_REFRESH_TOKEN)); - accessTokenInfo.setExpires_in((Long) jsonObject.get(JWTConstants.OAUTH_EXPIRES_IN)); - accessTokenInfo.setToken_type((String) jsonObject.get(JWTConstants.OAUTH_TOKEN_TYPE)); + accessTokenInfo.setAccessToken((String) jsonObject.get(JWTConstants.ACCESS_TOKEN_GRANT_TYPE_PARAM_NAME)); + accessTokenInfo.setRefreshToken((String) jsonObject.get(JWTConstants.REFRESH_TOKEN_GRANT_TYPE_PARAM_NAME)); + accessTokenInfo.setExpiresIn((Long) jsonObject.get(JWTConstants.OAUTH_EXPIRES_IN)); + accessTokenInfo.setTokenType((String) jsonObject.get(JWTConstants.OAUTH_TOKEN_TYPE)); return accessTokenInfo; } catch (MalformedURLException e) { throw new JWTClientException("Invalid URL for token endpoint " + jwtConfig.getTokenEndpoint(), e); @@ -156,92 +132,7 @@ public class JWTClient { return new String(Base64.encodeBase64((consumerKey + ":" + consumerSecret).getBytes())); } - public String generateSignedJWTAssertion(String username) throws JWTClientException { - try { - String subject = username; - long currentTimeMillis = System.currentTimeMillis(); - // add the skew between servers - String iss = jwtConfig.getIssuer(); - if (iss == null || iss.isEmpty()) { - return null; - } - currentTimeMillis += jwtConfig.getSkew(); - long iat = currentTimeMillis + jwtConfig.getIssuedInternal() * 60 * 1000; - long exp = currentTimeMillis + jwtConfig.getExpirationTime() * 60 * 1000; - long nbf = currentTimeMillis + jwtConfig.getValidityPeriodFromCurrentTime() * 60 * 1000; - String jti = jwtConfig.getJti(); - if (jti == null) { - String defaultTokenId = currentTimeMillis + "" + new Random().nextInt(); - jti = defaultTokenId; - } - List aud = jwtConfig.getAudiences(); - //set up the basic claims - JWTClaimsSet claimsSet = new JWTClaimsSet(); - claimsSet.setIssueTime(new Date(iat)); - claimsSet.setExpirationTime(new Date(exp)); - claimsSet.setIssuer(iss); - claimsSet.setSubject(username); - claimsSet.setNotBeforeTime(new Date(nbf)); - claimsSet.setJWTID(jti); - claimsSet.setAudience(aud); - - // get Keystore params - String keyStorePath = jwtConfig.getKeyStorePath(); - String privateKeyAlias = jwtConfig.getPrivateKeyAlias(); - String privateKeyPassword = jwtConfig.getPrivateKeyPassword(); - KeyStore keyStore; - RSAPrivateKey rsaPrivateKey; - if (keyStorePath != null && !keyStorePath.isEmpty()) { - String keyStorePassword = jwtConfig.getKeyStorePassword(); - keyStore = loadKeyStore(new File(keyStorePath), keyStorePassword, "JKS"); - rsaPrivateKey = (RSAPrivateKey) keyStore.getKey(privateKeyAlias, privateKeyPassword.toCharArray()); - } else { - int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true); - KeyStoreManager tenantKeyStoreManager = KeyStoreManager.getInstance(tenantId); - rsaPrivateKey = (RSAPrivateKey) tenantKeyStoreManager.getDefaultPrivateKey(); - } - JWSSigner signer = new RSASSASigner(rsaPrivateKey); - SignedJWT signedJWT = new SignedJWT(new JWSHeader(JWSAlgorithm.RS256), claimsSet); - signedJWT.sign(signer); - String assertion = signedJWT.serialize(); - return assertion; - } catch (KeyStoreException e) { - throw new JWTClientException("Failed loading the keystore.", e); - } catch (IOException e) { - throw new JWTClientException("Failed parsing the keystore file.", e); - } catch (NoSuchAlgorithmException e) { - throw new JWTClientException("No such algorithm found RS256.", e); - } catch (CertificateException e) { - throw new JWTClientException("Failed loading the certificate from the keystore.", e); - } catch (UnrecoverableKeyException e) { - throw new JWTClientException("Failed loading the keys from the keystore.", e); - } catch (JOSEException e) { - throw new JWTClientException(e); - } catch (Exception e) { - //This is thrown when loading default private key. - throw new JWTClientException("Failed loading the private key.", e); - } - } - private KeyStore loadKeyStore(final File keystoreFile, final String password, final String keyStoreType) - throws KeyStoreException, IOException, NoSuchAlgorithmException, CertificateException { - if (null == keystoreFile) { - throw new IllegalArgumentException("Keystore url may not be null"); - } - URI keystoreUri = keystoreFile.toURI(); - URL keystoreUrl = keystoreUri.toURL(); - KeyStore keystore = KeyStore.getInstance(keyStoreType); - InputStream is = null; - try { - is = keystoreUrl.openStream(); - keystore.load(is, null == password ? null : password.toCharArray()); - } finally { - if (null != is) { - is.close(); - } - } - return keystore; - } } diff --git a/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/src/main/java/org/wso2/carbon/identity/jwt/client/extension/constant/JWTConstants.java b/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/src/main/java/org/wso2/carbon/identity/jwt/client/extension/constant/JWTConstants.java index 106c5228009..ab6a4b142d1 100644 --- a/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/src/main/java/org/wso2/carbon/identity/jwt/client/extension/constant/JWTConstants.java +++ b/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/src/main/java/org/wso2/carbon/identity/jwt/client/extension/constant/JWTConstants.java @@ -21,8 +21,15 @@ package org.wso2.carbon.identity.jwt.client.extension.constant; * This holds the constants related JWT client component. */ public class JWTConstants { - public static final String OAUTH_ACCESS_TOKEN = "access_token"; - public static final String OAUTH_REFRESH_TOKEN = "refresh_token"; public static final String OAUTH_EXPIRES_IN = "expires_in"; public static final String OAUTH_TOKEN_TYPE = "token_type"; + public static final String JWT_GRANT_TYPE = "urn:ietf:params:oauth:grant-type:jwt-bearer"; + public static final String GRANT_TYPE_PARAM_NAME = "grant_type"; + public static final String REFRESH_TOKEN_GRANT_TYPE = "refresh_token"; + public static final String REFRESH_TOKEN_GRANT_TYPE_PARAM_NAME = "refresh_token"; + public static final String ACCESS_TOKEN_GRANT_TYPE_PARAM_NAME = "access_token"; + public static final String JWT_PARAM_NAME = "assertion"; + public static final String SCOPE_PARAM_NAME = "scope"; + public static final String DEFAULT_JWT_CLIENT = "default-jwt-client"; } + diff --git a/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/src/main/java/org/wso2/carbon/identity/jwt/client/extension/dto/AccessTokenInfo.java b/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/src/main/java/org/wso2/carbon/identity/jwt/client/extension/dto/AccessTokenInfo.java index 146ddf128a1..c1adb813fd4 100644 --- a/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/src/main/java/org/wso2/carbon/identity/jwt/client/extension/dto/AccessTokenInfo.java +++ b/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/src/main/java/org/wso2/carbon/identity/jwt/client/extension/dto/AccessTokenInfo.java @@ -23,40 +23,40 @@ package org.wso2.carbon.identity.jwt.client.extension.dto; */ public class AccessTokenInfo { - private String token_type; - private long expires_in; - private String refresh_token; - private String access_token; + private String tokenType; + private long expiresIn; + private String refreshToken; + private String accessToken; - public String getToken_type() { - return token_type; + public String getTokenType() { + return tokenType; } - public void setToken_type(String token_type) { - this.token_type = token_type; + public void setTokenType(String tokenType) { + this.tokenType = tokenType; } - public long getExpires_in() { - return expires_in; + public long getExpiresIn() { + return expiresIn; } - public void setExpires_in(long expres_in) { - this.expires_in = expres_in; + public void setExpiresIn(long expiresIn) { + this.expiresIn = expiresIn; } - public String getRefresh_token() { - return refresh_token; + public String getRefreshToken() { + return refreshToken; } - public void setRefresh_token(String refresh_token) { - this.refresh_token = refresh_token; + public void setRefreshToken(String refreshToken) { + this.refreshToken = refreshToken; } - public String getAccess_token() { - return access_token; + public String getAccessToken() { + return accessToken; } - public void setAccess_token(String access_token) { - this.access_token = access_token; + public void setAccessToken(String accessToken) { + this.accessToken = accessToken; } } diff --git a/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/src/main/java/org/wso2/carbon/identity/jwt/client/extension/internal/JWTClientExtensionServiceComponent.java b/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/src/main/java/org/wso2/carbon/identity/jwt/client/extension/internal/JWTClientExtensionServiceComponent.java index ff59df5fd32..3ca17170896 100644 --- a/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/src/main/java/org/wso2/carbon/identity/jwt/client/extension/internal/JWTClientExtensionServiceComponent.java +++ b/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/src/main/java/org/wso2/carbon/identity/jwt/client/extension/internal/JWTClientExtensionServiceComponent.java @@ -20,7 +20,11 @@ package org.wso2.carbon.identity.jwt.client.extension.internal; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.osgi.framework.BundleContext; import org.osgi.service.component.ComponentContext; +import org.wso2.carbon.identity.jwt.client.extension.exception.JWTClientConfigurationException; +import org.wso2.carbon.identity.jwt.client.extension.service.JWTClientManagerService; +import org.wso2.carbon.identity.jwt.client.extension.service.JWTClientManagerServiceImpl; import org.wso2.carbon.identity.jwt.client.extension.util.JWTClientUtil; import org.wso2.carbon.registry.core.exceptions.RegistryException; import org.wso2.carbon.registry.core.service.RegistryService; @@ -66,11 +70,16 @@ public class JWTClientExtensionServiceComponent { log.debug("Initializing jwt extension bundle"); } try { - JWTClientUtil.initialize(); + JWTClientManagerService jwtClientManagerService = new JWTClientManagerServiceImpl(); + JWTClientUtil.initialize(jwtClientManagerService); + BundleContext bundleContext = componentContext.getBundleContext(); + bundleContext.registerService(JWTClientManagerService.class.getName(), jwtClientManagerService, null); } catch (RegistryException e) { log.error("Failed loading the jwt config from registry.", e); } catch (IOException e) { log.error("Failed loading the jwt config from the file system.", e); + } catch (JWTClientConfigurationException e) { + log.error("Failed to set default jwt configurations.", e); } } diff --git a/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/src/main/java/org/wso2/carbon/identity/jwt/client/extension/service/JWTClientManagerService.java b/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/src/main/java/org/wso2/carbon/identity/jwt/client/extension/service/JWTClientManagerService.java new file mode 100644 index 00000000000..83e4ca8884f --- /dev/null +++ b/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/src/main/java/org/wso2/carbon/identity/jwt/client/extension/service/JWTClientManagerService.java @@ -0,0 +1,43 @@ +/* +* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. +* +* Licensed 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.identity.jwt.client.extension.service; + +import org.wso2.carbon.identity.jwt.client.extension.JWTClient; +import org.wso2.carbon.identity.jwt.client.extension.exception.JWTClientConfigurationException; +import org.wso2.carbon.identity.jwt.client.extension.exception.JWTClientException; + +import java.util.Properties; + +/** + * This is the JWTClientManagerServiceImpl Service that can be used to have JWT Client for tenant specific. + */ +public interface JWTClientManagerService { + + /** + * This return the jwt based token client to generate token for the tenant. + * @return JWTClient that can be used to generate token. + * @throws JWTClientException when the JWT Client creation fails + */ + JWTClient getJWTClient() throws JWTClientException; + + /** + * This will set the default JWT Client that will be used if there is any available for tenants. + * @param properties required to configure jwt client. + * @throws JWTClientConfigurationException throws when the configuration is invalid. + */ + void setDefaultJWTClient(Properties properties) throws JWTClientConfigurationException; +} diff --git a/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/src/main/java/org/wso2/carbon/identity/jwt/client/extension/JWTClientManager.java b/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/src/main/java/org/wso2/carbon/identity/jwt/client/extension/service/JWTClientManagerServiceImpl.java similarity index 62% rename from components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/src/main/java/org/wso2/carbon/identity/jwt/client/extension/JWTClientManager.java rename to components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/src/main/java/org/wso2/carbon/identity/jwt/client/extension/service/JWTClientManagerServiceImpl.java index bea6664a108..eee439d7685 100644 --- a/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/src/main/java/org/wso2/carbon/identity/jwt/client/extension/JWTClientManager.java +++ b/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/src/main/java/org/wso2/carbon/identity/jwt/client/extension/service/JWTClientManagerServiceImpl.java @@ -16,12 +16,15 @@ * under the License. */ -package org.wso2.carbon.identity.jwt.client.extension; +package org.wso2.carbon.identity.jwt.client.extension.service; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.wso2.carbon.base.MultitenantConstants; import org.wso2.carbon.context.CarbonContext; import org.wso2.carbon.context.PrivilegedCarbonContext; +import org.wso2.carbon.identity.jwt.client.extension.JWTClient; +import org.wso2.carbon.identity.jwt.client.extension.constant.JWTConstants; import org.wso2.carbon.identity.jwt.client.extension.dto.JWTConfig; import org.wso2.carbon.identity.jwt.client.extension.exception.JWTClientAlreadyExistsException; import org.wso2.carbon.identity.jwt.client.extension.exception.JWTClientConfigurationException; @@ -36,42 +39,44 @@ import java.util.Properties; import java.util.concurrent.ConcurrentHashMap; /** - * This creates JWT Client for each tenant. + * This creates JWT Client for each tenant and implements the JWTClientManagerService interface. */ -public class JWTClientManager { +public class JWTClientManagerServiceImpl implements JWTClientManagerService{ private static Map jwtClientMap; - private static JWTClientManager jwtClientCreator; - private static final Log log = LogFactory.getLog(JWTClientManager.class); + private static final Log log = LogFactory.getLog(JWTClientManagerServiceImpl.class); private static final String TENANT_JWT_CONFIG_LOCATION = "/jwt-config/jwt.properties"; + private static JWTClient defaultJWTClient; - public static JWTClientManager getInstance() { - if (jwtClientCreator == null) { - synchronized (JWTClientManager.class) { - if (jwtClientCreator == null) { - jwtClientCreator = new JWTClientManager(); - } - } - } - return jwtClientCreator; - } - private JWTClientManager() { + public JWTClientManagerServiceImpl() { jwtClientMap = new ConcurrentHashMap<>(); } /** * this return the jwt based token client to generate token for the tenant. */ + @Override public JWTClient getJWTClient() throws JWTClientException { String tenantDomain = CarbonContext.getThreadLocalCarbonContext().getTenantDomain(); int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true); + if (tenantId == -1) { + throw new JWTClientException("Invalid tenant domain :" + tenantDomain); + } //Get jwt client which has been registered for the tenant. JWTClient jwtClient = getJWTClient(tenantDomain); if (jwtClient == null) { - //Create new jwt client for the tenant. + //Create a new jwt client for the tenant. try { - JWTConfig jwtConfig = new JWTConfig(getJWTConfig(tenantId)); + Properties properties = getJWTConfigProperties(tenantId); + if (properties == null) { + if (defaultJWTClient != null) { + return defaultJWTClient; + } else { + throw new JWTClientException("JWT Configuration is not available for tenant " + tenantDomain); + } + } + JWTConfig jwtConfig = new JWTConfig(properties); jwtClient = new JWTClient(jwtConfig); addJWTClient(tenantDomain, jwtClient); } catch (JWTClientAlreadyExistsException e) { @@ -85,6 +90,31 @@ public class JWTClientManager { return jwtClient; } + /** + * This will set the default JWT Client that will be used if there is any available for tenants. + */ + @Override + public void setDefaultJWTClient(Properties properties) throws JWTClientConfigurationException { + if (properties == null) { + throw new JWTClientConfigurationException("Failed to load jwt configuration for super tenant."); + } + String defaultJWTClientMode = properties.getProperty(JWTConstants.DEFAULT_JWT_CLIENT); + boolean isDefaultJwtClient = false; + if (defaultJWTClientMode != null && !defaultJWTClientMode.isEmpty()) { + isDefaultJwtClient = Boolean.parseBoolean(defaultJWTClientMode); + } + if (isDefaultJwtClient) { + try { + JWTConfig jwtConfig = new JWTConfig(properties); + defaultJWTClient = new JWTClient(jwtConfig); + addJWTClient(MultitenantConstants.SUPER_TENANT_DOMAIN_NAME, defaultJWTClient); + } catch (JWTClientAlreadyExistsException e) { + log.warn("Attempting to register a jwt client for the super tenant" + + " when one already exists. Returning existing jwt client"); + } + } + } + /** * Fetch the jwt client which has been registered under the tenant domain. * @@ -106,23 +136,25 @@ public class JWTClientManager { * @throws JWTClientAlreadyExistsException - If a jwt client has already been registered under the tenantdomain */ private void addJWTClient(String tenantDomain, JWTClient jwtClient) throws JWTClientAlreadyExistsException { - if (jwtClientMap.containsKey(tenantDomain)) { - throw new JWTClientAlreadyExistsException("A jwt client has already been created for the tenant " + tenantDomain); + synchronized (jwtClientMap) { + if (jwtClientMap.containsKey(tenantDomain)) { + throw new JWTClientAlreadyExistsException( + "A jwt client has already been created for the tenant " + tenantDomain); + } + jwtClientMap.put(tenantDomain, jwtClient); } - jwtClientMap.put(tenantDomain, jwtClient); } /** * Retrieve JWT configs from registry. */ - private Properties getJWTConfig(int tenantId) throws JWTClientConfigurationException { + private Properties getJWTConfigProperties(int tenantId) throws JWTClientConfigurationException { try { Resource config = JWTClientUtil.getConfigRegistryResourceContent(tenantId, TENANT_JWT_CONFIG_LOCATION); - Properties properties = new Properties(); - if(config != null) { + Properties properties = null; + if (config != null) { + properties = new Properties(); properties.load(config.getContentStream()); - } else { - throw new JWTClientConfigurationException("Failed to load jwt configuration for tenant id : " + tenantId); } return properties; } catch (RegistryException e) { diff --git a/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/src/main/java/org/wso2/carbon/identity/jwt/client/extension/util/JWTClientUtil.java b/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/src/main/java/org/wso2/carbon/identity/jwt/client/extension/util/JWTClientUtil.java index 9cb0792487e..352e8177aa7 100644 --- a/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/src/main/java/org/wso2/carbon/identity/jwt/client/extension/util/JWTClientUtil.java +++ b/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/src/main/java/org/wso2/carbon/identity/jwt/client/extension/util/JWTClientUtil.java @@ -17,7 +17,13 @@ */ package org.wso2.carbon.identity.jwt.client.extension.util; -import org.apache.commons.io.FileUtils; +import com.nimbusds.jose.JOSEException; +import com.nimbusds.jose.JWSAlgorithm; +import com.nimbusds.jose.JWSHeader; +import com.nimbusds.jose.JWSSigner; +import com.nimbusds.jose.crypto.RSASSASigner; +import com.nimbusds.jwt.JWTClaimsSet; +import com.nimbusds.jwt.SignedJWT; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.http.HttpResponse; @@ -27,8 +33,12 @@ import org.apache.http.conn.ssl.SSLContextBuilder; import org.apache.http.conn.ssl.TrustSelfSignedStrategy; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; -import org.wso2.carbon.base.MultitenantConstants; import org.wso2.carbon.context.PrivilegedCarbonContext; +import org.wso2.carbon.core.util.KeyStoreManager; +import org.wso2.carbon.identity.jwt.client.extension.service.JWTClientManagerService; +import org.wso2.carbon.identity.jwt.client.extension.dto.JWTConfig; +import org.wso2.carbon.identity.jwt.client.extension.exception.JWTClientConfigurationException; +import org.wso2.carbon.identity.jwt.client.extension.exception.JWTClientException; import org.wso2.carbon.identity.jwt.client.extension.internal.JWTClientExtensionDataHolder; import org.wso2.carbon.registry.core.Registry; import org.wso2.carbon.registry.core.Resource; @@ -36,13 +46,25 @@ import org.wso2.carbon.registry.core.exceptions.RegistryException; import org.wso2.carbon.registry.core.service.RegistryService; import org.wso2.carbon.registry.core.service.TenantRegistryLoader; import org.wso2.carbon.utils.CarbonUtils; + import java.io.BufferedReader; import java.io.File; import java.io.IOException; +import java.io.InputStream; import java.io.InputStreamReader; +import java.net.URI; +import java.net.URL; import java.security.KeyManagementException; +import java.security.KeyStore; import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; +import java.security.UnrecoverableKeyException; +import java.security.cert.CertificateException; +import java.security.interfaces.RSAPrivateKey; +import java.util.Date; +import java.util.List; +import java.util.Properties; +import java.util.Random; /** * This is the utility class that is used for JWT Client. @@ -55,8 +77,10 @@ public class JWTClientUtil { private static final String JWT_CONFIG_FILE_NAME = "jwt.properties"; private static final String SUPERTENANT_JWT_CONFIG_LOCATION = CarbonUtils.getEtcCarbonConfigDirPath() + File.separator + JWT_CONFIG_FILE_NAME; + /** * Return a http client instance + * * @param protocol- service endpoint protocol http/https * @return */ @@ -96,12 +120,14 @@ public class JWTClientUtil { } } - public static void initialize() throws RegistryException, IOException { - Resource resource = getConfigRegistryResourceContent(MultitenantConstants.SUPER_TENANT_ID, TENANT_JWT_CONFIG_LOCATION); - if (resource == null) { - File configFile = new File(SUPERTENANT_JWT_CONFIG_LOCATION); - String contents = FileUtils.readFileToString(configFile, "UTF-8"); - addJWTConfigResourceToRegistry(MultitenantConstants.SUPER_TENANT_ID, contents); + public static void initialize(JWTClientManagerService jwtClientManagerService) + throws RegistryException, IOException, JWTClientConfigurationException { + File configFile = new File(SUPERTENANT_JWT_CONFIG_LOCATION); + if (configFile.exists()) { + InputStream propertyStream = configFile.toURI().toURL().openStream(); + Properties properties = new Properties(); + properties.load(propertyStream); + jwtClientManagerService.setDefaultJWTClient(properties); } } @@ -136,7 +162,7 @@ public class JWTClientUtil { /** * Get the jwt details from the registry for tenants. * - * @param tenantId for accesing tenant space. + * @param tenantId for accesing tenant space. * @return the config for tenant * @throws RegistryException */ @@ -161,8 +187,96 @@ public class JWTClientUtil { } private static void loadTenantRegistry(int tenantId) throws RegistryException { - TenantRegistryLoader tenantRegistryLoader = JWTClientExtensionDataHolder.getInstance().getTenantRegistryLoader(); + TenantRegistryLoader tenantRegistryLoader = + JWTClientExtensionDataHolder.getInstance().getTenantRegistryLoader(); JWTClientExtensionDataHolder.getInstance().getIndexLoaderService().loadTenantIndex(tenantId); tenantRegistryLoader.loadTenantRegistry(tenantId); } + + public static String generateSignedJWTAssertion(String username, JWTConfig jwtConfig) throws JWTClientException { + try { + String subject = username; + long currentTimeMillis = System.currentTimeMillis(); + // add the skew between servers + String iss = jwtConfig.getIssuer(); + if (iss == null || iss.isEmpty()) { + return null; + } + currentTimeMillis += jwtConfig.getSkew(); + long iat = currentTimeMillis + jwtConfig.getIssuedInternal() * 60 * 1000; + long exp = currentTimeMillis + jwtConfig.getExpirationTime() * 60 * 1000; + long nbf = currentTimeMillis + jwtConfig.getValidityPeriodFromCurrentTime() * 60 * 1000; + String jti = jwtConfig.getJti(); + if (jti == null) { + String defaultTokenId = currentTimeMillis + "" + new Random().nextInt(); + jti = defaultTokenId; + } + List aud = jwtConfig.getAudiences(); + //set up the basic claims + JWTClaimsSet claimsSet = new JWTClaimsSet(); + claimsSet.setIssueTime(new Date(iat)); + claimsSet.setExpirationTime(new Date(exp)); + claimsSet.setIssuer(iss); + claimsSet.setSubject(username); + claimsSet.setNotBeforeTime(new Date(nbf)); + claimsSet.setJWTID(jti); + claimsSet.setAudience(aud); + + // get Keystore params + String keyStorePath = jwtConfig.getKeyStorePath(); + String privateKeyAlias = jwtConfig.getPrivateKeyAlias(); + String privateKeyPassword = jwtConfig.getPrivateKeyPassword(); + KeyStore keyStore; + RSAPrivateKey rsaPrivateKey; + if (keyStorePath != null && !keyStorePath.isEmpty()) { + String keyStorePassword = jwtConfig.getKeyStorePassword(); + keyStore = loadKeyStore(new File(keyStorePath), keyStorePassword, "JKS"); + rsaPrivateKey = (RSAPrivateKey) keyStore.getKey(privateKeyAlias, privateKeyPassword.toCharArray()); + } else { + int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true); + KeyStoreManager tenantKeyStoreManager = KeyStoreManager.getInstance(tenantId); + rsaPrivateKey = (RSAPrivateKey) tenantKeyStoreManager.getDefaultPrivateKey(); + } + JWSSigner signer = new RSASSASigner(rsaPrivateKey); + SignedJWT signedJWT = new SignedJWT(new JWSHeader(JWSAlgorithm.RS256), claimsSet); + signedJWT.sign(signer); + String assertion = signedJWT.serialize(); + return assertion; + } catch (KeyStoreException e) { + throw new JWTClientException("Failed loading the keystore.", e); + } catch (IOException e) { + throw new JWTClientException("Failed parsing the keystore file.", e); + } catch (NoSuchAlgorithmException e) { + throw new JWTClientException("No such algorithm found RS256.", e); + } catch (CertificateException e) { + throw new JWTClientException("Failed loading the certificate from the keystore.", e); + } catch (UnrecoverableKeyException e) { + throw new JWTClientException("Failed loading the keys from the keystore.", e); + } catch (JOSEException e) { + throw new JWTClientException(e); + } catch (Exception e) { + //This is thrown when loading default private key. + throw new JWTClientException("Failed loading the private key.", e); + } + } + + private static KeyStore loadKeyStore(final File keystoreFile, final String password, final String keyStoreType) + throws KeyStoreException, IOException, NoSuchAlgorithmException, CertificateException { + if (null == keystoreFile) { + throw new IllegalArgumentException("Keystore url may not be null"); + } + URI keystoreUri = keystoreFile.toURI(); + URL keystoreUrl = keystoreUri.toURL(); + KeyStore keystore = KeyStore.getInstance(keyStoreType); + InputStream is = null; + try { + is = keystoreUrl.openStream(); + keystore.load(is, null == password ? null : password.toCharArray()); + } finally { + if (null != is) { + is.close(); + } + } + return keystore; + } } diff --git a/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/main/java/org/wso2/carbon/webapp/authenticator/framework/WebappAuthenticationValve.java b/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/main/java/org/wso2/carbon/webapp/authenticator/framework/WebappAuthenticationValve.java index f7211fef132..93ab9c32a3b 100644 --- a/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/main/java/org/wso2/carbon/webapp/authenticator/framework/WebappAuthenticationValve.java +++ b/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/main/java/org/wso2/carbon/webapp/authenticator/framework/WebappAuthenticationValve.java @@ -45,8 +45,6 @@ public class WebappAuthenticationValve extends CarbonTomcatValve { return; } - - WebappAuthenticator authenticator = WebappAuthenticatorFactory.getAuthenticator(request); if (authenticator == null) { String msg = "Failed to load an appropriate authenticator to authenticate the request"; diff --git a/features/device-mgt/org.wso2.carbon.device.mgt.api.feature/pom.xml b/features/device-mgt/org.wso2.carbon.device.mgt.api.feature/pom.xml index 791f382a9c3..b728ed51ea1 100644 --- a/features/device-mgt/org.wso2.carbon.device.mgt.api.feature/pom.xml +++ b/features/device-mgt/org.wso2.carbon.device.mgt.api.feature/pom.xml @@ -59,7 +59,7 @@ ${project.build.directory}/maven-shared-archive-resources/webapps - mdm-admin.war + devicemgt_admin.war diff --git a/features/device-mgt/org.wso2.carbon.device.mgt.api.feature/src/main/resources/p2.inf b/features/device-mgt/org.wso2.carbon.device.mgt.api.feature/src/main/resources/p2.inf index ff61b588ecd..91d8294fa2b 100644 --- a/features/device-mgt/org.wso2.carbon.device.mgt.api.feature/src/main/resources/p2.inf +++ b/features/device-mgt/org.wso2.carbon.device.mgt.api.feature/src/main/resources/p2.inf @@ -1,3 +1,3 @@ instructions.configure = \ org.eclipse.equinox.p2.touchpoint.natives.mkdir(path:${installFolder}/../../deployment/server/webapps/);\ -org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.device.mgt.api_${feature.version}/webapps/mdm-admin.war,target:${installFolder}/../../deployment/server/webapps/mdm-admin.war,overwrite:true);\ \ No newline at end of file +org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.device.mgt.api_${feature.version}/webapps/devicemgt_admin.war,target:${installFolder}/../../deployment/server/webapps/devicemgt_admin.war,overwrite:true);\ \ No newline at end of file diff --git a/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/pom.xml b/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/pom.xml index 175e970d1e8..ec7962494d4 100644 --- a/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/pom.xml +++ b/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/pom.xml @@ -1,18 +1,18 @@ @@ -44,6 +44,11 @@ org.wso2.carbon.devicemgt org.wso2.carbon.device.mgt.common + + org.wso2.carbon.devicemgt + org.wso2.carbon.device.mgt.api.feature + zip + org.wso2.carbon.commons org.wso2.carbon.email.verification @@ -97,6 +102,11 @@ org.eclipse.equinox.p2.type.group:false + + + org.wso2.carbon.devicemgt:org.wso2.carbon.device.mgt.api.feature:${carbon.device.mgt.version} + + org.wso2.carbon.devicemgt:org.wso2.carbon.device.mgt.core:${carbon.device.mgt.version} diff --git a/features/device-mgt/pom.xml b/features/device-mgt/pom.xml index 35d65d89f89..061dbdfdf61 100644 --- a/features/device-mgt/pom.xml +++ b/features/device-mgt/pom.xml @@ -1,21 +1,21 @@ + ~ Copyright (c) 2016, 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. + --> diff --git a/features/jwt-client/org.wso2.carbon.identity.jwt.client.extension.feature/src/main/resources/CDMF_DEFAULT_IDP.xml b/features/jwt-client/org.wso2.carbon.identity.jwt.client.extension.feature/src/main/resources/CDMF_DEFAULT_IDP.xml deleted file mode 100644 index 2741e45be00..00000000000 --- a/features/jwt-client/org.wso2.carbon.identity.jwt.client.extension.feature/src/main/resources/CDMF_DEFAULT_IDP.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - CDMF_DEFAULT_IDP - CDMF_DEFAULT_IDP - - https://localhost:9443/oauth2/token - true - - - - - - - - - - - - - MIIFkzCCA3sCBAKkVfcwDQYJKoZIhvcNAQEFBQAwgY0xCzAJBgNVBAYTAlNMMRAwDgYDVQQIEwdXZXN0ZXJuMRAwDgYDVQQHEwdDb2xvbWJvMQ0wCwYDVQQKEwRXU08yMRQwEgYDVQQLEwtFbmdpbmVlcmluZzESMBAGA1UEAxMJbG9jYWxob3N0MSEwHwYJKoZIhvcNAQkBFhJpb3RzZXJ2ZXJAd3NvMi5jb20wHhcNMTUxMjE3MTMxMTA0WhcNMTcxMjE2MTMxMTA0WjCBjTELMAkGA1UEBhMCU0wxEDAOBgNVBAgTB1dlc3Rlcm4xEDAOBgNVBAcTB0NvbG9tYm8xDTALBgNVBAoTBFdTTzIxFDASBgNVBAsTC0VuZ2luZWVyaW5nMRIwEAYDVQQDEwlsb2NhbGhvc3QxITAfBgkqhkiG9w0BCQEWEmlvdHNlcnZlckB3c28yLmNvbTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALkiGVQ9tZOKIi/gD/toV+enq+neqOBGYQ8Fq/ABOWnK2QpGWm81+Rets5GbQ6W//D8C5TOBGqK7z+LAgdmILr1XLkvrXWoan0GPdDJ1wpc2/6XDZvM5f7Y8cmRqVPJv7AF+ImgF9dqv97gYCiujy+nNHd5Nk/60pco2LBV5SyLqqrzKXEnSGrS4zoYWpPeJ9YrXPEkW7A6AxTQK0yU9Ej4TktgafbTueythrLomKiZJj4wPxm2lA2lAZscDdws9NWrI5z/LUVLbUMxrY10Nig1liX5b1mrUk5bb1d2tqwkPrpRILKoOBJtI674SQS3GziiUiCJGIO/EGGRn1AJsC/SvnnEez3WKY/DgJ6102MWK/yWtY8NYHUX2anwMBS7UpT5A4BXdsfBz3R+iPF99FxdAGGsS4GQuuPocZaycLqoPCxpTSSxBsKMUcKpn3yaiQRd6uDuiTNt7odDOQj0Tno7uokh/HILgbzvj9EExDOsdwLVvqYmUHBPeLmiICWXfi4kyH/twPOZtV9eVnfWYx5Kwg+2Y4fIb3q4ABr0hzxaMYHQo6NOukSH1BcdAWiQIXbSFFaTZD8p6OfiZpHcQ59HT/Z8GBlCFL2xkYJFmOhXI/Cu+xrcwqEIInv7d8w3eiNQ7MneomEptLbBk9+kMsP0ubo34oOGHR9qk3Lj580c/AgMBAAEwDQYJKoZIhvcNAQEFBQADggIBADw70g2/wrgzrAM8OXBlthGbCEaXZpKwq9IJN0qu+/l+PNwF7csQhj+qW+zMrWaH1DGWJroaei1+NFFrj/pvp61rF/ZeTPGVJd7puCq++SevqIrzKyAEBtwtpXmcFhBpV/FrQAv3ODOJ3bN2wSRPZHUvARTBB3RaUI06g1jCaBzjDEGoMfSxdr5/Ty2WxTI9u9RlIs3Q52AiOmROtLPiEQZQIqfNO3cxCEWojHxPqVEZA/kQYy+rryj4H0zzSrj7QFlQhsMDw5j8bv9AcvTEGmwp29avsgnceDWinI6lwtd8zqh0ZW9QJdH0BRNCM/EkTlTUHeEg04/sOgOrlWcvEfVxDqNEtbUzU9UFxl0lkQkuRn1UdxZlvhWaFnel5iRC9b7OZvi2mkVujLyxEWlJB1tuyMLQxu6PfabBVODP5V8/+uyiiK/gwrB5rYl8RHxGoznJnI1Y3HVzKlA849CrMBaY5vnhE03cNja7QroPzLmmuXBLk2LbI1lu5nJAqKpBUPMI/IU3pF4Q7VTD2ZANI+ktGgGlM8AK4OJHWOhj8W289pWTHVjG8syPLTsaYkhgLjzZl/g9cUwn/96NJNvzd3dkT+7VgE+BJOLofq25CjZcN1M7MhWdl3vbWNj9vzL0+FCnwca8UecfvFS39PIekIvqbtP+Gw8NiYOUGIllZ0JH - - - - \ No newline at end of file diff --git a/features/jwt-client/org.wso2.carbon.identity.jwt.client.extension.feature/src/main/resources/jwt.properties b/features/jwt-client/org.wso2.carbon.identity.jwt.client.extension.feature/src/main/resources/jwt.properties index 503301fb80b..d6a1f0fc2be 100644 --- a/features/jwt-client/org.wso2.carbon.identity.jwt.client.extension.feature/src/main/resources/jwt.properties +++ b/features/jwt-client/org.wso2.carbon.identity.jwt.client.extension.feature/src/main/resources/jwt.properties @@ -41,7 +41,7 @@ skew=0 #jti=token123 #KeyStore to cryptographic credentials -#KeyStore=src/main/resources/wso2carbon.jks +#KeyStore=repository/resources/security/wso2carbon.jks #Password of the KeyStore #KeyStorePassword=wso2carbon @@ -52,3 +52,6 @@ skew=0 #Private key password to retrieve the private key used to sign #AuthnRequest and LogoutRequest messages #PrivateKeyPassword=wso2carbon + +#this will be used as the default IDP config if there isn't any config available for tenants. +default-jwt-client=true diff --git a/features/jwt-client/org.wso2.carbon.identity.jwt.client.extension.feature/src/main/resources/p2.inf b/features/jwt-client/org.wso2.carbon.identity.jwt.client.extension.feature/src/main/resources/p2.inf index 9e8c8bd070b..5678ff874ef 100644 --- a/features/jwt-client/org.wso2.carbon.identity.jwt.client.extension.feature/src/main/resources/p2.inf +++ b/features/jwt-client/org.wso2.carbon.identity.jwt.client.extension.feature/src/main/resources/p2.inf @@ -1,3 +1,2 @@ instructions.configure = \ org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.identity.jwt.client.extension_${feature.version}/jwt.properties,target:${installFolder}/../../conf/etc/jwt.properties,overwrite:true);\ -org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.identity.jwt.client.extension_${feature.version}/CDMF_DEFAULT_IDP.xml,target:${installFolder}/../../conf/identity/identity-providers/CDMF_DEFAULT_IDP.xml,overwrite:true);\ diff --git a/pom.xml b/pom.xml index ad4400d1584..c71293b0494 100644 --- a/pom.xml +++ b/pom.xml @@ -280,6 +280,12 @@ zip ${carbon.device.mgt.version} + + org.wso2.carbon.devicemgt + org.wso2.carbon.device.mgt.api.feature + zip + ${carbon.device.mgt.version} + org.wso2.carbon.devicemgt org.wso2.carbon.device.mgt.ui.feature @@ -1390,13 +1396,6 @@ ${carbon.analytics.common.version} - - - org.wso2.carbon.analytics - org.wso2.carbon.analytics.api - ${carbon.analytics.version} - - org.wso2.carbon.registry @@ -1749,10 +1748,6 @@ 5.0.11 [5.0.11,6.0.0) - - 1.0.5 - [1.0.5,2.0.0] - 4.4.8 [4.4.8, 5.0.0)