Merge branch 'master' into hotfix/1.9.2

This commit is contained in:
Zaripov Emil 2024-11-19 09:11:16 +03:00
commit 2807482ff6
6 changed files with 398 additions and 27 deletions

View file

@ -4,15 +4,15 @@ import com.google.protobuf.InvalidProtocolBufferException;
import org.apache.kafka.common.utils.Bytes;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import ru.micord.ervu.converter.SummonsResponseDataConverter;
import ru.micord.ervu.dto.SubpoenaRequestDto;
import ru.micord.ervu.dto.SubpoenaResponseDto;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import proto.ervu.rp.summons.SummonsResponseData;
import ru.micord.ervu.kafka.service.ReplyingKafkaService;
import ru.micord.ervu.security.webbpm.jwt.service.JwtTokenService;
import ru.micord.ervu.security.webbpm.jwt.util.SecurityUtil;
/**
* @author gulnaz
@ -20,7 +20,6 @@ import ru.micord.ervu.security.webbpm.jwt.service.JwtTokenService;
@RestController
public class ErvuDataController {
private final JwtTokenService jwtTokenService;
private final ReplyingKafkaService<Object, Bytes> replyingKafkaService;
private final SummonsResponseDataConverter converter;
@ -30,20 +29,23 @@ public class ErvuDataController {
private String recruitReplyTopic;
public ErvuDataController(
JwtTokenService jwtTokenService,
@Qualifier("recruit") ReplyingKafkaService<Object, Bytes> replyingKafkaService,
SummonsResponseDataConverter converter) {
this.jwtTokenService = jwtTokenService;
this.replyingKafkaService = replyingKafkaService;
this.converter = converter;
}
@PostMapping(
value = "/get-data",
@GetMapping(
value = "/recruit",
produces = MediaType.APPLICATION_JSON_VALUE
)
public SubpoenaResponseDto getData() {
SubpoenaRequestDto subpoenaRequestDto = new SubpoenaRequestDto(jwtTokenService.getErvuId());
String ervuId = SecurityUtil.getErvuId();
if (ervuId == null) {
return new SubpoenaResponseDto.Builder().build();
}
SubpoenaRequestDto subpoenaRequestDto = new SubpoenaRequestDto(ervuId);
byte[] reply = replyingKafkaService.sendMessageAndGetReply(recruitRequestTopic,
recruitReplyTopic, subpoenaRequestDto).get();

View file

@ -18,7 +18,7 @@ import rtl.pgs.ervu.proto.ExtractRegistry;
import rtl.pgs.ervu.proto.ResponseData;
import ru.micord.ervu.dto.ExtractRequestDto;
import ru.micord.ervu.kafka.service.ReplyingKafkaService;
import ru.micord.ervu.security.webbpm.jwt.service.JwtTokenService;
import ru.micord.ervu.security.webbpm.jwt.util.SecurityUtil;
/**
* @author gulnaz
@ -26,7 +26,6 @@ import ru.micord.ervu.security.webbpm.jwt.service.JwtTokenService;
@RestController
public class ExtractController {
private final JwtTokenService jwtTokenService;
private final ReplyingKafkaService<Object, Bytes> replyingKafkaService;
@Value("${ervu.kafka.registry.extract.request.topic}")
@ -34,15 +33,18 @@ public class ExtractController {
@Value("${ervu.kafka.registry.extract.reply.topic}")
private String registryExtractReplyTopic;
public ExtractController(JwtTokenService jwtTokenService,
ReplyingKafkaService<Object, Bytes> replyingKafkaService) {
this.jwtTokenService = jwtTokenService;
public ExtractController(ReplyingKafkaService<Object, Bytes> replyingKafkaService) {
this.replyingKafkaService = replyingKafkaService;
}
@GetMapping(value = "/extract/{formatRegistry}")
public ResponseEntity<Resource> getExtract(@PathVariable String formatRegistry) {
ExtractRequestDto request = new ExtractRequestDto(jwtTokenService.getErvuId(), formatRegistry);
String ervuId = SecurityUtil.getErvuId();
if (ervuId == null) {
return ResponseEntity.noContent().build();
}
ExtractRequestDto request = new ExtractRequestDto(ervuId, formatRegistry);
byte[] reply = replyingKafkaService.sendMessageAndGetReply(registryExtractRequestTopic,
registryExtractReplyTopic, request).get();

View file

@ -11,7 +11,6 @@ import java.nio.charset.StandardCharsets;
import java.time.Duration;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Base64;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.UUID;
@ -26,6 +25,7 @@ import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.context.SecurityContext;
import ru.micord.ervu.kafka.model.Document;
import ru.micord.ervu.kafka.model.ErrorData;
import ru.micord.ervu.kafka.model.Person;
import ru.micord.ervu.kafka.model.Response;
import ru.micord.ervu.kafka.service.ReplyingKafkaService;
@ -50,6 +50,7 @@ import ru.micord.ervu.security.webbpm.jwt.model.Token;
*/
@Service
public class EsiaAuthService {
@Autowired
private ObjectMapper objectMapper;
@ -220,12 +221,6 @@ public class EsiaAuthService {
SecurityContextHolder.setContext(context);
Cookie authMarkerCookie = securityHelper.createAuthMarkerCookie("true", expiry);
response.addCookie(authMarkerCookie);
if (ervuIdResponse.getErrorData() != null) {
return new ResponseEntity<>(
"Доступ запрещен. " + ervuIdResponse.getErrorData().getName(),
HttpStatus.FORBIDDEN
);
}
return ResponseEntity.ok("Authentication successful");
}
catch (Exception e) {

View file

@ -2,12 +2,15 @@ package ru.micord.ervu.security.webbpm.jwt.util;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.Optional;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.util.WebUtils;
import ru.micord.ervu.security.webbpm.jwt.JwtAuthentication;
import static org.springframework.web.context.request.RequestAttributes.REFERENCE_REQUEST;
@ -42,4 +45,14 @@ public final class SecurityUtil {
Cookie cookie = WebUtils.getCookie(httpRequest, AUTH_TOKEN);
return cookie != null ? cookie.getValue() : null;
}
public static String getErvuId() {
return Optional.ofNullable(SecurityContextHolder.getContext().getAuthentication())
.map(a -> ((JwtAuthentication) a).getUserAccountId())
.map(userAccountId -> {
String ervuId = userAccountId.split(":")[1];
return "null".equals(ervuId) ? null : ervuId;
})
.orElse(null);
}
}

View file

@ -11,8 +11,7 @@ export class ErvuDataService {
}
public getData(): any {
this.httpClient
.post("get-data", null,
this.httpClient.get("recruit",
{
headers: {
"Content-type": "application/json"

View file

@ -233,7 +233,6 @@
<componentRootId>74ed6920-6d22-4349-a08e-a28ccc88f7df</componentRootId>
<name>LoadForm - hidden</name>
<container>true</container>
<expanded>false</expanded>
<childrenReordered>false</childrenReordered>
<scripts id="9ad247a3-9c46-4f12-9949-b1c905bd73bc"/>
<scripts id="79188cdc-d646-433e-9751-1482b9247ee6"/>
@ -430,6 +429,58 @@
<value>
<simple>"firstRestrictionName"</simple>
</value>
</entry>
</properties>
</scripts>
</children>
<children id="8ef93ac5-46d8-456e-950f-2d2949d21a53">
<prototypeId>ba24d307-0b91-4299-ba82-9d0b52384ff2</prototypeId>
<componentRootId>8ef93ac5-46d8-456e-950f-2d2949d21a53</componentRootId>
<name>personName</name>
<container>false</container>
<childrenReordered>false</childrenReordered>
<scripts id="cf4526a1-96ab-4820-8aa9-62fb54c2b64c">
<properties>
<entry>
<key>collectible</key>
<value>
<simple>false</simple>
</value>
</entry>
<entry>
<key>visible</key>
<value>
<simple>false</simple>
</value>
</entry>
</properties>
</scripts>
<scripts id="737b67e2-295f-4356-a1e1-9419344d8c85"/>
<scripts id="a6ccccd9-354c-4725-9d34-c716cf626048"/>
<scripts id="d38c1af5-2bfe-41cd-ab0f-67040f498127"/>
<scripts id="f203f156-be32-4131-9c86-4d6bac6d5d56">
<enabled>false</enabled>
</scripts>
<scripts id="cf618c30-be12-4d61-9f4b-ca80cd2acd66">
<classRef type="TS">
<className>PersonData</className>
<packageName>esia</packageName>
</classRef>
<expanded>true</expanded>
</scripts>
<scripts id="4640e331-f218-4873-b1aa-496f63246ce2">
<classRef type="JAVA">
<className>SubpoenaFieldLoadComponent</className>
<packageName>ru.micord.ervu.component.field</packageName>
</classRef>
<enabled>true</enabled>
<expanded>true</expanded>
<properties>
<entry>
<key>fieldId</key>
<value>
<simple>"personName"</simple>
</value>
</entry>
</properties>
</scripts>
@ -754,6 +805,7 @@
<componentRootId>54755bcb-801b-450d-aa2e-046e2a405538</componentRootId>
<name>VB - 1.1.1.1 (на ? дату нет сформированных повесток) сценарий</name>
<container>true</container>
<expanded>false</expanded>
<childrenReordered>false</childrenReordered>
<scripts id="bf098f19-480e-44e4-9084-aa42955c4d0f">
<properties>
@ -1801,7 +1853,7 @@
<entry>
<key>formatRegistry</key>
<value>
<simple>"1"</simple>
<simple>"2"</simple>
</value>
</entry>
</properties>
@ -1956,6 +2008,7 @@
<componentRootId>26f019a0-e782-4632-a5f7-e69e7232542f</componentRootId>
<name>HB заголовок - 1.1.2.1 </name>
<container>true</container>
<expanded>false</expanded>
<childrenReordered>false</childrenReordered>
<scripts id="bf098f19-480e-44e4-9084-aa42955c4d0f">
<properties>
@ -2890,7 +2943,6 @@
<componentRootId>6c08c71d-52eb-4a94-b4e1-475c315f253f</componentRootId>
<name>LoadForm</name>
<container>true</container>
<expanded>false</expanded>
<childrenReordered>false</childrenReordered>
<scripts id="9ad247a3-9c46-4f12-9949-b1c905bd73bc"/>
<scripts id="79188cdc-d646-433e-9751-1482b9247ee6"/>
@ -4938,7 +4990,7 @@
<entry>
<key>formatRegistry</key>
<value>
<simple>"2"</simple>
<simple>"1"</simple>
</value>
</entry>
</properties>
@ -5999,6 +6051,7 @@
<componentRootId>dbe60a18-ce7a-4423-9e5e-816edb7b0b4f</componentRootId>
<name>VB - 1.2</name>
<container>true</container>
<expanded>false</expanded>
<childrenReordered>false</childrenReordered>
<scripts id="bf098f19-480e-44e4-9084-aa42955c4d0f">
<properties>
@ -6973,6 +7026,312 @@
</value>
</entry>
</complex>
</value>
</item>
</value>
</entry>
</properties>
</scripts>
</children>
<children id="315c5087-825a-4ade-99d9-7dbe09f87226">
<prototypeId>98594cec-0a9b-4cef-af09-e1b71cb2ad9e</prototypeId>
<componentRootId>315c5087-825a-4ade-99d9-7dbe09f87226</componentRootId>
<name>AC - для ненайденного пользователя в ерву</name>
<container>false</container>
<childrenReordered>false</childrenReordered>
<scripts id="37dff5c8-1599-4984-b107-c44a87b6da2e">
<properties>
<entry>
<key>elseActions</key>
<value>
<item id="15082312-b39c-473a-b08a-f0690c5d37d2" removed="true"/>
</value>
</entry>
<entry>
<key>eventRefs</key>
<value>
<item id="ca97a9f3-5f25-4f75-b4a0-c98aac1b1e57" removed="false">
<value>
<complex>
<entry>
<key>behavior</key>
<value>
<simple>{"objectId":"8ef93ac5-46d8-456e-950f-2d2949d21a53","packageName":"component","className":"Text","type":"TS"}</simple>
</value>
</entry>
<entry>
<key>propertyName</key>
<value>
<simple>"valueChangeEvent"</simple>
</value>
</entry>
</complex>
</value>
</item>
</value>
</entry>
<entry>
<key>ifCondition</key>
<value>
<complex>
<entry>
<key>conditions</key>
<value>
<item id="ff5d074b-77d4-48c6-a7c4-3ca7e585d8c9" removed="false">
<value>
<complex>
<entry>
<key>_isGroupSelected</key>
<value>
<simple>false</simple>
</value>
</entry>
<entry>
<key>one</key>
<value>
<complex>
<entry>
<key>conditionFirstPart</key>
<value>
<complex>
<entry>
<key>objectValue</key>
<value>
<complex>
<entry>
<key>behavior</key>
<value>
<simple>{"objectId":"8ef93ac5-46d8-456e-950f-2d2949d21a53","packageName":"component","className":"Text","type":"TS"}</simple>
</value>
</entry>
<entry>
<key>method</key>
<value>
<simple>"getValue"</simple>
</value>
</entry>
</complex>
</value>
</entry>
</complex>
</value>
</entry>
<entry>
<key>conditionSecondPart</key>
<value>
<complex>
<entry>
<key>staticValue</key>
<value>
<implRef type="TS">
<className>string</className>
<packageName></packageName>
</implRef>
<simple>"null"</simple>
</value>
</entry>
</complex>
</value>
</entry>
<entry>
<key>operation</key>
<value>
<simple>"IS_EMPTY"</simple>
</value>
</entry>
</complex>
</value>
</entry>
</complex>
</value>
</item>
</value>
</entry>
<entry>
<key>logicalOperation</key>
<value>
<simple>null</simple>
</value>
</entry>
</complex>
</value>
</entry>
<entry>
<key>thenActions</key>
<value>
<item id="7654b087-130d-4441-9acf-cdd831c65374" removed="false">
<value>
<complex>
<entry>
<key>behavior</key>
<value>
<simple>{"objectId":"cfb60860-1b04-4eb5-9ccf-1e6436c27b09","packageName":"component.button","className":"Button","type":"TS"}</simple>
</value>
</entry>
<entry>
<key>method</key>
<value>
<simple>"setVisible"</simple>
</value>
</entry>
<entry>
<key>value</key>
<value>
<complex>
<entry>
<key>staticValue</key>
<value>
<implRef type="TS">
<className>boolean</className>
<packageName></packageName>
</implRef>
<simple>false</simple>
</value>
</entry>
</complex>
</value>
</entry>
</complex>
</value>
</item>
<item id="83e45626-89e0-4dd6-9caf-a17d6c474a72" removed="false">
<value>
<complex>
<entry>
<key>behavior</key>
<value>
<simple>{"objectId":"dd701bad-b22d-40c9-b00b-b92f070890db","packageName":"ervu.component.textwithdialoglinks","className":"TextWithDialogLinks","type":"TS"}</simple>
</value>
</entry>
<entry>
<key>method</key>
<value>
<simple>"setVisible"</simple>
</value>
</entry>
<entry>
<key>value</key>
<value>
<complex>
<entry>
<key>staticValue</key>
<value>
<implRef type="TS">
<className>boolean</className>
<packageName></packageName>
</implRef>
<simple>false</simple>
</value>
</entry>
</complex>
</value>
</entry>
</complex>
</value>
</item>
<item id="8d08e1aa-8fdc-4c49-b995-f1e1f40452d1" removed="false">
<value>
<complex>
<entry>
<key>behavior</key>
<value>
<simple>{"objectId":"d68b5c38-9ed6-4596-9b0c-dd1dc542c5ef","packageName":"component.button","className":"Button","type":"TS"}</simple>
</value>
</entry>
<entry>
<key>method</key>
<value>
<simple>"setVisible"</simple>
</value>
</entry>
<entry>
<key>value</key>
<value>
<complex>
<entry>
<key>staticValue</key>
<value>
<implRef type="TS">
<className>boolean</className>
<packageName></packageName>
</implRef>
<simple>false</simple>
</value>
</entry>
</complex>
</value>
</entry>
</complex>
</value>
</item>
<item id="d0250c79-e72e-4997-8d8e-0dcd9ea93f42" removed="false">
<value>
<complex>
<entry>
<key>behavior</key>
<value>
<simple>{"objectId":"fea5aebc-c206-48bc-a613-ab31813fd639","packageName":"component.container","className":"HBox","type":"TS"}</simple>
</value>
</entry>
<entry>
<key>method</key>
<value>
<simple>"setVisible"</simple>
</value>
</entry>
<entry>
<key>value</key>
<value>
<complex>
<entry>
<key>staticValue</key>
<value>
<implRef type="TS">
<className>boolean</className>
<packageName></packageName>
</implRef>
<simple>false</simple>
</value>
</entry>
</complex>
</value>
</entry>
</complex>
</value>
</item>
<item id="9d3d9d9b-772e-4db7-841d-63d12caa1422" removed="false">
<value>
<complex>
<entry>
<key>behavior</key>
<value>
<simple>{"objectId":"d5fa2655-8dd8-4004-9dec-217a41e5b9ed","packageName":"component","className":"Text","type":"TS"}</simple>
</value>
</entry>
<entry>
<key>method</key>
<value>
<simple>"setVisible"</simple>
</value>
</entry>
<entry>
<key>value</key>
<value>
<complex>
<entry>
<key>staticValue</key>
<value>
<implRef type="TS">
<className>boolean</className>
<packageName></packageName>
</implRef>
<simple>false</simple>
</value>
</entry>
</complex>
</value>
</entry>
</complex>
</value>
</item>
</value>
@ -6993,6 +7352,7 @@
<componentRootId>f88a6360-1760-436e-9459-6af705752f54</componentRootId>
<name>Диалоговые окна (информационные)</name>
<container>true</container>
<expanded>false</expanded>
<childrenReordered>false</childrenReordered>
<scripts id="bf098f19-480e-44e4-9084-aa42955c4d0f"/>
<scripts id="72befe90-1915-483f-b88c-d1ec5d4bdc8e"/>