diff --git a/.DS_Store b/.DS_Store
index c7e1072e..e82ca7ed 100644
Binary files a/.DS_Store and b/.DS_Store differ
diff --git a/src/.DS_Store b/src/.DS_Store
index 6ea33bf0..83a4c15f 100644
Binary files a/src/.DS_Store and b/src/.DS_Store differ
diff --git a/src/main/.DS_Store b/src/main/.DS_Store
index a55ed7e8..a068fe57 100644
Binary files a/src/main/.DS_Store and b/src/main/.DS_Store differ
diff --git a/src/main/java/.DS_Store b/src/main/java/.DS_Store
new file mode 100644
index 00000000..419e452f
Binary files /dev/null and b/src/main/java/.DS_Store differ
diff --git a/src/main/java/org/.DS_Store b/src/main/java/org/.DS_Store
new file mode 100644
index 00000000..e6675bd3
Binary files /dev/null and b/src/main/java/org/.DS_Store differ
diff --git a/src/main/java/org/ezcode/codetest/common/security/config/SecurityConfig.java b/src/main/java/org/ezcode/codetest/common/security/config/SecurityConfig.java
index c0a80af4..ff750eff 100644
--- a/src/main/java/org/ezcode/codetest/common/security/config/SecurityConfig.java
+++ b/src/main/java/org/ezcode/codetest/common/security/config/SecurityConfig.java
@@ -76,11 +76,12 @@ public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Excepti
.requestMatchers(new DispatcherTypeRequestMatcher(DispatcherType.ASYNC)).permitAll()
.requestMatchers(
SecurityPath.PUBLIC_PATH).permitAll()
+ //GET요청인 문제 목록 조회, 문제 상세 조회는 가능하게, 나머지 HTTP메서드는 인증 필요하게 설정하기
+ .requestMatchers(HttpMethod.GET, "/api/problems", "/api/problems/{problemId}").permitAll()
+ .requestMatchers("/api/problems/**").authenticated()
.requestMatchers("/api/admin/**").hasRole("ADMIN") //어드민 권한 필요 (문제 생성, 관리 등)
.requestMatchers(HttpMethod.GET,
"/api/languages",
- "/api/problems",
- "/api/problems/{problemId}",
"/api/problems/*/discussions",
"/api/problems/{problemId}/discussions/{discussionId}/replies",
"/api/problems/{problemId}/discussions/{discussionId}/replies/**").permitAll()
diff --git a/src/main/java/org/ezcode/codetest/common/security/util/SecurityPath.java b/src/main/java/org/ezcode/codetest/common/security/util/SecurityPath.java
index 0555d87d..12c018fa 100644
--- a/src/main/java/org/ezcode/codetest/common/security/util/SecurityPath.java
+++ b/src/main/java/org/ezcode/codetest/common/security/util/SecurityPath.java
@@ -17,7 +17,7 @@ public class SecurityPath {
"/actuator/**",
"/chatting",
"/submit-test/**",
- "/api/problems/**",
+ // "/api/problems/**", //문제의 HTTP 요청에 따라 다르게 처리될 수 있도록 SecurityConfig에서 설정함
"/ws/**",
"/swagger-ui/**",
"/swagger-resources/**",
diff --git a/src/main/java/org/ezcode/codetest/presentation/view/ViewController.java b/src/main/java/org/ezcode/codetest/presentation/view/ViewController.java
index db0e338d..ad697cae 100644
--- a/src/main/java/org/ezcode/codetest/presentation/view/ViewController.java
+++ b/src/main/java/org/ezcode/codetest/presentation/view/ViewController.java
@@ -20,6 +20,11 @@ public String getSigninView(){
return "test-login";
}
+ @GetMapping("/test/reset-password")
+ public String getResetPasswordView(){
+ return "test-reset-password";
+ }
+
@GetMapping("/test/submit")
public String getSubmitView() {
return "test-submit";
diff --git a/src/main/resources/static/css/test-login.css b/src/main/resources/static/css/test-login.css
index 5d3ea44e..dffb7ec8 100644
--- a/src/main/resources/static/css/test-login.css
+++ b/src/main/resources/static/css/test-login.css
@@ -210,3 +210,75 @@ body {
height: 100%;
object-fit: contain;
}
+
+.modal {
+ display: none;
+ position: fixed;
+ z-index: 1000;
+ left: 0; top: 0;
+ width: 100%; height: 100%;
+ background-color: rgba(0, 0, 0, 0.6);
+}
+
+.modal-content {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ background: #101618;
+ color: #fff;
+ width: 360px;
+ padding: 30px 20px;
+ border-radius: 12px;
+ text-align: center;
+ box-shadow: 0 0 15px rgba(0,0,0,0.5);
+ font-family: 'Gmarket Sans', sans-serif;
+}
+
+
+.modal-content h3 {
+ margin-bottom: 10px;
+ font-weight: 500;
+ font-size: 20px;
+}
+
+.modal-content p {
+ font-size: 14px;
+ margin-bottom: 20px;
+ color: #bbb;
+}
+
+.modal-content input {
+ width: 90%;
+ padding: 12px;
+ border-radius: 8px;
+ border: none;
+ margin-bottom: 20px;
+ background: #1e2a2f;
+ color: #fff;
+ font-size: 14px;
+}
+
+.modal-buttons button {
+ padding: 10px 20px;
+ border: none;
+ margin: 0 8px;
+ border-radius: 8px;
+ font-weight: 600;
+ cursor: pointer;
+ transition: all 0.2s ease-in-out;
+}
+
+.modal-buttons button:first-child {
+ background-color: #555;
+ color: #fff;
+}
+
+.modal-buttons button:last-child {
+ background-color: #00c776;
+ color: #fff;
+}
+
+.modal-buttons button:hover {
+ opacity: 0.9;
+}
diff --git a/src/main/resources/static/images/lock-icon.png b/src/main/resources/static/images/lock-icon.png
new file mode 100644
index 00000000..3583017e
Binary files /dev/null and b/src/main/resources/static/images/lock-icon.png differ
diff --git a/src/main/resources/static/js/test-mypage.js b/src/main/resources/static/js/test-mypage.js
index 2e499905..5f5e0d36 100644
--- a/src/main/resources/static/js/test-mypage.js
+++ b/src/main/resources/static/js/test-mypage.js
@@ -56,7 +56,7 @@ function fetchUserData() {
const user = res.result;
// 2. 받아온 정보로 화면 반영
document.getElementById('nickname').textContent = user.nickname || '';
- document.getElementById('profileImage').src = user.profileImageUrl || '/images/logo.png';
+ // document.getElementById('profileImage').src = user.profileImageUrl || '/images/logo.png';
document.getElementById('userId').textContent = user.username || '';
document.getElementById('email').textContent = user.email || '';
document.getElementById('tier').textContent = user.tier || '';
diff --git a/src/main/resources/templates/test-mypage.html b/src/main/resources/templates/test-mypage.html
index 62c7d75a..9c7f480d 100644
--- a/src/main/resources/templates/test-mypage.html
+++ b/src/main/resources/templates/test-mypage.html
@@ -27,7 +27,7 @@
+
새로운 비밀번호를 입력해주세요.
+ +