use of ubic.gemma.model.common.auditAndSecurity.User in project Gemma by PavlidisLab.
the class AuditTrailDaoImpl method addEvent.
@Override
public AuditEvent addEvent(final Auditable auditable, final AuditEvent auditEvent) {
if (auditEvent.getAction() == null) {
throw new IllegalArgumentException("auditEvent was missing a required field");
}
assert auditEvent.getDate() != null;
if (auditEvent.getPerformer() == null) {
// could be null, if anonymous.
User user = getUser();
Field f = FieldUtils.getField(AuditEvent.class, "performer", true);
assert f != null;
try {
f.set(auditEvent, user);
} catch (IllegalArgumentException | IllegalAccessException e) {
// shouldn't happen, but just in case...
throw new RuntimeException(e);
}
}
AuditTrail trail = auditable.getAuditTrail();
if (trail == null) {
/*
* Note: this step should be done by the AuditAdvice when the entity was first created, so this is just
* defensive.
*/
logger.warn("AuditTrail was null. It should have been initialized by the AuditAdvice when the entity was first created.");
trail = AuditTrail.Factory.newInstance();
auditable.setAuditTrail(trail);
} else {
/*
* This assumes that nobody else in this session has modified this audit trail.
*/
if (trail.getId() != null)
trail = (AuditTrail) this.getSessionFactory().getCurrentSession().get(AuditTrailImpl.class, trail.getId());
}
trail.addEvent(auditEvent);
this.getSessionFactory().getCurrentSession().saveOrUpdate(trail);
auditable.setAuditTrail(trail);
return auditEvent;
}
use of ubic.gemma.model.common.auditAndSecurity.User in project Gemma by PavlidisLab.
the class UserDaoImpl method handleFindByEmail.
private User handleFindByEmail(final String email) {
// noinspection unchecked
List<User> list = this.getSessionFactory().getCurrentSession().createQuery("from User c where c.email = :email").setParameter("email", email).list();
Set<User> results = new HashSet<>(list);
User result = null;
if (results.size() > 1) {
throw new InvalidDataAccessResourceUsageException("More than one instance of 'Contact" + "' was found when executing query --> '" + "from User c where c.email = :email" + "'");
} else if (results.size() == 1) {
result = results.iterator().next();
}
return result;
}
use of ubic.gemma.model.common.auditAndSecurity.User in project Gemma by PavlidisLab.
the class AuditAdviceTest method testSimpleAuditCreateUpdateUser.
@Test
public void testSimpleAuditCreateUpdateUser() {
String USERNAME = RandomStringUtils.randomAlphabetic(BaseSpringContextTest.RANDOM_STRING_LENGTH);
String encodedPassword = passwordEncoder.encodePassword(USERNAME, USERNAME);
UserDetailsImpl u = new UserDetailsImpl(encodedPassword, USERNAME, true, null, null, null, new Date());
userManager.createUser(u);
User user = (User) userService.findByUserName(USERNAME);
List<AuditEvent> events = auditTrailService.getEvents(user);
assertEquals("Should have just one event, a 'create'", 1, events.size());
assertEquals(AuditAction.CREATE, events.get(0).getAction());
assertNotNull(events.get(0).getId());
// change something.
user.setEmail(RandomStringUtils.randomNumeric(10));
userService.update(user);
events = auditTrailService.getEvents(user);
int sizeAfterFirstUpdate = events.size();
assertEquals("Should have a 'create' and an 'update'", 2, sizeAfterFirstUpdate);
// debugging...
if (!events.get(0).getAction().equals(AuditAction.CREATE)) {
log.info("First event wasn't 'C', dumping trail");
for (AuditEvent ae : events) {
log.info(ae);
}
}
assertEquals(AuditAction.CREATE, events.get(0).getAction());
assertEquals(AuditAction.UPDATE, events.get(sizeAfterFirstUpdate - 1).getAction());
// third time.
// change something.
user.setEmail(RandomStringUtils.randomNumeric(10));
userService.update(user);
events = auditTrailService.getEvents(user);
assertEquals(3, user.getAuditTrail().getEvents().size());
assertEquals(AuditAction.UPDATE, events.get(2).getAction());
// cleanup
userManager.deleteUser(USERNAME);
}
use of ubic.gemma.model.common.auditAndSecurity.User in project Gemma by PavlidisLab.
the class UserDaoImpl method findByUserName.
@Override
public User findByUserName(final String userName) {
Session session = this.getSessionFactory().getCurrentSession();
// noinspection unchecked
List<User> users = session.createCriteria(User.class).setFlushMode(FlushMode.MANUAL).add(Restrictions.eq("userName", userName)).list();
if (users.isEmpty()) {
return null;
} else if (users.size() > 1) {
throw new IllegalStateException("Multiple users with name=" + userName);
}
User u = users.get(0);
// TESTING
session.setReadOnly(u, true);
return u;
}
Aggregations