Skip to content
Merged
Show file tree
Hide file tree
Changes from 18 commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
dd7dd47
refactor(package): ํŒจํ‚ค์ง€ ์ด๋™
m-a-king Nov 27, 2024
8fb254c
style(ApiResponse): ๋ถˆํ•„์š”ํ•œ ๊ฐœํ–‰ ์ œ๊ฑฐ
m-a-king Nov 27, 2024
c54b569
feat(application.yml): front, back root url ์ถ”๊ฐ€
m-a-king Nov 27, 2024
e27ff41
refactor(package): ํŒจํ‚ค์ง€ ์ด๋™
m-a-king Nov 27, 2024
0304e08
feat(cookie): ์ฟ ํ‚ค ์‚ญ์ œ(๋ฎ์–ด์”Œ์šฐ๊ธฐ), ํ† ํฐ ํƒ€์ž… ์ถ”๊ฐ€(SIGNOUT), ํŒŒ์ผ๋ช… ๋ณ€๊ฒฝ
m-a-king Nov 27, 2024
5be1096
feat(RefreshToken): ๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ ์‚ญ์ œ ์ˆ˜์ •
m-a-king Nov 27, 2024
a5c6dd6
feat(SignOut): ๋กœ๊ทธ์•„์›ƒ ๋กœ์ง ๊ตฌํ˜„ ๋ฐ ๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ ์‚ญ์ œ ์ฒ˜๋ฆฌ
m-a-king Nov 27, 2024
d1fa733
test(CookieService): ์•ก์„ธ์Šค ํ† ํฐ ์„ค์ • ๋ฐ ์‚ญ์ œ ๋กœ์ง ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
m-a-king Nov 27, 2024
d5402ba
feat(OAuth): OAuth URL ์ƒ์„ฑ ์„œ๋น„์Šค ๊ตฌํ˜„
m-a-king Nov 27, 2024
dc819bf
test(GenerateOAuthUrlService): OAuth URL ์ƒ์„ฑ ๋กœ์ง ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
m-a-king Nov 27, 2024
3a027a9
test(SignOutVolunteerService): ๋กœ๊ทธ์•„์›ƒ ๋™์ž‘ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
m-a-king Nov 27, 2024
535e62a
feat(application.yml): front/back url ๋ณ€์ˆ˜ ์ฒ˜๋ฆฌ
m-a-king Nov 27, 2024
0e9e667
feat(VolunteerSignController): OAuth ๋กœ๊ทธ์ธ ๋ฐ ๋กœ๊ทธ์•„์›ƒ API ์ถ”๊ฐ€
m-a-king Nov 27, 2024
ec45506
feat(application.yml): naver-redirect-uri ๋ณ€์ˆ˜ ์ฒ˜๋ฆฌ
m-a-king Nov 27, 2024
317e6ac
CICD/ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ถ”๊ฐ€ (#61)
7zrv Nov 27, 2024
195e39c
refactor(package): C/Q ๊ตฌ๋ถ„ ์‚ญ์ œ
m-a-king Nov 27, 2024
300c301
feat(application.yml): UTF-8, KR ์„ค์ •
m-a-king Nov 27, 2024
10cd790
test(VolunteerSignController): OAuth ๋กœ๊ทธ์ธ ๋ฐ ๋กœ๊ทธ์•„์›ƒ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
m-a-king Nov 27, 2024
6de2b86
test(@Transactional): ๋ถˆํ•„์š”ํ•œ ํŠธ๋žœ์žญ์…˜ ์–ด๋…ธํ…Œ์ด์…˜ ์‚ญ์ œ
m-a-king Nov 27, 2024
851a2c2
refactor: ๋ถˆํ•„์š”ํ•œ ์–ด๋…ธํ…Œ์ด์…˜ ์‚ญ์ œ
m-a-king Nov 27, 2024
1b21234
refactor(package): ํŒจํ‚ค์ง€ ์ด๋™
m-a-king Nov 27, 2024
d21e31f
style(ApiResponse): ๋ถˆํ•„์š”ํ•œ ๊ฐœํ–‰ ์ œ๊ฑฐ
m-a-king Nov 27, 2024
5bbb1fa
feat(application.yml): front, back root url ์ถ”๊ฐ€
m-a-king Nov 27, 2024
72d5bb1
refactor(package): ํŒจํ‚ค์ง€ ์ด๋™
m-a-king Nov 27, 2024
7ffd3e2
feat(cookie): ์ฟ ํ‚ค ์‚ญ์ œ(๋ฎ์–ด์”Œ์šฐ๊ธฐ), ํ† ํฐ ํƒ€์ž… ์ถ”๊ฐ€(SIGNOUT), ํŒŒ์ผ๋ช… ๋ณ€๊ฒฝ
m-a-king Nov 27, 2024
e905d84
feat(RefreshToken): ๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ ์‚ญ์ œ ์ˆ˜์ •
m-a-king Nov 27, 2024
10cf398
feat(SignOut): ๋กœ๊ทธ์•„์›ƒ ๋กœ์ง ๊ตฌํ˜„ ๋ฐ ๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ ์‚ญ์ œ ์ฒ˜๋ฆฌ
m-a-king Nov 27, 2024
ccf9c70
test(CookieService): ์•ก์„ธ์Šค ํ† ํฐ ์„ค์ • ๋ฐ ์‚ญ์ œ ๋กœ์ง ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
m-a-king Nov 27, 2024
833c61d
feat(OAuth): OAuth URL ์ƒ์„ฑ ์„œ๋น„์Šค ๊ตฌํ˜„
m-a-king Nov 27, 2024
cb454b0
test(GenerateOAuthUrlService): OAuth URL ์ƒ์„ฑ ๋กœ์ง ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
m-a-king Nov 27, 2024
bf88735
test(SignOutVolunteerService): ๋กœ๊ทธ์•„์›ƒ ๋™์ž‘ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
m-a-king Nov 27, 2024
e2d337d
feat(application.yml): front/back url ๋ณ€์ˆ˜ ์ฒ˜๋ฆฌ
m-a-king Nov 27, 2024
ce63e59
feat(VolunteerSignController): OAuth ๋กœ๊ทธ์ธ ๋ฐ ๋กœ๊ทธ์•„์›ƒ API ์ถ”๊ฐ€
m-a-king Nov 27, 2024
9a86240
feat(application.yml): naver-redirect-uri ๋ณ€์ˆ˜ ์ฒ˜๋ฆฌ
m-a-king Nov 27, 2024
8cd40c9
refactor(package): C/Q ๊ตฌ๋ถ„ ์‚ญ์ œ
m-a-king Nov 27, 2024
62f20b8
feat(application.yml): UTF-8, KR ์„ค์ •
m-a-king Nov 27, 2024
15d8dd0
test(VolunteerSignController): OAuth ๋กœ๊ทธ์ธ ๋ฐ ๋กœ๊ทธ์•„์›ƒ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
m-a-king Nov 27, 2024
c6fb434
test(@Transactional): ๋ถˆํ•„์š”ํ•œ ํŠธ๋žœ์žญ์…˜ ์–ด๋…ธํ…Œ์ด์…˜ ์‚ญ์ œ
m-a-king Nov 27, 2024
0c8bf5c
refactor: ๋ถˆํ•„์š”ํ•œ ์–ด๋…ธํ…Œ์ด์…˜ ์‚ญ์ œ
m-a-king Nov 27, 2024
fe96db1
refactor: ๋ถˆํ•„์š”ํ•œ import ์ œ๊ฑฐ
m-a-king Nov 27, 2024
ec42aa4
Merge remote-tracking branch 'origin/feature/53-add-volunteer-signin-โ€ฆ
m-a-king Nov 27, 2024
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: 3 additions & 0 deletions .github/workflows/CD.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,10 @@ jobs:
NAVER_CLIENT_ID: ${{ secrets.NAVER_CLIENT_ID }}
NAVER_CLIENT_SECRET: ${{ secrets.NAVER_CLIENT_SECRET }}
NAVER_SCOPE: ${{ secrets.NAVER_SCOPE }}
NAVER_REDIRECT_URL: ${{secrets.NAVER_REDIRECT_URL}}
JWT_SECRET: ${{ secrets.JWT_SECRET }}
FRONT_URL: ${{secrets.FRONT_URL}}
BACK_URL: ${{secrets.BACK_URL}}

steps:
- name: Github Repository ํŒŒ์ผ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
Expand Down
3 changes: 3 additions & 0 deletions .github/workflows/CI.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,10 @@ jobs:
NAVER_CLIENT_ID: ${{ secrets.NAVER_CLIENT_ID }}
NAVER_CLIENT_SECRET: ${{ secrets.NAVER_CLIENT_SECRET }}
NAVER_SCOPE: ${{ secrets.NAVER_SCOPE }}
NAVER_REDIRECT_URL: ${{secrets.NAVER_REDIRECT_URL}}
JWT_SECRET: ${{ secrets.JWT_SECRET }}
FRONT_URL: ${{secrets.FRONT_URL}}
BACK_URL: ${{secrets.BACK_URL}}


steps:
Expand Down
36 changes: 36 additions & 0 deletions src/main/java/com/somemore/auth/cookie/CookieService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package com.somemore.auth.cookie;

import com.somemore.auth.jwt.domain.TokenType;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseCookie;
import org.springframework.stereotype.Service;

@Service
@RequiredArgsConstructor
@Slf4j
public class CookieService implements CookieUseCase {

@Override
public void setAccessToken(HttpServletResponse response, String value) {
ResponseCookie cookie = generateCookie(TokenType.ACCESS, value);
response.addHeader("Set-Cookie", cookie.toString());
}

@Override
public void deleteAccessToken(HttpServletResponse response) {
ResponseCookie cookie = generateCookie(TokenType.SIGNOUT, TokenType.SIGNOUT.name());
response.addHeader("Set-Cookie", cookie.toString());
}

private static ResponseCookie generateCookie(TokenType tokenType, String value) {
return ResponseCookie.from(TokenType.ACCESS.name(), value) // ๋ฎ์–ด์“ฐ๊ธฐ ์œ„ํ•ด์„œ ๊ณ ์ • ๊ฐ’
.httpOnly(true)
.secure(true)
.path("/")
.maxAge(tokenType.getPeriodInSeconds())
.sameSite("Lax")
.build();
}
}
9 changes: 9 additions & 0 deletions src/main/java/com/somemore/auth/cookie/CookieUseCase.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.somemore.auth.cookie;

import jakarta.servlet.http.HttpServletResponse;

public interface CookieUseCase {
void setAccessToken(HttpServletResponse response, String value);

void deleteAccessToken(HttpServletResponse response);
}
30 changes: 0 additions & 30 deletions src/main/java/com/somemore/auth/cookie/SetCookieService.java

This file was deleted.

8 changes: 0 additions & 8 deletions src/main/java/com/somemore/auth/cookie/SetCookieUseCase.java

This file was deleted.

3 changes: 2 additions & 1 deletion src/main/java/com/somemore/auth/jwt/domain/TokenType.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
@Getter
public enum TokenType {
ACCESS(1000 * 60 * 30),
REFRESH(1000 * 60 * 60 * 24 * 7);
REFRESH(1000 * 60 * 60 * 24 * 7),
SIGNOUT(0);

private final int period;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.somemore.auth.jwt.filter;

import com.somemore.auth.UserRole;
import com.somemore.auth.jwt.domain.EncodedToken;
import com.somemore.auth.jwt.exception.JwtErrorType;
import com.somemore.auth.jwt.exception.JwtException;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.somemore.auth;
package com.somemore.auth.jwt.filter;

public enum UserRole {
VOLUNTEER,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,8 @@ public void save(RefreshToken refreshToken) {
}

@Override
public void removeRefreshToken(EncodedToken accessToken) {
RefreshToken refreshToken = refreshTokenRepository.findByAccessToken(accessToken.value())
.orElseThrow(() -> new JwtException(JwtErrorType.EXPIRED_TOKEN));

refreshTokenRepository.delete(refreshToken);
public void removeRefreshToken(String userId) {
refreshTokenRepository.findByUserId(userId)
.ifPresent(refreshTokenRepository::delete);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,5 @@ public interface RefreshTokenManager {

void save(RefreshToken refreshToken);

void removeRefreshToken(EncodedToken accessToken);
void removeRefreshToken(String userId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,6 @@
public interface RefreshTokenRepository extends CrudRepository<RefreshToken, Integer> {

Optional<RefreshToken> findByAccessToken(String accessToken);

Optional<RefreshToken> findByUserId(String userId);
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package com.somemore.auth.jwt.service.command;
package com.somemore.auth.jwt.service;

import com.somemore.auth.jwt.domain.UserRole;
import com.somemore.auth.jwt.domain.EncodedToken;
import com.somemore.auth.jwt.domain.TokenType;
import com.somemore.auth.jwt.generator.JwtGenerator;
import com.somemore.auth.jwt.refresh.domain.RefreshToken;
import com.somemore.auth.jwt.refresh.manager.RefreshTokenManager;
import com.somemore.auth.jwt.usecase.command.GenerateTokensOnLoginUseCase;
import com.somemore.auth.jwt.usecase.GenerateTokensOnLoginUseCase;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
Expand Down
6 changes: 3 additions & 3 deletions src/main/java/com/somemore/auth/jwt/service/JwtService.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.somemore.auth.jwt.service;

import com.somemore.auth.cookie.SetCookieUseCase;
import com.somemore.auth.cookie.CookieUseCase;
import com.somemore.auth.jwt.domain.EncodedToken;
import com.somemore.auth.jwt.domain.TokenType;
import com.somemore.auth.jwt.exception.JwtErrorType;
Expand All @@ -24,7 +24,7 @@ public class JwtService implements JwtUseCase {
private final JwtParser jwtParser;
private final JwtValidator jwtValidator;
private final JwtRefresher jwtRefresher;
private final SetCookieUseCase setCookieUseCase;
private final CookieUseCase cookieUseCase;

@Override
public EncodedToken generateToken(String userId, String role, TokenType tokenType) {
Expand All @@ -48,7 +48,7 @@ public Claims getClaims(EncodedToken token) {
private void handleJwtExpiredException(JwtException e, EncodedToken accessToken, HttpServletResponse response) {
if (e.getErrorType() == JwtErrorType.EXPIRED_TOKEN) {
EncodedToken refreshedToken = jwtRefresher.refreshAccessToken(accessToken);
setCookieUseCase.setToken(response, refreshedToken.value(), TokenType.ACCESS);
cookieUseCase.setAccessToken(response, refreshedToken.value());
return;
}
throw e;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.somemore.auth.jwt.usecase.command;
package com.somemore.auth.jwt.usecase;

import com.somemore.auth.jwt.domain.EncodedToken;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
package com.somemore.auth.oauth.handler.success;

import com.somemore.auth.cookie.SetCookieUseCase;
import com.somemore.auth.cookie.CookieUseCase;
import com.somemore.auth.jwt.domain.EncodedToken;
import com.somemore.auth.jwt.domain.TokenType;
import com.somemore.auth.jwt.usecase.command.GenerateTokensOnLoginUseCase;
import com.somemore.auth.jwt.usecase.GenerateTokensOnLoginUseCase;
import com.somemore.auth.oauth.OAuthProvider;
import com.somemore.auth.oauth.naver.service.query.ProcessNaverOAuthUserService;
import com.somemore.auth.redirect.RedirectUseCase;
import com.somemore.volunteer.usecase.query.FindVolunteerIdUseCase;
import com.somemore.volunteer.usecase.FindVolunteerIdUseCase;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
Expand All @@ -29,10 +28,10 @@ public class CustomOAuthSuccessHandler extends SimpleUrlAuthenticationSuccessHan
private final ProcessNaverOAuthUserService processNaverOAuthService;
private final FindVolunteerIdUseCase findVolunteerIdUseCase;
private final GenerateTokensOnLoginUseCase generateTokensOnLoginUseCase;
private final SetCookieUseCase setCookieUseCase;
private final CookieUseCase cookieUseCase;
private final RedirectUseCase redirectUseCase;

@Value("${frontend.url}")
@Value("${app.front-url}")
private String frontendRootUrl;

@Override
Expand All @@ -49,7 +48,7 @@ public void onAuthenticationSuccess(HttpServletRequest request, HttpServletRespo
UUID volunteerId = findVolunteerIdUseCase.findVolunteerIdByOAuthId(oAuthId);
EncodedToken accessToken = generateTokensOnLoginUseCase.saveRefreshTokenAndReturnAccessToken(volunteerId);

setCookieUseCase.setToken(response, accessToken.value(), TokenType.ACCESS);
cookieUseCase.setAccessToken(response, accessToken.value());
redirectUseCase.redirect(request, response, frontendRootUrl);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import com.somemore.auth.oauth.naver.usecase.query.CheckNaverUserUseCase;
import com.somemore.auth.oauth.naver.usecase.command.RegisterNaverUserUseCase;
import com.somemore.auth.oauth.naver.util.OAuthResponseConverter;
import com.somemore.volunteer.usecase.command.RegisterVolunteerUseCase;
import com.somemore.volunteer.usecase.RegisterVolunteerUseCase;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.oauth2.core.user.OAuth2User;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
import com.somemore.community.usecase.CommunityBoardQueryUseCase;
import com.somemore.global.exception.BadRequestException;
import com.somemore.volunteer.dto.response.VolunteerForCommunityResponseDto;
import com.somemore.volunteer.usecase.query.FindVolunteerIdUseCase;
import com.somemore.volunteer.usecase.FindVolunteerIdUseCase;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,26 +12,20 @@ public class ApiResponse<T> {
private T data;

public static <T> ApiResponse<T> ok(int status, T data, String message) {

return new ApiResponse<>(status, message, data);
}

public static ApiResponse<?> ok(String message) {

return new ApiResponse<>(200, message, "");
}

public static ApiResponse<?> error(int code, String message) {

return new ApiResponse<>(code, message, "");
}



public ApiResponse(int code, String message, T data) {
this.code = code;
this.message = message;
this.data = data;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package com.somemore.volunteer.controller;

import com.somemore.global.common.response.ApiResponse;
import com.somemore.global.exception.BadRequestException;
import com.somemore.volunteer.usecase.SignOutVolunteerUseCase;
import com.somemore.volunteer.usecase.GenerateOAuthUrlUseCase;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.view.RedirectView;

@RestController
@Slf4j
@RequiredArgsConstructor
@RequestMapping("/api/volunteer")
@Tag(name = "Volunteer OAuth API", description = "Handles Volunteer OAuth Sign-in, Sign-out")
public class VolunteerSignController {

private final GenerateOAuthUrlUseCase generateOAuthUrlUseCase;
private final SignOutVolunteerUseCase signOutVolunteerUseCase;

@PostMapping("/sign-in/oauth/{oauthProvider}")
public RedirectView signIn(
@Parameter(name = "oauthProvider", description = "OAuth ์ œ๊ณต์ž ์„ ํƒ", example = "naver", required = true, schema = @Schema(allowableValues = {"naver"}))
@PathVariable("oauthProvider") String oauthProvider) {

String redirectUrl = switch (oauthProvider.toLowerCase()) {
case "naver" -> generateOAuthUrlUseCase.generateUrl(oauthProvider);

default -> throw new BadRequestException("์ง€์›๋˜์ง€ ์•Š๋Š” OAuth ์ œ๊ณต์ž: " + oauthProvider);
};

return new RedirectView(redirectUrl);
}

@PostMapping("/sign-out")
public ApiResponse<?> signOut(
HttpServletResponse response,
@AuthenticationPrincipal String userId) {

signOutVolunteerUseCase.signOut(response, userId);

return ApiResponse.ok("๋กœ๊ทธ์•„์›ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค");
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package com.somemore.volunteer.service.query;
package com.somemore.volunteer.service;

import com.somemore.volunteer.domain.Volunteer;
import com.somemore.volunteer.dto.response.VolunteerForCommunityResponseDto;
import com.somemore.volunteer.repository.VolunteerRepository;
import com.somemore.volunteer.usecase.query.FindVolunteerIdUseCase;
import com.somemore.volunteer.usecase.FindVolunteerIdUseCase;
import jakarta.persistence.EntityNotFoundException;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package com.somemore.volunteer.service;

import com.somemore.volunteer.usecase.GenerateOAuthUrlUseCase;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.util.UriComponentsBuilder;

@Slf4j
@Service
@RequiredArgsConstructor
public class GenerateOAuthUrlService implements GenerateOAuthUrlUseCase {

@Value("${app.back-url}")
private String backendRootUrl;

@Override
public String generateUrl(String oAuthProvider) {
return UriComponentsBuilder.fromHttpUrl(generateBaseUrl())
.pathSegment(oAuthProvider)
.build()
.toUriString();
}

private String generateBaseUrl() {
return UriComponentsBuilder.fromHttpUrl(backendRootUrl)
.path("/oauth2/authorization")
.build()
.toUriString();
}
}
Loading