]> git.argeo.org Git - lgpl/argeo-commons.git/blob - security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/core/ArgeoUserDetails.java
Finish implementing API
[lgpl/argeo-commons.git] / security / runtime / org.argeo.security.core / src / main / java / org / argeo / security / core / 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.argeo.security.ArgeoUser;
8 import org.argeo.security.BasicArgeoUser;
9 import org.argeo.security.UserNature;
10 import org.springframework.security.Authentication;
11 import org.springframework.security.GrantedAuthority;
12 import org.springframework.security.GrantedAuthorityImpl;
13 import org.springframework.security.userdetails.User;
14 import org.springframework.security.userdetails.UserDetails;
15
16 public class ArgeoUserDetails extends User implements ArgeoUser {
17 private static final long serialVersionUID = 1L;
18
19 private final List<UserNature> userNatures;
20 private final List<String> roles;
21
22 public ArgeoUserDetails(String username, List<UserNature> userNatures,
23 String password, GrantedAuthority[] authorities)
24 throws IllegalArgumentException {
25 super(username, password, true, true, true, true, authorities);
26 this.userNatures = Collections.unmodifiableList(userNatures);
27
28 // Roles
29 this.roles = Collections.unmodifiableList(addAuthoritiesToRoles(
30 getAuthorities(), new ArrayList<String>()));
31 }
32
33 public ArgeoUserDetails(ArgeoUser argeoUser) {
34 this(argeoUser.getUsername(), argeoUser.getUserNatures(), argeoUser.getPassword(),
35 rolesToAuthorities(argeoUser.getRoles()));
36 }
37
38 public List<UserNature> getUserNatures() {
39 return userNatures;
40 }
41
42 public List<String> getRoles() {
43 return roles;
44 }
45
46 /** The provided list, for chaining using {@link Collections} */
47 protected static List<String> addAuthoritiesToRoles(
48 GrantedAuthority[] authorities, List<String> roles) {
49 for (GrantedAuthority authority : authorities) {
50 roles.add(authority.getAuthority());
51 }
52 return roles;
53 }
54
55 protected static GrantedAuthority[] rolesToAuthorities(List<String> roles) {
56 GrantedAuthority[] arr = new GrantedAuthority[roles.size()];
57 for (int i = 0; i < roles.size(); i++) {
58 arr[i] = new GrantedAuthorityImpl(roles.get(i));
59 }
60 return arr;
61 }
62
63 public static BasicArgeoUser createBasicArgeoUser(UserDetails userDetails) {
64 BasicArgeoUser argeoUser = new BasicArgeoUser();
65 argeoUser.setUsername(userDetails.getUsername());
66 addAuthoritiesToRoles(userDetails.getAuthorities(), argeoUser
67 .getRoles());
68 return argeoUser;
69 }
70
71 public static ArgeoUser asArgeoUser(Authentication authentication) {
72 if (authentication.getPrincipal() instanceof ArgeoUser) {
73 return (ArgeoUser) authentication.getPrincipal();
74 } else {
75 BasicArgeoUser argeoUser = new BasicArgeoUser();
76 argeoUser.setUsername(authentication.getName());
77 addAuthoritiesToRoles(authentication.getAuthorities(), argeoUser
78 .getRoles());
79 return argeoUser;
80 }
81 }
82 }