public Object invoke(final MethodInvocation mi) throws Throwable { final Object[] args = mi.getArguments(); args[0] = factory.getSession(); return mi.proceed(); } }
public String nameById(long id) { Session s = sf.getSession(); return (String) s.createQuery( "select omeName from Experimenter where id = :id") .setParameter("id", id).uniqueResult(); }
private Session session() { return initialize().getSession(); }
public Object invoke(MethodInvocation arg0) throws Throwable { try { secSys.loadEventContext(true); return arg0.proceed(); } finally { sf.getSession().clear(); secSys.invalidateEventContext(); } } }
private ExperimenterGroup load(IObject obj) { if (!(obj instanceof ExperimenterGroup)) { throw new SecurityViolation("Only groups allowed"); } if (obj.getId() == null) { throw new ApiUsageException("ID cannot be null"); } final Session s = osf.getSession(); return (ExperimenterGroup) s.get(ExperimenterGroup.class, obj.getId()); }
public Map<String, Long> getLockingIds(final Class<IObject> type, final long id, final Long groupId) { String groupClause = ""; if (groupId != null) { groupClause = "and details.group.id <> " + groupId; } // since it's a managed entity it's class.getName() might // contain // some byte-code generation string final Class<? extends IObject> klass = Utils.trueClass(type); // the values that could possibly link to this instance. final String[][] checks = metadata.getLockChecks(klass); return this.metadata.countLocks(osf.getSession(), id, checks, groupClause); }
/** * Saves an object as admin. * * Due to the disabling of the MergeEventListener, it is necessary to * jump through several hoops to get non-admin saving of system types * to work properly. */ private void reallySafeSave(final IObject obj) { final Session session = osf.getSession(); sec.doAction(new SecureMerge(session), obj); sec.runAsAdmin(new AdminAction(){ public void runAsAdmin() { session.flush(); }}); }
private Map<String, Long> performRun(Check c) { // Perform the operation across all groups. Map<String, Long> counts = null; Map<String, String> grpCtx = new HashMap<String, String>(); grpCtx.put("omero.group", "-1"); try { ctx.publishMessage(new ContextMessage.Push(this, grpCtx)); try { counts = c.run(osf.getSession(), em); } finally { ctx.publishMessage(new ContextMessage.Pop(this, grpCtx)); } } catch (Throwable t) { log.error("Could not perform check!", t); throw new InternalException("Could not perform check! See server logs"); } return counts; }
public void setGroupOwner(Experimenter user, ExperimenterGroup group, boolean value) { Session session = sf.getSession(); Experimenter foundUser = userById(user.getId(), session); ExperimenterGroup foundGroup = groupById(group.getId(), session); Set<GroupExperimenterMap> foundMaps = foundUser .findGroupExperimenterMap(foundGroup); if (foundMaps.size() < 1) { throw new ApiUsageException("Group " + group.getId() + " was not " + "found for user " + user.getId()); } else if (foundMaps.size() > 1) { log.warn(foundMaps.size() + " copies of " + foundGroup + " found for " + foundUser); } else { // May throw an exception GroupExperimenterMap newDef = foundMaps.iterator().next(); log.info(String.format("Seeting ownership flag on user %s to %s for %s", foundUser.getId(), value, group.getId())); newDef.setOwner(value); sec.doAction(new SecureMerge(session), newDef); } }
public void setDefaultGroup(Experimenter user, ExperimenterGroup group) { Session session = sf.getSession(); Experimenter foundUser = userById(user.getId(), session); ExperimenterGroup foundGroup = groupById(group.getId(), session); Set<GroupExperimenterMap> foundMaps = foundUser .findGroupExperimenterMap(foundGroup); if (foundMaps.size() < 1) { throw new ApiUsageException("Group " + group.getId() + " was not " + "found for user " + user.getId()); } else if (foundMaps.size() > 1) { log.warn(foundMaps.size() + " copies of " + foundGroup + " found for " + foundUser); } else { // May throw an exception GroupExperimenterMap newDef = foundMaps.iterator().next(); log.info(String.format("Changing default group for user %s to %s", foundUser.getId(), group.getId())); foundUser.setPrimaryGroupExperimenterMap(newDef); } // TODO: May want to move this outside the loop // and after the !newDefaultSet check. sec.doAction(new SecureMerge(session), foundUser); }
/** * Helpers which unconditionally moves the object to the common space. This * can be used by other methods like {@link #uploadMyUserPhoto(String, String, byte[])} * * @param obj a model object, linked to the current session; never {@code null} */ public void internalMoveToCommonSpace(IObject obj) { /* Can this next line be removed? - ajp */ final Session session = osf.getSession(); obj.getDetails().setGroup( groupProxy(getSecurityRoles().getUserGroupId())); secureFlush(obj); getBeanHelper().getLogger().info("Moved object to common space: " + obj); }
public void addGroups(final Experimenter user, final ExperimenterGroup... groups) { final Session session = sf.getSession(); final List<String> added = new ArrayList<String>(); Experimenter foundUser = userById(user.getId(), session); for (ExperimenterGroup group : groups) { ExperimenterGroup foundGroup = groupById(group.getId(), session); boolean found = false; for (ExperimenterGroup currentGroup : foundUser .linkedExperimenterGroupList()) { found |= HibernateUtils.idEqual(foundGroup, currentGroup); } if (!found) { linkGroupAndUser(foundGroup, foundUser, false); added.add(foundGroup.getName()); } } fixDefaultGroup(foundUser, session); }
public void removeGroups(Experimenter user, ExperimenterGroup... groups) { final Session session = sf.getSession();
@RolesAllowed("user") public void deleteSettings(final long imageId) { Image i = iQuery.get(Image.class, imageId); throwSecurityViolationIfNotAllowed(i); final Session session = sf.getSession(); sec.runAsAdmin(new AdminAction() { public void runAsAdmin() { List<Object[]> rdefs = iQuery.projection( SETTINGSID_QUERY, new Parameters().addId(imageId)); for (Object[] rv: rdefs) { Long rid = (Long) rv[0]; Long qid = (Long) rv[1]; Query q = session.createQuery("delete ChannelBinding cb where cb.renderingDef.id = :rid"); q.setParameter("rid", rid); q.executeUpdate(); q = session.createQuery("delete RenderingDef r where r.id = :rid"); q.setParameter("rid", rid); q.executeUpdate(); q = session.createQuery("delete QuantumDef q where q.id = :qid"); q.setParameter("qid", qid); q.executeUpdate(); } } }); }
public long createGroup(ExperimenterGroup group) { group = copyGroup(group); if (group.getDetails().getPermissions() == null) { group.getDetails().setPermissions(Permissions.USER_PRIVATE); } final Session session = sf.getSession(); ExperimenterGroup g = sec.doAction(new SecureMerge(session), group); return g.getId(); }
public long createExperimenter(Experimenter experimenter, ExperimenterGroup defaultGroup, ExperimenterGroup... otherGroups) { Session session = sf.getSession(); SecureAction action = new SecureMerge(session); Experimenter e = copyUser(experimenter); if (isIgnoreCaseLookup()) { e.setOmeName(e.getOmeName().toLowerCase()); } e.getDetails().copy(sec.newTransientDetails(e)); e = sec.doAction(action, e); session.flush(); linkGroupAndUser(defaultGroup, e, false); if (null != otherGroups) { for (ExperimenterGroup group : otherGroups) { linkGroupAndUser(group, e, false); } } return e.getId(); }
@RolesAllowed("user") public void deleteChannels(final long imageId) { Image i = iQuery.get(Image.class, imageId); throwSecurityViolationIfNotAllowed(i); final Session session = sf.getSession(); sec.runAsAdmin(new AdminAction() { public void runAsAdmin() { List<Object[]> channels = iQuery.projection( CHANNELID_QUERY, new Parameters().addId(imageId)); for (Object[] rv: channels) { Long chid = (Long) rv[0]; Long siid = (Long) rv[1]; Long lcid = (Long) rv[2]; execute(session, chid, "delete Channel ch where ch.id = :id"); execute(session, siid, "delete StatsInfo si where si.id = :id"); List<Object[]> remainingChannels = iQuery.projection( "select ch.id from LogicalChannel lc join lc.channels ch " + "where lc.id = :id", new Parameters().addId(lcid)); if (remainingChannels.size() == 0) { execute(session, lcid, "delete LogicalChannel lc where lc.id = :id"); } } } }); }
public long createGroup(String name, Permissions perms, boolean strict, boolean isLdap) { Session s = sf.getSession(); ExperimenterGroup g = groupByName(name, s); if (g == null) { g = new ExperimenterGroup(); g.setName(name); g.setLdap(isLdap); if (perms == null) { perms = Permissions.USER_PRIVATE; // ticket:1434 } g.getDetails().setPermissions(perms); g = (ExperimenterGroup) s.merge(g); } else { if (strict) { throw new ValidationException("Group already exists: " + name); } } return g.getId(); }
protected GroupExperimenterMap linkGroupAndUser(ExperimenterGroup group, Experimenter e, boolean owned) { if (group == null || group.getId() == null) { throw new ApiUsageException("Group must be persistent."); } group = new ExperimenterGroup(group.getId(), false); // ticket:1021 - check for already added groups for (GroupExperimenterMap link : e.unmodifiableGroupExperimenterMap()) { ExperimenterGroup test = link.parent(); if (test.getId().equals(group.getId())) { return link; // EARLY EXIT! } } GroupExperimenterMap link = e.linkExperimenterGroup(group); // ticket:1434 link.setOwner(owned); link.getDetails().copy(sec.newTransientDetails(link)); Session session = sf.getSession(); sec.<IObject> doAction(new SecureMerge(session), userById(e.getId(), session), link); session.flush(); return link; }
public void onApplicationEvent(ContextMessage msg) { final CurrentDetails cd = secSys.cd; final Session session = factory.getSession(); if (msg instanceof ContextMessage.Pop){