From 69dbb5ea6e46f2263efbeef4db99375f0f4fbebc Mon Sep 17 00:00:00 2001 From: Mikhail Trofimov Date: Mon, 16 Jun 2025 13:31:57 +0300 Subject: [PATCH] Added support for checking product during authorization --- .../credit_tracker/facade/SignalFacade.java | 5 +++-- .../mapper/scoring/ModelUsersMapper.java | 4 +++- .../service/scoring/AuthorizationService.java | 22 +++++++++++++++++-- .../mapper/scoring/ModelUsersMapper.xml | 6 ++--- 4 files changed, 29 insertions(+), 8 deletions(-) diff --git a/src/main/java/ru/nbch/credit_tracker/facade/SignalFacade.java b/src/main/java/ru/nbch/credit_tracker/facade/SignalFacade.java index 09fc775..81503c9 100644 --- a/src/main/java/ru/nbch/credit_tracker/facade/SignalFacade.java +++ b/src/main/java/ru/nbch/credit_tracker/facade/SignalFacade.java @@ -134,9 +134,10 @@ public class SignalFacade { try { // проверка авторизации - if (!authorizationService.hasAuthorization(monitoringRequest.getUserId(), monitoringRequest.getPassword())) { + AuthorizationService.AuthResult authResult = authorizationService.findAuthInfo(monitoringRequest.getUserId(), monitoringRequest.getPassword()); + if (!authResult.isSuccess()) { signalService.rejectPackage(monitoringRequest); - return getBadResponse(SignalError.ERROR_005); // TODO расширить с возвращением отсутствия продукта + return getBadResponse(authResult.getError()); } // проверка на уникальность пакета diff --git a/src/main/java/ru/nbch/credit_tracker/mapper/scoring/ModelUsersMapper.java b/src/main/java/ru/nbch/credit_tracker/mapper/scoring/ModelUsersMapper.java index 70f78dc..269b4b5 100644 --- a/src/main/java/ru/nbch/credit_tracker/mapper/scoring/ModelUsersMapper.java +++ b/src/main/java/ru/nbch/credit_tracker/mapper/scoring/ModelUsersMapper.java @@ -3,9 +3,11 @@ package ru.nbch.credit_tracker.mapper.scoring; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import java.util.List; + @Mapper public interface ModelUsersMapper { - boolean hasAuthorization(@Param("userId") String userId, @Param("password") String password, @Param("productCode") String productCode); + List findUserProductCodes(@Param("userId") String userId, @Param("password") String password); } diff --git a/src/main/java/ru/nbch/credit_tracker/service/scoring/AuthorizationService.java b/src/main/java/ru/nbch/credit_tracker/service/scoring/AuthorizationService.java index 67e1736..3ae2744 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/scoring/AuthorizationService.java +++ b/src/main/java/ru/nbch/credit_tracker/service/scoring/AuthorizationService.java @@ -1,10 +1,14 @@ package ru.nbch.credit_tracker.service.scoring; import jakarta.xml.bind.DatatypeConverter; +import lombok.AllArgsConstructor; +import lombok.Getter; import org.springframework.stereotype.Service; +import ru.nbch.credit_tracker.enums.SignalError; import ru.nbch.credit_tracker.mapper.scoring.ModelUsersMapper; import java.security.MessageDigest; +import java.util.List; @Service public class AuthorizationService { @@ -17,9 +21,16 @@ public class AuthorizationService { this.mapper = mapper; } - public boolean hasAuthorization(String userId, String password) throws Exception { + public AuthResult findAuthInfo(String userId, String password) throws Exception { String hashedPassword = hashPassword(password); - return mapper.hasAuthorization(userId, hashedPassword, SGNL_CODE); + List productCodes = mapper.findUserProductCodes(userId, hashedPassword); + if (productCodes.isEmpty()) { + return new AuthResult(false, SignalError.ERROR_005); + } + if (productCodes.stream().noneMatch(productCode -> productCode.equals(SGNL_CODE))) { + return new AuthResult(false, SignalError.ERROR_006); + } + return new AuthResult(true, null); } private String hashPassword(String password) throws Exception { @@ -31,4 +42,11 @@ public class AuthorizationService { throw new Exception("Unable to hash password", e); } } + + @AllArgsConstructor + @Getter + public static class AuthResult { + private boolean success; + private SignalError error; + } } diff --git a/src/main/resources/mybatis/mapper/scoring/ModelUsersMapper.xml b/src/main/resources/mybatis/mapper/scoring/ModelUsersMapper.xml index ba09c42..fd81063 100644 --- a/src/main/resources/mybatis/mapper/scoring/ModelUsersMapper.xml +++ b/src/main/resources/mybatis/mapper/scoring/ModelUsersMapper.xml @@ -5,9 +5,9 @@ - + SELECT PRODUCT FROM XMODEL_USERS - WHERE USERNAME = #{userId} AND PASSWORD = #{password} AND PRODUCT = #{productCode} + WHERE USERNAME = #{userId} AND PASSWORD = #{password} \ No newline at end of file