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
Line 
1package edu.gjoko.schedlr.services;
2
3import edu.gjoko.schedlr.entity.Business;
4import edu.gjoko.schedlr.entity.BusinessStatus;
5import edu.gjoko.schedlr.entity.Stakeholder;
6import edu.gjoko.schedlr.entity.StakeholderType;
7import edu.gjoko.schedlr.repositories.BusinessRepository;
8import edu.gjoko.schedlr.repositories.StakeholderRepository;
9import lombok.RequiredArgsConstructor;
10import org.springframework.security.access.AccessDeniedException;
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;
17import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
18import org.springframework.stereotype.Service;
19
20import java.util.HashSet;
21import java.util.Set;
22
23@Service
24@RequiredArgsConstructor
25public class PostgresUserDetailsService implements UserDetailsService {
26
27 private final StakeholderRepository stakeholderRepository;
28 private final BCryptPasswordEncoder bCryptPasswordEncoder;
29
30 private final BusinessRepository businessRepository;
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 }
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 }
45 Set<GrantedAuthority> grantedAuthorities = new HashSet<>();
46 grantedAuthorities.add(new SimpleGrantedAuthority(user.getStakeholderType().name()));
47
48 return new User(user.getUsername(), user.getPassword(), grantedAuthorities);
49 }
50
51 public Long loadStakeholderId(String username) {
52 return stakeholderRepository.findStakeholderByUsername(username).getId();
53 }
54}
Note: See TracBrowser for help on using the repository browser.