]> git.argeo.org Git - lgpl/argeo-commons.git/blob - ArgeoUserDetails.java
1a1d159aa4b4a28c35b5e3aeb2e7ad8099df243e
[lgpl/argeo-commons.git] / ArgeoUserDetails.java
1 package org.argeo.security.core;
2
3 import java.util.ArrayList;
4 import java.util.Collections;
5 import java.util.List;
6
7 import org.apache.commons.logging.Log;
8 import org.apache.commons.logging.LogFactory;
9 import org.argeo.security.ArgeoUser;
10 import org.argeo.security.SimpleArgeoUser;
11 import org.argeo.security.UserNature;
12 import org.springframework.security.Authentication;
13 import org.springframework.security.GrantedAuthority;
14 import org.springframework.security.GrantedAuthorityImpl;
15 import org.springframework.security.userdetails.User;
16 import org.springframework.security.userdetails.UserDetails;
17
18 public class ArgeoUserDetails extends User implements ArgeoUser {
19 private static final long serialVersionUID = 1L;
20 private final static Log log = LogFactory.getLog(ArgeoUserDetails.class);
21
22 private final List<UserNature> userNatures;
23 private final List<String> roles;
24
25 public ArgeoUserDetails(String username, List<UserNature> userNatures,
26 String password, GrantedAuthority[] authorities)
27 throws IllegalArgumentException {
28 super(username, password, true, true, true, true, authorities);
29 this.userNatures = Collections.unmodifiableList(userNatures);
30
31 // Roles
32 this.roles = Collections.unmodifiableList(addAuthoritiesToRoles(
33 getAuthorities(), new ArrayList<String>()));
34 }
35
36 public ArgeoUserDetails(ArgeoUser argeoUser) {
37 this(argeoUser.getUsername(), argeoUser.getUserNatures(), argeoUser
38 .getPassword(), rolesToAuthorities(argeoUser.getRoles()));
39 }
40
41 public List<UserNature> getUserNatures() {
42 return userNatures;
43 }
44
45 public void updateUserNatures(List<UserNature> userNaturesData) {
46 UserNature.updateUserNaturesWithCheck(userNatures, userNaturesData);
47 }
48
49 public List<String> getRoles() {
50 return roles;
51 }
52
53 /** The provided list, for chaining using {@link Collections} */
54 protected static List<String> addAuthoritiesToRoles(
55 GrantedAuthority[] authorities, List<String> roles) {
56 for (GrantedAuthority authority : authorities) {
57 roles.add(authority.getAuthority());
58 }
59 return roles;
60 }
61
62 protected static GrantedAuthority[] rolesToAuthorities(List<String> roles) {
63 GrantedAuthority[] arr = new GrantedAuthority[roles.size()];
64 for (int i = 0; i < roles.size(); i++) {
65 String role = roles.get(i);
66 if (log.isTraceEnabled())
67 log.debug("Convert role " + role + " to authority (i=" + i
68 + ")");
69 arr[i] = new GrantedAuthorityImpl(role);
70 }
71 return arr;
72 }
73
74 public static SimpleArgeoUser createSimpleArgeoUser(UserDetails userDetails) {
75 if (userDetails instanceof ArgeoUser) {
76 return new SimpleArgeoUser((ArgeoUser) userDetails);
77 } else {
78 SimpleArgeoUser argeoUser = new SimpleArgeoUser();
79 argeoUser.setUsername(userDetails.getUsername());
80 addAuthoritiesToRoles(userDetails.getAuthorities(), argeoUser
81 .getRoles());
82 return argeoUser;
83 }
84 }
85
86 public static ArgeoUser asArgeoUser(Authentication authentication) {
87 if (authentication == null)
88 return null;
89
90 if (authentication.getPrincipal() instanceof ArgeoUser) {
91 return new SimpleArgeoUser((ArgeoUser) authentication
92 .getPrincipal());
93 } else {
94 SimpleArgeoUser argeoUser = new SimpleArgeoUser();
95 argeoUser.setUsername(authentication.getName());
96 addAuthoritiesToRoles(authentication.getAuthorities(), argeoUser
97 .getRoles());
98 return argeoUser;
99 }
100 }
101 }