Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[#111] Fix: hide secretKey in JwtService #122

Merged
merged 5 commits into from
Jun 9, 2024
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
71 changes: 51 additions & 20 deletions src/main/java/com/syncd/adapter/in/web/AdminController.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.syncd.adapter.in.web;

import com.syncd.application.port.in.admin.LoginAdminUsecase.*;
import com.syncd.application.port.in.admin.CreateAdminUsecase.*;
import com.syncd.application.port.in.admin.CreateProjectAdminUsecase.*;
import com.syncd.application.port.in.admin.DeleteProjectAdminUsecase.*;
import com.syncd.application.port.in.admin.UpdateProjectAdminUsecase.*;
Expand All @@ -12,13 +14,17 @@
import com.syncd.application.port.in.admin.GetAllUserAdminUsecase.*;
import com.syncd.application.port.in.admin.GetChatgptPriceAdminUsecase.*;
import com.syncd.application.port.in.admin.UpdateUserAdminUsecase.*;
import com.syncd.application.service.JwtService;
import jakarta.servlet.http.HttpServletRequest;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

@RestController
@RequiredArgsConstructor
@RequestMapping("/admin")
public class AdminController {
private final LoginAdminUsecase loginAdminUsecase;
private final CreateAdminUsecase createAdminUsecase;
private final GetAllUserAdminUsecase getAllUserAdminUsecase;
private final CreateUserAdminUsecase createUserAdminUsecase;
private final CreateProjectAdminUsecase createProjectAdminUsecase;
Expand All @@ -30,65 +36,88 @@ public class AdminController {
private final DeleteUserAdminUsecase deleteUserAdminUsecase;
private final SearchUserAdminUsecase searchUserAdminUsecase;
private final SearchProjectAdminUsecase searchProjectAdminUsecase;
private final JwtService jwtService;
// ======================================
// USER
// ======================================

@PostMapping("/login")
public LoginResponseDto login(@RequestBody LoginRequestDto requestDto) {
return loginAdminUsecase.login(requestDto.email(), requestDto.password());
}

@PostMapping("/create")
public CreateAdminResponseDto createAdmin(@RequestBody CreateAdminRequestDto requestDto) {
return createAdminUsecase.createAdmin(requestDto.email(), requestDto.password(), requestDto.name());
}

@GetMapping("/user")
public GetAllUserResponseDto getAllUser(){
return getAllUserAdminUsecase.getAllUser();
public GetAllUserResponseDto getAllUser(HttpServletRequest request){
String token = jwtService.resolveToken(request);
return getAllUserAdminUsecase.getAllUser(jwtService.getAdminIdFromToken(token));
}

@PostMapping("/user/add")
public CreateUserResponseDto addUser(@RequestBody CreateUserRequestDto requestDto){
return createUserAdminUsecase.addUser(requestDto.email(),
public CreateUserResponseDto addUser(HttpServletRequest request, @RequestBody CreateUserRequestDto requestDto){
String token = jwtService.resolveToken(request);
return createUserAdminUsecase.addUser(
jwtService.getAdminIdFromToken(token), requestDto.email(),
requestDto.name(), requestDto.status(),
requestDto.profileImg(), requestDto.projectIds());
}

@PostMapping("/user/delete")
public DeleteUserResponseDto deleteUser(@RequestBody DeleteUserRequestDto requestDto){
return deleteUserAdminUsecase.deleteUser(requestDto.userId());
public DeleteUserResponseDto deleteUser(HttpServletRequest request, @RequestBody DeleteUserRequestDto requestDto){
String token = jwtService.resolveToken(request);
return deleteUserAdminUsecase.deleteUser(jwtService.getAdminIdFromToken(token), requestDto.userId());
}

@PostMapping("/user/update")
public UpdateUserResponseDto updateUser(@RequestBody UpdateUserRequestDto requestDto){
return updateUserAdminUsecase.updateUser(requestDto.userId(), requestDto.email(),requestDto.name(), requestDto.status(), requestDto.profileImg(), requestDto.projectIds());
public UpdateUserResponseDto updateUser(HttpServletRequest request, @RequestBody UpdateUserRequestDto requestDto){
String token = jwtService.resolveToken(request);
return updateUserAdminUsecase.updateUser(jwtService.getAdminIdFromToken(token), requestDto.userId(), requestDto.email(),requestDto.name(), requestDto.status(), requestDto.profileImg(), requestDto.projectIds());
}

@GetMapping("/user/search")
public SearchUserAdminResponseDto searchUsers(
HttpServletRequest request,
@RequestParam(required = false) String status,
@RequestParam(required = false) String searchType,
@RequestParam(required = false) String searchText) {
return searchUserAdminUsecase.searchUsers(status, searchType, searchText);
String token = jwtService.resolveToken(request);
return searchUserAdminUsecase.searchUsers(jwtService.getAdminIdFromToken(token), status, searchType, searchText);
}
// ======================================
// PROJECT
// ======================================

@GetMapping("/project")
public GetAllProjectResponseDto getAllProject(){
return getAllProjectAdminUsecase.getAllProject();
public GetAllProjectResponseDto getAllProject(HttpServletRequest request){
String token = jwtService.resolveToken(request);
return getAllProjectAdminUsecase.getAllProject(jwtService.getAdminIdFromToken(token));
}

@PostMapping("/project/create")
public CreateProjectAdminResponseDto createProject(@RequestBody CreateProjectAdminRequestDto requestDto){
return createProjectAdminUsecase.createProject(requestDto.name(), requestDto.description(), requestDto.img(), requestDto.users(), requestDto.progress(),requestDto.leftChanceForUserstory());
public CreateProjectAdminResponseDto createProject(HttpServletRequest request, @RequestBody CreateProjectAdminRequestDto requestDto){
String token = jwtService.resolveToken(request);
return createProjectAdminUsecase.createProject(jwtService.getAdminIdFromToken(token), requestDto.name(), requestDto.description(), requestDto.img(), requestDto.users(), requestDto.progress(),requestDto.leftChanceForUserstory());
}

@PostMapping("/project/delete")
public DeleteProjectAdminResponseDto deleteProject(@RequestBody DeleteProjectAdminRequestDto requestDto){
return deleteProjectAdminUsecase.deleteProject(requestDto.projectId());
public DeleteProjectAdminResponseDto deleteProject(HttpServletRequest request, @RequestBody DeleteProjectAdminRequestDto requestDto){
String token = jwtService.resolveToken(request);
return deleteProjectAdminUsecase.deleteProject(jwtService.getAdminIdFromToken(token), requestDto.projectId());
}

@PostMapping("/project/update")
public UpdateProjectAdminResponseDto updateProject(@RequestBody UpdateProjectAdminRequestDto requestDto){
return updateProjectAdminUsecase.updateProject(requestDto.projectId(), requestDto.name(), requestDto.description(),requestDto.img(),requestDto.users(),requestDto.progress(),requestDto.leftChanceForUserstory()) ;
public UpdateProjectAdminResponseDto updateProject(HttpServletRequest request, @RequestBody UpdateProjectAdminRequestDto requestDto){
String token = jwtService.resolveToken(request);
return updateProjectAdminUsecase.updateProject(jwtService.getAdminIdFromToken(token), requestDto.projectId(), requestDto.name(), requestDto.description(),requestDto.img(),requestDto.users(),requestDto.progress(),requestDto.leftChanceForUserstory()) ;
}

@GetMapping("/project/search")
public SearchProjectAdminResponseDto searchProjects(
HttpServletRequest request,
@RequestParam(required = false) String name,
@RequestParam(required = false) String userId,
@RequestParam(required = false) Integer leftChanceForUserstory,
Expand All @@ -98,14 +127,16 @@ public SearchProjectAdminResponseDto searchProjects(
@RequestParam(defaultValue = "1") int page,
@RequestParam(defaultValue = "10") int pageSize
) {
return searchProjectAdminUsecase.searchProjects(name, userId, leftChanceForUserstory, startDate, endDate, progress, page, pageSize);
String token = jwtService.resolveToken(request);
return searchProjectAdminUsecase.searchProjects(jwtService.getAdminIdFromToken(token), name, userId, leftChanceForUserstory, startDate, endDate, progress, page, pageSize);
}

// ======================================
// CHATGPT
// ======================================
@GetMapping("/chatgpt")
public GetChatgptPriceResponseDto GetChatgptPrice(){
return getChatgptPriceAdminUsecase.getChatgptPrice();
public GetChatgptPriceResponseDto GetChatgptPrice(HttpServletRequest request){
String token = jwtService.resolveToken(request);
return getChatgptPriceAdminUsecase.getChatgptPrice(jwtService.getAdminIdFromToken(token));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.syncd.application.port.in.admin;

public interface CreateAdminUsecase {

// ======================================
// METHOD
// ======================================
CreateAdminResponseDto createAdmin(String email, String password, String name);

// ======================================
// DTO
// ======================================
record CreateAdminRequestDto(
String email,
String password,
String name
) {}


record CreateAdminResponseDto(
String id
) {}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.syncd.application.port.in.admin;

import com.syncd.enums.Role;
import com.syncd.exceptions.ValidationMessages;
import jakarta.validation.constraints.NotBlank;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
Expand All @@ -9,7 +11,13 @@ public interface CreateProjectAdminUsecase {
// ======================================
// METHOD
// ======================================
CreateProjectAdminResponseDto createProject(String name, String description, String img, List<UserInProjectRequestDto> users, int progress, int leftChanceForUserstory);
CreateProjectAdminResponseDto createProject(
@NotBlank(message = ValidationMessages.ADMIN_ID_NOT_BLANK)
String adminId,
String name, String description, String img,
List<UserInProjectRequestDto> users,
int progress, int leftChanceForUserstory
);

// ======================================
// DTO
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.syncd.application.port.in.admin;

import com.syncd.enums.UserAccountStatus;
import com.syncd.exceptions.ValidationMessages;
import jakarta.validation.constraints.NotBlank;

import java.util.List;

Expand All @@ -9,7 +11,10 @@ public interface CreateUserAdminUsecase {
// ======================================
// METHOD
// ======================================
CreateUserResponseDto addUser(String email, String name, UserAccountStatus status, String profileImg, List<String> projectIds);
CreateUserResponseDto addUser(
@NotBlank(message = ValidationMessages.ADMIN_ID_NOT_BLANK)
String adminId,
String email, String name, UserAccountStatus status, String profileImg, List<String> projectIds);

// ======================================
// DTO
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,17 @@
package com.syncd.application.port.in.admin;

import com.syncd.exceptions.ValidationMessages;
import jakarta.validation.constraints.NotBlank;

public interface DeleteProjectAdminUsecase {
// ======================================
// METHOD
// ======================================
DeleteProjectAdminResponseDto deleteProject(String projectId);
DeleteProjectAdminResponseDto deleteProject(
@NotBlank(message = ValidationMessages.ADMIN_ID_NOT_BLANK)
String adminId,
String projectId
);

// ======================================
// DTO
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,18 @@
package com.syncd.application.port.in.admin;

import com.syncd.exceptions.ValidationMessages;
import jakarta.validation.constraints.NotBlank;

public interface DeleteUserAdminUsecase {

// ======================================
// METHOD
// ======================================
DeleteUserResponseDto deleteUser(String userId);
DeleteUserResponseDto deleteUser(
@NotBlank(message = ValidationMessages.ADMIN_ID_NOT_BLANK)
String adminId,
String userId
);

// ======================================
// DTO
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.syncd.application.port.in.admin;

public interface GetAdminIdFromTokenUsecase {
String getAdminIdFromToken(String token);
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.syncd.application.port.in.admin;

import com.syncd.adapter.out.persistence.repository.project.ProjectEntity;
import com.syncd.exceptions.ValidationMessages;
import jakarta.validation.constraints.NotBlank;

import java.util.List;

Expand All @@ -9,7 +11,10 @@ public interface GetAllProjectAdminUsecase {
// ======================================
// METHOD
// ======================================
GetAllProjectResponseDto getAllProject();
GetAllProjectResponseDto getAllProject(
@NotBlank(message = ValidationMessages.ADMIN_ID_NOT_BLANK)
String adminId
);

// ======================================
// DTO
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.syncd.application.port.in.admin;

import com.syncd.adapter.out.persistence.repository.user.UserEntity;
import com.syncd.exceptions.ValidationMessages;
import jakarta.validation.constraints.NotBlank;

import java.util.List;

Expand All @@ -9,7 +11,10 @@ public interface GetAllUserAdminUsecase {
// ======================================
// METHOD
// ======================================
GetAllUserResponseDto getAllUser();
GetAllUserResponseDto getAllUser(
@NotBlank(message = ValidationMessages.ADMIN_ID_NOT_BLANK)
String adminId
);


// ======================================
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,17 @@
package com.syncd.application.port.in.admin;

import com.syncd.exceptions.ValidationMessages;
import jakarta.validation.constraints.NotBlank;

public interface GetChatgptPriceAdminUsecase {

// ======================================
// METHOD
// ======================================
GetChatgptPriceResponseDto getChatgptPrice();
GetChatgptPriceResponseDto getChatgptPrice(
@NotBlank(message = ValidationMessages.ADMIN_ID_NOT_BLANK)
String adminId
);

// ======================================
// DTO
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.syncd.application.port.in.admin;

public interface LoginAdminUsecase {

// ======================================
// METHOD
// ======================================
LoginAdminUsecase.LoginResponseDto login(String email, String password);

// ======================================
// DTO
// ======================================
record LoginRequestDto(
String email,
String password
) {}


record LoginResponseDto(
String token
) {}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import com.syncd.adapter.out.persistence.repository.project.ProjectEntity;
import com.syncd.adapter.out.persistence.repository.user.UserEntity;
import com.syncd.exceptions.ValidationMessages;
import jakarta.validation.constraints.NotBlank;

import java.util.List;
import java.util.Map;
Expand All @@ -11,7 +13,12 @@ public interface SearchProjectAdminUsecase {
// ======================================
// METHOD
// ======================================
SearchProjectAdminResponseDto searchProjects(String name, String userId, Integer leftChanceForUserstory, String startDate, String endDate, Integer progress, int page, int pageSize);
SearchProjectAdminResponseDto searchProjects(
@NotBlank(message = ValidationMessages.ADMIN_ID_NOT_BLANK)
String adminId,
String name, String userId, Integer leftChanceForUserstory,
String startDate, String endDate, Integer progress, int page, int pageSize
);

// ======================================
// Search DTO
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import com.syncd.adapter.out.persistence.repository.project.ProjectEntity;
import com.syncd.adapter.out.persistence.repository.user.UserEntity;
import com.syncd.exceptions.ValidationMessages;
import jakarta.validation.constraints.NotBlank;

import java.util.List;

Expand All @@ -10,7 +12,11 @@ public interface SearchUserAdminUsecase {
// ======================================
// METHOD
// ======================================
SearchUserAdminResponseDto searchUsers(String status, String searchType, String searchText);
SearchUserAdminResponseDto searchUsers(
@NotBlank(message = ValidationMessages.ADMIN_ID_NOT_BLANK)
String adminId,
String status, String searchType, String searchText
);

// ======================================
// DTO
Expand Down
Loading