From 9b028237a4d02920a444588bf9010c20d948c775 Mon Sep 17 00:00:00 2001 From: backdev-1 Date: Fri, 5 Jun 2026 22:23:49 +0700 Subject: [PATCH] add internal feign key --- .../nocopy/adminpanel/config/AppConfig.java | 9 ++ .../adminpanel/config/SecurityConfig.java | 2 + .../controller/AdminController.java | 37 +++++ .../adminpanel/handler/AdminUserHandler.java | 53 +------- .../adminpanel/handler/LoginHandler.java | 127 ++++++++++++++++++ 5 files changed, 176 insertions(+), 52 deletions(-) create mode 100644 src/main/java/ru/soune/nocopy/adminpanel/handler/LoginHandler.java diff --git a/src/main/java/ru/soune/nocopy/adminpanel/config/AppConfig.java b/src/main/java/ru/soune/nocopy/adminpanel/config/AppConfig.java index ae859c5..2c6be73 100644 --- a/src/main/java/ru/soune/nocopy/adminpanel/config/AppConfig.java +++ b/src/main/java/ru/soune/nocopy/adminpanel/config/AppConfig.java @@ -9,6 +9,7 @@ import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import org.springframework.web.filter.CorsFilter; import ru.soune.nocopy.adminpanel.handler.AdminUserHandler; import ru.soune.nocopy.adminpanel.handler.CreateAdminTemplateHandler; +import ru.soune.nocopy.adminpanel.handler.LoginHandler; import ru.soune.nocopy.adminpanel.handler.RequestHandler; import java.util.HashMap; @@ -43,4 +44,12 @@ public class AppConfig { return map; } + @Bean + public Map loginHandlers(LoginHandler loginHandler) { + Map map = new HashMap<>(); + map.put(101, loginHandler); + + return map; + } + } diff --git a/src/main/java/ru/soune/nocopy/adminpanel/config/SecurityConfig.java b/src/main/java/ru/soune/nocopy/adminpanel/config/SecurityConfig.java index e410b56..6742bb4 100644 --- a/src/main/java/ru/soune/nocopy/adminpanel/config/SecurityConfig.java +++ b/src/main/java/ru/soune/nocopy/adminpanel/config/SecurityConfig.java @@ -25,6 +25,8 @@ public class SecurityConfig { .sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) .authorizeHttpRequests(auth -> auth + .requestMatchers("/api/admin/login").permitAll() + .requestMatchers("/api/admin").permitAll() .anyRequest().authenticated() ) .addFilterBefore(jwtAuthFilter, UsernamePasswordAuthenticationFilter.class); diff --git a/src/main/java/ru/soune/nocopy/adminpanel/controller/AdminController.java b/src/main/java/ru/soune/nocopy/adminpanel/controller/AdminController.java index 65d4efe..810aeb2 100644 --- a/src/main/java/ru/soune/nocopy/adminpanel/controller/AdminController.java +++ b/src/main/java/ru/soune/nocopy/adminpanel/controller/AdminController.java @@ -25,6 +25,8 @@ public class AdminController { private final Map handlers; + private final Map loginHandlers; + private final DashBoardAppClient dashBoardAppClient; private final AdminSectionPermissionService adminSectionPermissionService; @@ -65,6 +67,41 @@ public class AdminController { } } + + @PostMapping("/login") + public ResponseEntity handleLoginRequest(@RequestBody BaseRequest request) { + log.info("Received request: msg_id={}, version={}", request.getMsgId(), request.getVersion()); + + try { + RequestHandler handler = loginHandlers.get(request.getMsgId()); + + if (handler == null) { + log.warn("No handler found for msg_id: {}", request.getMsgId()); + return ResponseEntity.ok( + BaseResponse.builder() + .msgId(request.getMsgId()) + .messageCode(MessageCode.INVALID_ACTION.getCode()) + .messageDesc("No handler for msg_id: " + request.getMsgId()) + .build() + ); + } + + BaseResponse response = handler.handle(request); + log.info("Request processed successfully: msg_id={}", request.getMsgId()); + return ResponseEntity.ok(response); + + } catch (Exception e) { + log.error("Error processing request: msg_id={}", request.getMsgId(), e); + return ResponseEntity.ok( + BaseResponse.builder() + .msgId(request.getMsgId()) + .messageCode(MessageCode.INVALID_ACTION.getCode()) + .messageDesc("Internal server error: " + e.getMessage()) + .build() + ); + } + } + @PostMapping("/info") public ResponseEntity handleInfo(@RequestBody BaseRequest request) { Long currentUserId = (Long) httpServletRequest.getAttribute("userId"); diff --git a/src/main/java/ru/soune/nocopy/adminpanel/handler/AdminUserHandler.java b/src/main/java/ru/soune/nocopy/adminpanel/handler/AdminUserHandler.java index 3e8420b..2b6c5a7 100644 --- a/src/main/java/ru/soune/nocopy/adminpanel/handler/AdminUserHandler.java +++ b/src/main/java/ru/soune/nocopy/adminpanel/handler/AdminUserHandler.java @@ -33,8 +33,6 @@ public class AdminUserHandler implements RequestHandler { private final AdminUserService adminUserService; - private final JwtUtil jwtUtil; - private final AdminSectionPermissionService permissionService; private final HttpServletRequest httpServletRequest; @@ -47,7 +45,6 @@ public class AdminUserHandler implements RequestHandler { String action = adminRequest.getAction(); return switch (action) { - case "login" -> handleLogin(request, adminRequest); case "create" -> handleCreate(request, adminRequest); case "get_all" -> handleGetAll(request, adminRequest); case "get_by_id" -> handleGetById(request, adminRequest); @@ -61,60 +58,12 @@ public class AdminUserHandler implements RequestHandler { }; } - private BaseResponse handleLogin(BaseRequest request, AdminUserRequest adminRequest) { - String email = adminRequest.getEmail(); - String password = adminRequest.getPassword(); - - boolean authenticated = adminUserService.authenticate(email, password); - - if (!authenticated) { - return BaseResponse.builder() - .msgId(request.getMsgId()) - .messageCode(MessageCode.INVALID_CREDENTIALS.getCode()) - .messageDesc(MessageCode.INVALID_CREDENTIALS.getDescription()) - .build(); - } - - try { - AdminUser admin = adminUserService.findByEmail(email); - - if (!admin.getIsActive()) { - return BaseResponse.builder() - .msgId(request.getMsgId()) - .messageCode(MessageCode.ADMIN_INACTIVE.getCode()) - .messageDesc(MessageCode.ADMIN_INACTIVE.getDescription()) - .build(); - } - - String token = jwtUtil.generateToken(admin.getEmail(), admin.getId()); - - LoginResponse loginResponse = LoginResponse.builder() - .success(true) - .token(token) - .admin(convertToResponse(admin)) - .build(); - - return BaseResponse.builder() - .msgId(request.getMsgId()) - .messageCode(MessageCode.SUCCESS.getCode()) - .messageDesc(MessageCode.SUCCESS.getDescription()) - .messageBody(loginResponse) - .build(); - } catch (AdminUserNotFoundException e) { - return BaseResponse.builder() - .msgId(request.getMsgId()) - .messageCode(MessageCode.ADMIN_NOT_FOUND.getCode()) - .messageDesc(MessageCode.ADMIN_NOT_FOUND.getDescription()) - .build(); - } - } - private BaseResponse handleCreate(BaseRequest request, AdminUserRequest adminRequest) { try { Long currentUserId = (Long) httpServletRequest.getAttribute("userId"); if (!adminSectionPermissionService.canWrite(currentUserId, - AdminSection.USERS)) { + AdminSection.STAFF)) { return BaseResponse.builder() .msgId(request.getMsgId()) .messageCode(MessageCode.PERMISSION_DENIED.getCode()) diff --git a/src/main/java/ru/soune/nocopy/adminpanel/handler/LoginHandler.java b/src/main/java/ru/soune/nocopy/adminpanel/handler/LoginHandler.java new file mode 100644 index 0000000..26a2ffa --- /dev/null +++ b/src/main/java/ru/soune/nocopy/adminpanel/handler/LoginHandler.java @@ -0,0 +1,127 @@ +package ru.soune.nocopy.adminpanel.handler; + +import com.fasterxml.jackson.databind.ObjectMapper; +import jakarta.servlet.http.HttpServletRequest; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import ru.soune.nocopy.adminpanel.dto.*; +import ru.soune.nocopy.adminpanel.entity.AdminSection; +import ru.soune.nocopy.adminpanel.entity.AdminUser; +import ru.soune.nocopy.adminpanel.exceptions.AdminUserNotFoundException; +import ru.soune.nocopy.adminpanel.permission.AdminPermission; +import ru.soune.nocopy.adminpanel.service.AdminSectionPermissionService; +import ru.soune.nocopy.adminpanel.service.AdminUserService; +import ru.soune.nocopy.adminpanel.util.JwtUtil; +import ru.soune.nocopy.adminpanel.util.MessageCode; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; + +@Component +@Slf4j +@RequiredArgsConstructor +public class LoginHandler implements RequestHandler { + private final ObjectMapper objectMapper; + + private final AdminUserService adminUserService; + + private final JwtUtil jwtUtil; + + private final AdminSectionPermissionService permissionService; + + @Override + public BaseResponse handle(BaseRequest request) { + AdminUserRequest adminRequest = objectMapper.convertValue(request.getMessageBody(), AdminUserRequest.class); + String action = adminRequest.getAction(); + + return switch (action) { + case "login" -> handleLogin(request, adminRequest); + default -> handleInvalidAction(request, action); + }; + } + + private BaseResponse handleLogin(BaseRequest request, AdminUserRequest adminRequest) { + String email = adminRequest.getEmail(); + String password = adminRequest.getPassword(); + + boolean authenticated = adminUserService.authenticate(email, password); + + if (!authenticated) { + return BaseResponse.builder() + .msgId(request.getMsgId()) + .messageCode(MessageCode.INVALID_CREDENTIALS.getCode()) + .messageDesc(MessageCode.INVALID_CREDENTIALS.getDescription()) + .build(); + } + + try { + AdminUser admin = adminUserService.findByEmail(email); + + if (!admin.getIsActive()) { + return BaseResponse.builder() + .msgId(request.getMsgId()) + .messageCode(MessageCode.ADMIN_INACTIVE.getCode()) + .messageDesc(MessageCode.ADMIN_INACTIVE.getDescription()) + .build(); + } + + String token = jwtUtil.generateToken(admin.getEmail(), admin.getId()); + + LoginResponse loginResponse = LoginResponse.builder() + .success(true) + .token(token) + .admin(convertToResponse(admin)) + .build(); + + return BaseResponse.builder() + .msgId(request.getMsgId()) + .messageCode(MessageCode.SUCCESS.getCode()) + .messageDesc(MessageCode.SUCCESS.getDescription()) + .messageBody(loginResponse) + .build(); + } catch (AdminUserNotFoundException e) { + return BaseResponse.builder() + .msgId(request.getMsgId()) + .messageCode(MessageCode.ADMIN_NOT_FOUND.getCode()) + .messageDesc(MessageCode.ADMIN_NOT_FOUND.getDescription()) + .build(); + } + } + + private AdminUserResponse convertToResponse(AdminUser admin) { + Map sectionPermissions = permissionService.getAllPermissions(admin.getId()); + + Map permissionsMap = new HashMap<>(); + sectionPermissions.forEach((section, value) -> + permissionsMap.put(section.name().toLowerCase(), value)); + + return AdminUserResponse.builder() + .id(admin.getId()) + .fullName(admin.getFullName()) + .email(admin.getEmail()) + .isActive(admin.getIsActive()) + .isSuperAdmin(AdminPermission.isSuperAdmin(admin.getPermissions())) + .createdAt(admin.getCreatedAt().toString()) + .permissions(permissionsMap) + .activePassword(admin.getIsActivePassword()) + .build(); + } + + private BaseResponse handleInvalidAction(BaseRequest request, String action) { + ActionResponse response = ActionResponse.builder() + .action(action) + .availableActions(Arrays.asList( + "login")) + .build(); + + return BaseResponse.builder() + .msgId(request.getMsgId()) + .messageCode(MessageCode.INVALID_ACTION.getCode()) + .messageDesc(MessageCode.INVALID_ACTION.getDescription()) + .messageBody(response) + .build(); + } + +}