Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ public enum DiscordMessageTemplate {
"```[%s] 🎉 새로운 사용자가 가입하였습니다 🎉\n\n"
+ "[가입한 사용자]\n"
+ "- 로그인 방식: %s\n"
+ "- ID: %d\n"
+ "- 닉네임: %s (ID: %d)\n"
+ "환영합니다!\n\n```");

private static final String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm";
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,26 @@
package org.websoso.WSSServer.domain.common;

import static org.websoso.WSSServer.exception.error.CustomAuthError.UNSUPPORTED_SOCIAL_LOGIN_TYPE;

import lombok.AllArgsConstructor;
import lombok.Getter;
import org.websoso.WSSServer.exception.exception.CustomAuthException;

@Getter
@AllArgsConstructor
public enum SocialLoginType {
KAKAO("카카오"), APPLE("애플");
KAKAO("카카오", "kakao"),
APPLE("애플", "apple");

private final String label;

private final String prefix;

public static SocialLoginType fromSocialId(String socialId) {
for (SocialLoginType type : values()) {
if (socialId.startsWith(type.getPrefix())) {
return type;
}
}
throw new CustomAuthException(UNSUPPORTED_SOCIAL_LOGIN_TYPE, "unsupported social login type");
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.websoso.WSSServer.exception.error;

import static org.springframework.http.HttpStatus.BAD_REQUEST;
import static org.springframework.http.HttpStatus.UNAUTHORIZED;

import lombok.AllArgsConstructor;
Expand All @@ -11,7 +12,8 @@
@AllArgsConstructor
public enum CustomAuthError implements ICustomError {

INVALID_TOKEN("AUTH-001", "유효하지 않은 토큰입니다.", UNAUTHORIZED);
INVALID_TOKEN("AUTH-001", "유효하지 않은 토큰입니다.", UNAUTHORIZED),
UNSUPPORTED_SOCIAL_LOGIN_TYPE("AUTH-002", "지원되지 않는 소셜 로그인 유형입니다.", BAD_REQUEST);

private final String code;
private final String description;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package org.websoso.WSSServer.oauth2.service;

import static org.websoso.WSSServer.domain.common.DiscordWebhookMessageType.JOIN;
import static org.websoso.WSSServer.domain.common.SocialLoginType.APPLE;
import static org.websoso.WSSServer.exception.error.CustomAppleLoginError.CLIENT_SECRET_CREATION_FAILED;
import static org.websoso.WSSServer.exception.error.CustomAppleLoginError.EMPTY_JWT;
import static org.websoso.WSSServer.exception.error.CustomAppleLoginError.HEADER_PARSING_FAILED;
Expand Down Expand Up @@ -55,7 +53,6 @@
import org.websoso.WSSServer.domain.RefreshToken;
import org.websoso.WSSServer.domain.User;
import org.websoso.WSSServer.domain.UserAppleToken;
import org.websoso.WSSServer.domain.common.DiscordWebhookMessage;
import org.websoso.WSSServer.dto.auth.AppleLoginRequest;
import org.websoso.WSSServer.dto.auth.ApplePublicKey;
import org.websoso.WSSServer.dto.auth.ApplePublicKeys;
Expand All @@ -65,7 +62,6 @@
import org.websoso.WSSServer.repository.RefreshTokenRepository;
import org.websoso.WSSServer.repository.UserAppleTokenRepository;
import org.websoso.WSSServer.repository.UserRepository;
import org.websoso.WSSServer.service.MessageFormatter;
import org.websoso.WSSServer.service.MessageService;

@Transactional
Expand Down Expand Up @@ -283,13 +279,9 @@ private MultiValueMap<String, String> createTokenRequestParams(String authorizat

private AuthResponse authenticate(String socialId, String email, String nickname, String appleRefreshToken) {
User user = userRepository.findBySocialId(socialId);

boolean isNewUser = false;

if (user == null) {
user = userRepository.save(User.createBySocial(socialId, nickname, email));
userAppleTokenRepository.save(UserAppleToken.create(user, appleRefreshToken));
isNewUser = true;
}

UserAuthentication userAuthentication = new UserAuthentication(user.getUserId(), null, null);
Expand All @@ -300,11 +292,6 @@ private AuthResponse authenticate(String socialId, String email, String nickname

boolean isRegister = !user.getNickname().contains("*");

if (isNewUser) {
messageService.sendDiscordWebhookMessage(
DiscordWebhookMessage.of(MessageFormatter.formatUserJoinMessage(user, APPLE), JOIN));
}

return AuthResponse.of(accessToken, refreshToken, isRegister);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package org.websoso.WSSServer.oauth2.service;

import static org.websoso.WSSServer.domain.common.DiscordWebhookMessageType.JOIN;
import static org.websoso.WSSServer.domain.common.SocialLoginType.KAKAO;
import static org.websoso.WSSServer.exception.error.CustomKakaoError.INVALID_KAKAO_ACCESS_TOKEN;
import static org.websoso.WSSServer.exception.error.CustomKakaoError.KAKAO_SERVER_ERROR;

Expand All @@ -18,13 +16,11 @@
import org.websoso.WSSServer.config.jwt.UserAuthentication;
import org.websoso.WSSServer.domain.RefreshToken;
import org.websoso.WSSServer.domain.User;
import org.websoso.WSSServer.domain.common.DiscordWebhookMessage;
import org.websoso.WSSServer.dto.auth.AuthResponse;
import org.websoso.WSSServer.exception.exception.CustomKakaoException;
import org.websoso.WSSServer.oauth2.dto.KakaoUserInfo;
import org.websoso.WSSServer.repository.RefreshTokenRepository;
import org.websoso.WSSServer.repository.UserRepository;
import org.websoso.WSSServer.service.MessageFormatter;
import org.websoso.WSSServer.service.MessageService;

@Service
Expand Down Expand Up @@ -69,11 +65,9 @@ public AuthResponse getUserInfoFromKakao(String kakaoAccessToken) {
String socialId = "kakao_" + kakaoUserInfo.id();
String defaultNickname = "k*" + kakaoUserInfo.id().toString().substring(2, 10);

boolean isNewUser = false;
User user = userRepository.findBySocialId(socialId);
if (user == null) {
user = userRepository.save(User.createBySocial(socialId, defaultNickname, kakaoUserInfo.email()));
isNewUser = true;
}

UserAuthentication userAuthentication = new UserAuthentication(user.getUserId(), null, null);
Expand All @@ -84,11 +78,6 @@ public AuthResponse getUserInfoFromKakao(String kakaoAccessToken) {
refreshTokenRepository.save(redisRefreshToken);

boolean isRegister = !user.getNickname().contains("*");

if (isNewUser) {
messageService.sendDiscordWebhookMessage(
DiscordWebhookMessage.of(MessageFormatter.formatUserJoinMessage(user, KAKAO), JOIN));
}
return AuthResponse.of(accessToken, refreshToken, isRegister);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ public static String formatUserJoinMessage(User user, SocialLoginType socialLogi
USER_JOIN.getTemplate(),
DiscordMessageTemplate.getCurrentDateTime(),
socialLoginType.getLabel(),
user.getNickname(),
user.getUserId()
);
}
Expand Down
5 changes: 5 additions & 0 deletions src/main/java/org/websoso/WSSServer/service/UserService.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.websoso.WSSServer.service;

import static org.websoso.WSSServer.domain.common.DiscordWebhookMessageType.JOIN;
import static org.websoso.WSSServer.domain.common.DiscordWebhookMessageType.WITHDRAW;
import static org.websoso.WSSServer.exception.error.CustomAvatarError.AVATAR_NOT_FOUND;
import static org.websoso.WSSServer.exception.error.CustomGenreError.GENRE_NOT_FOUND;
Expand All @@ -23,6 +24,7 @@
import org.websoso.WSSServer.domain.User;
import org.websoso.WSSServer.domain.WithdrawalReason;
import org.websoso.WSSServer.domain.common.DiscordWebhookMessage;
import org.websoso.WSSServer.domain.common.SocialLoginType;
import org.websoso.WSSServer.dto.user.EditMyInfoRequest;
import org.websoso.WSSServer.dto.user.EditProfileStatusRequest;
import org.websoso.WSSServer.dto.user.LoginResponse;
Expand Down Expand Up @@ -167,6 +169,9 @@ public void registerUserInfo(User user, RegisterUserInfoRequest registerUserInfo
user.updateUserInfo(registerUserInfoRequest);
List<GenrePreference> preferGenres = createGenrePreferences(user, registerUserInfoRequest.genrePreferences());
genrePreferenceRepository.saveAll(preferGenres);

messageService.sendDiscordWebhookMessage(DiscordWebhookMessage.of(
MessageFormatter.formatUserJoinMessage(user, SocialLoginType.fromSocialId(user.getSocialId())), JOIN));
}

public void logout(User user, String refreshToken) {
Expand Down