Skip to content
This repository was archived by the owner on Mar 26, 2024. It is now read-only.
Open
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 @@ -172,15 +172,13 @@ public void joinSpaceToken(@PathVariable Long spaceId, @RequestParam String code
Instant expiredInstant = LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant();
String expiredEmptyJwt = JWT.create().withExpiresAt(expiredInstant).sign(Algorithm.none());
CookieUtil.addCookieNotHttpOnly(response, "join_space_token", expiredEmptyJwt, 60 * 5);
CookieUtil.addCookieNotHttpOnlyForLocal(response, "join_space_token", expiredEmptyJwt, 60 * 5);
response.sendRedirect("https://tripvote.site");
return;
}
Map<String, String> codeInfo = verifyService.getCodeInfo(VerifyService.Purpose.JOIN_SPACE, code);
JoinSpaceToken genRequest = JoinSpaceToken.unauthenticated(null, codeInfo.get("issuer"), spaceId);
Token generatedToken = delegatingTokenManager.generate(genRequest);
CookieUtil.addCookieNotHttpOnly(response, "join_space_token", generatedToken.getTokenValue(), 60 * 60 * 2);
CookieUtil.addCookieNotHttpOnlyForLocal(response, "join_space_token", generatedToken.getTokenValue(), 60 * 60 * 2);
response.sendRedirect("https://tripvote.site");
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
package fc.be.app.common.authentication.controller.dto.request;

import fc.be.app.domain.member.controller.validation.Password;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;

public record ModifyLostPasswordRequest(
@NotBlank
String token,
@Email
@NotNull
String email,
@Pattern(regexp = "^(?=.*[a-zA-Z])(?=.*[!@#$%^&*()])(?=.*[0-9]).{8,16}$")
@Password
String newPassword
) {
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package fc.be.app.common.authentication.controller.dto.request;

import fc.be.app.domain.member.controller.validation.Password;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Pattern;

public record ModifyPasswordRequest(
@NotBlank
String token,
@Pattern(regexp = "^(?=.*[a-zA-Z])(?=.*[!@#$%^&*()])(?=.*[0-9]).{8,16}$")
@Password
String newPassword
) {
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package fc.be.app.common.authentication.controller.dto.request;

import fc.be.app.domain.member.controller.validation.Password;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
Expand All @@ -11,7 +12,7 @@ public record RegisterMemberRequest(
@Email
@NotNull
String email,
@Pattern(regexp = "^(?=.*[a-zA-Z])(?=.*[!@#$%^&*()])(?=.*[0-9]).{8,16}$")
@Password
String password,
@NotBlank
String nickname,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@
import fc.be.app.domain.wish.service.WishService;
import fc.be.app.global.config.security.model.user.UserPrincipal;
import fc.be.app.global.http.ApiResponse;
import fc.be.app.global.util.CookieUtil;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Pageable;
Expand Down Expand Up @@ -96,18 +99,22 @@ public ApiResponse<Void> changeProfileAndNickname(@AuthenticationPrincipal UserP

@PostMapping("/sign-out")
@PreAuthorize("isAuthenticated()")
public ApiResponse<Void> signOut(@AuthenticationPrincipal UserPrincipal userPrincipal, @Valid @RequestBody(required = false) DeleteMemberRequest request, @CookieValue(name = "access-token", required = false) String accessToken) {
public ApiResponse<Void> signOut(@AuthenticationPrincipal UserPrincipal userPrincipal, @Valid @RequestBody(required = false) DeleteMemberRequest request, @CookieValue(name = "access-token", required = false) String accessToken, HttpServletRequest servletRequest, HttpServletResponse servletResponse) {
if (userPrincipal.authProvider() != AuthProvider.NONE) {
ProviderMemberDeactivateRequest deactivateRequest = new ProviderMemberDeactivateRequest(userPrincipal.id(), accessToken);
try {
memberCommand.deactivate(deactivateRequest);
CookieUtil.deleteCookie(servletRequest, servletResponse, "access-token");
CookieUtil.deleteCookie(servletRequest, servletResponse, "refresh-token");
} catch (AuthException exception) {
throw exception;
}
return ApiResponse.ok();
}
MemberDeactivateRequest deactivateRequest = new MemberDeactivateRequest(userPrincipal.id(), request.password());
memberCommand.deactivate(deactivateRequest);
CookieUtil.deleteCookie(servletRequest, servletResponse, "access-token");
CookieUtil.deleteCookie(servletRequest, servletResponse, "refresh-token");
return ApiResponse.ok();
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package fc.be.app.domain.member.controller.dto.request;

import jakarta.validation.constraints.Pattern;
import fc.be.app.domain.member.controller.validation.Password;

public record DeleteMemberRequest(
@Pattern(regexp = "^(?=.*[a-zA-Z])(?=.*[!@#$%^&*()])(?=.*[0-9]).{8,16}$")
@Password
String password
) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,10 @@ public record MyInfoResponse(
String nickname,
String email,
String profile,
AuthProvider provider
AuthProvider provider,
boolean isSubscribe
) {
public static MyInfoResponse from(MemberQuery.MemberResponse memberResponse) {
return new MyInfoResponse(memberResponse.nickname(), memberResponse.email(), memberResponse.profile(), memberResponse.provider());
return new MyInfoResponse(memberResponse.nickname(), memberResponse.email(), memberResponse.profile(), memberResponse.provider(), memberResponse.isSubscribe());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package fc.be.app.domain.member.controller.validation;

import jakarta.validation.Constraint;
import jakarta.validation.Payload;
import jakarta.validation.ReportAsSingleViolation;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;

import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

@NotNull
@Pattern(regexp = "^(?=.*[a-zA-Z])(?=.*[!@#$%^&*()])(?=.*\\d).{8,16}$")
@Documented
@Constraint(validatedBy = {})
@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE})
@Retention(RUNTIME)
@ReportAsSingleViolation
public @interface Password {
String message() default "유효하지 않은 비밀번호 폼입니다";

Class<?>[] groups() default {};

Class<? extends Payload>[] payload() default {};
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,8 @@ record MemberResponse(
String email,
String nickname,
String profile,
AuthProvider provider
AuthProvider provider,
boolean isSubscribe
) {
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,8 @@ public Optional<MemberResponse> findById(Long id) {
member.getEmail(),
member.getNickname(),
member.getProfile(),
member.getProvider()));
member.getProvider(),
member.isSubscription()));
}

@Override
Expand All @@ -42,7 +43,8 @@ public Optional<MemberResponse> find(MemberRequest request) {
member.getEmail(),
member.getNickname(),
member.getProfile(),
member.getProvider()));
member.getProvider(),
member.isSubscription()));
}

@Override
Expand All @@ -55,7 +57,8 @@ public Optional<MemberResponse> find(ProviderMemberRequest request) {
member.getEmail(),
member.getNickname(),
member.getProfile(),
member.getProvider()));
member.getProvider(),
member.isSubscription()));
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,14 @@
import fc.be.app.domain.space.repository.JoinedMemberRepository;
import fc.be.notification.application.NotificationSubscribePort;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

import static fc.be.app.domain.notification.exception.NotificationErrorCode.NOT_FOUND_TOKEN;

@Service
@Transactional
public class NotificationSubscribeService {
private static final long GLOBAL_TOPIC_ID = 0;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import fc.be.app.global.http.ApiResponse;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
Expand All @@ -19,6 +20,7 @@ public class NotificationTokenController {
private final NotificationTokenRegisterService notificationTokenRegisterService;

@PostMapping("/notifications/token")
@PreAuthorize("isAuthenticated()")
public ApiResponse<Void> createFcmToken(
@Valid @RequestBody TokenRegisterApiRequest request,
@AuthenticationPrincipal UserPrincipal userPrincipal
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
import fc.be.app.domain.place.exception.PlaceException;
import fc.be.app.domain.place.repository.PlaceRepository;
import fc.be.openapi.algolia.SearchEngineService;
import fc.be.openapi.google.dto.review.APIRatingResponse;
import fc.be.openapi.google.service.ReviewAPIService;
import fc.be.openapi.tourapi.TourAPIService;
import fc.be.openapi.tourapi.dto.response.bone.PlaceDTO;
Expand Down Expand Up @@ -93,11 +92,7 @@ public PlaceNearbyResponse bringNearbyPlaces(PlaceNearbyRequest placeNearbyReque
throw new PlaceException(PLACE_NOT_LOADED);
}

List<APIRatingResponse> apiRatingResponses = places.stream()
.map(place -> reviewAPIService.bringRatingCount(place.getTitle(), place.getContentTypeId()))
.toList();

return PlaceNearbyResponse.from(places).with(apiRatingResponses);
return PlaceNearbyResponse.from(places);
}

public PlacePopularGetResponse bringPopularPlaces(PlacePopularGetRequest placePopularGetRequest) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

public record PlaceInfo(
Integer placeId,
Integer contentTypeId,
String placeName,
String category,
int areaCode,
Expand All @@ -14,6 +15,7 @@ public record PlaceInfo(
public static PlaceInfo of(Place place) {
return new PlaceInfo(
place.getId(),
place.getContentTypeId().getId(),
place.getTitle(),
place.getCategory(),
place.getLocation().getAreaCode(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.authentication.WebAuthenticationDetails;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.CorsConfigurationSource;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;

import java.util.Arrays;
import java.util.List;
Expand Down Expand Up @@ -44,7 +44,7 @@ public JwtAuthenticationFilter jwtAuthenticationFilter(JwtAuthenticationProvider

@Bean
@Profile("prod")
public CorsConfigurationSource prodCorsFilter() {
public CorsFilter prodCorsFilter() {
CorsConfiguration corsConfiguration = new CorsConfiguration();
corsConfiguration.setAllowCredentials(true);
corsConfiguration.setAllowedOrigins(corsProperties.getAllowedOrigins());
Expand All @@ -53,12 +53,12 @@ public CorsConfigurationSource prodCorsFilter() {
Arrays.asList("GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS"));
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", corsConfiguration);
return source;
return new CorsFilter(source);
}

@Bean
@Profile(value = {"default", "dev"})
public CorsConfigurationSource developCorsFilter() {
public CorsFilter developCorsFilter() {
CorsConfiguration corsConfiguration = new CorsConfiguration();
corsConfiguration.setAllowCredentials(true);
corsConfiguration.setAllowedOrigins(corsProperties.getAllowedOrigins());
Expand All @@ -67,6 +67,6 @@ public CorsConfigurationSource developCorsFilter() {
corsConfiguration.addExposedHeader("*");
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", corsConfiguration);
return source;
return new CorsFilter(source);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,6 @@ protected void onSuccessfulAuthentication(HttpServletRequest request, HttpServle
TokenPair newTokenPair = (TokenPair) jwtAuthToken.getCredentials();
if (newTokenPair.isRegenerated()) {
CookieUtil.addCookie(response, tokenProperties.getAccessTokenName(), newTokenPair.accessToken(), Integer.parseInt(tokenProperties.getAccessTokenCookieExpireTime()));
CookieUtil.addCookieForLocal(response, tokenProperties.getAccessTokenName(), newTokenPair.accessToken(), Integer.parseInt(tokenProperties.getAccessTokenCookieExpireTime()));
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,14 +50,11 @@ public void onAuthenticationSuccess(HttpServletRequest request, HttpServletRespo
throw new InternalAuthenticationServiceException(ex.getMessage(), ex);
}
CookieUtil.addCookie(response, tokenProperties.getAccessTokenName(), accessToken, Integer.parseInt(tokenProperties.getAccessTokenCookieExpireTime()));
CookieUtil.addCookieForLocal(response, tokenProperties.getAccessTokenName(), accessToken, Integer.parseInt(tokenProperties.getAccessTokenCookieExpireTime()));

String refreshToken = refreshTokenService.refresh(accessToken, principal, (AuthenticationDetails) loginAuthentication.getDetails());
CookieUtil.addCookie(response, tokenProperties.getRefreshTokenName(), refreshToken, Integer.parseInt(tokenProperties.getRefreshTokenCookieExpireTime()));
CookieUtil.addCookieForLocal(response, tokenProperties.getRefreshTokenName(), refreshToken, Integer.parseInt(tokenProperties.getRefreshTokenCookieExpireTime()));

CookieUtil.addSessionCookie(response, "isLogin", "true");
CookieUtil.addSessionCookieForLocal(response, "isLogin", "true");

response.setStatus(HttpStatus.OK.value());
response.setContentType(MediaType.APPLICATION_JSON_VALUE);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,14 +73,11 @@ public void onAuthenticationSuccess(HttpServletRequest request, HttpServletRespo
throw new InternalAuthenticationServiceException(ex.getMessage(), ex);
}
CookieUtil.addCookie(response, tokenProperties.getAccessTokenName(), accessToken, Integer.parseInt(tokenProperties.getAccessTokenExpireTime()));
CookieUtil.addCookieForLocal(response, tokenProperties.getAccessTokenName(), accessToken, Integer.parseInt(tokenProperties.getAccessTokenExpireTime()));

String refreshToken = refreshTokenService.refresh(accessToken, userPrincipal, (AuthenticationDetails) oauth2Authentication.getDetails());
CookieUtil.addCookie(response, tokenProperties.getRefreshTokenName(), refreshToken, Integer.parseInt(tokenProperties.getRefreshTokenCookieExpireTime()));
CookieUtil.addCookieForLocal(response, tokenProperties.getRefreshTokenName(), refreshToken, Integer.parseInt(tokenProperties.getRefreshTokenCookieExpireTime()));

CookieUtil.addSessionCookie(response, "isLogin", "true");
CookieUtil.addSessionCookieForLocal(response, "isLogin", "true");

response.sendRedirect("https://tripvote.site");
}
Expand Down
Loading