/** * @see org.projectforge.business.login.LoginHandler#checkLogin(java.lang.String, java.lang.String, boolean) */ @Override public LoginResult checkLogin(final String username, final String password) { final LoginResult loginResult = loginDefaultHandler.checkLogin(username, password); if (loginResult.getLoginResultStatus() != LoginResultStatus.SUCCESS) { return loginResult; } try { // User is now logged-in successfully. final LdapUser authLdapUser = ldapUserDao.authenticate(username, password, userBase); if (authLdapUser == null) { final PFUserDO user = loginResult.getUser(); final LdapUser ldapUser = pfUserDOConverter.convert(user); ldapUser.setOrganizationalUnit(userBase); log.info("User's credentials in LDAP not up-to-date: " + username + ". Updating LDAP entry..."); ldapUserDao.createOrUpdate(userBase, ldapUser); ldapUserDao.changePassword(ldapUser, null, password); // update the userPassword but not the (WLAN)sambaNTPassword } } catch (final Exception ex) { log.error("An exception occured while checking login against LDAP system (ignoring this error): " + ex.getMessage(), ex); } return loginResult; }
public void loginAndCreateLdapUser() { final String userBase = "ou=pf-mock-test-users"; final LdapUserDao ldapUserDao = mock(LdapUserDao.class); loginHandler.ldapConfig = new LdapConfig().setUserBase(userBase); loginHandler.ldapUserDao = ldapUserDao; loginHandler.ldapOrganizationalUnitDao = mock(LdapOrganizationalUnitDao.class); loginHandler.initialize(); Login.getInstance().setLoginHandler(loginHandler); logon(TEST_ADMIN_USER); final PFUserDO user = new PFUserDO().setUsername("kai").setFirstname("Kai").setLastname("Reinhard"); userService.createEncryptedPassword(user, "successful"); userService.save(user); Assert.assertEquals(LoginResultStatus.SUCCESS, loginHandler.checkLogin("kai", "successful").getLoginResultStatus()); final ArgumentCaptor<LdapUser> argumentCaptor = ArgumentCaptor.forClass(LdapUser.class); verify(ldapUserDao).createOrUpdate(Mockito.anyString(), argumentCaptor.capture()); final LdapUser createdLdapUser = argumentCaptor.getValue(); Assert.assertEquals("kai", createdLdapUser.getUid()); Assert.assertEquals("Kai", createdLdapUser.getGivenName()); Assert.assertEquals("Reinhard", createdLdapUser.getSurname()); // Assert.assertEquals("successful", createdLdapUser.get()); logoff(); }