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");
 


Reply via email to