refactor(security): remove unused GitHubService and comments
Some checks failed
CI / Get Changed Files (pull_request) Successful in 8s
CI / oxlint (pull_request) Successful in 24s
CI / Docker frontend validation (pull_request) Successful in 26s
CI / eslint (pull_request) Successful in 31s
CI / prettier (pull_request) Failing after 32s
CI / Checkstyle Main (pull_request) Failing after 1m2s
CI / test-build (pull_request) Successful in 59s
CI / Docker backend validation (pull_request) Successful in 1m14s
Some checks failed
CI / Get Changed Files (pull_request) Successful in 8s
CI / oxlint (pull_request) Successful in 24s
CI / Docker frontend validation (pull_request) Successful in 26s
CI / eslint (pull_request) Successful in 31s
CI / prettier (pull_request) Failing after 32s
CI / Checkstyle Main (pull_request) Failing after 1m2s
CI / test-build (pull_request) Successful in 59s
CI / Docker backend validation (pull_request) Successful in 1m14s
This commit is contained in:
parent
6f264dccf7
commit
6f6bbe6d8b
7 changed files with 2 additions and 35 deletions
|
@ -23,9 +23,6 @@ public class AuthController {
|
||||||
@Autowired
|
@Autowired
|
||||||
private AuthService authService;
|
private AuthService authService;
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private GitHubService githubService;
|
|
||||||
|
|
||||||
@PostMapping("/login")
|
@PostMapping("/login")
|
||||||
public ResponseEntity<AuthResponseDto> authenticateUser(@Valid @RequestBody LoginRequestDto loginRequest) throws EmailNotVerifiedException {
|
public ResponseEntity<AuthResponseDto> authenticateUser(@Valid @RequestBody LoginRequestDto loginRequest) throws EmailNotVerifiedException {
|
||||||
AuthResponseDto response = authService.login(loginRequest);
|
AuthResponseDto response = authService.login(loginRequest);
|
||||||
|
|
|
@ -23,7 +23,6 @@ public class CorsFilter implements Filter {
|
||||||
HttpServletResponse response = (HttpServletResponse) res;
|
HttpServletResponse response = (HttpServletResponse) res;
|
||||||
HttpServletRequest request = (HttpServletRequest) req;
|
HttpServletRequest request = (HttpServletRequest) req;
|
||||||
|
|
||||||
// Allow requests from the frontend
|
|
||||||
response.setHeader("Access-Control-Allow-Origin", frontendHost);
|
response.setHeader("Access-Control-Allow-Origin", frontendHost);
|
||||||
response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, PATCH, DELETE, OPTIONS");
|
response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, PATCH, DELETE, OPTIONS");
|
||||||
response.setHeader("Access-Control-Allow-Headers", "*");
|
response.setHeader("Access-Control-Allow-Headers", "*");
|
||||||
|
|
|
@ -45,22 +45,18 @@ public class GitHubService {
|
||||||
|
|
||||||
public AuthResponseDto processGithubCode(String code) {
|
public AuthResponseDto processGithubCode(String code) {
|
||||||
try {
|
try {
|
||||||
// Exchange code for access token
|
|
||||||
RestTemplate restTemplate = new RestTemplate();
|
RestTemplate restTemplate = new RestTemplate();
|
||||||
|
|
||||||
// Create request body for token endpoint
|
|
||||||
Map<String, String> requestBody = new HashMap<>();
|
Map<String, String> requestBody = new HashMap<>();
|
||||||
requestBody.put("client_id", clientId);
|
requestBody.put("client_id", clientId);
|
||||||
requestBody.put("client_secret", clientSecret);
|
requestBody.put("client_secret", clientSecret);
|
||||||
requestBody.put("code", code);
|
requestBody.put("code", code);
|
||||||
|
|
||||||
// Set headers
|
|
||||||
HttpHeaders headers = new HttpHeaders();
|
HttpHeaders headers = new HttpHeaders();
|
||||||
headers.set("Accept", "application/json");
|
headers.set("Accept", "application/json");
|
||||||
|
|
||||||
HttpEntity<Map<String, String>> requestEntity = new HttpEntity<>(requestBody, headers);
|
HttpEntity<Map<String, String>> requestEntity = new HttpEntity<>(requestBody, headers);
|
||||||
|
|
||||||
// Get access token
|
|
||||||
ResponseEntity<Map> response = restTemplate.exchange(
|
ResponseEntity<Map> response = restTemplate.exchange(
|
||||||
"https://github.com/login/oauth/access_token",
|
"https://github.com/login/oauth/access_token",
|
||||||
HttpMethod.POST,
|
HttpMethod.POST,
|
||||||
|
@ -70,7 +66,6 @@ public class GitHubService {
|
||||||
|
|
||||||
Map<String, Object> responseBody = response.getBody();
|
Map<String, Object> responseBody = response.getBody();
|
||||||
|
|
||||||
// Check if there's an error in the response
|
|
||||||
if (responseBody.containsKey("error")) {
|
if (responseBody.containsKey("error")) {
|
||||||
String error = (String) responseBody.get("error");
|
String error = (String) responseBody.get("error");
|
||||||
String errorDescription = (String) responseBody.get("error_description");
|
String errorDescription = (String) responseBody.get("error_description");
|
||||||
|
@ -84,7 +79,6 @@ public class GitHubService {
|
||||||
throw new RuntimeException("Failed to receive access token from GitHub");
|
throw new RuntimeException("Failed to receive access token from GitHub");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get user info
|
|
||||||
HttpHeaders userInfoHeaders = new HttpHeaders();
|
HttpHeaders userInfoHeaders = new HttpHeaders();
|
||||||
userInfoHeaders.set("Authorization", "Bearer " + accessToken);
|
userInfoHeaders.set("Authorization", "Bearer " + accessToken);
|
||||||
|
|
||||||
|
@ -99,7 +93,6 @@ public class GitHubService {
|
||||||
|
|
||||||
Map<String, Object> userAttributes = userResponse.getBody();
|
Map<String, Object> userAttributes = userResponse.getBody();
|
||||||
|
|
||||||
// Get user emails
|
|
||||||
HttpHeaders emailsHeaders = new HttpHeaders();
|
HttpHeaders emailsHeaders = new HttpHeaders();
|
||||||
emailsHeaders.set("Authorization", "Bearer " + accessToken);
|
emailsHeaders.set("Authorization", "Bearer " + accessToken);
|
||||||
|
|
||||||
|
@ -115,7 +108,6 @@ public class GitHubService {
|
||||||
List<Map<String, Object>> emails = emailsResponse.getBody();
|
List<Map<String, Object>> emails = emailsResponse.getBody();
|
||||||
String email = null;
|
String email = null;
|
||||||
|
|
||||||
// Find primary email
|
|
||||||
for (Map<String, Object> emailInfo : emails) {
|
for (Map<String, Object> emailInfo : emails) {
|
||||||
Boolean primary = (Boolean) emailInfo.get("primary");
|
Boolean primary = (Boolean) emailInfo.get("primary");
|
||||||
if (primary != null && primary) {
|
if (primary != null && primary) {
|
||||||
|
@ -124,24 +116,19 @@ public class GitHubService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// If no primary email, just use the first one
|
|
||||||
if (email == null && !emails.isEmpty()) {
|
if (email == null && !emails.isEmpty()) {
|
||||||
email = (String) emails.get(0).get("email");
|
email = (String) emails.get(0).get("email");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Process user data
|
|
||||||
String githubId = userAttributes.get("id").toString();
|
String githubId = userAttributes.get("id").toString();
|
||||||
String username = (String) userAttributes.get("login");
|
String username = (String) userAttributes.get("login");
|
||||||
|
|
||||||
// Check if user exists by provider ID
|
|
||||||
Optional<UserEntity> userOptional = userRepository.findByProviderId(githubId);
|
Optional<UserEntity> userOptional = userRepository.findByProviderId(githubId);
|
||||||
UserEntity user;
|
UserEntity user;
|
||||||
|
|
||||||
if (userOptional.isPresent()) {
|
if (userOptional.isPresent()) {
|
||||||
// Update existing user
|
|
||||||
user = userOptional.get();
|
user = userOptional.get();
|
||||||
} else {
|
} else {
|
||||||
// Check if email exists
|
|
||||||
userOptional = userRepository.findByEmail(email);
|
userOptional = userRepository.findByEmail(email);
|
||||||
|
|
||||||
if (userOptional.isPresent()) {
|
if (userOptional.isPresent()) {
|
||||||
|
@ -149,7 +136,6 @@ public class GitHubService {
|
||||||
user.setProvider(AuthProvider.GITHUB);
|
user.setProvider(AuthProvider.GITHUB);
|
||||||
user.setProviderId(githubId);
|
user.setProviderId(githubId);
|
||||||
} else {
|
} else {
|
||||||
// Create new user
|
|
||||||
user = new UserEntity();
|
user = new UserEntity();
|
||||||
user.setEmail(email);
|
user.setEmail(email);
|
||||||
user.setUsername(username);
|
user.setUsername(username);
|
||||||
|
@ -168,7 +154,6 @@ public class GitHubService {
|
||||||
|
|
||||||
Authentication authentication = this.authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(user.getEmail(), randomPassword));
|
Authentication authentication = this.authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(user.getEmail(), randomPassword));
|
||||||
|
|
||||||
// Generate JWT token
|
|
||||||
String token = jwtUtils.generateToken(authentication);
|
String token = jwtUtils.generateToken(authentication);
|
||||||
|
|
||||||
return new AuthResponseDto(token);
|
return new AuthResponseDto(token);
|
||||||
|
|
|
@ -32,9 +32,6 @@ public class SecurityConfig {
|
||||||
@Value("${app.frontend-host}")
|
@Value("${app.frontend-host}")
|
||||||
private String frontendHost;
|
private String frontendHost;
|
||||||
|
|
||||||
@Value("${app.oauth2.authorizedRedirectUris}")
|
|
||||||
private String authorizedRedirectUri;
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private UserDetailsService userDetailsService;
|
private UserDetailsService userDetailsService;
|
||||||
|
|
||||||
|
@ -73,8 +70,6 @@ public class SecurityConfig {
|
||||||
.requestMatchers(org.springframework.http.HttpMethod.OPTIONS, "/**").permitAll()
|
.requestMatchers(org.springframework.http.HttpMethod.OPTIONS, "/**").permitAll()
|
||||||
.anyRequest().authenticated();
|
.anyRequest().authenticated();
|
||||||
})
|
})
|
||||||
// Disable Spring's built-in OAuth2 login since we're implementing a custom flow
|
|
||||||
// We're using our own GitHubController for OAuth2 login
|
|
||||||
.authenticationProvider(authenticationProvider())
|
.authenticationProvider(authenticationProvider())
|
||||||
.addFilterBefore(jwtAuthenticationFilter, UsernamePasswordAuthenticationFilter.class);
|
.addFilterBefore(jwtAuthenticationFilter, UsernamePasswordAuthenticationFilter.class);
|
||||||
|
|
||||||
|
|
|
@ -45,7 +45,6 @@ public class CustomOAuth2UserService extends DefaultOAuth2UserService {
|
||||||
String registrationId = oAuth2UserRequest.getClientRegistration().getRegistrationId();
|
String registrationId = oAuth2UserRequest.getClientRegistration().getRegistrationId();
|
||||||
OAuth2UserInfo oAuth2UserInfo = OAuth2UserInfoFactory.getOAuth2UserInfo(registrationId, oAuth2User.getAttributes());
|
OAuth2UserInfo oAuth2UserInfo = OAuth2UserInfoFactory.getOAuth2UserInfo(registrationId, oAuth2User.getAttributes());
|
||||||
|
|
||||||
// For GitHub, the email might not be directly available in attributes
|
|
||||||
String email = oAuth2UserInfo.getEmail();
|
String email = oAuth2UserInfo.getEmail();
|
||||||
if (StringUtils.isEmpty(email)) {
|
if (StringUtils.isEmpty(email)) {
|
||||||
email = oAuth2UserInfo.getName() + "@github.user";
|
email = oAuth2UserInfo.getName() + "@github.user";
|
||||||
|
@ -79,7 +78,6 @@ public class CustomOAuth2UserService extends DefaultOAuth2UserService {
|
||||||
username = "github_" + oAuth2UserInfo.getId();
|
username = "github_" + oAuth2UserInfo.getId();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if username already exists and append a suffix if needed
|
|
||||||
if (userRepository.findByUsername(username).isPresent()) {
|
if (userRepository.findByUsername(username).isPresent()) {
|
||||||
username = username + "_" + UUID.randomUUID().toString().substring(0, 8);
|
username = username + "_" + UUID.randomUUID().toString().substring(0, 8);
|
||||||
}
|
}
|
||||||
|
@ -90,11 +88,10 @@ public class CustomOAuth2UserService extends DefaultOAuth2UserService {
|
||||||
user.setEmail(email);
|
user.setEmail(email);
|
||||||
user.setEmailVerified(true);
|
user.setEmailVerified(true);
|
||||||
|
|
||||||
// Generate a random password for OAuth users (they won't use it)
|
|
||||||
String randomPassword = UUID.randomUUID().toString();
|
String randomPassword = UUID.randomUUID().toString();
|
||||||
user.setPassword(oauth2PasswordEncoder.encode(randomPassword));
|
user.setPassword(oauth2PasswordEncoder.encode(randomPassword));
|
||||||
|
|
||||||
user.setBalance(new BigDecimal("1000.00")); // Starting balance
|
user.setBalance(new BigDecimal("100.00")); // Starting balance
|
||||||
|
|
||||||
return userRepository.save(user);
|
return userRepository.save(user);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
package de.szut.casino.security.oauth2;
|
package de.szut.casino.security.oauth2;
|
||||||
|
|
||||||
import de.szut.casino.security.jwt.JwtUtils;
|
import de.szut.casino.security.jwt.JwtUtils;
|
||||||
import de.szut.casino.user.UserRepository;
|
|
||||||
import jakarta.servlet.ServletException;
|
|
||||||
import jakarta.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import jakarta.servlet.http.HttpServletResponse;
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
|
@ -26,12 +24,9 @@ public class OAuth2AuthenticationSuccessHandler extends SimpleUrlAuthenticationS
|
||||||
@Autowired
|
@Autowired
|
||||||
private JwtUtils jwtUtils;
|
private JwtUtils jwtUtils;
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private UserRepository userRepository;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication)
|
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication)
|
||||||
throws IOException, ServletException {
|
throws IOException {
|
||||||
String targetUrl = determineTargetUrl(authentication);
|
String targetUrl = determineTargetUrl(authentication);
|
||||||
|
|
||||||
logger.info("OAuth2 Authentication successful, redirecting to: {}", targetUrl);
|
logger.info("OAuth2 Authentication successful, redirecting to: {}", targetUrl);
|
||||||
|
|
|
@ -58,7 +58,6 @@ public class UserPrincipal implements OAuth2User, UserDetails {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getUsername() {
|
public String getUsername() {
|
||||||
// We're using email as the username for authentication
|
|
||||||
return email;
|
return email;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Reference in a new issue