/* * $Id$ * * Copyright 2007-2014 Glencoe Software, Inc. All rights reserved. * Use is subject to license terms supplied in LICENSE.txt */ package ome.server.itests; import java.util.UUID; import ome.api.IAdmin; import ome.model.meta.Experimenter; import ome.model.meta.ExperimenterGroup; import ome.model.meta.Session; import ome.security.SecuritySystem; import ome.security.basic.CurrentDetails; import ome.services.sessions.SessionManager; import ome.services.util.Executor; import ome.system.OmeroContext; import ome.system.Principal; import ome.system.ServiceFactory; import ome.testing.InterceptingServiceFactory; import ome.tools.spring.InternalServiceFactory; /** * @author Josh Moore, josh at glencoesoftware.com * @since 3.0-Beta3 */ public class ManagedContextFixture { public OmeroContext ctx; public SessionManager mgr; public Executor ex; public ServiceFactory managedSf; public ServiceFactory internalSf; public SecuritySystem security; public CurrentDetails holder; public LoginInterceptor login; public ManagedContextFixture() { this(OmeroContext.getManagedServerContext()); } public void close() { ctx.closeAll(); } public ManagedContextFixture(OmeroContext ctx) { this.ctx = ctx; mgr = (SessionManager) ctx.getBean("sessionManager"); ex = (Executor) ctx.getBean("executor"); security = (SecuritySystem) ctx.getBean("securitySystem"); holder = (CurrentDetails) ctx.getBean("principalHolder"); login = new LoginInterceptor(holder); managedSf = new ServiceFactory(ctx); managedSf = new InterceptingServiceFactory(managedSf, login); internalSf = new InternalServiceFactory(ctx); setCurrentUser("root"); String user = newUser(); setCurrentUser(user); } public void tearDown() throws Exception { managedSf = null; ctx.close(); } // UTILITIES // ========================================================================= public String uuid() { return UUID.randomUUID().toString(); } // LOGIN / PERMISSIONS // ========================================================================= /** * Create a new user in a new group. */ public String newUser() { String uuid = uuid(); IAdmin admin = managedSf.getAdminService(); ExperimenterGroup group = new ExperimenterGroup(); group.setName(uuid); group.setLdap(false); admin.createGroup(group); return newUser(uuid); } /** * Create a new user in the given group */ public String newUser(String group) { IAdmin admin = managedSf.getAdminService(); Experimenter e = new Experimenter(); String uuid = uuid(); e.setOmeName(uuid); e.setFirstName("managed"); e.setMiddleName("context"); e.setLastName("test"); e.setLdap(false); String oldusr = admin.getEventContext().getCurrentUserName(); String oldgrp = admin.getEventContext().getCurrentGroupName(); setCurrentUser("root"); admin.createUser(e, group); setCurrentUserAndGroup(oldusr, oldgrp); return uuid; } /** * Create a new user in the "default" group and login. */ public String loginNewUserDefaultGroup() { String user = newUser(); setCurrentUser(user); return user; } /** * Login a new user into a new group and return * * @return */ public String loginNewUserNewGroup() { IAdmin admin = managedSf.getAdminService(); String groupName = uuid(); ExperimenterGroup g = new ExperimenterGroup(); g.setName(groupName); g.setLdap(false); admin.createGroup(g); String name = newUser(groupName); setCurrentUser(name); return name; } public String getCurrentUser() { return managedSf.getAdminService().getEventContext() .getCurrentUserName(); } public void setCurrentUser(String user) { setCurrentUserAndGroup(user, "user"); } public void setCurrentUserAndGroup(String user, String group) { Principal p = new Principal(user, group, "Test"); Session s = mgr.createWithAgent(p, "ManagedContextFixture", "127.0.0.1"); p = new Principal(s.getUuid(), group, "Test"); login.p = p; } public Principal getPrincipal() { return login.p; } }