Adding ListUsers API method, and changes to existing code
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/38d7f726 Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/38d7f726 Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/38d7f726 Branch: refs/heads/docker-integration Commit: 38d7f7269893166d0ab154e0e5e8b4a399a1a9e3 Parents: d789aa6 Author: lasinducharith <[email protected]> Authored: Mon Sep 15 19:21:30 2014 +0530 Committer: Nirmal Fernando <[email protected]> Committed: Wed Sep 24 17:00:43 2014 +0530 ---------------------------------------------------------------------- .../stratos/cli/RestCommandLineService.java | 82 ++++++ .../apache/stratos/cli/StratosApplication.java | 5 + .../apache/stratos/cli/beans/UserInfoBean.java | 3 - .../stratos/cli/commands/DeleteUserCommand.java | 6 +- .../stratos/cli/commands/ListAllUsers.java | 65 +++++ .../apache/stratos/cli/utils/CliConstants.java | 5 + .../internal/ADCManagementServerComponent.java | 267 ++++++++++--------- .../manager/listener/TenantUserRoleCreator.java | 42 +-- .../manager/user/mgt/StratosUserManager.java | 91 +++++-- .../manager/utils/CartridgeConstants.java | 17 -- .../manager/utils/PermissionConstants.java | 36 +++ .../stratos/manager/utils/UserRoleCreator.java | 46 ++-- .../rest/endpoint/services/ServiceUtils.java | 46 +++- .../rest/endpoint/services/StratosAdmin.java | 16 ++ .../stratos-test/WEB-INF/schemas/schema.xsd | 6 +- .../webapp/stratos/WEB-INF/schemas/schema.xsd | 6 +- 16 files changed, 487 insertions(+), 252 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/38d7f726/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/RestCommandLineService.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/RestCommandLineService.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/RestCommandLineService.java index 7aa3d90..85ffb05 100644 --- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/RestCommandLineService.java +++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/RestCommandLineService.java @@ -96,6 +96,7 @@ public class RestCommandLineService { private final String deactivateTenantRestEndPoint = "/stratos/admin/tenant/deactivate"; private final String activateTenantRestEndPoint = "/stratos/admin/tenant/activate"; private final String listAllTenantRestEndPoint = "/stratos/admin/tenant/list"; + private final String listAllUserRestEndPoint = "/stratos/admin/user/list"; private final String getListAvailableCartridgeInfoRestEndPoint = "/stratos/admin/cartridge/available/info"; @@ -1247,6 +1248,71 @@ public class RestCommandLineService { } } + // This method helps to list all users + public void listAllUsers() throws CommandException { + DefaultHttpClient httpClient = new DefaultHttpClient(); + try { + HttpResponse response = restClient.doGet(httpClient, restClient.getBaseURL() + + listAllUserRestEndPoint); + + String responseCode = "" + response.getStatusLine().getStatusCode(); + String resultString = getHttpResponseString(response); + + GsonBuilder gsonBuilder = new GsonBuilder(); + Gson gson = gsonBuilder.create(); + + if ( ! responseCode.equals(CliConstants.RESPONSE_OK)) { + ExceptionMapper exception = gson.fromJson(resultString, ExceptionMapper.class); + System.out.println(exception); + return; + } + + if (resultString == null) { + System.out.println("Response content is empty"); + return; + } + + UserInfoList userInfoList = gson.fromJson(resultString, UserInfoList.class); + + if (userInfoList == null) { + System.out.println("User information list is empty"); + return; + } + + RowMapper<UserInfoBean> userInfoMapper = new RowMapper<UserInfoBean>() { + + public String[] getData(UserInfoBean userInfo) { + String[] data = new String[2]; + data[0] = userInfo.getUserName(); + data[1] = userInfo.getRole(); + return data; + } + }; + + UserInfoBean[] users = new UserInfoBean[userInfoList.getUserInfoBean().size()]; + users = userInfoList.getUserInfoBean().toArray(users); + + if (users.length == 0) { + String message = "Cannot find any User. " + + "Please create a new user using [" + CliConstants.ADD_USER + "] command."; + if (logger.isDebugEnabled()) { + logger.debug(message); + } + System.out.println(message); + return; + } + + System.out.println("Available Tenants:" ); + CommandLineUtils.printTable(users, userInfoMapper, "Username", "Role"); + System.out.println(); + + } catch (Exception e) { + handleException("Exception in listing partitions", e); + } finally { + httpClient.getConnectionManager().shutdown(); + } + } + // This method helps to unsubscribe cartridges public void unsubscribe(String alias) throws CommandException { DefaultHttpClient httpClient = new DefaultHttpClient(); @@ -1990,6 +2056,22 @@ public class RestCommandLineService { } } + // This class convert JSON string to UserInfoBean object + private class UserInfoList { + private ArrayList<UserInfoBean> userInfoBean; + + public ArrayList<UserInfoBean> getUserInfoBean() { + return userInfoBean; + } + + public void setUserInfoBean(ArrayList<UserInfoBean> userInfoBean) { + this.userInfoBean = userInfoBean; + } + + UserInfoList() { + userInfoBean = new ArrayList<UserInfoBean>(); + } + } // This class is for convert JSON string to CartridgeList object private class CartridgeList { private ArrayList<Cartridge> cartridge; http://git-wip-us.apache.org/repos/asf/stratos/blob/38d7f726/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/StratosApplication.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/StratosApplication.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/StratosApplication.java index fae2db5..2ecd891 100644 --- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/StratosApplication.java +++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/StratosApplication.java @@ -58,6 +58,7 @@ import org.apache.stratos.cli.commands.DescribePartitionCommand; import org.apache.stratos.cli.commands.ExitCommand; import org.apache.stratos.cli.commands.HelpCommand; import org.apache.stratos.cli.commands.ListAllTenants; +import org.apache.stratos.cli.commands.ListAllUsers; import org.apache.stratos.cli.commands.ListCartridgesCommand; import org.apache.stratos.cli.commands.ListDeployServiceCommand; import org.apache.stratos.cli.commands.ListMemberCommand; @@ -137,12 +138,16 @@ public class StratosApplication extends CommandLineApplication<StratosCommandCon command = new AddTenantCommand(); commands.put(command.getName(), command); + //Adding User Operations command = new AddUserCommand(); commands.put(command.getName(), command); command = new DeleteUserCommand(); commands.put(command.getName(), command); + command = new ListAllUsers(); + commands.put(command.getName(), command); + //command = new DeleteTenantCommand(); //commands.put(command.getName(), command); http://git-wip-us.apache.org/repos/asf/stratos/blob/38d7f726/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/beans/UserInfoBean.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/beans/UserInfoBean.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/beans/UserInfoBean.java index 9830f2e..9f36223 100644 --- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/beans/UserInfoBean.java +++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/beans/UserInfoBean.java @@ -19,9 +19,6 @@ package org.apache.stratos.cli.beans; -import javax.xml.bind.annotation.XmlRootElement; - -@XmlRootElement public class UserInfoBean { private String userName; http://git-wip-us.apache.org/repos/asf/stratos/blob/38d7f726/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteUserCommand.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteUserCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteUserCommand.java index ab46374..9be1f26 100644 --- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteUserCommand.java +++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteUserCommand.java @@ -56,11 +56,11 @@ public class DeleteUserCommand implements Command<StratosCommandContext> { logger.debug("Executing {} command...", getName()); } if (args != null && args.length == 1) { - String id = args[0]; + String username = args[0]; if (logger.isDebugEnabled()) { - logger.debug("Getting delete user info {}", id); + logger.debug("Getting delete user info {}", username); } - RestCommandLineService.getInstance().deleteUser(id); + RestCommandLineService.getInstance().deleteUser(username); return CliConstants.SUCCESSFUL_CODE; } else { context.getStratosApplication().printUsage(getName()); http://git-wip-us.apache.org/repos/asf/stratos/blob/38d7f726/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListAllUsers.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListAllUsers.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListAllUsers.java new file mode 100644 index 0000000..bea160e --- /dev/null +++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListAllUsers.java @@ -0,0 +1,65 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF 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.apache.stratos.cli.commands; + +import org.apache.commons.cli.Options; +import org.apache.stratos.cli.Command; +import org.apache.stratos.cli.RestCommandLineService; +import org.apache.stratos.cli.StratosCommandContext; +import org.apache.stratos.cli.exception.CommandException; +import org.apache.stratos.cli.utils.CliConstants; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class ListAllUsers implements Command<StratosCommandContext> { + + private static final Logger logger = LoggerFactory.getLogger(ListAllUsers.class); + + public ListAllUsers(){ + } + + public String getName() { + return CliConstants.LIST_USERS; + } + + public String getDescription() { + return "List available users"; + } + + public String getArgumentSyntax() { + return null; + } + + public int execute(StratosCommandContext context, String[] args) throws CommandException { + if (logger.isDebugEnabled()) { + logger.debug("Executing {} command...", getName()); + } + if (args == null || args.length == 0) { + RestCommandLineService.getInstance().listAllUsers(); + return CliConstants.SUCCESSFUL_CODE; + } else { + context.getStratosApplication().printUsage(getName()); + return CliConstants.BAD_ARGS_CODE; + } + } + + public Options getOptions() { + return null; + } +} http://git-wip-us.apache.org/repos/asf/stratos/blob/38d7f726/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/utils/CliConstants.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/utils/CliConstants.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/utils/CliConstants.java index bda791b..cebed60 100644 --- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/utils/CliConstants.java +++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/utils/CliConstants.java @@ -110,6 +110,11 @@ public class CliConstants { public static final String LIST_TENANTS = "list-tenants"; /** + * List tenants + */ + public static final String LIST_USERS = "list-users"; + + /** * List deployment policies */ public static final String LIST_DEPLOYMENT_POLICIES = "list-deployment-policies"; http://git-wip-us.apache.org/repos/asf/stratos/blob/38d7f726/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/internal/ADCManagementServerComponent.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/internal/ADCManagementServerComponent.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/internal/ADCManagementServerComponent.java index cc9f34f..38ec2c5 100644 --- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/internal/ADCManagementServerComponent.java +++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/internal/ADCManagementServerComponent.java @@ -1,18 +1,18 @@ /* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file + * regarding copyright ownership. The ASF 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 + * 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 + * "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. */ @@ -21,23 +21,26 @@ package org.apache.stratos.manager.internal; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.stratos.manager.listener.InstanceStatusListener; +import org.apache.stratos.manager.listener.TenantUserRoleCreator; import org.apache.stratos.manager.publisher.TenantEventPublisher; import org.apache.stratos.manager.publisher.TenantSynchronizerTaskScheduler; import org.apache.stratos.manager.retriever.DataInsertionAndRetrievalManager; import org.apache.stratos.manager.topology.receiver.StratosManagerTopologyEventReceiver; import org.apache.stratos.manager.utils.CartridgeConfigFileReader; +import org.apache.stratos.manager.utils.UserRoleCreator; +import org.apache.stratos.messaging.broker.publish.EventPublisherPool; import org.apache.stratos.messaging.broker.subscribe.TopicSubscriber; import org.apache.stratos.messaging.util.Constants; import org.osgi.service.component.ComponentContext; import org.wso2.carbon.ntask.core.service.TaskService; import org.wso2.carbon.registry.core.service.RegistryService; +import org.wso2.carbon.user.api.UserStoreManager; +import org.wso2.carbon.user.core.UserRealm; import org.wso2.carbon.user.core.service.RealmService; import org.wso2.carbon.utils.ConfigurationContextService; /** - * @scr.component - * name= - * "org.wso2.carbon.hosting.mgt.internal.ADCManagementServerComponent" + * @scr.component name="org.wso2.carbon.hosting.mgt.internal.ADCManagementServerComponent" * immediate="true" * @scr.reference name="config.context.service" * interface="org.wso2.carbon.utils.ConfigurationContextService" @@ -53,141 +56,141 @@ import org.wso2.carbon.utils.ConfigurationContextService; * "org.wso2.carbon.registry.core.service.RegistryService" * cardinality="1..1" policy="dynamic" bind="setRegistryService" * unbind="unsetRegistryService" - * @scr.reference name="ntask.component" - * interface="org.wso2.carbon.ntask.core.service.TaskService" + * @scr.reference name="ntask.component" interface="org.wso2.carbon.ntask.core.service.TaskService" * cardinality="1..1" policy="dynamic" bind="setTaskService" * unbind="unsetTaskService" */ public class ADCManagementServerComponent { - private static final Log log = LogFactory.getLog(ADCManagementServerComponent.class); - private StratosManagerTopologyEventReceiver stratosManagerTopologyEventReceiver; + private static final Log log = LogFactory.getLog(ADCManagementServerComponent.class); + private StratosManagerTopologyEventReceiver stratosManagerTopologyEventReceiver; - protected void activate(ComponentContext componentContext) throws Exception { + protected void activate(ComponentContext componentContext) throws Exception { try { CartridgeConfigFileReader.readProperties(); - // Schedule complete tenant event synchronizer - if (log.isDebugEnabled()) { - log.debug("Scheduling tenant synchronizer task..."); - } - TenantSynchronizerTaskScheduler.schedule(ServiceReferenceHolder.getInstance() - .getTaskService()); - - // Register tenant event publisher - if (log.isDebugEnabled()) { - log.debug("Starting tenant event publisher..."); - } - TenantEventPublisher tenantEventPublisher = new TenantEventPublisher(); - componentContext.getBundleContext() - .registerService(org.apache.stratos.common.listeners.TenantMgtListener.class.getName(), - tenantEventPublisher, null); - - // Start instance status topic subscriber - if (log.isDebugEnabled()) { - log.debug("Starting instance status topic subscriber..."); - } - TopicSubscriber subscriber = new TopicSubscriber(Constants.INSTANCE_STATUS_TOPIC); - subscriber.setMessageListener(new InstanceStatusListener()); - Thread tsubscriber = new Thread(subscriber); + // Schedule complete tenant event synchronizer + if(log.isDebugEnabled()) { + log.debug("Scheduling tenant synchronizer task..."); + } + TenantSynchronizerTaskScheduler.schedule(ServiceReferenceHolder.getInstance().getTaskService()); + + // Register tenant event publisher + if(log.isDebugEnabled()) { + log.debug("Starting tenant event publisher..."); + } + TenantEventPublisher tenantEventPublisher = new TenantEventPublisher(); + componentContext.getBundleContext().registerService( + org.apache.stratos.common.listeners.TenantMgtListener.class.getName(), + tenantEventPublisher, null); + + // Start instance status topic subscriber + if(log.isDebugEnabled()) { + log.debug("Starting instance status topic subscriber..."); + } + TopicSubscriber subscriber = new TopicSubscriber(Constants.INSTANCE_STATUS_TOPIC); + subscriber.setMessageListener(new InstanceStatusListener()); + Thread tsubscriber = new Thread(subscriber); tsubscriber.start(); - // initializing the topology event subscriber - /* - * TopicSubscriber topologyTopicSubscriber = new - * TopicSubscriber(Constants.TOPOLOGY_TOPIC); - * topologyTopicSubscriber.setMessageListener(new - * TopologyEventListner()); - * Thread topologyTopicSubscriberThread = new - * Thread(topologyTopicSubscriber); - * topologyTopicSubscriberThread.start(); - * - * //Starting Topology Receiver - * TopologyReceiver topologyReceiver = new TopologyReceiver(); - * Thread topologyReceiverThread = new Thread(topologyReceiver); - * topologyReceiverThread.start(); - */ - - stratosManagerTopologyEventReceiver = new StratosManagerTopologyEventReceiver(); - Thread topologyReceiverThread = new Thread(stratosManagerTopologyEventReceiver); - topologyReceiverThread.start(); - log.info("Topology receiver thread started"); - - // retrieve persisted CartridgeSubscriptions - new DataInsertionAndRetrievalManager().cachePersistedSubscriptions(); - - // Component activated successfully - log.info("ADC management server component is activated"); - - } catch (Exception e) { - if (log.isFatalEnabled()) { - log.fatal("Could not activate ADC management server component", e); - } - } - } - - protected void setConfigurationContextService(ConfigurationContextService contextService) { - DataHolder.setClientConfigContext(contextService.getClientConfigContext()); - DataHolder.setServerConfigContext(contextService.getServerConfigContext()); - - } - - protected void unsetConfigurationContextService(ConfigurationContextService contextService) { - DataHolder.setClientConfigContext(null); - DataHolder.setServerConfigContext(null); - } - - protected void setRealmService(RealmService realmService) { - // keeping the realm service in the DataHolder class - DataHolder.setRealmService(realmService); - } - - protected void unsetRealmService(RealmService realmService) { - } - - protected void setRegistryService(RegistryService registryService) { - try { - DataHolder.setRegistryService(registryService); + RealmService realmService = DataHolder.getRealmService(); + UserRealm realm = realmService.getBootstrapRealm(); + UserStoreManager userStoreManager = realm.getUserStoreManager(); + //Create a Internal/user Role at server start-up + UserRoleCreator.CreateTenantUserRole(userStoreManager); + + TenantUserRoleCreator tenantUserRoleCreator = new TenantUserRoleCreator(); + componentContext.getBundleContext().registerService( + org.apache.stratos.common.listeners.TenantMgtListener.class.getName(), + tenantUserRoleCreator, null); + + //initializing the topology event subscriber + /*TopicSubscriber topologyTopicSubscriber = new TopicSubscriber(Constants.TOPOLOGY_TOPIC); + topologyTopicSubscriber.setMessageListener(new TopologyEventListner()); + Thread topologyTopicSubscriberThread = new Thread(topologyTopicSubscriber); + topologyTopicSubscriberThread.start(); + + //Starting Topology Receiver + TopologyReceiver topologyReceiver = new TopologyReceiver(); + Thread topologyReceiverThread = new Thread(topologyReceiver); + topologyReceiverThread.start();*/ + + stratosManagerTopologyEventReceiver = new StratosManagerTopologyEventReceiver(); + Thread topologyReceiverThread = new Thread(stratosManagerTopologyEventReceiver); + topologyReceiverThread.start(); + log.info("Topology receiver thread started"); + + // retrieve persisted CartridgeSubscriptions + new DataInsertionAndRetrievalManager().cachePersistedSubscriptions(); + + //Component activated successfully + log.info("ADC management server component is activated"); + } catch (Exception e) { - log.error("Cannot retrieve governance registry", e); + if(log.isFatalEnabled()) { + log.fatal("Could not activate ADC management server component", e); + } } } - protected void unsetRegistryService(RegistryService registryService) { - } - - /* - * protected void setTopologyManagementService(TopologyManagementService - * topologyMgtService) { - * DataHolder.setTopologyMgtService(topologyMgtService); - * } - * - * protected void unsetTopologyManagementService(TopologyManagementService - * topologyMgtService) { - * } - */ - - protected void setTaskService(TaskService taskService) { - if (log.isDebugEnabled()) { - log.debug("Setting the task service"); - } - ServiceReferenceHolder.getInstance().setTaskService(taskService); - } - - protected void unsetTaskService(TaskService taskService) { - if (log.isDebugEnabled()) { - log.debug("Un-setting the task service"); - } - ServiceReferenceHolder.getInstance().setTaskService(null); - } - - protected void deactivate(ComponentContext context) { - // Close event publisher connections to message broker - // EventPublisherPool.close(Constants.INSTANCE_NOTIFIER_TOPIC); - // EventPublisherPool.close(Constants.TENANT_TOPIC); - - // terminate Stratos Manager Topology Receiver - stratosManagerTopologyEventReceiver.terminate(); - } + protected void setConfigurationContextService(ConfigurationContextService contextService) { + DataHolder.setClientConfigContext(contextService.getClientConfigContext()); + DataHolder.setServerConfigContext(contextService.getServerConfigContext()); + + } + + protected void unsetConfigurationContextService(ConfigurationContextService contextService) { + DataHolder.setClientConfigContext(null); + DataHolder.setServerConfigContext(null); + } + + protected void setRealmService(RealmService realmService) { + // keeping the realm service in the DataHolder class + DataHolder.setRealmService(realmService); + } + + protected void unsetRealmService(RealmService realmService) { + } + + protected void setRegistryService(RegistryService registryService) { + try { + DataHolder.setRegistryService(registryService); + } catch (Exception e) { + log.error("Cannot retrieve governance registry", e); + } + } + + protected void unsetRegistryService(RegistryService registryService) { + } + + /*protected void setTopologyManagementService(TopologyManagementService topologyMgtService) { + DataHolder.setTopologyMgtService(topologyMgtService); + } + + protected void unsetTopologyManagementService(TopologyManagementService topologyMgtService) { + }*/ + + protected void setTaskService(TaskService taskService) { + if (log.isDebugEnabled()) { + log.debug("Setting the task service"); + } + ServiceReferenceHolder.getInstance().setTaskService(taskService); + } + + protected void unsetTaskService(TaskService taskService) { + if (log.isDebugEnabled()) { + log.debug("Un-setting the task service"); + } + ServiceReferenceHolder.getInstance().setTaskService(null); + } + + protected void deactivate(ComponentContext context) { + // Close event publisher connections to message broker + EventPublisherPool.close(Constants.INSTANCE_NOTIFIER_TOPIC); + EventPublisherPool.close(Constants.TENANT_TOPIC); + + //terminate Stratos Manager Topology Receiver + stratosManagerTopologyEventReceiver.terminate(); + } } http://git-wip-us.apache.org/repos/asf/stratos/blob/38d7f726/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/listener/TenantUserRoleCreator.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/listener/TenantUserRoleCreator.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/listener/TenantUserRoleCreator.java index 50dc6ad..97d42dc 100644 --- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/listener/TenantUserRoleCreator.java +++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/listener/TenantUserRoleCreator.java @@ -25,7 +25,9 @@ import org.apache.stratos.common.beans.TenantInfoBean; import org.apache.stratos.common.exception.StratosException; import org.apache.stratos.common.listeners.TenantMgtListener; import org.apache.stratos.manager.internal.DataHolder; +import org.apache.stratos.manager.user.mgt.exception.UserManagementException; import org.apache.stratos.manager.utils.CartridgeConstants; +import org.apache.stratos.manager.utils.UserRoleCreator; import org.wso2.carbon.context.CarbonContext; import org.wso2.carbon.context.PrivilegedCarbonContext; import org.wso2.carbon.user.api.Permission; @@ -39,11 +41,10 @@ import org.wso2.carbon.utils.multitenancy.MultitenantConstants; public class TenantUserRoleCreator implements TenantMgtListener { private transient static final Log log = LogFactory.getLog(TenantUserRoleCreator.class); - private static String role = "Internal/user"; /** * Create an 'user' role at tenant creation time - * @param tenantInfo + * @param tenantInfo TenantInfoBean * @throws StratosException */ @Override @@ -55,37 +56,18 @@ public class TenantUserRoleCreator implements TenantMgtListener { PrivilegedCarbonContext carbonContext = PrivilegedCarbonContext.getThreadLocalCarbonContext(); carbonContext.setTenantDomain(tenantInfo.getTenantDomain()); carbonContext.setTenantId(tenantInfo.getTenantId()); - + //Get tenant UserRealm & UserStoreManager UserRealm userRealm = DataHolder.getRealmService().getTenantUserRealm(tenantInfo.getTenantId()); - UserStoreManager manager = userRealm.getUserStoreManager(); - - if (!manager.isExistingRole(role)) { - if (log.isDebugEnabled()) { - log.debug("Creating new role: " + role); - } - - Permission[] TenantUserPermissions = new Permission[]{ new Permission(CartridgeConstants.Permissions.VIEW_AUTOSCALING_POLICY, UserMgtConstants.EXECUTE_ACTION), - new Permission(CartridgeConstants.Permissions.VIEW_DEPLOYMENT_POLICY, UserMgtConstants.EXECUTE_ACTION), - new Permission(CartridgeConstants.Permissions.VIEW_CARTRIDGE, UserMgtConstants.EXECUTE_ACTION), - new Permission(CartridgeConstants.Permissions.VIEW_SERVICE, UserMgtConstants.EXECUTE_ACTION), - new Permission(CartridgeConstants.Permissions.VIEW_SUBSCRIPTION, UserMgtConstants.EXECUTE_ACTION), - new Permission(CartridgeConstants.Permissions.VIEW_DOMAIN, UserMgtConstants.EXECUTE_ACTION), - new Permission(CartridgeConstants.Permissions.VIEW_CLUSTER, UserMgtConstants.EXECUTE_ACTION), - new Permission(CartridgeConstants.Permissions.VIEW_INSTANCE, UserMgtConstants.EXECUTE_ACTION), - new Permission(CartridgeConstants.Permissions.VIEW_KUBERNETES, UserMgtConstants.EXECUTE_ACTION), - new Permission(CartridgeConstants.Permissions.ADD_GIT_SYNC, UserMgtConstants.EXECUTE_ACTION), - new Permission(CartridgeConstants.Permissions.ADD_SUBSCRIPTION, UserMgtConstants.EXECUTE_ACTION), - new Permission(CartridgeConstants.Permissions.ADD_DOMAIN, UserMgtConstants.EXECUTE_ACTION), - new Permission(CartridgeConstants.Permissions.REST_LOGIN, UserMgtConstants.EXECUTE_ACTION), - }; - - String[] userList = new String[]{}; - manager.addRole(role, userList, TenantUserPermissions); - } + UserStoreManager userStoreManager = userRealm.getUserStoreManager(); + + UserRoleCreator.CreateTenantUserRole(userStoreManager); } catch (UserStoreException e) { - log.error("Error while creating the role: " + role + " - " + - e.getMessage()); + log.error(e.getMessage(), e); + throw new StratosException(e.getMessage(), e); + } catch (UserManagementException e) { + log.error(e.getMessage(), e); + throw new StratosException(e.getMessage(), e); } finally { PrivilegedCarbonContext.endTenantFlow(); } http://git-wip-us.apache.org/repos/asf/stratos/blob/38d7f726/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/user/mgt/StratosUserManager.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/user/mgt/StratosUserManager.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/user/mgt/StratosUserManager.java index ae55ad9..75996df 100644 --- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/user/mgt/StratosUserManager.java +++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/user/mgt/StratosUserManager.java @@ -22,6 +22,7 @@ package org.apache.stratos.manager.user.mgt; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.stratos.common.beans.TenantInfoBean; import org.apache.stratos.manager.internal.DataHolder; import org.apache.stratos.manager.user.mgt.beans.UserInfoBean; import org.apache.stratos.manager.user.mgt.exception.UserManagementException; @@ -33,18 +34,13 @@ import org.wso2.carbon.user.core.service.RealmService; import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; public class StratosUserManager { private transient static final Log log = LogFactory.getLog(StratosUserManager.class); - private UserStoreManager userStoreManager; - - - public StratosUserManager(UserStoreManager userStoreManager) { - this.userStoreManager = userStoreManager; - - } + private String internalEveryoneRole = "Internal/everyone"; /** * Add a user to the user store @@ -52,7 +48,7 @@ public class StratosUserManager { * @param userInfoBean * @throws UserStoreException */ - public void addUser(UserInfoBean userInfoBean) throws UserManagementException { + public void addUser(UserStoreManager userStoreManager, UserInfoBean userInfoBean) throws UserManagementException { try { @@ -61,6 +57,7 @@ public class StratosUserManager { log.debug("Creating new User: " + userInfoBean.getUserName()); } } + String[] roles = new String[1]; roles[0] = userInfoBean.getRole(); Map<String, String> claims = new HashMap<String, String>(); @@ -74,16 +71,15 @@ public class StratosUserManager { log.error(e.getMessage(), e); throw new UserManagementException(e.getMessage(), e); } - } /** - * Delete the user with the given user name + * Delete the user with the given username * - * @param userName The user name + * @param userName The username * @throws UserStoreException */ - public void deleteUser(String userName) throws UserManagementException { + public void deleteUser(UserStoreManager userStoreManager, String userName) throws UserManagementException { try { userStoreManager.deleteUser(userName); @@ -99,29 +95,19 @@ public class StratosUserManager { * * @param userInfoBean */ - public void updateUser(UserInfoBean userInfoBean) throws UserManagementException { + public void updateUser(UserStoreManager userStoreManager, UserInfoBean userInfoBean) throws UserManagementException { try { if (userStoreManager.isExistingUser(userInfoBean.getUserName())) { String[] newRoles = new String[1]; newRoles[0] = userInfoBean.getRole(); - - //String[] rolesToDelete = new String[1]; - ArrayList<String> rolesToDelete = new ArrayList<String>(); - String[] currentRolesList = userStoreManager.getRoleListOfUser(userInfoBean.getUserName()); - for(String role: currentRolesList){ - if(!role.equals("Internal/everyone")){ - rolesToDelete.add(role); - } - } - String[] rolesToDeleteArray = new String[rolesToDelete.size()]; Map<String, String> claims = new HashMap<String, String>(); claims.put(UserCoreConstants.ClaimTypeURIs.EMAIL_ADDRESS, userInfoBean.getEmail()); claims.put(UserCoreConstants.ClaimTypeURIs.GIVEN_NAME, userInfoBean.getFirstName()); claims.put(UserCoreConstants.ClaimTypeURIs.SURNAME, userInfoBean.getLastName()); - userStoreManager.updateRoleListOfUser(userInfoBean.getUserName(), rolesToDelete.toArray(rolesToDeleteArray), newRoles); + userStoreManager.updateRoleListOfUser(userInfoBean.getUserName(), getRefinedListOfRolesOfUser(userStoreManager, userInfoBean.getUserName()), newRoles); userStoreManager.setUserClaimValue(userInfoBean.getUserName(),UserCoreConstants.ClaimTypeURIs.EMAIL_ADDRESS, userInfoBean.getEmail(),userInfoBean.getProfileName()); userStoreManager.setUserClaimValue(userInfoBean.getUserName(),UserCoreConstants.ClaimTypeURIs.GIVEN_NAME, userInfoBean.getFirstName(),userInfoBean.getProfileName()); userStoreManager.setUserClaimValue(userInfoBean.getUserName(),UserCoreConstants.ClaimTypeURIs.SURNAME, userInfoBean.getLastName(),userInfoBean.getProfileName()); @@ -135,4 +121,61 @@ public class StratosUserManager { } + /** + * Get a List of usernames and associated Roles + * @return List<UserInfoBean> + * @throws UserManagementException + */ + public List<UserInfoBean> getAllUsers(UserStoreManager userStoreManager) throws UserManagementException{ + + String[] userRoles = null; + List<UserInfoBean> userList = new ArrayList<UserInfoBean>(); + + try { + userRoles = userStoreManager.getRoleNames(); + + for(String userRole: userRoles){ + UserInfoBean userInfoBean = new UserInfoBean(); + userInfoBean.setUserName(userRole); + userInfoBean.setRole(getRefinedListOfRolesOfUser(userStoreManager, userRole)[0]); + userList.add(userInfoBean); + } + + } catch (UserStoreException e) { + log.error(e.getMessage(), e); + throw new UserManagementException(e.getMessage(), e); + } + + return userList; + } + + /** + * Get the List of userRoles except the everyone role + * @param username + * @return + * @throws UserManagementException + */ + private String[] getRefinedListOfRolesOfUser(UserStoreManager userStoreManager, String username) throws UserManagementException{ + + ArrayList<String> rolesWithoutEveryoneRole = new ArrayList<String>(); + + try { + + String[] allUserRoles = userStoreManager.getRoleListOfUser(username); + + for(String role: allUserRoles){ + if(!role.equals(internalEveryoneRole)){ + rolesWithoutEveryoneRole.add(role); + } + } + + } catch (UserStoreException e) { + log.error(e.getMessage(), e); + throw new UserManagementException(e.getMessage(), e); + } + + String[] rolesWithoutEveryoneRoleArray = new String[rolesWithoutEveryoneRole.size()]; + return rolesWithoutEveryoneRole.toArray(rolesWithoutEveryoneRoleArray); + } + } http://git-wip-us.apache.org/repos/asf/stratos/blob/38d7f726/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/utils/CartridgeConstants.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/utils/CartridgeConstants.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/utils/CartridgeConstants.java index fd0597f..2c6014e 100644 --- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/utils/CartridgeConstants.java +++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/utils/CartridgeConstants.java @@ -105,21 +105,4 @@ public class CartridgeConstants { public static final String ACTUAL_HOST = "actual.host"; public static final String HOSTINFO = "hostinfo/"; } - - public static final class Permissions { - public static final String ADD_SUBSCRIPTION = "/permission/admin/manage/add/subscription"; - public static final String REST_LOGIN = "/permission/admin/restlogin"; - public static final String ADD_GIT_SYNC = "/permission/admin/manage/add/sync"; - public static final String ADD_DOMAIN = "/permission/admin/manage/add/domain"; - public static final String VIEW_AUTOSCALING_POLICY = "/permission/admin/manage/view/autoscalingPolicy"; - public static final String VIEW_DEPLOYMENT_POLICY = "/permission/admin/manage/view/deploymentPolicy"; - public static final String VIEW_SUBSCRIPTION = "/permission/admin/manage/view/subscription"; - public static final String VIEW_CARTRIDGE = "/permission/admin/manage/view/cartridge"; - public static final String VIEW_SERVICE = "/permission/admin/manage/view/service"; - public static final String VIEW_DOMAIN = "/permission/admin/manage/view/domain"; - public static final String VIEW_CLUSTER = "/permission/admin/manage/view/cluster"; - public static final String VIEW_INSTANCE = "/permission/admin/manage/view/instance"; - public static final String VIEW_KUBERNETES = "/permission/admin/manage/view/kubernetes"; - public static final String VIEW_PARTITION = "/permission/admin/manage/view/partition"; - } } http://git-wip-us.apache.org/repos/asf/stratos/blob/38d7f726/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/utils/PermissionConstants.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/utils/PermissionConstants.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/utils/PermissionConstants.java new file mode 100644 index 0000000..1235d5e --- /dev/null +++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/utils/PermissionConstants.java @@ -0,0 +1,36 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF 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.apache.stratos.manager.utils; + +public class PermissionConstants { + public static final String ADD_SUBSCRIPTION = "/permission/admin/manage/add/subscription"; + public static final String REST_LOGIN = "/permission/admin/restlogin"; + public static final String ADD_GIT_SYNC = "/permission/admin/manage/add/sync"; + public static final String ADD_DOMAIN = "/permission/admin/manage/add/domain"; + public static final String VIEW_AUTOSCALING_POLICY = "/permission/admin/manage/view/autoscalingPolicy"; + public static final String VIEW_DEPLOYMENT_POLICY = "/permission/admin/manage/view/deploymentPolicy"; + public static final String VIEW_SUBSCRIPTION = "/permission/admin/manage/view/subscription"; + public static final String VIEW_CARTRIDGE = "/permission/admin/manage/view/cartridge"; + public static final String VIEW_SERVICE = "/permission/admin/manage/view/service"; + public static final String VIEW_DOMAIN = "/permission/admin/manage/view/domain"; + public static final String VIEW_CLUSTER = "/permission/admin/manage/view/cluster"; + public static final String VIEW_INSTANCE = "/permission/admin/manage/view/instance"; + public static final String VIEW_KUBERNETES = "/permission/admin/manage/view/kubernetes"; +} http://git-wip-us.apache.org/repos/asf/stratos/blob/38d7f726/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/utils/UserRoleCreator.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/utils/UserRoleCreator.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/utils/UserRoleCreator.java index a38fe45..1e92359 100644 --- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/utils/UserRoleCreator.java +++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/utils/UserRoleCreator.java @@ -23,6 +23,7 @@ package org.apache.stratos.manager.utils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.stratos.manager.internal.DataHolder; +import org.apache.stratos.manager.user.mgt.exception.UserManagementException; import org.wso2.carbon.user.api.Permission; import org.wso2.carbon.user.api.UserStoreException; import org.wso2.carbon.user.api.UserStoreManager; @@ -33,45 +34,42 @@ import org.wso2.carbon.user.mgt.UserMgtConstants; public class UserRoleCreator { private transient static final Log log = LogFactory.getLog(UserRoleCreator.class); - private static String role = "Internal/user"; + private static String userRole = "Internal/user"; /** - * Creating a Tenant User Carbon Role at Server Start-up + * Creating a Internal/user Role at Carbon Server Start-up */ - public static void CreateTenantUserRole() { + public static void CreateTenantUserRole(UserStoreManager manager) throws UserManagementException{ try { - RealmService realmService = DataHolder.getRealmService(); - UserRealm realm = realmService.getBootstrapRealm(); - UserStoreManager manager = realm.getUserStoreManager(); - - if (!manager.isExistingRole(role)) { + if (!manager.isExistingRole(userRole)) { if (log.isDebugEnabled()) { - log.debug("Creating new role: " + role); + log.debug("Creating new role: " + userRole); } - Permission[] TenantUserPermissions = new Permission[]{ new Permission(CartridgeConstants.Permissions.VIEW_AUTOSCALING_POLICY, UserMgtConstants.EXECUTE_ACTION), - new Permission(CartridgeConstants.Permissions.VIEW_DEPLOYMENT_POLICY, UserMgtConstants.EXECUTE_ACTION), - new Permission(CartridgeConstants.Permissions.VIEW_CARTRIDGE, UserMgtConstants.EXECUTE_ACTION), - new Permission(CartridgeConstants.Permissions.VIEW_SERVICE, UserMgtConstants.EXECUTE_ACTION), - new Permission(CartridgeConstants.Permissions.VIEW_SUBSCRIPTION, UserMgtConstants.EXECUTE_ACTION), - new Permission(CartridgeConstants.Permissions.VIEW_DOMAIN, UserMgtConstants.EXECUTE_ACTION), - new Permission(CartridgeConstants.Permissions.VIEW_CLUSTER, UserMgtConstants.EXECUTE_ACTION), - new Permission(CartridgeConstants.Permissions.VIEW_INSTANCE, UserMgtConstants.EXECUTE_ACTION), - new Permission(CartridgeConstants.Permissions.VIEW_KUBERNETES, UserMgtConstants.EXECUTE_ACTION), - new Permission(CartridgeConstants.Permissions.ADD_GIT_SYNC, UserMgtConstants.EXECUTE_ACTION), - new Permission(CartridgeConstants.Permissions.ADD_SUBSCRIPTION, UserMgtConstants.EXECUTE_ACTION), - new Permission(CartridgeConstants.Permissions.ADD_DOMAIN, UserMgtConstants.EXECUTE_ACTION), - new Permission(CartridgeConstants.Permissions.REST_LOGIN, UserMgtConstants.EXECUTE_ACTION), + Permission[] TenantUserPermissions = new Permission[]{ new Permission(PermissionConstants.VIEW_AUTOSCALING_POLICY, UserMgtConstants.EXECUTE_ACTION), + new Permission(PermissionConstants.VIEW_DEPLOYMENT_POLICY, UserMgtConstants.EXECUTE_ACTION), + new Permission(PermissionConstants.VIEW_CARTRIDGE, UserMgtConstants.EXECUTE_ACTION), + new Permission(PermissionConstants.VIEW_SERVICE, UserMgtConstants.EXECUTE_ACTION), + new Permission(PermissionConstants.VIEW_SUBSCRIPTION, UserMgtConstants.EXECUTE_ACTION), + new Permission(PermissionConstants.VIEW_DOMAIN, UserMgtConstants.EXECUTE_ACTION), + new Permission(PermissionConstants.VIEW_CLUSTER, UserMgtConstants.EXECUTE_ACTION), + new Permission(PermissionConstants.VIEW_INSTANCE, UserMgtConstants.EXECUTE_ACTION), + new Permission(PermissionConstants.VIEW_KUBERNETES, UserMgtConstants.EXECUTE_ACTION), + new Permission(PermissionConstants.ADD_GIT_SYNC, UserMgtConstants.EXECUTE_ACTION), + new Permission(PermissionConstants.ADD_SUBSCRIPTION, UserMgtConstants.EXECUTE_ACTION), + new Permission(PermissionConstants.ADD_DOMAIN, UserMgtConstants.EXECUTE_ACTION), + new Permission(PermissionConstants.REST_LOGIN, UserMgtConstants.EXECUTE_ACTION), }; String[] userList = new String[]{}; - manager.addRole(role, userList, TenantUserPermissions); + manager.addRole(userRole, userList, TenantUserPermissions); } } catch (UserStoreException e) { - log.error("Error while creating the role: " + role + " - " + + log.error("Error while creating the role: " + userRole + " - " + e.getMessage()); + throw new UserManagementException(e.getMessage(), e); } } http://git-wip-us.apache.org/repos/asf/stratos/blob/38d7f726/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java index d8fc8ac..a9b1dc7 100644 --- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java +++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java @@ -93,6 +93,7 @@ public class ServiceUtils { private static Log log = LogFactory.getLog(ServiceUtils.class); private static ServiceDeploymentManager serviceDeploymentManager = new ServiceDeploymentManager(); + private static StratosUserManager stratosUserManager = new StratosUserManager(); static void deployCartridge(CartridgeDefinitionBean cartridgeDefinitionBean, ConfigurationContext ctxt, String userName, String tenantDomain) throws RestAPIException { @@ -1270,60 +1271,79 @@ public class ServiceUtils { public static void addUser(UserInfoBean userInfoBean) throws RestAPIException { try { - getStratosUserManager().addUser(userInfoBean); + + stratosUserManager.addUser(getTenantUserStoreManager(), userInfoBean); + } catch (UserManagementException e) { log.error(e.getMessage(), e); throw new RestAPIException(e.getMessage(), e); } - - log.info("Successfully added an user with UserName " + userInfoBean.getUserName()); + log.info("Successfully added an user with Username " + userInfoBean.getUserName()); } public static void updateUser(UserInfoBean userInfoBean) throws RestAPIException { try { - getStratosUserManager().updateUser(userInfoBean); + + stratosUserManager.updateUser(getTenantUserStoreManager(), userInfoBean); + } catch (UserManagementException e) { log.error(e.getMessage(), e); throw new RestAPIException(e.getMessage(), e); } - log.info("Successfully updated an user with UserName " + userInfoBean.getUserName()); + log.info("Successfully updated an user with Username " + userInfoBean.getUserName()); } public static void deleteUser(String userName) throws RestAPIException { try { - getStratosUserManager().deleteUser(userName); + + stratosUserManager.deleteUser(getTenantUserStoreManager(), userName); + + } catch (UserManagementException e) { + log.error(e.getMessage(), e); + throw new RestAPIException(e.getMessage(), e); + } + log.info("Successfully deleted an user with Username " + userName); + } + + public static List<UserInfoBean> getAllUsers() throws RestAPIException { + + List<UserInfoBean> userList = null; + + try { + + userList = stratosUserManager.getAllUsers(getTenantUserStoreManager()); + } catch (UserManagementException e) { log.error(e.getMessage(), e); throw new RestAPIException(e.getMessage(), e); } - log.info("Successfully deleted an user with UserName " + userName); + return userList; } /** - * Get Tenant aware UserStore + * Get Tenant aware UserStoreManager * * @return * @throws RestAPIException */ - private static StratosUserManager getStratosUserManager() throws RestAPIException { + private static UserStoreManager getTenantUserStoreManager() throws RestAPIException { CarbonContext carbonContext = CarbonContext.getThreadLocalCarbonContext(); UserRealm userRealm = null; - StratosUserManager stratosUserManager = null; + UserStoreManager userStoreManager = null; try { userRealm = carbonContext.getUserRealm(); - UserStoreManager userStoreManager = userRealm.getUserStoreManager(); - stratosUserManager = new StratosUserManager(userStoreManager); + userStoreManager = userRealm.getUserStoreManager(); } catch (UserStoreException e) { log.error(e.getMessage(), e); throw new RestAPIException(e.getMessage(), e); } - return stratosUserManager; + return userStoreManager; } public static boolean deployKubernetesGroup(KubernetesGroup kubernetesGroupBean) throws RestAPIException { http://git-wip-us.apache.org/repos/asf/stratos/blob/38d7f726/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java index 1569a53..3f42af2 100644 --- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java +++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java @@ -1179,6 +1179,22 @@ public class StratosAdmin extends AbstractAdmin { return Response.created(url).build(); } + @GET + @Path("/user/list") + @Produces("application/json") + @AuthorizationAction("/permission/admin/manage/add/users") + public UserInfoBean[] retrieveUsers() throws RestAPIException { + List<UserInfoBean> userList = null; + try { + userList = ServiceUtils.getAllUsers(); + } catch (Exception e) { + String msg = "Error in retrieving users"; + log.error(msg, e); + throw new RestAPIException(msg); + } + return userList.toArray(new UserInfoBean[userList.size()]); + } + @POST @Path("/kubernetes/deploy/group") @Produces("application/json") http://git-wip-us.apache.org/repos/asf/stratos/blob/38d7f726/components/org.apache.stratos.rest.endpoint/src/main/webapp/stratos-test/WEB-INF/schemas/schema.xsd ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.rest.endpoint/src/main/webapp/stratos-test/WEB-INF/schemas/schema.xsd b/components/org.apache.stratos.rest.endpoint/src/main/webapp/stratos-test/WEB-INF/schemas/schema.xsd index 0ff4cc8..ff395de 100644 --- a/components/org.apache.stratos.rest.endpoint/src/main/webapp/stratos-test/WEB-INF/schemas/schema.xsd +++ b/components/org.apache.stratos.rest.endpoint/src/main/webapp/stratos-test/WEB-INF/schemas/schema.xsd @@ -20,9 +20,9 @@ <xs:element name="userName" type="xs:string" minOccurs="1" maxOccurs="1" nillable="false"/> <xs:element name="credential" type="xs:string" minOccurs="1" maxOccurs="1" nillable="false"/> <xs:element name="role" type="xs:string" minOccurs="1" maxOccurs="1" nillable="false"/> - <xs:element name="firstName" type="xs:string" minOccurs="1" maxOccurs="1" nillable="false"/> - <xs:element name="lastName" type="xs:string" minOccurs="1" maxOccurs="1" nillable="false"/> - <xs:element name="email" type="xs:string" minOccurs="1" maxOccurs="1" nillable="false"/> + <xs:element name="firstName" type="xs:string" minOccurs="0" maxOccurs="1" nillable="false"/> + <xs:element name="lastName" type="xs:string" minOccurs="0" maxOccurs="1" nillable="false"/> + <xs:element name="email" type="xs:string" minOccurs="0" maxOccurs="1" nillable="false"/> <xs:element name="profileName" type="xs:string" minOccurs="0" maxOccurs="1" nillable="false"/> </xs:all> </xs:complexType> http://git-wip-us.apache.org/repos/asf/stratos/blob/38d7f726/components/org.apache.stratos.rest.endpoint/src/main/webapp/stratos/WEB-INF/schemas/schema.xsd ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.rest.endpoint/src/main/webapp/stratos/WEB-INF/schemas/schema.xsd b/components/org.apache.stratos.rest.endpoint/src/main/webapp/stratos/WEB-INF/schemas/schema.xsd index 3d51481..d9e276c 100644 --- a/components/org.apache.stratos.rest.endpoint/src/main/webapp/stratos/WEB-INF/schemas/schema.xsd +++ b/components/org.apache.stratos.rest.endpoint/src/main/webapp/stratos/WEB-INF/schemas/schema.xsd @@ -20,9 +20,9 @@ <xs:element name="userName" type="xs:string" minOccurs="1" maxOccurs="1" nillable="false"/> <xs:element name="credential" type="xs:string" minOccurs="1" maxOccurs="1" nillable="false"/> <xs:element name="role" type="xs:string" minOccurs="1" maxOccurs="1" nillable="false"/> - <xs:element name="firstName" type="xs:string" minOccurs="1" maxOccurs="1" nillable="false"/> - <xs:element name="lastName" type="xs:string" minOccurs="1" maxOccurs="1" nillable="false"/> - <xs:element name="email" type="xs:string" minOccurs="1" maxOccurs="1" nillable="false"/> + <xs:element name="firstName" type="xs:string" minOccurs="0" maxOccurs="1" nillable="false"/> + <xs:element name="lastName" type="xs:string" minOccurs="0" maxOccurs="1" nillable="false"/> + <xs:element name="email" type="xs:string" minOccurs="0" maxOccurs="1" nillable="false"/> <xs:element name="profileName" type="xs:string" minOccurs="0" maxOccurs="1" nillable="false"/> </xs:all> </xs:complexType>
