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
3 changes: 0 additions & 3 deletions .github/workflows/ci-workflow.yml
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
name: CI Workflow

on:
push:
branches:
- '**'
pull_request:
branches:
- '**'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
import com.linku.backend.domain.oauth.dto.GoogleUserInfo;
import com.linku.backend.domain.user.User;
import com.linku.backend.domain.user.repository.UserRepository;
import com.linku.backend.global.auth.dto.AuthTokenResponse;
import com.linku.backend.global.auth.dto.UserInfoResponse;
import com.linku.backend.global.exception.LinkuException;
import com.linku.backend.global.jwt.JwtTokenService;
import lombok.RequiredArgsConstructor;
Expand All @@ -12,7 +14,6 @@

import java.util.Optional;

import static com.linku.backend.global.response.ResponseCode.KUMAIL_ALREADY;
import static com.linku.backend.global.response.ResponseCode.USER_NOT_FOUND;

@Slf4j
Expand All @@ -34,18 +35,12 @@ public User getUserById(Long UserId) {
.orElseThrow(() -> LinkuException.of(USER_NOT_FOUND));
}

public void findByKuMail(String kuMail) {
log.debug("[findByKuMail] 건국대학교 메일 = {}", kuMail);
userRepository.findByKuMail(kuMail)
.ifPresent(user -> {
throw LinkuException.of(KUMAIL_ALREADY);
});
}

@Transactional
public void updateInfo(String kuMail, String guestToken) {
public UserInfoResponse updateInfo(String kuMail, String guestToken) {
Long userId = jwtTokenService.extractUserIdByGuestToken(guestToken);
User user = getUserById(userId);
user.updateInfo(kuMail);
AuthTokenResponse response = jwtTokenService.generateAuthToken(user);
return UserInfoResponse.from(user, response);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import com.linku.backend.domain.user.service.UserService;
import com.linku.backend.global.auth.dto.KUMailRequest;
import com.linku.backend.global.auth.dto.KUMailVerifyRequest;
import com.linku.backend.global.auth.dto.UserInfoResponse;
import com.linku.backend.global.auth.service.MailService;
import com.linku.backend.global.jwt.JwtTokenService;
import com.linku.backend.global.response.BaseResponse;
Expand All @@ -25,18 +26,17 @@ public class AuthController {
@PostMapping("/send-code")
public BaseResponse<Void> sendAuthCode(@Validated @RequestBody KUMailRequest request) {
log.debug("[sendMail] 사용자 메일 = {}", request.kuMail());
userService.findByKuMail(request.kuMail());
mailService.sendAuthMail(request.kuMail());

return BaseResponse.of(ResponseCode.SUCCESS, null);
}

@PostMapping("/verify-code")
public BaseResponse<Void> verifyAuthCode(@Validated @RequestBody KUMailVerifyRequest request,
public BaseResponse<UserInfoResponse> verifyAuthCode(@Validated @RequestBody KUMailVerifyRequest request,
@RequestHeader("Authorization") String guestToken) {
log.debug("[verify] 사용자 메일 = {}, 인증코드 = {}", request.kuMail(), request.authCode());
mailService.verifyAuthCode(request.kuMail(), request.authCode());
userService.updateInfo(request.kuMail(), guestToken);
return BaseResponse.of(ResponseCode.SUCCESS, null);
UserInfoResponse response = userService.updateInfo(request.kuMail(), guestToken);
return BaseResponse.of(ResponseCode.SUCCESS, response);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.linku.backend.global.auth.dto;

import com.linku.backend.domain.user.User;

public record UserInfoResponse(
String accessToken,
String refreshToken,
Long userId,
String name,
String kuMail
) {
public static UserInfoResponse from(User user, AuthTokenResponse authTokenResponse) {
return new UserInfoResponse(
authTokenResponse.accessToken(),
authTokenResponse.refreshToken(),
user.getUserId(),
user.getName(),
user.getKuMail()
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -52,10 +52,8 @@ public SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Excepti
.authorizeHttpRequests(auth -> auth
.requestMatchers(CorsUtils::isPreFlightRequest).permitAll() //preflight 요청은 Auth token 없으므로 항상 permit
.requestMatchers(
"/auth/send-code",
"/auth/verify-code"
).hasAuthority("ROLE_GUEST")
.requestMatchers(
"/api/auth/send-code",
"/api/auth/verify-code",
"/api/example/to-be-authenticated",
"/api/login/oauth2/code/google",
"/api/oauth2/google/login"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,11 +59,7 @@ private String resolveToken(HttpServletRequest request) {
private String resolveTokenType(HttpServletRequest request) {
String uri = request.getRequestURI();

// 게스트 토큰으로 접근해야 하는 엔드포인트들
// TODO: 실제 게스트 전용 엔드포인트 패턴에 맞게 수정하세요.
if (uri.startsWith("/api/auth/guest")
|| uri.startsWith("/api/auth/send-code")
|| uri.startsWith("/api/auth/verify-code")) {
if (uri.contains("/api/auth/send-code") || uri.contains("/api/auth/verify-code")) {
return JwtTokenService.GUEST;
}

Expand Down
Loading