source: src/main/java/com/tourMate/config/oauth2/CustomOAuth2UserDetailService.java

Last change on this file was 0f5aa27, checked in by darsov2 <62809499+darsov2@…>, 12 months ago

ouath, mailing impl

  • Property mode set to 100644
File size: 3.3 KB
Line 
1package com.tourMate.config.oauth2;
2
3import com.tourMate.dao.UsersDao;
4import com.tourMate.entities.Role;
5import com.tourMate.entities.User;
6import org.springframework.security.core.AuthenticationException;
7import org.springframework.security.core.authority.SimpleGrantedAuthority;
8import org.springframework.security.oauth2.client.userinfo.DefaultOAuth2UserService;
9import org.springframework.security.oauth2.client.userinfo.OAuth2UserRequest;
10import org.springframework.security.oauth2.core.OAuth2AuthenticationException;
11import org.springframework.security.oauth2.core.user.OAuth2User;
12import org.springframework.stereotype.Service;
13import org.springframework.util.ObjectUtils;
14
15import java.util.Collections;
16import java.util.Objects;
17
18@Service
19public class CustomOAuth2UserDetailService extends DefaultOAuth2UserService {
20
21 private final UsersDao usersDao;
22
23 public CustomOAuth2UserDetailService(UsersDao usersDao) {
24 this.usersDao = usersDao;
25 }
26
27 @Override
28 public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException {
29 OAuth2User oAuth2User = super.loadUser(userRequest);
30
31 try
32 {
33 return checkOAuth2User(userRequest, oAuth2User);
34 }
35 catch (AuthenticationException e)
36 {
37 throw e;
38 }
39 catch (Exception ex)
40 {
41 throw ex;
42 //throw new InternalAuthenticationServiceException(ex.getMessage(), ex.getCause());
43 }
44 }
45
46 private OAuth2User checkOAuth2User(OAuth2UserRequest oAuth2UserRequest, OAuth2User oAuth2User)
47 {
48 OAuth2UserDetails oAuth2UserDetails = OAuth2UserDetailsFactory
49 .createOAuth2UserDetails(oAuth2UserRequest.getClientRegistration().getRegistrationId(), oAuth2User.getAttributes());
50
51 if(ObjectUtils.isEmpty(oAuth2UserRequest))
52 {
53 throw new RuntimeException("Cannot identifty OAuth2 user!");
54 }
55
56 User user = usersDao.findByUsernameAndProvider(
57 oAuth2UserDetails.getEmail(),
58 oAuth2UserRequest.getClientRegistration().getRegistrationId());
59 User userDetails = null;
60 if(user != null)
61 {
62 userDetails = user;
63 userDetails = updateOAuth2UserDetail(userDetails, oAuth2UserDetails);
64 }
65 else
66 {
67 userDetails = registerOAuth2UserDetail(oAuth2UserRequest, oAuth2UserDetails);
68 }
69 return new OAuth2UserDetailsCustom(
70 userDetails.getUserID(),
71 userDetails.getUsername(),
72 userDetails.getPassword(),
73 Collections.singletonList(new SimpleGrantedAuthority(userDetails.getRole().getRoleName()))
74 );
75 }
76
77 public User registerOAuth2UserDetail(OAuth2UserRequest oAuth2UserRequest, OAuth2UserDetails oAuth2UserDetails)
78 {
79 Role r = usersDao.findById(1L);
80 User user = new User();
81 user.setName(Objects.requireNonNullElse(oAuth2UserDetails.getName(), ""));
82 user.setEmail(oAuth2UserDetails.getEmail());
83 user.setProvider(oAuth2UserRequest.getClientRegistration().getRegistrationId());
84 user.setRole(r);
85 return usersDao.updateUser(user);
86 }
87
88 public User updateOAuth2UserDetail(User user, OAuth2UserDetails oAuth2UserDetails)
89 {
90 user.setEmail(oAuth2UserDetails.getEmail());
91 return usersDao.mergeUser(user);
92 }
93}
Note: See TracBrowser for help on using the repository browser.