Fix issue with LDAP context cast
[lgpl/argeo-commons.git] / security / runtime / org.argeo.security.core / src / main / java / org / argeo / security / core / ArgeoUserDetails.java
index 1080eb82c016c909a37f7c476588628bbc353c6a..7ec9ce74ee768bd780f8b9e58505e10bbf23d55f 100644 (file)
@@ -5,7 +5,7 @@ import java.util.Collections;
 import java.util.List;
 
 import org.argeo.security.ArgeoUser;
-import org.argeo.security.BasicArgeoUser;
+import org.argeo.security.SimpleArgeoUser;
 import org.argeo.security.UserNature;
 import org.springframework.security.Authentication;
 import org.springframework.security.GrantedAuthority;
@@ -31,9 +31,8 @@ public class ArgeoUserDetails extends User implements ArgeoUser {
        }
 
        public ArgeoUserDetails(ArgeoUser argeoUser) {
-               // TODO: password
-               this(argeoUser.getUsername(), argeoUser.getUserNatures(), null,
-                               rolesToAuthorities(argeoUser.getRoles()));
+               this(argeoUser.getUsername(), argeoUser.getUserNatures(), argeoUser
+                               .getPassword(), rolesToAuthorities(argeoUser.getRoles()));
        }
 
        public List<UserNature> getUserNatures() {
@@ -61,19 +60,23 @@ public class ArgeoUserDetails extends User implements ArgeoUser {
                return arr;
        }
 
-       public static BasicArgeoUser createBasicArgeoUser(UserDetails userDetails) {
-               BasicArgeoUser argeoUser = new BasicArgeoUser();
-               argeoUser.setUsername(userDetails.getUsername());
-               addAuthoritiesToRoles(userDetails.getAuthorities(), argeoUser
-                               .getRoles());
-               return argeoUser;
+       public static SimpleArgeoUser createBasicArgeoUser(UserDetails userDetails) {
+               if (userDetails instanceof ArgeoUser) {
+                       return new SimpleArgeoUser((ArgeoUser) userDetails);
+               } else {
+                       SimpleArgeoUser argeoUser = new SimpleArgeoUser();
+                       argeoUser.setUsername(userDetails.getUsername());
+                       addAuthoritiesToRoles(userDetails.getAuthorities(), argeoUser
+                                       .getRoles());
+                       return argeoUser;
+               }
        }
 
        public static ArgeoUser asArgeoUser(Authentication authentication) {
                if (authentication.getPrincipal() instanceof ArgeoUser) {
-                       return (ArgeoUser) authentication.getPrincipal();
+                       return new SimpleArgeoUser((ArgeoUser) authentication.getPrincipal());
                } else {
-                       BasicArgeoUser argeoUser = new BasicArgeoUser();
+                       SimpleArgeoUser argeoUser = new SimpleArgeoUser();
                        argeoUser.setUsername(authentication.getName());
                        addAuthoritiesToRoles(authentication.getAuthorities(), argeoUser
                                        .getRoles());