source: src/main/java/edu/gjoko/schedlr/services/PostgresUserDetailsService.java@ 8bcd64c

Last change on this file since 8bcd64c was 8bcd64c, checked in by Gjoko Kostadinov <gjoko.kostadinov@…>, 15 months ago

Add admin functionality and business admin functionality.

  • Property mode set to 100644
File size: 2.3 KB
RevLine 
[cf9cdbf]1package edu.gjoko.schedlr.services;
2
[8bcd64c]3import edu.gjoko.schedlr.entity.Business;
4import edu.gjoko.schedlr.entity.BusinessStatus;
[cf9cdbf]5import edu.gjoko.schedlr.entity.Stakeholder;
[8bcd64c]6import edu.gjoko.schedlr.entity.StakeholderType;
7import edu.gjoko.schedlr.repositories.BusinessRepository;
[cf9cdbf]8import edu.gjoko.schedlr.repositories.StakeholderRepository;
[8bcd64c]9import lombok.RequiredArgsConstructor;
10import org.springframework.security.access.AccessDeniedException;
[cf9cdbf]11import org.springframework.security.core.GrantedAuthority;
12import org.springframework.security.core.authority.SimpleGrantedAuthority;
13import org.springframework.security.core.userdetails.User;
14import org.springframework.security.core.userdetails.UserDetails;
15import org.springframework.security.core.userdetails.UserDetailsService;
16import org.springframework.security.core.userdetails.UsernameNotFoundException;
[763289e]17import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
[cf9cdbf]18import org.springframework.stereotype.Service;
19
20import java.util.HashSet;
21import java.util.Set;
22
23@Service
[8bcd64c]24@RequiredArgsConstructor
[cf9cdbf]25public class PostgresUserDetailsService implements UserDetailsService {
26
27 private final StakeholderRepository stakeholderRepository;
[763289e]28 private final BCryptPasswordEncoder bCryptPasswordEncoder;
[cf9cdbf]29
[8bcd64c]30 private final BusinessRepository businessRepository;
[cf9cdbf]31
32 @Override
33 public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
34 Stakeholder user = stakeholderRepository.findStakeholderByUsername(username);
35 if(user == null) {
36 throw new UsernameNotFoundException("Non existing user");
37 }
[8bcd64c]38
39 if(user.getStakeholderType() == StakeholderType.BUSINESS_OWNER) {
40 Business business = businessRepository.findBusinessByOwner(user);
41 if (business.getBusinessStatus() != BusinessStatus.ACTIVE) {
42 throw new SecurityException("User not approved by admin");
43 }
44 }
[cf9cdbf]45 Set<GrantedAuthority> grantedAuthorities = new HashSet<>();
46 grantedAuthorities.add(new SimpleGrantedAuthority(user.getStakeholderType().name()));
[8bcd64c]47
[cf9cdbf]48 return new User(user.getUsername(), user.getPassword(), grantedAuthorities);
49 }
[8bcd64c]50
51 public Long loadStakeholderId(String username) {
52 return stakeholderRepository.findStakeholderByUsername(username).getId();
53 }
[cf9cdbf]54}
Note: See TracBrowser for help on using the repository browser.