Compare commits

..

No commits in common. "6f264dccf76ac6d0eea6ceabd265c5537e9bdcb6" and "2b29ef81b2dd156d8205819ea16e3ab380513fb1" have entirely different histories.

4 changed files with 40 additions and 10 deletions

View file

@ -25,6 +25,8 @@ import java.util.*;
@Service
public class GitHubService {
private static final Logger logger = LoggerFactory.getLogger(GitHubService.class);
@Value("${spring.security.oauth2.client.registration.github.client-id}")
private String clientId;
@ -69,27 +71,32 @@ public class GitHubService {
);
Map<String, Object> responseBody = response.getBody();
logger.info("GitHub token response: {}", responseBody);
// Check if there's an error in the response
if (responseBody.containsKey("error")) {
String error = (String) responseBody.get("error");
String errorDescription = (String) responseBody.get("error_description");
logger.error("GitHub OAuth error: {} - {}", error, errorDescription);
throw new RuntimeException("GitHub OAuth error: " + errorDescription);
}
String accessToken = (String) responseBody.get("access_token");
if (accessToken == null || accessToken.isEmpty()) {
logger.error("No access token received from GitHub");
throw new RuntimeException("Failed to receive access token from GitHub");
}
logger.info("Received access token from GitHub");
// Get user info
HttpHeaders userInfoHeaders = new HttpHeaders();
userInfoHeaders.set("Authorization", "Bearer " + accessToken);
HttpEntity<String> userInfoRequestEntity = new HttpEntity<>(null, userInfoHeaders);
logger.info("Making request to GitHub API with token: {}", accessToken.substring(0, 5) + "...");
ResponseEntity<Map> userResponse = restTemplate.exchange(
"https://api.github.com/user",
HttpMethod.GET,
@ -98,6 +105,7 @@ public class GitHubService {
);
Map<String, Object> userAttributes = userResponse.getBody();
logger.info("Retrieved user info from GitHub: {}", userAttributes.get("login"));
// Get user emails
HttpHeaders emailsHeaders = new HttpHeaders();
@ -129,6 +137,8 @@ public class GitHubService {
email = (String) emails.get(0).get("email");
}
logger.info("Using email: {}", email);
// Process user data
String githubId = userAttributes.get("id").toString();
String username = (String) userAttributes.get("login");
@ -140,6 +150,7 @@ public class GitHubService {
if (userOptional.isPresent()) {
// Update existing user
user = userOptional.get();
logger.info("Found existing user with providerId: {}", githubId);
} else {
// Check if email exists
userOptional = userRepository.findByEmail(email);
@ -148,6 +159,7 @@ public class GitHubService {
user = userOptional.get();
user.setProvider(AuthProvider.GITHUB);
user.setProviderId(githubId);
logger.info("Updating existing user with email: {}", email);
} else {
// Create new user
user = new UserEntity();
@ -158,6 +170,7 @@ public class GitHubService {
user.setEmailVerified(true);
user.setBalance(new BigDecimal("1000.00"));
logger.info("Creating new user for: {}", username);
}
}
@ -170,10 +183,12 @@ public class GitHubService {
// Generate JWT token
String token = jwtUtils.generateToken(authentication);
logger.info("Generated JWT token");
return new AuthResponseDto(token);
} catch (Exception e) {
logger.error("Error processing GitHub code", e);
throw new RuntimeException("Failed to process GitHub authentication", e);
}
}

View file

@ -22,4 +22,9 @@ public class GitHubOAuth2UserInfo extends OAuth2UserInfo {
public String getEmail() {
return (String) attributes.get("email");
}
@Override
public String getImageUrl() {
return (String) attributes.get("avatar_url");
}
}

View file

@ -1,10 +1,7 @@
package de.szut.casino.security.oauth2;
import lombok.Getter;
import java.util.Map;
@Getter
public abstract class OAuth2UserInfo {
protected Map<String, Object> attributes;
@ -12,9 +9,15 @@ public abstract class OAuth2UserInfo {
this.attributes = attributes;
}
public Map<String, Object> getAttributes() {
return attributes;
}
public abstract String getId();
public abstract String getName();
public abstract String getEmail();
public abstract String getImageUrl();
}

View file

@ -1,8 +1,6 @@
package de.szut.casino.security.oauth2;
import de.szut.casino.user.UserEntity;
import lombok.Getter;
import lombok.Setter;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
@ -14,14 +12,11 @@ import java.util.List;
import java.util.Map;
public class UserPrincipal implements OAuth2User, UserDetails {
@Getter
private Long id;
@Getter
private String email;
private String username;
private String password;
private Collection<? extends GrantedAuthority> authorities;
@Setter
private Map<String, Object> attributes;
public UserPrincipal(Long id, String email, String username, String password, Collection<? extends GrantedAuthority> authorities) {
@ -51,6 +46,14 @@ public class UserPrincipal implements OAuth2User, UserDetails {
return userPrincipal;
}
public Long getId() {
return id;
}
public String getEmail() {
return email;
}
@Override
public String getPassword() {
return password;
@ -96,6 +99,10 @@ public class UserPrincipal implements OAuth2User, UserDetails {
return attributes;
}
public void setAttributes(Map<String, Object> attributes) {
this.attributes = attributes;
}
@Override
public String getName() {
return String.valueOf(id);