/* license-start * * Copyright (C) 2008 - 2013 Crispico, <http://www.crispico.com/>. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation version 3. * * This program 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 General Public License for more details, at <http://www.gnu.org/licenses/>. * * Contributors: * Crispico - Initial API and implementation * * license-end */ package org.flowerplatform.web.tests.security.sandbox.helpers; import java.security.Permission; import java.security.Principal; import java.security.PrivilegedAction; import java.util.Arrays; import java.util.HashSet; import java.util.List; import javax.security.auth.Subject; import junit.framework.Assert; import org.flowerplatform.common.util.RunnableWithParam; import org.flowerplatform.communication.CommunicationPlugin; import org.flowerplatform.communication.IPrincipal; import org.flowerplatform.communication.service.ServiceInvocationContext; import org.flowerplatform.web.communication.RecordingTestWebCommunicationChannel; import org.flowerplatform.web.database.DatabaseOperation; import org.flowerplatform.web.database.DatabaseOperationWrapper; import org.flowerplatform.web.entity.Group; import org.flowerplatform.web.entity.GroupUser; import org.flowerplatform.web.entity.Organization; import org.flowerplatform.web.entity.OrganizationUser; import org.flowerplatform.web.entity.User; import org.flowerplatform.web.entity.dto.NamedDto; import org.flowerplatform.web.security.dto.GroupAdminUIDto; import org.flowerplatform.web.security.dto.OrganizationAdminUIDto; import org.flowerplatform.web.security.dto.OrganizationUserAdminUIDto; import org.flowerplatform.web.security.dto.UserAdminUIDto; import org.flowerplatform.web.security.sandbox.FlowerWebPrincipal; import org.flowerplatform.web.security.sandbox.FlowerWebSecurityException; import org.flowerplatform.web.security.service.OrganizationService; import flex.messaging.FlexContext; import flex.messaging.HttpFlexSession; /** * * @author Florin * @author Mariana */ public class Utils { public static boolean hasPermission(User user, final Permission p) { Subject subject = new Subject(); final Principal principal = new FlowerWebPrincipal(user.getId()); subject.getPrincipals().add(principal); return Subject.doAsPrivileged(subject, new PrivilegedAction<Boolean>() { @Override public Boolean run() { try { System.getSecurityManager().checkPermission(p); return true; } catch (Exception e) { if (!(e instanceof FlowerWebSecurityException)) { e.printStackTrace(); Assert.fail(); } return false; } } }, null); } public static <T> T getEntityByName(Class<T> cls, String name, DatabaseOperationWrapper wrapper) { List<T> list = wrapper.findByField(cls, "name", name); if (list.size() > 0) return list.get(0); return null; } @SuppressWarnings("unchecked") public static <T> T getEntityByName(final Class<T> cls, final String name) { return (T) new DatabaseOperationWrapper(new DatabaseOperation() { @Override public void run() { wrapper.setOperationResult(getEntityByName(cls, name, wrapper)); } }).getOperationResult(); } public static void test(final User user, final RunnableWithParam<Void, ServiceInvocationContext> runnable) { Subject subject = new Subject(); final Principal principal = new FlowerWebPrincipal(user.getId()); subject.getPrincipals().add(principal); Subject.doAsPrivileged(subject, new PrivilegedAction<Void>() { @Override public Void run() { FlexContext.setThreadLocalSession(new HttpFlexSession()); FlexContext.setUserPrincipal(principal); RecordingTestWebCommunicationChannel cc = new RecordingTestWebCommunicationChannel(); cc.setPrincipal((FlowerWebPrincipal) principal); CommunicationPlugin.tlCurrentPrincipal.set((IPrincipal) principal); ServiceInvocationContext context = new ServiceInvocationContext(cc); runnable.run(context); return null; } }, null); } public static UserAdminUIDto convertUserToUserAdminUIDto(User user) { UserAdminUIDto dto = new UserAdminUIDto(); dto.setId(user.getId()); dto.setName(user.getName()); dto.setEmail(user.getEmail()); dto.setIsActivated(user.isActivated()); dto.setLogin(user.getLogin()); HashSet<GroupAdminUIDto> groups = new HashSet<GroupAdminUIDto>(); if (user.getGroupUsers() != null) { for (GroupUser groupUser : user.getGroupUsers()) { Group group = groupUser.getGroup(); NamedDto orgDto = null; if (group.getOrganization() != null) { orgDto = new NamedDto(group.getOrganization().getId(), group.getOrganization().getName()); } groups.add(new GroupAdminUIDto(group.getId(), group.getName(), orgDto)); } dto.setGroups(groups); } HashSet<OrganizationUserAdminUIDto> organizations = new HashSet<OrganizationUserAdminUIDto>(); if (user.getOrganizationUsers() != null) { for (OrganizationUser organizationUser : user.getOrganizationUsers()) { OrganizationUserAdminUIDto ouDto = new OrganizationUserAdminUIDto(); ouDto.setId(organizationUser.getId()); ouDto.setOrganization(OrganizationService.getInstance().convertOrganizationToOrganizationAdminUIDto(organizationUser.getOrganization(), user)); ouDto.setStatus(organizationUser.getStatus()); organizations.add(ouDto); } dto.setOrganizationUsers(organizations); } return dto; } public static GroupAdminUIDto convertGroupToGroupAdminUIDto(Group group) { GroupAdminUIDto dto = new GroupAdminUIDto(); dto.setId(group.getId()); dto.setName(group.getName()); if (group.getOrganization() != null) { dto.setOrganization(new NamedDto(group.getOrganization().getId(), group.getOrganization().getName())); } return dto; } public static OrganizationAdminUIDto convertOrganizationToOrganizationAdminUIDto(Organization organization) { OrganizationAdminUIDto dto = new OrganizationAdminUIDto(); dto.setId(organization.getId()); dto.setName(organization.getName()); return dto; } public static void deleteAllData() { new DatabaseOperationWrapper(new DatabaseOperation() { @Override public void run() { List<String> list = Arrays.asList( "SVNCommentEntity", "SVNRepositoryURLEntity", "GroupUser", "OrganizationUser", "User", "Group", "Organization", "PermissionEntity"); for (String table : list) { wrapper.createQuery(String.format("delete from %s", table)).executeUpdate(); } } }); } }