Skip to content

Commit e641774

Browse files
committed
more config
1 parent f2b8eac commit e641774

5 files changed

Lines changed: 39 additions & 24 deletions

File tree

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

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,39 @@
33
import dev.findfirst.security.conditions.OAuthClientsCondition;
44
import dev.findfirst.security.jwt.service.RefreshTokenService;
55
import dev.findfirst.security.jwt.service.TokenService;
6+
import dev.findfirst.security.oauth2client.OauthUserService;
67
import dev.findfirst.security.oauth2client.handlers.Oauth2LoginSuccessHandler;
7-
8+
import dev.findfirst.users.repository.UserRepo;
9+
import dev.findfirst.users.service.UserManagementService;
810
import lombok.RequiredArgsConstructor;
11+
12+
import org.springframework.beans.factory.annotation.Autowired;
13+
import org.springframework.beans.factory.annotation.Qualifier;
914
import org.springframework.context.annotation.Bean;
1015
import org.springframework.context.annotation.Conditional;
1116
import org.springframework.context.annotation.Configuration;
17+
import org.springframework.security.oauth2.client.userinfo.DefaultOAuth2UserService;
18+
import org.springframework.security.oauth2.client.userinfo.OAuth2UserRequest;
19+
import org.springframework.security.oauth2.client.userinfo.OAuth2UserService;
20+
import org.springframework.security.oauth2.core.user.OAuth2User;
1221

1322
@Configuration
1423
@RequiredArgsConstructor
1524
public class Oauth2BeanConfig {
1625

17-
final TokenService ts;
18-
final RefreshTokenService rt;
26+
private final TokenService ts;
27+
28+
private final RefreshTokenService rt;
1929

2030
@Bean
2131
@Conditional(OAuthClientsCondition.class)
2232
public Oauth2LoginSuccessHandler oauth2Success() {
2333
return new Oauth2LoginSuccessHandler(ts, rt);
2434
}
35+
36+
@Bean
37+
@Qualifier("defaultOauthService")
38+
public OAuth2UserService<OAuth2UserRequest, OAuth2User> defaultOAuth2UserService() {
39+
return new DefaultOAuth2UserService();
40+
}
2541
}

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

Lines changed: 16 additions & 15 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;
@@ -18,8 +19,12 @@
1819

1920
import lombok.AllArgsConstructor;
2021
import lombok.NoArgsConstructor;
22+
import lombok.RequiredArgsConstructor;
2123
import lombok.extern.slf4j.Slf4j;
2224
import org.springframework.beans.factory.annotation.Autowired;
25+
import org.springframework.beans.factory.annotation.Qualifier;
26+
import org.springframework.context.annotation.Conditional;
27+
import org.springframework.context.annotation.Primary;
2328
import org.springframework.security.core.GrantedAuthority;
2429
import org.springframework.security.core.authority.SimpleGrantedAuthority;
2530
import org.springframework.security.oauth2.client.userinfo.DefaultOAuth2UserService;
@@ -32,25 +37,24 @@
3237
import org.springframework.transaction.annotation.Transactional;
3338

3439
@Service
40+
@Conditional(OAuthClientsCondition.class)
3541
@Slf4j
36-
@AllArgsConstructor
37-
@NoArgsConstructor
42+
@RequiredArgsConstructor
43+
@Primary
3844
public class OauthUserService implements OAuth2UserService<OAuth2UserRequest, OAuth2User> {
3945

40-
@Autowired
41-
private UserRepo userRepo;
46+
private final UserRepo userRepo;
4247

43-
@Autowired
44-
private UserManagementService ums;
48+
private final UserManagementService ums;
4549

46-
@Autowired(required = false)
47-
private DefaultOAuth2UserService oAuth2UserService;
50+
@Qualifier("defaultOauthService")
51+
private final OAuth2UserService<OAuth2UserRequest, OAuth2User> delegate;
4852

4953
@Transactional
5054
@Override
5155
public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException {
5256
log.debug("attempt to loadUser");
53-
OAuth2User oAuth2User = oAuth2UserService.loadUser(userRequest);
57+
OAuth2User oAuth2User = delegate.loadUser(userRequest);
5458
User user = null;
5559

5660
// user exists in database by email
@@ -67,8 +71,7 @@ public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2Authentic
6771

6872
var username = attrs.get(userNameAttributeName).toString();
6973
final var registrationId = userRequest.getClientRegistration().getClientId();
70-
final var oauth2PlaceholderEmail =
71-
"generated-" + username + registrationId + "@noemail.invalid";
74+
final var oauth2PlaceholderEmail = "generated-" + username + registrationId + "@noemail.invalid";
7275

7376
Supplier<User> signup = () -> {
7477
try {
@@ -98,12 +101,10 @@ else if (username != null && !username.isEmpty()) {
98101
throw new RuntimeException("Error with user signup/signin");
99102
}
100103

101-
int userRole =
102-
(user.getRole() == null || user.getRole().getId() == null) ? 0 : user.getRole().getId();
104+
int userRole = (user.getRole() == null || user.getRole().getId() == null) ? 0 : user.getRole().getId();
103105

104106
GrantedAuthority authority = new SimpleGrantedAuthority(URole.values()[userRole].toString());
105-
var attributes =
106-
customAttribute(attrs, userNameAttributeName, user.getUserId(), registrationId);
107+
var attributes = customAttribute(attrs, userNameAttributeName, user.getUserId(), registrationId);
107108

108109
return new DefaultOAuth2User(Collections.singletonList(authority), attributes,
109110
userNameAttributeName);

server/src/main/resources/application-dev.properties

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,4 @@ spring.devtools.restart.enabled=true
3232
spring.devtools.restart.pollInterval=10s
3333
spring.flyway.locations=classpath:db/migration,classpath:db/dev
3434

35-
# spring.security.oauth2.client.registration.github.client-id=
36-
# spring.security.oauth2.client.registration.github.client-secret=
37-
3835
logging.level.org.springframework.security=TRACE

server/src/main/resources/application.properties

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,4 +44,5 @@ findfirst.upload.max-file-size=2097152
4444
spring.servlet.multipart.max-file-size=32MB
4545
spring.servlet.multipart.max-request-size=32MB
4646

47-
47+
spring.security.oauth2.client.registration.github.client-id=Ov23linhbDJ7ytuPfdT7
48+
spring.security.oauth2.client.registration.github.client-secret=bd3ba6d1e66c4cc2b95c8aca76d08594e85930dd

server/src/test/java/dev/findfirst/security/oauth2/OauthUserServiceTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,15 +150,15 @@ void hasUsernameFromOauthEmailButDoesNotExistAsUserAccountYet()
150150
OAuth2AccessToken token = new OAuth2AccessToken(OAuth2AccessToken.TokenType.BEARER, "token",
151151
Instant.now(), Instant.now().plusSeconds(3600));
152152

153-
ClientRegistration clientRegistration = ClientRegistration.withRegistrationId("github")
153+
ClientRegistration clientRegistration = ClientRegistration.withRegistrationId("gmail")
154154
.authorizationGrantType(AuthorizationGrantType.AUTHORIZATION_CODE).clientId("clientId")
155155
.clientSecret("clientSecret").redirectUri("localhost:8080")
156156
.authorizationUri("localhost:8080/authorizationUri").tokenUri("localhost:8080/tokenUri")
157157
.userInfoUri("http://localhost:8080/userInfoUri").userNameAttributeName("username").build();
158158
OAuth2UserRequest request = new OAuth2UserRequest(clientRegistration, token);
159159

160160
Map<String, Object> attributes = new HashMap<>();
161-
attributes.put("login", username);
161+
attributes.put("username", username);
162162
attributes.put("email", email);
163163

164164
when(defaultOAuth2UserService.loadUser(request)).thenReturn(oAuth2User);

0 commit comments

Comments
 (0)