mirror of
https://github.com/booklore-app/booklore.git
synced 2026-02-18 00:17:53 +01:00
Fix OIDC stomp initialization and notification
This commit is contained in:
@@ -2,6 +2,9 @@ package com.adityachandel.booklore.config.security.interceptor;
|
||||
|
||||
import com.adityachandel.booklore.config.security.JwtUtils;
|
||||
import com.adityachandel.booklore.config.security.service.DynamicOidcJwtProcessor;
|
||||
import com.adityachandel.booklore.mapper.custom.BookLoreUserTransformer;
|
||||
import com.adityachandel.booklore.model.dto.settings.OidcProviderDetails;
|
||||
import com.adityachandel.booklore.service.appsettings.AppSettingService;
|
||||
import com.nimbusds.jwt.JWTClaimsSet;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@@ -29,6 +32,7 @@ public class WebSocketAuthInterceptor implements ChannelInterceptor {
|
||||
|
||||
private final JwtUtils jwtUtils;
|
||||
private final DynamicOidcJwtProcessor dynamicOidcJwtProcessor;
|
||||
private final AppSettingService appSettingService;
|
||||
|
||||
@Override
|
||||
public Message<?> preSend(Message<?> message, MessageChannel channel) {
|
||||
@@ -58,16 +62,45 @@ public class WebSocketAuthInterceptor implements ChannelInterceptor {
|
||||
}
|
||||
|
||||
private Authentication authenticateToken(String token) {
|
||||
if (token == null || token.trim().isEmpty()) {
|
||||
log.debug("Token is null or empty");
|
||||
return null;
|
||||
}
|
||||
try {
|
||||
if (jwtUtils.validateToken(token)) {
|
||||
String username = jwtUtils.extractUsername(token);
|
||||
return new UsernamePasswordAuthenticationToken(username, null, Collections.singletonList(new SimpleGrantedAuthority("ROLE_USER")));
|
||||
if (username != null && !username.trim().isEmpty()) {
|
||||
return new UsernamePasswordAuthenticationToken(username, null, null);
|
||||
}
|
||||
log.debug("Username extracted from JWT is null or empty");
|
||||
}
|
||||
|
||||
JWTClaimsSet claims = dynamicOidcJwtProcessor.getProcessor().process(token, null);
|
||||
if (claims != null) {
|
||||
String username = claims.getSubject();
|
||||
return new UsernamePasswordAuthenticationToken(username, null, Collections.singletonList(new SimpleGrantedAuthority("ROLE_USER")));
|
||||
if (claims == null) {
|
||||
log.debug("OIDC token processing returned null claims");
|
||||
return null;
|
||||
}
|
||||
OidcProviderDetails providerDetails = appSettingService.getAppSettings().getOidcProviderDetails();
|
||||
if (providerDetails == null) {
|
||||
log.debug("OIDC provider details are null");
|
||||
return null;
|
||||
}
|
||||
if (providerDetails.getClaimMapping() == null) {
|
||||
log.debug("OIDC claim mapping is null");
|
||||
return null;
|
||||
}
|
||||
String usernameClaimKey = providerDetails.getClaimMapping().getUsername();
|
||||
if (usernameClaimKey == null || usernameClaimKey.trim().isEmpty()) {
|
||||
log.debug("Username claim key is null or empty");
|
||||
return null;
|
||||
}
|
||||
String username = claims.getStringClaim(usernameClaimKey);
|
||||
if (username != null && !username.trim().isEmpty()) {
|
||||
return new UsernamePasswordAuthenticationToken(username, null, null);
|
||||
}
|
||||
|
||||
log.warn("Username extracted from OIDC claims is null or empty");
|
||||
|
||||
} catch (Exception e) {
|
||||
log.debug("Token authentication failed", e);
|
||||
}
|
||||
|
||||
@@ -61,7 +61,7 @@ export function initializeAuthFactory() {
|
||||
authService.tokenSubject.next(oauthService.getAccessToken());
|
||||
console.log('[OIDC] Valid access token found after tryLogin');
|
||||
oauthService.setupAutomaticSilentRefresh();
|
||||
websocketInitializer(authService);
|
||||
websocketInitializer(authService)();
|
||||
authInitService.markAsInitialized();
|
||||
resolve();
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user