add internal feign key

This commit is contained in:
2026-06-05 22:23:49 +07:00
parent 690bc0fcf0
commit 9b028237a4
5 changed files with 176 additions and 52 deletions
@@ -9,6 +9,7 @@ import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter; import org.springframework.web.filter.CorsFilter;
import ru.soune.nocopy.adminpanel.handler.AdminUserHandler; import ru.soune.nocopy.adminpanel.handler.AdminUserHandler;
import ru.soune.nocopy.adminpanel.handler.CreateAdminTemplateHandler; import ru.soune.nocopy.adminpanel.handler.CreateAdminTemplateHandler;
import ru.soune.nocopy.adminpanel.handler.LoginHandler;
import ru.soune.nocopy.adminpanel.handler.RequestHandler; import ru.soune.nocopy.adminpanel.handler.RequestHandler;
import java.util.HashMap; import java.util.HashMap;
@@ -43,4 +44,12 @@ public class AppConfig {
return map; return map;
} }
@Bean
public Map<Integer, RequestHandler> loginHandlers(LoginHandler loginHandler) {
Map<Integer, RequestHandler> map = new HashMap<>();
map.put(101, loginHandler);
return map;
}
} }
@@ -25,6 +25,8 @@ public class SecurityConfig {
.sessionManagement(session -> .sessionManagement(session ->
session.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
.authorizeHttpRequests(auth -> auth .authorizeHttpRequests(auth -> auth
.requestMatchers("/api/admin/login").permitAll()
.requestMatchers("/api/admin").permitAll()
.anyRequest().authenticated() .anyRequest().authenticated()
) )
.addFilterBefore(jwtAuthFilter, UsernamePasswordAuthenticationFilter.class); .addFilterBefore(jwtAuthFilter, UsernamePasswordAuthenticationFilter.class);
@@ -25,6 +25,8 @@ public class AdminController {
private final Map<Integer, RequestHandler> handlers; private final Map<Integer, RequestHandler> handlers;
private final Map<Integer, RequestHandler> loginHandlers;
private final DashBoardAppClient dashBoardAppClient; private final DashBoardAppClient dashBoardAppClient;
private final AdminSectionPermissionService adminSectionPermissionService; private final AdminSectionPermissionService adminSectionPermissionService;
@@ -65,6 +67,41 @@ public class AdminController {
} }
} }
@PostMapping("/login")
public ResponseEntity<BaseResponse> 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") @PostMapping("/info")
public ResponseEntity<BaseResponse> handleInfo(@RequestBody BaseRequest request) { public ResponseEntity<BaseResponse> handleInfo(@RequestBody BaseRequest request) {
Long currentUserId = (Long) httpServletRequest.getAttribute("userId"); Long currentUserId = (Long) httpServletRequest.getAttribute("userId");
@@ -33,8 +33,6 @@ public class AdminUserHandler implements RequestHandler {
private final AdminUserService adminUserService; private final AdminUserService adminUserService;
private final JwtUtil jwtUtil;
private final AdminSectionPermissionService permissionService; private final AdminSectionPermissionService permissionService;
private final HttpServletRequest httpServletRequest; private final HttpServletRequest httpServletRequest;
@@ -47,7 +45,6 @@ public class AdminUserHandler implements RequestHandler {
String action = adminRequest.getAction(); String action = adminRequest.getAction();
return switch (action) { return switch (action) {
case "login" -> handleLogin(request, adminRequest);
case "create" -> handleCreate(request, adminRequest); case "create" -> handleCreate(request, adminRequest);
case "get_all" -> handleGetAll(request, adminRequest); case "get_all" -> handleGetAll(request, adminRequest);
case "get_by_id" -> handleGetById(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) { private BaseResponse handleCreate(BaseRequest request, AdminUserRequest adminRequest) {
try { try {
Long currentUserId = (Long) httpServletRequest.getAttribute("userId"); Long currentUserId = (Long) httpServletRequest.getAttribute("userId");
if (!adminSectionPermissionService.canWrite(currentUserId, if (!adminSectionPermissionService.canWrite(currentUserId,
AdminSection.USERS)) { AdminSection.STAFF)) {
return BaseResponse.builder() return BaseResponse.builder()
.msgId(request.getMsgId()) .msgId(request.getMsgId())
.messageCode(MessageCode.PERMISSION_DENIED.getCode()) .messageCode(MessageCode.PERMISSION_DENIED.getCode())
@@ -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<AdminSection, Integer> sectionPermissions = permissionService.getAllPermissions(admin.getId());
Map<String, Integer> 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();
}
}