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
19 changes: 19 additions & 0 deletions src/main/java/ssu/eatssu/domain/user/config/UserProperties.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package ssu.eatssu.domain.user.config;

import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

@Getter
@Setter
@Component
@ConfigurationProperties(prefix = "user")
public class UserProperties {

private List<String> forbiddenNicknames = new ArrayList<>();

}
14 changes: 14 additions & 0 deletions src/main/java/ssu/eatssu/domain/user/service/UserService.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import ssu.eatssu.domain.auth.entity.OAuthProvider;
import ssu.eatssu.domain.auth.security.CustomUserDetails;
import ssu.eatssu.domain.review.entity.Review;
import ssu.eatssu.domain.user.config.UserProperties;
import ssu.eatssu.domain.user.department.entity.Department;
import ssu.eatssu.domain.user.department.persistence.DepartmentRepository;
import ssu.eatssu.domain.user.dto.DepartmentResponse;
Expand All @@ -34,6 +35,7 @@ public class UserService {
private final UserRepository userRepository;
private final PasswordEncoder passwordEncoder;
private final DepartmentRepository departmentRepository;
private final UserProperties userProperties;

public User join(String email, OAuthProvider provider, String providerId) {
String credentials = createCredentials(provider, providerId);
Expand All @@ -46,6 +48,10 @@ public void updateNickname(CustomUserDetails userDetails, NicknameUpdateRequest
User user = userRepository.findById(userDetails.getId())
.orElseThrow(() -> new BaseException(NOT_FOUND_USER));

if (isForbiddenNickname(request.nickname()) || userRepository.existsByNickname(request.nickname())) {
throw new BaseException(DUPLICATE_NICKNAME);
}

user.updateNickname(request.nickname());
}

Expand All @@ -71,6 +77,9 @@ public Boolean validateDuplicatedEmail(String email) {
}

public Boolean validateDuplicatedNickname(String nickname) {
if (isForbiddenNickname(nickname)) {
return false;
}
return !userRepository.existsByNickname(nickname);
}

Expand Down Expand Up @@ -109,4 +118,9 @@ public DepartmentResponse getDepartment(CustomUserDetails userDetails) {
}
return new DepartmentResponse(department.getName());
}

private boolean isForbiddenNickname(String nickname) {
return userProperties.getForbiddenNicknames().stream()
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[문의] 이미 UserProperties에서

private List<String> forbiddenNicknames = new ArrayList<>();

이런식으로 초기화해두셔서 NPE 날 확률이 없을것 같긴한데 좀 더 NPE를 방어하는 로직이 있었으면 어떨까 하네요. 최근 스웨거로 테스트하면서 NPE때문에 500나는 경우가 왕왕 있더라구요.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

오! NPE가 무엇인지 잘 모르겠지만, 한 번 확인해서 조치를 해보겠습니다. 일단 승인을 해주셨어서, 병합을 하고 후속조치로 바로 한 번 연구를 해볼게요.

.anyMatch(forbidden -> forbidden.equalsIgnoreCase(nickname));
}
}
13 changes: 9 additions & 4 deletions src/main/resources/application.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
spring:
profiles:
# include : prod
# include : dev
include : local
# include: test
# include : prod
# include : dev
include : local
# include: test

user:
forbidden-nicknames:
- EAT-SSU
- EATSSU