Skip to content

Commit b26882d

Browse files
committed
Oauth2 configuration updates
1 parent cc8d74d commit b26882d

File tree

4 files changed

+47
-10
lines changed

4 files changed

+47
-10
lines changed
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package dev.findfirst.security.config;
2+
3+
import org.springframework.context.annotation.Bean;
4+
import org.springframework.context.annotation.Conditional;
5+
import org.springframework.context.annotation.Configuration;
6+
import org.springframework.security.oauth2.client.userinfo.DefaultOAuth2UserService;
7+
8+
import dev.findfirst.security.conditions.OAuthClientsCondition;
9+
import dev.findfirst.security.oauth2client.OauthUserService;
10+
import dev.findfirst.users.repository.UserRepo;
11+
import dev.findfirst.users.service.UserManagementService;
12+
import lombok.RequiredArgsConstructor;
13+
14+
@Configuration
15+
@RequiredArgsConstructor
16+
public class Oauth2BeanConfig {
17+
18+
final UserManagementService ums;
19+
final UserRepo userRepo;
20+
21+
@Conditional(OAuthClientsCondition.class)
22+
@Bean
23+
public OauthUserService oauthUserService() {
24+
return new OauthUserService(userRepo, ums, new DefaultOAuth2UserService());
25+
}
26+
27+
}

server/src/main/java/dev/findfirst/security/config/SecSecurityConfig.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package dev.findfirst.security.config;
22

3-
43
import java.security.interfaces.RSAPrivateKey;
54
import java.security.interfaces.RSAPublicKey;
65

@@ -10,6 +9,7 @@
109
import dev.findfirst.security.oauth2client.handlers.Oauth2LoginSuccessHandler;
1110
import dev.findfirst.security.userauth.service.UserDetailsServiceImpl;
1211

12+
import dev.findfirst.security.oauth2client.OauthUserService;
1313
import com.nimbusds.jose.jwk.JWK;
1414
import com.nimbusds.jose.jwk.JWKSet;
1515
import com.nimbusds.jose.jwk.RSAKey;

server/src/main/java/dev/findfirst/security/oauth2client/OauthUserService.java

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import java.util.UUID;
99
import java.util.function.Supplier;
1010

11+
import dev.findfirst.security.conditions.OAuthClientsCondition;
1112
import dev.findfirst.security.userauth.models.payload.request.SignupRequest;
1213
import dev.findfirst.users.exceptions.EmailAlreadyRegisteredException;
1314
import dev.findfirst.users.exceptions.UserNameTakenException;
@@ -20,6 +21,7 @@
2021
import lombok.NoArgsConstructor;
2122
import lombok.extern.slf4j.Slf4j;
2223
import org.springframework.beans.factory.annotation.Autowired;
24+
import org.springframework.context.annotation.Conditional;
2325
import org.springframework.security.core.GrantedAuthority;
2426
import org.springframework.security.core.authority.SimpleGrantedAuthority;
2527
import org.springframework.security.oauth2.client.userinfo.DefaultOAuth2UserService;
@@ -32,6 +34,7 @@
3234
import org.springframework.transaction.annotation.Transactional;
3335

3436
@Service
37+
@Conditional(OAuthClientsCondition.class)
3538
@Slf4j
3639
@AllArgsConstructor
3740
@NoArgsConstructor
@@ -49,18 +52,25 @@ public class OauthUserService implements OAuth2UserService<OAuth2UserRequest, OA
4952
@Transactional
5053
@Override
5154
public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException {
55+
log.debug("attempt to loadUser");
5256
OAuth2User oAuth2User = oAuth2UserService.loadUser(userRequest);
5357
User user = null;
5458

5559
// user exists in database by email
56-
final String userNameAttributeName = userRequest.getClientRegistration().getProviderDetails()
60+
String userNameAttributeName = userRequest.getClientRegistration().getProviderDetails()
5761
.getUserInfoEndpoint().getUserNameAttributeName();
62+
if (userRequest.getClientRegistration().getClientName().equalsIgnoreCase("github")) {
63+
log.debug("set the userNameAttributeName to login");
64+
userNameAttributeName = "login";
65+
}
66+
67+
log.debug("userNameAttributeName {}", userNameAttributeName);
5868
final var attrs = oAuth2User.getAttributes();
5969
final var email = (String) attrs.get("email");
60-
final var username = (String) attrs.get(userNameAttributeName);
70+
71+
var username = attrs.get(userNameAttributeName).toString();
6172
final var registrationId = userRequest.getClientRegistration().getClientId();
62-
final var oauth2PlaceholderEmail =
63-
"generated-" + username + registrationId + "@noemail.invalid";
73+
final var oauth2PlaceholderEmail = "generated-" + username + registrationId + "@noemail.invalid";
6474

6575
Supplier<User> signup = () -> {
6676
try {
@@ -90,12 +100,10 @@ else if (username != null && !username.isEmpty()) {
90100
throw new RuntimeException("Error with user signup/signin");
91101
}
92102

93-
int userRole =
94-
(user.getRole() == null || user.getRole().getId() == null) ? 0 : user.getRole().getId();
103+
int userRole = (user.getRole() == null || user.getRole().getId() == null) ? 0 : user.getRole().getId();
95104

96105
GrantedAuthority authority = new SimpleGrantedAuthority(URole.values()[userRole].toString());
97-
var attributes =
98-
customAttribute(attrs, userNameAttributeName, user.getUserId(), registrationId);
106+
var attributes = customAttribute(attrs, userNameAttributeName, user.getUserId(), registrationId);
99107

100108
return new DefaultOAuth2User(Collections.singletonList(authority), attributes,
101109
userNameAttributeName);

server/src/main/java/dev/findfirst/security/oauth2client/handlers/Oauth2LoginSuccessHandler.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,23 @@
55
import jakarta.servlet.ServletException;
66
import jakarta.servlet.http.HttpServletRequest;
77
import jakarta.servlet.http.HttpServletResponse;
8-
8+
import dev.findfirst.security.conditions.OAuthClientsCondition;
99
import dev.findfirst.security.jwt.service.RefreshTokenService;
1010
import dev.findfirst.security.jwt.service.TokenService;
1111

1212
import lombok.RequiredArgsConstructor;
1313
import lombok.Setter;
1414
import lombok.extern.slf4j.Slf4j;
1515
import org.springframework.beans.factory.annotation.Value;
16+
import org.springframework.context.annotation.Conditional;
1617
import org.springframework.http.ResponseCookie;
1718
import org.springframework.security.core.Authentication;
1819
import org.springframework.security.oauth2.core.user.DefaultOAuth2User;
1920
import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler;
2021
import org.springframework.stereotype.Component;
2122

2223
@Component
24+
@Conditional(OAuthClientsCondition.class)
2325
@Slf4j
2426
@RequiredArgsConstructor
2527
@Setter

0 commit comments

Comments
 (0)