Author: swagle
Date: Sat Mar 9 20:02:43 2013
New Revision: 1454760
URL: http://svn.apache.org/r1454760
Log:
AMBARI-1602. Edit User - drop the requirement to specify the old password.
(swagle)
Modified:
incubator/ambari/trunk/CHANGES.txt
incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/security/authorization/Users.java
incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/security/authorization/TestUsers.java
Modified: incubator/ambari/trunk/CHANGES.txt
URL:
http://svn.apache.org/viewvc/incubator/ambari/trunk/CHANGES.txt?rev=1454760&r1=1454759&r2=1454760&view=diff
==============================================================================
--- incubator/ambari/trunk/CHANGES.txt (original)
+++ incubator/ambari/trunk/CHANGES.txt Sat Mar 9 20:02:43 2013
@@ -12,6 +12,9 @@ Trunk (unreleased changes):
NEW FEATURES
+ AMBARI-1602. Edit User - drop the requirement to specify the old
+ password. (swagle)
+
AMBARI-1592. Change how configurations are propagated (ncole)
AMBARI-1593. Change host override JSON to include version tag (ncole)
Modified:
incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/security/authorization/Users.java
URL:
http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/security/authorization/Users.java?rev=1454760&r1=1454759&r2=1454760&view=diff
==============================================================================
---
incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/security/authorization/Users.java
(original)
+++
incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/security/authorization/Users.java
Sat Mar 9 20:02:43 2013
@@ -29,6 +29,8 @@ import org.apache.ambari.server.orm.enti
import org.apache.ambari.server.orm.entities.UserEntity;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.security.core.context.SecurityContext;
+import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.crypto.password.PasswordEncoder;
import com.google.inject.Inject;
@@ -102,10 +104,19 @@ public class Users {
* Modifies password of local user
* @throws AmbariException
*/
- public synchronized void modifyPassword(String userName, String oldPassword,
String newPassword) throws AmbariException {
+ public synchronized void modifyPassword(String userName, String
currentUserPassword, String newPassword) throws AmbariException {
+
+ SecurityContext securityContext = SecurityContextHolder.getContext();
+ String currentUserName = securityContext.getAuthentication().getName();
+ if (currentUserName == null) {
+ throw new AmbariException("Authentication required. Please sign in.");
+ }
+
+ UserEntity currentUserEntity =
userDAO.findLocalUserByName(currentUserName);
UserEntity userEntity = userDAO.findLocalUserByName(userName);
- if (userEntity != null) {
- if (passwordEncoder.matches(oldPassword, userEntity.getUserPassword())) {
+
+ if ((userEntity != null) && (currentUserEntity != null)) {
+ if (passwordEncoder.matches(currentUserPassword,
currentUserEntity.getUserPassword())) {
userEntity.setUserPassword(passwordEncoder.encode(newPassword));
userDAO.merge(userEntity);
} else {
Modified:
incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/security/authorization/TestUsers.java
URL:
http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/security/authorization/TestUsers.java?rev=1454760&r1=1454759&r2=1454760&view=diff
==============================================================================
---
incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/security/authorization/TestUsers.java
(original)
+++
incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/security/authorization/TestUsers.java
Sat Mar 9 20:02:43 2013
@@ -22,9 +22,6 @@ import com.google.inject.Inject;
import com.google.inject.Injector;
import com.google.inject.persist.PersistService;
import org.apache.ambari.server.AmbariException;
-import org.apache.ambari.server.actionmanager.ActionDBAccessorImpl;
-import org.apache.ambari.server.actionmanager.ActionManager;
-import org.apache.ambari.server.agent.ActionQueue;
import org.apache.ambari.server.orm.GuiceJpaInitializer;
import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
import org.apache.ambari.server.orm.dao.RoleDAO;
@@ -33,6 +30,9 @@ import org.apache.ambari.server.orm.enti
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
+import
org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.crypto.password.PasswordEncoder;
import java.util.List;
@@ -57,6 +57,8 @@ public class TestUsers {
injector.getInstance(GuiceJpaInitializer.class);
injector.injectMembers(this);
users.createDefaultRoles();
+ Authentication auth = new
UsernamePasswordAuthenticationToken("admin",null);
+ SecurityContextHolder.getContext().setAuthentication(auth);
}
@After
@@ -82,7 +84,7 @@ public class TestUsers {
UserEntity userEntity = userDAO.findLocalUserByName("user");
assertNotNull("user", userEntity.getUserPassword());
- users.modifyPassword("user", "user", "resu");
+ users.modifyPassword("user", "admin", "resu");
assertNotSame(userEntity.getUserPassword(),
userDAO.findLocalUserByName("user").getUserPassword());
}
@@ -96,9 +98,9 @@ public class TestUsers {
assertNotSame("user", userEntity.getUserPassword());
assertTrue(passwordEncoder.matches("user", userEntity.getUserPassword()));
- users.modifyPassword("user", "user", "resu");
+ users.modifyPassword("user", "admin", "user_new_password");
- assertNotSame(userEntity.getUserPassword(),
userDAO.findLocalUserByName("user").getUserPassword());
+
assertTrue("user_new_password".equals(userDAO.findLocalUserByName("user").getUserPassword()));
users.modifyPassword("user", "error", "new");