]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/jcr/JcrUserDetails.java
Make secure thread bound JCR session more generic (deal with web user details)
[lgpl/argeo-commons.git] / security / runtime / org.argeo.security.core / src / main / java / org / argeo / security / jcr / JcrUserDetails.java
index f200a28a420bdc225314408b790366f617649082..11e463d349a7a7f86cf30d953e0636ef342ea8db 100644 (file)
@@ -1,8 +1,13 @@
 package org.argeo.security.jcr;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import org.springframework.security.GrantedAuthority;
+import org.springframework.security.GrantedAuthorityImpl;
 import org.springframework.security.userdetails.User;
 
+/** User details wrapping a home node. */
 public class JcrUserDetails extends User {
        private static final long serialVersionUID = -3594542993773402380L;
        private final String homePath;
@@ -16,6 +21,25 @@ public class JcrUserDetails extends User {
                this.homePath = homePath;
        }
 
+       /** Clone immutable with new roles */
+       public JcrUserDetails cloneWithNewRoles(List<String> roles) {
+               List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
+               for (String role : roles) {
+                       authorities.add(new GrantedAuthorityImpl(role));
+               }
+               return new JcrUserDetails(homePath, getUsername(), getPassword(),
+                               isEnabled(), isAccountNonExpired(), isAccountNonExpired(),
+                               isAccountNonLocked(),
+                               authorities.toArray(new GrantedAuthority[authorities.size()]));
+       }
+
+       /** Clone immutable with new password */
+       public JcrUserDetails cloneWithNewPassword(String password) {
+               return new JcrUserDetails(homePath, getUsername(), password,
+                               isEnabled(), isAccountNonExpired(), isAccountNonExpired(),
+                               isAccountNonLocked(), getAuthorities());
+       }
+
        public String getHomePath() {
                return homePath;
        }