Author: vjrj_ Date: 2011-10-09 01:47:25 +0200 (Sun, 09 Oct 2011) New Revision: 1547 Modified: trunk/src/main/java/cc/kune/core/client/rpcservices/UserService.java trunk/src/main/java/cc/kune/core/client/rpcservices/UserServiceAsync.java trunk/src/main/java/cc/kune/core/server/manager/UserManager.java trunk/src/main/java/cc/kune/core/server/manager/impl/UserManagerDefault.java trunk/src/main/java/cc/kune/core/server/rpc/UserRPC.java trunk/src/test/java/cc/kune/core/server/integration/site/UserServiceTest.java Log: NEW - # 138: Add change password functionality to the User Interface http://kune.ourproject.org/issues/ticket/138 Modified: trunk/src/main/java/cc/kune/core/client/rpcservices/UserService.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/rpcservices/UserService.java 2011-10-06 13:32:53 UTC (rev 1546) +++ trunk/src/main/java/cc/kune/core/client/rpcservices/UserService.java 2011-10-08 23:47:25 UTC (rev 1547) @@ -34,6 +34,8 @@ @RemoteServiceRelativePath("UserService") public interface UserService extends RemoteService { + void changePasswd(String userHash, String oldPassword, String newPassword); + void createUser(UserDTO user, boolean wantPersonalHomepage) throws DefaultException; String getUserAvatarBaser64(String userHash, StateToken userToken) throws DefaultException; Modified: trunk/src/main/java/cc/kune/core/client/rpcservices/UserServiceAsync.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/rpcservices/UserServiceAsync.java 2011-10-06 13:32:53 UTC (rev 1546) +++ trunk/src/main/java/cc/kune/core/client/rpcservices/UserServiceAsync.java 2011-10-08 23:47:25 UTC (rev 1547) @@ -31,6 +31,8 @@ public interface UserServiceAsync { + void changePasswd(String userHash, String oldPassword, String newPassword, AsyncCallback<Void> callback); + void createUser(UserDTO user, boolean wantPersonalHomepage, AsyncCallback<Void> asyncCallback); void getUserAvatarBaser64(String userHash, StateToken userToken, AsyncCallback<String> asyncCallback); Modified: trunk/src/main/java/cc/kune/core/server/manager/UserManager.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/manager/UserManager.java 2011-10-06 13:32:53 UTC (rev 1546) +++ trunk/src/main/java/cc/kune/core/server/manager/UserManager.java 2011-10-08 23:47:25 UTC (rev 1547) @@ -30,6 +30,8 @@ import cc.kune.domain.utils.UserBuddiesData; public interface UserManager { + User changePasswd(Long userId, String oldPassword, String newPassword); + /** * CreateUser new method with language country and timezone params * Modified: trunk/src/main/java/cc/kune/core/server/manager/impl/UserManagerDefault.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/manager/impl/UserManagerDefault.java 2011-10-06 13:32:53 UTC (rev 1546) +++ trunk/src/main/java/cc/kune/core/server/manager/impl/UserManagerDefault.java 2011-10-08 23:47:25 UTC (rev 1547) @@ -35,10 +35,17 @@ import org.apache.lucene.search.Query; import org.jivesoftware.smack.RosterEntry; import org.jivesoftware.smack.packet.RosterPacket.ItemType; +import org.waveprotocol.box.server.account.AccountData; import org.waveprotocol.box.server.authentication.PasswordDigest; import org.waveprotocol.box.server.persistence.AccountStore; +import org.waveprotocol.box.server.persistence.PersistenceException; +import org.waveprotocol.box.server.robots.agent.RobotAgentUtil; +import org.waveprotocol.wave.model.wave.ParticipantId; import org.waveprotocol.wave.model.waveref.WaveRef; +import cc.kune.common.client.utils.TextUtils; +import cc.kune.core.client.errors.AccessViolationException; +import cc.kune.core.client.errors.DefaultException; import cc.kune.core.client.errors.EmailAddressInUseException; import cc.kune.core.client.errors.GroupLongNameInUseException; import cc.kune.core.client.errors.GroupShortNameInUseException; @@ -114,6 +121,32 @@ this.mailService = mailService; } + @Override + public User changePasswd(final Long userId, final String oldPassword, final String newPassword) { + final User user = find(userId); + final ParticipantId participantId = participantUtils.of(user.getShortName()); + // Check oldPasswd + try { + final AccountData account = waveAccountStore.getAccount(participantId); + if (TextUtils.notEmpty(oldPassword) && account != null + && !account.asHuman().getPasswordDigest().verify(oldPassword.toCharArray())) { + throw new AccessViolationException("You cannot change passwd"); + } + // Wave change passwd + RobotAgentUtil.changeUserPassword(newPassword, participantId, waveAccountStore); + } catch (final IllegalArgumentException e) { + throw new DefaultException("Error changing user passwd", e); + } catch (final PersistenceException e) { + throw new DefaultException("Error changing user passwd", e); + } + // Kune db change passwd + final PasswordDigest newPasswordDigest = new PasswordDigest(newPassword.toCharArray()); + user.setPassword(newPassword); + user.setSalt(newPasswordDigest.getSalt()); + user.setDiggest(newPasswordDigest.getDigest()); + return persist(user); + } + private void checkIfEmailAreInUse(final String email) { if (userFinder.countByEmail(email) != 0) { throw new EmailAddressInUseException(); @@ -355,7 +388,6 @@ user.setEmail(email); } user.setLanguage(findLanguage(lang.getCode())); - // user.setLanguage(findLanguage(userDTO.getLanguage().getCode())); persist(user); groupManager.persist(userGroup); return user; Modified: trunk/src/main/java/cc/kune/core/server/rpc/UserRPC.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/rpc/UserRPC.java 2011-10-06 13:32:53 UTC (rev 1546) +++ trunk/src/main/java/cc/kune/core/server/rpc/UserRPC.java 2011-10-08 23:47:25 UTC (rev 1547) @@ -88,6 +88,14 @@ } @Override + @Authenticated + @Transactional + public void changePasswd(final String userHash, final String oldPassword, final String newPassword) { + final Long userId = userSessionManager.getUser().getId(); + userManager.changePasswd(userId, oldPassword, newPassword); + } + + @Override @Transactional(rollbackOn = DefaultException.class) public void createUser(final UserDTO userDTO, final boolean wantPersonalHomepage) throws DefaultException { @@ -137,7 +145,7 @@ // sessionService.getNewSession(); final User user = userManager.login(nickOrEmail, passwd); return loginUser(user, waveToken); - } + }; private UserInfoDTO loginUser(final User user, final String waveToken) throws DefaultException { if (user != null) { @@ -146,7 +154,7 @@ } else { throw new UserAuthException(); } - }; + } @Override @Authenticated Modified: trunk/src/test/java/cc/kune/core/server/integration/site/UserServiceTest.java =================================================================== --- trunk/src/test/java/cc/kune/core/server/integration/site/UserServiceTest.java 2011-10-06 13:32:53 UTC (rev 1546) +++ trunk/src/test/java/cc/kune/core/server/integration/site/UserServiceTest.java 2011-10-08 23:47:25 UTC (rev 1547) @@ -172,7 +172,27 @@ } } + @Test(expected = AccessViolationException.class) + public void testSiteChangeIncorrectPasswdMustFail() throws Exception { + assertNull(session.getUser().getId()); + doLogin(properties.getAdminShortName(), properties.getAdminPassword()); + assertNotNull(session.getUser().getId()); + userService.changePasswd(session.getHash(), "otherpasswd", "kkkkkk"); + } + @Test + public void testSiteChangePasswd() throws Exception { + assertNull(session.getUser().getId()); + doLogin(properties.getAdminShortName(), properties.getAdminPassword()); + assertNotNull(session.getUser().getId()); + userService.changePasswd(session.getHash(), properties.getAdminPassword(), "kkkkkk"); + doLogout(); + doLogin(properties.getAdminShortName(), "kkkkkk"); + userService.changePasswd(session.getHash(), "kkkkkk", properties.getAdminPassword()); + doLogout(); + } + + @Test public void testSiteEmailLogin() throws Exception { assertNull(session.getUser().getId()); userService.login(properties.getAdminEmail(), properties.getAdminPassword(), token); @@ -235,8 +255,8 @@ timezone, null, true, SubscriptionMode.manual, "blue"); userService.createUser(user, false); doLogin("test", "123456"); - final UserDTO userChanged = new UserDTO(shortName, longName, "123456", email, lang, country, - timezone, null, true, SubscriptionMode.manual, "blue"); + final UserDTO userChanged = new UserDTO("test", longName, "123456", email, lang, country, timezone, + null, true, SubscriptionMode.manual, "blue"); userChanged.setId(session.getUser().getId()); userService.updateUser(getHash(), userChanged, simpleLang); }