Introduce security core
[lgpl/argeo-commons.git] / security / runtime / org.argeo.security.core / src / main / java / org / argeo / security / core / ArgeoUserDetails.java
diff --git a/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/core/ArgeoUserDetails.java b/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/core/ArgeoUserDetails.java
new file mode 100644 (file)
index 0000000..4a6882a
--- /dev/null
@@ -0,0 +1,39 @@
+package org.argeo.security.core;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.argeo.security.ArgeoUser;
+import org.argeo.security.UserNature;
+import org.springframework.security.GrantedAuthority;
+import org.springframework.security.userdetails.User;
+
+public class ArgeoUserDetails extends User implements ArgeoUser {
+       private static final long serialVersionUID = 1L;
+
+       private final List<UserNature> userInfos;
+       private final List<String> roles;
+
+       public ArgeoUserDetails(String username, List<UserNature> userInfos,
+                       String password, GrantedAuthority[] authorities)
+                       throws IllegalArgumentException {
+               super(username, password, true, true, true, true, authorities);
+               this.userInfos = Collections.unmodifiableList(userInfos);
+               
+               // Roles
+               List<String> roles = new ArrayList<String>();
+               for (GrantedAuthority authority : getAuthorities()) {
+                       roles.add(authority.getAuthority());
+               }
+               this.roles = Collections.unmodifiableList(roles);
+       }
+
+       public List<UserNature> getUserNatures() {
+               return userInfos;
+       }
+
+       public List<String> getRoles() {
+               return roles;
+       }
+}