/* * Rasea Agent Demoiselle * * Copyright (c) 2008, Rasea <http://rasea.org>. All rights reserved. * * Rasea Extensions is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, see <http://gnu.org/licenses> * or write to the Free Software Foundation, Inc., 51 Franklin Street, * Fifth Floor, Boston, MA 02110-1301, USA. */ package org.rasea.agent.demoiselle.internal.implementation; import java.util.ArrayList; import java.util.List; import javax.enterprise.context.SessionScoped; import javax.inject.Inject; import org.rasea.agent.demoiselle.config.ApplicationConfig; import org.rasea.agent.demoiselle.exception.RaseaException; import org.rasea.agent.demoiselle.internal.proxy.AccessControlV1; import org.rasea.agent.demoiselle.internal.proxy.ApplicationNameRequest; import org.rasea.agent.demoiselle.internal.proxy.ApplicationRequest; import org.rasea.agent.demoiselle.internal.proxy.ApplicationType; import org.rasea.agent.demoiselle.internal.proxy.GrantPermissionRequest; import org.rasea.agent.demoiselle.internal.proxy.MaintenanceV1; import org.rasea.agent.demoiselle.internal.proxy.ManagementV1; import org.rasea.agent.demoiselle.internal.proxy.OperationNameRequest; import org.rasea.agent.demoiselle.internal.proxy.OperationRequest; import org.rasea.agent.demoiselle.internal.proxy.OperationType; import org.rasea.agent.demoiselle.internal.proxy.OperationsResponse; import org.rasea.agent.demoiselle.internal.proxy.PermissionRequest; import org.rasea.agent.demoiselle.internal.proxy.PermissionType; import org.rasea.agent.demoiselle.internal.proxy.PermissionsResponse; import org.rasea.agent.demoiselle.internal.proxy.ResourceNameRequest; import org.rasea.agent.demoiselle.internal.proxy.ResourceRequest; import org.rasea.agent.demoiselle.internal.proxy.ResourceType; import org.rasea.agent.demoiselle.internal.proxy.RoleRequest; import org.rasea.agent.demoiselle.internal.proxy.RoleType; import org.rasea.agent.demoiselle.internal.proxy.RolesResponse; import org.rasea.agent.demoiselle.internal.proxy.SimpleUserNameRequest; import org.rasea.agent.demoiselle.internal.proxy.UserNameRequest; import org.rasea.agent.demoiselle.internal.proxy.UserRoleRequest; import org.rasea.agent.demoiselle.internal.proxy.UserType; import org.rasea.agent.demoiselle.security.Application; import org.rasea.agent.demoiselle.security.Operation; import org.rasea.agent.demoiselle.security.Permission; import org.rasea.agent.demoiselle.security.RaseaContext; import org.rasea.agent.demoiselle.security.Resource; import org.rasea.agent.demoiselle.security.Role; import br.gov.frameworkdemoiselle.exception.ConfigurationException; import br.gov.frameworkdemoiselle.security.User; @SessionScoped public class RaseaContextImpl implements RaseaContext { private static final long serialVersionUID = 1L; @Inject private ApplicationConfig appConfig; @Inject private AccessControlV1 accessControlPort; @Inject private ManagementV1 managementPort; @Inject private MaintenanceV1 maintenancePort; @Inject private RaseaCredentialImpl credential; private void handleException(Exception cause) throws RaseaException { throw new ConfigurationException(cause.getMessage(), cause); } @Override public boolean authenticate() throws RaseaException { boolean result = false; try { result = accessControlPort.authenticate(credential.getDelegate()); } catch (Exception cause) { handleException(cause); } return result; } public List<Permission> getPermissions(String username) throws RaseaException { List<Permission> result = new ArrayList<Permission>(); try { UserNameRequest request = new UserNameRequest(); request.setUsername(username); request.setApplicationName(appConfig.getName()); PermissionsResponse response = accessControlPort.userPermissions(request, credential.getDelegate()); Resource resource; Operation operation; for (PermissionType type : response.getPermission()) { resource = new Resource(type.getResourceName()); operation = new Operation(type.getOperationName()); result.add(new Permission(resource, operation)); } } catch (Exception ex) { handleException(ex); } return result; } public Resource getResource(String name) throws RaseaException { Resource result = null; ResourceNameRequest request = new ResourceNameRequest(); request.setApplicationName(appConfig.getName()); request.setResourceName(name); try { ResourceType response = maintenancePort.resourceDetail(request, credential.getDelegate()); if (response != null) { result = new Resource(response.getName(), response.getDisplayName()); } } catch (Exception cause) { handleException(cause); } return result; } public void addResource(Resource resource) throws RaseaException { try { ResourceType type = new ResourceType(); type.setName(resource.getName()); type.setDisplayName(resource.getDescription()); ResourceRequest request = new ResourceRequest(); request.setResource(type); request.setApplicationName(this.appConfig.getName()); maintenancePort.addResource(request, credential.getDelegate()); } catch (Exception cause) { handleException(cause); } } public Application getApplication(String name) throws RaseaException { Application result = null; try { ApplicationNameRequest request = new ApplicationNameRequest(); request.setApplicationName(name); ApplicationType response = maintenancePort.applicationDetail(request, credential.getDelegate()); result = new Application(response.getName(), response.getDisplayName()); } catch (Exception cause) { handleException(cause); } return result; } public void addApplication(Application application) throws RaseaException { ApplicationType type = new ApplicationType(); type.setName(application.getName()); type.setDisplayName(application.getDescription()); try { ApplicationRequest request = new ApplicationRequest(); request.setApplication(type); maintenancePort.addApplication(request, credential.getDelegate()); } catch (Exception cause) { handleException(cause); } } public void assignOwner(String username, Application application) throws RaseaException { try { UserNameRequest request = new UserNameRequest(); request.setApplicationName(application.getName()); request.setUsername(username); maintenancePort.assignOwner(request, credential.getDelegate()); } catch (Exception cause) { handleException(cause); } } public Operation getOperation(String name) throws RaseaException { Operation result = null; OperationNameRequest request = new OperationNameRequest(); request.setApplicationName(appConfig.getName()); request.setOperationName(name); try { OperationType response = maintenancePort.operationDetail(request, credential.getDelegate()); if (response != null) { result = new Operation(response.getName()); } } catch (Exception cause) { handleException(cause); } return result; } public void addOperation(Operation operation) throws RaseaException { OperationType type = new OperationType(); type.setName(operation.getName()); type.setDisplayName(operation.getName()); OperationRequest request = new OperationRequest(); request.setApplicationName(appConfig.getName()); request.setOperation(type); try { maintenancePort.addOperation(request, credential.getDelegate()); } catch (Exception cause) { handleException(cause); } } public List<Operation> getOperations(Resource resource, Application application) throws RaseaException { List<Operation> result = new ArrayList<Operation>(); ResourceNameRequest request = new ResourceNameRequest(); request.setApplicationName(application.getName()); request.setResourceName(resource.getName()); try { OperationsResponse response = maintenancePort.resourceOperations(request, credential.getDelegate()); if (response.getOperation() != null) { for (OperationType type : response.getOperation()) { result.add(new Operation(type.getName())); } } } catch (Exception cause) { handleException(cause); } return result; } public void addPermission(Permission permission) throws RaseaException { PermissionType type = new PermissionType(); type.setOperationName(permission.getOperation().getName()); type.setResourceName(permission.getResource().getName()); PermissionRequest request = new PermissionRequest(); request.setApplicationName(appConfig.getName()); request.setPermission(type); try { maintenancePort.addPermission(request, credential.getDelegate()); } catch (Exception cause) { handleException(cause); } } public void grantPermission(Permission permission, Role role) throws RaseaException { PermissionType type = new PermissionType(); type.setResourceName(permission.getResource().getName()); type.setOperationName(permission.getOperation().getName()); GrantPermissionRequest request = new GrantPermissionRequest(); request.setApplicationName(appConfig.getName()); request.setRoleName(role.getName()); request.setPermission(type); request.setAllowed(true); try { managementPort.grantPermission(request, credential.getDelegate()); } catch (Exception cause) { handleException(cause); } } @Override public User getUser(String name) throws RaseaException { User result = null; try { SimpleUserNameRequest request = new SimpleUserNameRequest(); request.setUsername(name); UserType response = accessControlPort.userDetail(request, credential.getDelegate()); result = new UserImpl(response); } catch (Exception cause) { handleException(cause); } return result; } public List<Role> getRoles(String username, Application application) throws RaseaException { List<Role> result = new ArrayList<Role>(); UserNameRequest request = new UserNameRequest(); request.setUsername(username); request.setApplicationName(application.getName()); try { RolesResponse response = accessControlPort.assignedRoles(request, credential.getDelegate()); if (response.getRole() != null) { for (RoleType type : response.getRole()) { result.add(new Role(type.getName(), type.getDisplayName())); } } } catch (Exception cause) { handleException(cause); } return result; } public List<Role> getRoles(Application application) throws RaseaException { List<Role> result = new ArrayList<Role>(); ApplicationNameRequest request = new ApplicationNameRequest(); request.setApplicationName(application.getName()); try { RolesResponse response = accessControlPort.listRoles(request, credential.getDelegate()); if (response.getRole() != null) { for (RoleType type : response.getRole()) { result.add(new Role(type.getName(), type.getDisplayName())); } } } catch (Exception cause) { handleException(cause); } return result; } public void addRole(Role role, Application application) throws RaseaException { RoleType type = new RoleType(); type.setName(role.getName()); type.setDisplayName(role.getDescription()); RoleRequest request = new RoleRequest(); request.setApplicationName(application.getName()); request.setRole(type); try { managementPort.addRole(request, credential.getDelegate()); } catch (Exception cause) { handleException(cause); } } public void assignUser(String username, Role role, Application application) throws RaseaException { UserRoleRequest request = new UserRoleRequest(); request.setApplicationName(application.getName()); request.setUsername(username); request.setRoleName(role.getName()); try { managementPort.assignUser(request, credential.getDelegate()); } catch (Exception cause) { handleException(cause); } } }