View Javadoc
1   /*
2    * Copyright (C) 2022 B3Partners B.V.
3    *
4    * SPDX-License-Identifier: MIT
5    */
6   package org.tailormap.api.security;
7   
8   import java.time.ZoneId;
9   import java.time.ZonedDateTime;
10  import java.util.Collection;
11  import java.util.HashSet;
12  import java.util.List;
13  import org.apache.commons.lang3.StringUtils;
14  import org.springframework.security.core.GrantedAuthority;
15  import org.springframework.security.core.authority.SimpleGrantedAuthority;
16  import org.springframework.security.core.userdetails.UserDetails;
17  import org.tailormap.api.persistence.Group;
18  import org.tailormap.api.persistence.User;
19  import org.tailormap.api.persistence.json.AdminAdditionalProperty;
20  
21  public class TailormapUserDetails implements UserDetails {
22  
23    private final User user;
24  
25    public TailormapUserDetails(User user) {
26      this.user = user;
27    }
28  
29    @Override
30    public Collection<? extends GrantedAuthority> getAuthorities() {
31      Collection<GrantedAuthority> authorities = new HashSet<>();
32      user.getGroups().stream()
33          .map(Group::getName)
34          .map(SimpleGrantedAuthority::new)
35          .forEach(authorities::add);
36  
37      user.getGroups().stream()
38          .map(Group::getAliasForGroup)
39          .filter(StringUtils::isNotBlank)
40          .map(SimpleGrantedAuthority::new)
41          .forEach(authorities::add);
42      return authorities;
43    }
44  
45    @Override
46    public String getPassword() {
47      return user.getPassword();
48    }
49  
50    @Override
51    public String getUsername() {
52      return user.getUsername();
53    }
54  
55    @Override
56    public boolean isAccountNonExpired() {
57      return user.getValidUntil() == null || user.getValidUntil().isAfter(ZonedDateTime.now(ZoneId.systemDefault()));
58    }
59  
60    @Override
61    public boolean isEnabled() {
62      return user.isEnabled();
63    }
64  
65    public List<AdminAdditionalProperty> getAdditionalProperties() {
66      return user.getAdditionalProperties();
67    }
68  }