Skip to content

Commit

Permalink
Merge pull request #25 from SMWU-POCHAK/fix/21-social-login
Browse files Browse the repository at this point in the history
[fix/21-social-login] 애플로그인 오류 수정
  • Loading branch information
5jisoo authored Jul 3, 2024
2 parents 325e247 + 70e437f commit 1cb959b
Show file tree
Hide file tree
Showing 32 changed files with 332 additions and 302 deletions.
1 change: 0 additions & 1 deletion src/main/java/com/apps/pochak/PochakApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ public static void main(String[] args) {

@PostConstruct
public void init() {
// timezone 설정
TimeZone.setDefault(TimeZone.getTimeZone("Asia/Seoul"));
}
}
8 changes: 4 additions & 4 deletions src/main/java/com/apps/pochak/alarm/service/AlarmService.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import com.apps.pochak.alarm.domain.repository.AlarmRepository;
import com.apps.pochak.alarm.dto.response.AlarmElements;
import com.apps.pochak.global.api_payload.code.BaseCode;
import com.apps.pochak.login.jwt.JwtService;
import com.apps.pochak.login.provider.JwtProvider;
import com.apps.pochak.member.domain.Member;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
Expand All @@ -19,17 +19,17 @@
@RequiredArgsConstructor
public class AlarmService {
private final AlarmRepository alarmRepository;
private final JwtService jwtService;
private final JwtProvider jwtProvider;

@Transactional(readOnly = true)
public AlarmElements getAllAlarms(Pageable pageable) {
final Member loginMember = jwtService.getLoginMember();
final Member loginMember = jwtProvider.getLoginMember();
final Page<Alarm> alarmPage = alarmRepository.getAllAlarm(loginMember.getId(), pageable);
return new AlarmElements(alarmPage);
}

public BaseCode checkAlarm(Long alarmId) {
final Member loginMember = jwtService.getLoginMember();
final Member loginMember = jwtProvider.getLoginMember();
final Alarm alarm = alarmRepository.findAlarmById(alarmId, loginMember);
alarm.setIsChecked(true);
return SUCCESS_CHECK_ALARM;
Expand Down
10 changes: 5 additions & 5 deletions src/main/java/com/apps/pochak/block/service/BlockService.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import com.apps.pochak.follow.domain.repository.FollowRepository;
import com.apps.pochak.global.api_payload.exception.GeneralException;
import com.apps.pochak.like.domain.repository.LikeRepository;
import com.apps.pochak.login.jwt.JwtService;
import com.apps.pochak.login.provider.JwtProvider;
import com.apps.pochak.member.domain.Member;
import com.apps.pochak.member.domain.repository.MemberRepository;
import com.apps.pochak.post.domain.repository.PostRepository;
Expand All @@ -29,10 +29,10 @@ public class BlockService {
private final LikeRepository likeRepository;
private final PostRepository postRepository;

private final JwtService jwtService;
private final JwtProvider jwtProvider;

public void blockMember(String handle) {
Member blocker = jwtService.getLoginMember();
Member blocker = jwtProvider.getLoginMember();
Member blockedMember = memberRepository.findByHandle(handle, blocker);

if (blocker.getId().equals(blockedMember.getId())) {
Expand Down Expand Up @@ -62,7 +62,7 @@ public BlockElements getBlockedMember(
final String handle,
final Pageable pageable
) {
Member loginMember = jwtService.getLoginMember();
Member loginMember = jwtProvider.getLoginMember();
Member member = memberRepository.findByHandleWithoutLogin(handle);

if (!member.equals(loginMember)) {
Expand All @@ -80,7 +80,7 @@ public void cancelBlock(
final String handle,
final String blockedMemberHandle
) {
Member loginMember = jwtService.getLoginMember();
Member loginMember = jwtProvider.getLoginMember();
Member blocker = memberRepository.findByHandleWithoutLogin(handle);

if (!loginMember.equals(blocker)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import com.apps.pochak.comment.dto.response.CommentElements;
import com.apps.pochak.comment.dto.response.ParentCommentElement;
import com.apps.pochak.global.api_payload.exception.GeneralException;
import com.apps.pochak.login.jwt.JwtService;
import com.apps.pochak.login.provider.JwtProvider;
import com.apps.pochak.member.domain.Member;
import com.apps.pochak.post.domain.Post;
import com.apps.pochak.post.domain.repository.PostRepository;
Expand All @@ -37,14 +37,14 @@ public class CommentService {
private final PostRepository postRepository;
private final AlarmRepository alarmRepository;

private final JwtService jwtService;
private final JwtProvider jwtProvider;

@Transactional(readOnly = true)
public CommentElements getComments(
final Long postId,
final Pageable pageable
) {
final Member loginMember = jwtService.getLoginMember();
final Member loginMember = jwtProvider.getLoginMember();
final Post post = postRepository.findPublicPostById(postId, loginMember);
final Page<Comment> commentList = commentRepository.findParentCommentByPost(post, loginMember, pageable);
return new CommentElements(loginMember, commentList);
Expand All @@ -56,7 +56,7 @@ public ParentCommentElement getChildCommentsByParentCommentId(
final Long parentCommentId,
final Pageable pageable
) {
final Member loginMember = jwtService.getLoginMember();
final Member loginMember = jwtProvider.getLoginMember();
final Comment comment = commentRepository.findParentCommentById(parentCommentId, loginMember)
.orElseThrow(() -> new GeneralException(INVALID_POST_ID));
return new ParentCommentElement(comment, toPageRequest(pageable));
Expand All @@ -66,7 +66,7 @@ public void saveComment(
final Long postId,
final CommentUploadRequest request
) {
final Member loginMember = jwtService.getLoginMember();
final Member loginMember = jwtProvider.getLoginMember();
final Post post = postRepository.findPublicPostById(postId, loginMember);

if (request.checkChildComment()) {
Expand Down Expand Up @@ -179,7 +179,7 @@ public void deleteComment(
}

private void checkAuthorized(final Comment comment) {
Member member = jwtService.getLoginMember();
Member member = jwtProvider.getLoginMember();
if (comment.isOwner(member)) return;

Post post = comment.getPost();
Expand Down
14 changes: 6 additions & 8 deletions src/main/java/com/apps/pochak/follow/service/FollowService.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
package com.apps.pochak.follow.service;

import com.apps.pochak.alarm.domain.Alarm;
import com.apps.pochak.alarm.domain.FollowAlarm;
import com.apps.pochak.alarm.domain.repository.AlarmRepository;
import com.apps.pochak.follow.domain.Follow;
import com.apps.pochak.follow.domain.repository.FollowRepository;
import com.apps.pochak.global.api_payload.code.BaseCode;
import com.apps.pochak.global.api_payload.exception.GeneralException;
import com.apps.pochak.login.jwt.JwtService;
import com.apps.pochak.login.provider.JwtProvider;
import com.apps.pochak.member.domain.Member;
import com.apps.pochak.member.domain.repository.CustomMemberRepository;
import com.apps.pochak.member.domain.repository.MemberRepository;
Expand All @@ -19,7 +18,6 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Optional;

import static com.apps.pochak.global.BaseEntityStatus.ACTIVE;
Expand All @@ -35,10 +33,10 @@ public class FollowService {
private final AlarmRepository alarmRepository;
private final MemberRepository memberRepository;
private final CustomMemberRepository customMemberRepository;
private final JwtService jwtService;
private final JwtProvider jwtProvider;

public BaseCode follow(final String handle) {
final Member loginMember = jwtService.getLoginMember();
final Member loginMember = jwtProvider.getLoginMember();
final Member member = memberRepository.findByHandle(handle, loginMember);

if (loginMember.getId().equals(member.getId())) {
Expand Down Expand Up @@ -95,7 +93,7 @@ public BaseCode deleteFollower(final String handle,
final String followerHandle
) {
// TODO: Refactor permission checking part using annotations.
final Member loginMember = jwtService.getLoginMember();
final Member loginMember = jwtProvider.getLoginMember();
if (!loginMember.getHandle().equals(handle)) {
throw new GeneralException(_UNAUTHORIZED);
}
Expand All @@ -113,7 +111,7 @@ public BaseCode deleteFollower(final String handle,
public MemberElements getFollowings(final String handle,
final Pageable pageable
) {
final Member loginMember = jwtService.getLoginMember();
final Member loginMember = jwtProvider.getLoginMember();
final Member member = memberRepository.findByHandle(handle, loginMember);
final Page<MemberElement> followingPage = customMemberRepository.findFollowingsAndIsFollow(
member,
Expand All @@ -128,7 +126,7 @@ public MemberElements getFollowings(final String handle,
public MemberElements getFollowers(final String handle,
final Pageable pageable
) {
final Member loginMember = jwtService.getLoginMember();
final Member loginMember = jwtProvider.getLoginMember();
final Member member = memberRepository.findByHandle(handle, loginMember);
final Page<MemberElement> followerPage = customMemberRepository.findFollowersAndIsFollow(
member,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
import lombok.Getter;
import org.springframework.http.HttpStatus;

import java.security.NoSuchAlgorithmException;

import static org.springframework.http.HttpStatus.*;

@Getter
Expand Down Expand Up @@ -43,17 +45,24 @@ public enum ErrorStatus implements BaseErrorCode {
INVALID_REFRESH_TOKEN(BAD_REQUEST, "LOGIN4002", "잘못된 리프레시 토큰입니다."),
INVALID_TOKEN_SIGNATURE(BAD_REQUEST, "LOGIN4003", "잘못된 토큰 서명입니다."),
UNSUPPORTED_TOKEN(BAD_REQUEST, "LOGIN4004", "지원하지 않는 형식의 토큰입니다."),
MALFORMED_TOKEN(BAD_REQUEST, "LOGIN4005", "유효하지 않은 구성의 토큰입니다."),
NULL_TOKEN(BAD_REQUEST, "LOGIN4006", "토큰이 존재하지 않습니다."),
EXIST_USER(BAD_REQUEST, "LOGIN4007", "존재하는 유저입니다."),
NULL_REFRESH_TOKEN(BAD_REQUEST, "LOGIN4008", "리프레시 토큰이 존재하지 않습니다."),
EXPIRED_ACCESS_TOKEN(UNAUTHORIZED, "LOGIN4009", "만료된 액세스 토큰입니다."),
EXPIRED_REFRESH_TOKEN(UNAUTHORIZED, "LOGIN4010", "만료된 리프레시 토큰입니다."),
INVALID_PUBLIC_KEY(BAD_REQUEST, "LOGIN4011", "공개키를 가져올 수 없습니다."),
INVALID_USER_INFO(BAD_REQUEST, "LOGIN4012", "유저 정보를 가져올 수 없습니다."),
INVALID_OAUTH_TOKEN(BAD_REQUEST, "LOGIN4013", "토큰을 가져올 수 없습니다."),
INVALID_USER_INFO(BAD_REQUEST, "LOGIN4011", "유저 정보를 가져올 수 없습니다."),
INVALID_OAUTH_TOKEN(BAD_REQUEST, "LOGIN4012", "토큰을 가져올 수 없습니다."),
FAIL_VALIDATE_TOKEN(BAD_REQUEST, "LOGIN4013", "토큰 유효성 검사 중 오류가 발생했습니다."),

// Apple Login
FAIL_VALIDATE_PUBLIC_KEY(BAD_REQUEST, "APPLE4001", "애플로그인 공개키 조회에 실패하였습니다."),
MALFORMED_TOKEN(BAD_REQUEST, "APPLE4002", "유효하지 않은 구성의 토큰입니다."),
INVALID_PUBLIC_KEY(BAD_REQUEST, "APPLE4003", "공개키를 가져올 수 없습니다."),
JSON_PROCESSING_EXCEPTION(INTERNAL_SERVER_ERROR, "APPLE4004", "idToken 파싱에 실패하였습니다."),
NO_SUCH_ALGORITHM(INTERNAL_SERVER_ERROR, "APPLE5001", "Null algorithm name"),
INVALID_KEY_SPEC(INTERNAL_SERVER_ERROR, "APPLE5002", "Could not generate public key."),


// Member
INVALID_MEMBER_ID(BAD_REQUEST, "MEMBER4001", "유효하지 않은 멤버의 아이디입니다."),
INVALID_MEMBER_HANDLE(BAD_REQUEST, "MEMBER4002", "유효하지 않은 멤버의 handle입니다."),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.apps.pochak.global.api_payload.exception.handler;

import com.apps.pochak.global.api_payload.code.BaseErrorCode;
import com.apps.pochak.global.api_payload.exception.GeneralException;

public class AuthenticationException extends GeneralException {

public AuthenticationException(BaseErrorCode code) {
super(code);
}
}
8 changes: 4 additions & 4 deletions src/main/java/com/apps/pochak/like/service/LikeService.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import com.apps.pochak.like.domain.repository.LikeRepository;
import com.apps.pochak.like.dto.response.LikeElement;
import com.apps.pochak.like.dto.response.LikeElements;
import com.apps.pochak.login.jwt.JwtService;
import com.apps.pochak.login.provider.JwtProvider;
import com.apps.pochak.member.domain.Member;
import com.apps.pochak.post.domain.Post;
import com.apps.pochak.post.domain.repository.PostRepository;
Expand All @@ -32,10 +32,10 @@ public class LikeService {
private final PostRepository postRepository;
private final TagRepository tagRepository;
private final AlarmRepository alarmRepository;
private final JwtService jwtService;
private final JwtProvider jwtProvider;

public void likePost(final Long postId) {
final Member loginMember = jwtService.getLoginMember();
final Member loginMember = jwtProvider.getLoginMember();
final Post post = postRepository.findPostById(postId, loginMember);

final Optional<LikeEntity> optionalLike = likeRepository.findByLikeMemberAndLikedPost(loginMember, post);
Expand Down Expand Up @@ -89,7 +89,7 @@ private void deleteAlarm(LikeEntity like) {

@Transactional(readOnly = true)
public LikeElements getMemberLikedPost(final Long postId) {
final Member loginMember = jwtService.getLoginMember();
final Member loginMember = jwtProvider.getLoginMember();
final Post likedPost = postRepository.findPostById(postId, loginMember);

final List<LikeElement> likeElements = likeRepository.findLikesAndIsFollow(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.apps.pochak.login.config;

import com.apps.pochak.login.jwt.JwtAuthorizationFilter;
import com.apps.pochak.login.jwt.JwtService;
import com.apps.pochak.login.filter.JwtAuthorizationFilter;
import com.apps.pochak.login.provider.JwtProvider;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
Expand All @@ -18,7 +18,7 @@
@RequiredArgsConstructor
public class SecurityConfig {

private final JwtService jwtService;
private final JwtProvider jwtProvider;

@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
Expand All @@ -38,6 +38,6 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {

@Bean
public JwtAuthorizationFilter jwtAuthorizationFilter() {
return new JwtAuthorizationFilter(jwtService);
return new JwtAuthorizationFilter(jwtProvider);
}
}
31 changes: 14 additions & 17 deletions src/main/java/com/apps/pochak/login/controller/OAuthController.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,16 @@

import com.apps.pochak.global.api_payload.ApiResponse;
import com.apps.pochak.login.dto.request.MemberInfoRequest;
import com.apps.pochak.login.dto.response.AccessTokenResponse;
import com.apps.pochak.login.dto.response.OAuthMemberResponse;
import com.apps.pochak.login.dto.response.PostTokenResponse;
import com.apps.pochak.login.jwt.JwtHeaderUtil;
import com.apps.pochak.login.jwt.JwtService;
import com.apps.pochak.login.oauth.AppleOAuthService;
import com.apps.pochak.login.oauth.GoogleOAuthService;
import com.apps.pochak.login.oauth.OAuthService;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.apps.pochak.login.provider.JwtProvider;
import com.apps.pochak.login.service.AppleOAuthService;
import com.apps.pochak.login.service.GoogleOAuthService;
import com.apps.pochak.login.service.OAuthService;
import com.apps.pochak.login.util.JwtHeaderUtil;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import java.security.NoSuchAlgorithmException;
import java.security.spec.InvalidKeySpecException;

import static com.apps.pochak.global.Constant.HEADER_APPLE_AUTHORIZATION_CODE;
import static com.apps.pochak.global.Constant.HEADER_IDENTITY_TOKEN;
import static com.apps.pochak.global.api_payload.code.status.SuccessStatus.SUCCESS_LOG_OUT;
Expand All @@ -24,7 +20,7 @@
@RestController
@RequiredArgsConstructor
public class OAuthController {
private final JwtService jwtService;
private final JwtProvider jwtProvider;
private final OAuthService oAuthService;
private final AppleOAuthService appleOAuthService;
private final GoogleOAuthService googleOAuthService;
Expand All @@ -35,14 +31,15 @@ public ApiResponse<OAuthMemberResponse> signup(@ModelAttribute final MemberInfoR
}

@PostMapping("/api/v2/refresh")
public ApiResponse<PostTokenResponse> refresh() {
public ApiResponse<AccessTokenResponse> refresh() {
return ApiResponse.onSuccess(oAuthService.reissueAccessToken());
}

@PostMapping("/apple/login")
public ApiResponse<?> appleOAuthRequest(@RequestHeader(HEADER_IDENTITY_TOKEN) String idToken,
@RequestHeader(HEADER_APPLE_AUTHORIZATION_CODE) String authorizationCode)
throws NoSuchAlgorithmException, InvalidKeySpecException, JsonProcessingException {
public ApiResponse<?> appleOAuthRequest(
@RequestHeader(HEADER_IDENTITY_TOKEN) String idToken,
@RequestHeader(HEADER_APPLE_AUTHORIZATION_CODE) String authorizationCode
) {
return ApiResponse.onSuccess(appleOAuthService.login(idToken, authorizationCode));
}

Expand All @@ -54,15 +51,15 @@ public ApiResponse<?> googleOAuthRequest(@PathVariable String accessToken) {
@GetMapping("/api/v2/logout")
public ApiResponse<?> logout() {
String accessToken = JwtHeaderUtil.getAccessToken();
String id = jwtService.getSubject(accessToken);
String id = jwtProvider.getSubject(accessToken);
oAuthService.logout(id);
return ApiResponse.of(SUCCESS_LOG_OUT);
}

@DeleteMapping("/api/v2/signout")
public ApiResponse<?> signout() {
String accessToken = JwtHeaderUtil.getAccessToken();
String id = jwtService.getSubject(accessToken);
String id = jwtProvider.getSubject(accessToken);
oAuthService.signout(id);
return ApiResponse.of(SUCCESS_SIGN_OUT);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.apps.pochak.login.dto.response;
package com.apps.pochak.login.dto.apple;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AccessLevel;
Expand Down
Loading

0 comments on commit 1cb959b

Please sign in to comment.