Coverage Summary for Class: SecurityUserDetails (org.kitodo.production.security)

Class Class, % Method, % Line, %
SecurityUserDetails 100% (1/1) 46,2% (6/13) 81,1% (30/37)


 /*
  * (c) Kitodo. Key to digital objects e. V. <contact@kitodo.org>
  *
  * This file is part of the Kitodo project.
  *
  * It is licensed under GNU General Public License version 3 or later.
  *
  * For the full copyright and license information, please read the
  * GPL3-License.txt file that was distributed with this source code.
  */
 
 package org.kitodo.production.security;
 
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 
 import org.kitodo.data.database.beans.Authority;
 import org.kitodo.data.database.beans.Client;
 import org.kitodo.data.database.beans.Role;
 import org.kitodo.data.database.beans.User;
 import org.kitodo.production.services.ServiceManager;
 import org.springframework.security.core.GrantedAuthority;
 import org.springframework.security.core.authority.SimpleGrantedAuthority;
 import org.springframework.security.core.userdetails.UserDetails;
 import org.springframework.stereotype.Service;
 
 /**
  * The implementation of Spring Security's UserDetails interface which is used
  * to population the current authentication with security information (e.g.
  * authorities, account expired or locked, ...).
  */
 @Service
 public class SecurityUserDetails extends User implements UserDetails {
 
     /**
      * The client which was selected by user after login.
      */
     private Client sessionClient;
     private final User user;
 
     public SecurityUserDetails(final User user) {
         super(user);
         this.user = user;
     }
 
     @Override
     public Collection<? extends GrantedAuthority> getAuthorities() {
         List<Role> roles = this.user.getRoles();
         List<SimpleGrantedAuthority> userAuthorities = new ArrayList<>();
 
         for (Role role : roles) {
             List<Authority> authorities = role.getAuthorities();
             int clientId = role.getClient().getId();
             for (Authority authority : authorities) {
                 if (authority.getTitle().contains(ServiceManager.getAuthorityService().getGlobalAuthoritySuffix())) {
                     insertGlobalAuthorities(userAuthorities, authority);
                 }
                 if (authority.getTitle().contains(ServiceManager.getAuthorityService().getClientAuthoritySuffix())) {
                     insertClientAuthorities(userAuthorities, authority, clientId);
                 }
             }
         }
         return userAuthorities;
     }
 
     private void insertGlobalAuthorities(List<SimpleGrantedAuthority> userAuthorities, Authority authority) {
         String authorityTitle = authority.getTitle()
                 .replace(ServiceManager.getAuthorityService().getGlobalAuthoritySuffix(), "");
         SimpleGrantedAuthority simpleGrantedAuthority = new SimpleGrantedAuthority(authorityTitle + "_GLOBAL");
         if (!userAuthorities.contains(simpleGrantedAuthority)) {
             userAuthorities.add(simpleGrantedAuthority);
         }
     }
 
     private void insertClientAuthorities(List<SimpleGrantedAuthority> userAuthorities, Authority authority,
             int clientId) {
         String authorityTitle = authority.getTitle()
                 .replace(ServiceManager.getAuthorityService().getClientAuthoritySuffix(), "");
 
         SimpleGrantedAuthority simpleGrantedAuthority = new SimpleGrantedAuthority(authorityTitle + "_CLIENT_ANY");
         if (!userAuthorities.contains(simpleGrantedAuthority)) {
             userAuthorities.add(simpleGrantedAuthority);
         }
 
         SimpleGrantedAuthority simpleGrantedAuthorityWithId = new SimpleGrantedAuthority(
                 authorityTitle + "_CLIENT_" + clientId);
         if (!userAuthorities.contains(simpleGrantedAuthorityWithId)) {
             userAuthorities.add(simpleGrantedAuthorityWithId);
         }
     }
 
     /**
      * Gets sessionClient.
      *
      * @return The sessionClient.
      */
     public Client getSessionClient() {
         return sessionClient;
     }
 
     /**
      * Sets sessionClient.
      *
      * @param sessionClient
      *            The sessionClient.
      */
     public void setSessionClient(Client sessionClient) {
         this.sessionClient = sessionClient;
     }
 
     @Override
     public String getUsername() {
         return super.getLogin();
     }
 
     @Override
     public boolean isAccountNonExpired() {
         return !super.isDeleted();
     }
 
     @Override
     public boolean isAccountNonLocked() {
         return true;
     }
 
     @Override
     public boolean isCredentialsNonExpired() {
         return true;
     }
 
     @Override
     public boolean isEnabled() {
         return super.isActive();
     }
 
     @Override
     public boolean equals(Object object) {
         return super.equals(object);
     }
 
     @Override
     public int hashCode() {
         return super.hashCode();
     }
 }