Merge branch 'hotfix/1.9.11'

This commit is contained in:
Zaripov Emil 2025-04-01 13:19:22 +03:00
commit 866a648425
196 changed files with 1104 additions and 566 deletions

1
.gitignore vendored
View file

@ -67,3 +67,4 @@ npm-debug.log
*.sublime-workspace
sync-backend.ps1
sync-frontend.ps1
config/kafka_data

20
Dockerfile Normal file
View file

@ -0,0 +1,20 @@
#Dockerfile for TeamCity build "run in docker"
FROM repo.asd.center.cg:8082/alt/alt-tomcat:c10f1-9.0.59-20240917
USER root
COPY config/tomcat /
RUN cat /etc/tomcat/webbpm.properties >> /etc/tomcat/catalina.properties \
&& chown root:tomcat /var/lib/tomcat/webapps \
&& chmod g+rw /var/lib/tomcat/webapps
COPY frontend/target/frontend*.war /var/lib/tomcat/webapps/ROOT.war
COPY backend/target/*.war /var/lib/tomcat/webapps/
USER tomcat
EXPOSE 8080
ENTRYPOINT ["/entrypoint.sh"]

View file

@ -5,7 +5,7 @@
<parent>
<groupId>ru.micord.ervu.lkrp</groupId>
<artifactId>fl</artifactId>
<version>1.9.10</version>
<version>1.9.11</version>
</parent>
<groupId>ru.micord.ervu.lkrp.fl</groupId>
<artifactId>backend</artifactId>

View file

@ -21,6 +21,7 @@ import ru.micord.ervu.audit.constants.AuditConstants;
import ru.micord.ervu.audit.service.AuditService;
import ru.micord.ervu.dto.ExtractEmptyRequestDto;
import ru.micord.ervu.dto.ExtractRequestDto;
import ru.micord.ervu.exception.ProtobufParsingException;
import ru.micord.ervu.kafka.dto.EmptyExtract;
import ru.micord.ervu.kafka.dto.Extract;
import ru.micord.ervu.kafka.dto.FullExtract;
@ -114,7 +115,7 @@ public class ExtractController {
auditService.processDownloadEvent(servletRequest, size, fileName, formatRegistry,
AuditConstants.FAILURE_STATUS
);
throw new RuntimeException("Failed to parse data", e);
throw new ProtobufParsingException("Failed to parse data", e);
}
}
}

View file

@ -0,0 +1,19 @@
package ru.micord.ervu.exception;
/**
* @author Adel Kalimullin
*/
public class ProtobufParsingException extends RuntimeException{
public ProtobufParsingException(String message) {
super(message);
}
public ProtobufParsingException(String message, Throwable cause) {
super(message, cause);
}
public ProtobufParsingException(Throwable cause) {
super(cause);
}
}

View file

@ -29,17 +29,17 @@ import java.util.UUID;
@EnableKafka
public class ReplyingKafkaConfig {
@Value("${ervu.kafka.bootstrap.servers}")
@Value("${kafka.hosts}")
private String bootstrapServers;
@Value("${ervu.kafka.security.protocol}")
@Value("${kafka.auth_sec_proto}")
private String securityProtocol;
@Value("${ervu.kafka.doc.login.module}")
@Value("${kafka.auth_sasl_module}")
private String loginModule;
@Value("${ervu.kafka.username}")
@Value("${kafka.user}")
private String username;
@Value("${ervu.kafka.password}")
@Value("${kafka.pass}")
private String password;
@Value("${ervu.kafka.sasl.mechanism}")
@Value("${kafka.auth_sasl_mech}")
private String saslMechanism;
@Value("${ervu.kafka.reply.topic}")
@ -101,6 +101,7 @@ public class ReplyingKafkaConfig {
+ username + "\" password=\"" + password + "\";");
configProps.put(SaslConfigs.SASL_MECHANISM, saslMechanism);
configProps.put(ConsumerConfig.GROUP_ID_CONFIG, groupId + "-" + UUID.randomUUID());
configProps.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "latest");
configProps.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
return configProps;
}

View file

@ -0,0 +1,19 @@
package ru.micord.ervu.kafka.exception;
/**
* @author Adel Kalimullin
*/
public class KafkaMessageException extends RuntimeException {
public KafkaMessageException(String message) {
super(message);
}
public KafkaMessageException(String message, Throwable cause) {
super(message, cause);
}
public KafkaMessageException(Throwable cause) {
super(cause);
}
}

View file

@ -10,6 +10,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.kafka.requestreply.ReplyingKafkaTemplate;
import org.springframework.kafka.requestreply.RequestReplyFuture;
import ru.micord.ervu.kafka.exception.KafkaMessageException;
import ru.micord.ervu.kafka.exception.KafkaMessageReplyTimeoutException;
import ru.micord.ervu.kafka.service.ReplyingKafkaService;
@ -27,7 +28,7 @@ public abstract class BaseReplyingKafkaService<T, V> implements ReplyingKafkaSer
try {
ConsumerRecord<String, V> result = Optional.ofNullable(replyFuture.get())
.orElseThrow(() -> new RuntimeException("Kafka return result is null"));
.orElseThrow(() -> new KafkaMessageException("Kafka return result is null"));
LOGGER.info("Thread {} - KafkaSendMessageAndGetReply: {} ms",
Thread.currentThread().getId(), System.currentTimeMillis() - startTime);
return result;

View file

@ -17,23 +17,23 @@ import ru.micord.ervu.security.esia.model.ExpiringToken;
*/
public class EsiaAuthInfoStore {
private static final Logger LOGGER = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
private static final Map<String, ExpiringToken> accessTokensMap = new ConcurrentHashMap<>();
private static final Map<String, ExpiringToken> refreshTokensMap = new ConcurrentHashMap<>();
private static final Map<String, List<ExpiringState>> prnsUuidStateMap = new ConcurrentHashMap<>();
private static final Map<String, ExpiringToken> ACCESS_TOKENS_MAP = new ConcurrentHashMap<>();
private static final Map<String, ExpiringToken> REFRESH_TOKENS_MAP = new ConcurrentHashMap<>();
private static final Map<String, List<ExpiringState>> PRNS_UUID_STATE_MAP = new ConcurrentHashMap<>();
public static void addAccessToken(String prnOid, String token, long expiresIn) {
if (token != null) {
long expiryTime = System.currentTimeMillis() + 1000L * expiresIn;
accessTokensMap.put(prnOid, new ExpiringToken(token, expiryTime));
ACCESS_TOKENS_MAP.put(prnOid, new ExpiringToken(token, expiryTime));
}
}
public static String getAccessToken(String prnOid) {
return accessTokensMap.get(prnOid).getAccessToken();
return ACCESS_TOKENS_MAP.get(prnOid).getAccessToken();
}
public static boolean validateAccessToken(String prnOid) {
ExpiringToken token = accessTokensMap.get(prnOid);
ExpiringToken token = ACCESS_TOKENS_MAP.get(prnOid);
if (token == null || token.getAccessToken() == null) {
LOGGER.error("No ESIA access token for prnOid: " + prnOid);
return false;
@ -46,46 +46,46 @@ public class EsiaAuthInfoStore {
}
public static void removeExpiredAccessToken() {
for (String key : accessTokensMap.keySet()) {
ExpiringToken token = accessTokensMap.get(key);
for (String key : ACCESS_TOKENS_MAP.keySet()) {
ExpiringToken token = ACCESS_TOKENS_MAP.get(key);
if (token != null && token.isExpired()) {
accessTokensMap.remove(key);
ACCESS_TOKENS_MAP.remove(key);
}
}
}
public static void removeExpiredRefreshToken() {
for (String key : refreshTokensMap.keySet()) {
ExpiringToken token = refreshTokensMap.get(key);
for (String key : REFRESH_TOKENS_MAP.keySet()) {
ExpiringToken token = REFRESH_TOKENS_MAP.get(key);
if (token != null && token.isExpired()) {
refreshTokensMap.remove(key);
REFRESH_TOKENS_MAP.remove(key);
}
}
}
public static void removeAccessToken(String prnOid) {
accessTokensMap.remove(prnOid);
ACCESS_TOKENS_MAP.remove(prnOid);
}
public static void addRefreshToken(String prnOid, String token, long expiresIn) {
if (token != null) {
long expiryTime = System.currentTimeMillis() + 1000L * expiresIn;
refreshTokensMap.put(prnOid, new ExpiringToken(token, expiryTime));
REFRESH_TOKENS_MAP.put(prnOid, new ExpiringToken(token, expiryTime));
}
}
public static String getRefreshToken(String prnOid) {
return refreshTokensMap.get(prnOid).getAccessToken();
return REFRESH_TOKENS_MAP.get(prnOid).getAccessToken();
}
public static void removeRefreshToken(String prnOid) {
refreshTokensMap.remove(prnOid);
REFRESH_TOKENS_MAP.remove(prnOid);
}
public static void addState(String prnsUUID, String state, long expiresIn, long attemptsCount) {
long expiryTime = System.currentTimeMillis() + expiresIn * 1000L;
ExpiringState newState = new ExpiringState(state, expiryTime);
prnsUuidStateMap.compute(prnsUUID, (key, states) -> {
PRNS_UUID_STATE_MAP.compute(prnsUUID, (key, states) -> {
if (states == null) {
states = new CopyOnWriteArrayList<>();
}
@ -98,7 +98,7 @@ public class EsiaAuthInfoStore {
}
public static boolean containsState(String prnsUUID, String state) {
List<ExpiringState> states = prnsUuidStateMap.get(prnsUUID);
List<ExpiringState> states = PRNS_UUID_STATE_MAP.get(prnsUUID);
if (states == null) {
return false;
}
@ -113,12 +113,12 @@ public class EsiaAuthInfoStore {
}
public static void removeState(String prnsUUID) {
prnsUuidStateMap.remove(prnsUUID);
PRNS_UUID_STATE_MAP.remove(prnsUUID);
}
public static void removeExpiredState() {
for (String key : prnsUuidStateMap.keySet()) {
prnsUuidStateMap.computeIfPresent(key, (k, states) -> {
for (String key : PRNS_UUID_STATE_MAP.keySet()) {
PRNS_UUID_STATE_MAP.computeIfPresent(key, (k, states) -> {
states.removeIf(ExpiringState::isExpired);
return states.isEmpty() ? null : states;
});

View file

@ -25,9 +25,9 @@ public class EsiaAccessToken implements Serializable {
private String sid;
@JsonProperty("urn:esia:sbj_id")
private String sbj_id;
private String client_id;
private String sbjId;
@JsonProperty("client_id")
private String clientId;
private Long iat;
@ -71,20 +71,20 @@ public class EsiaAccessToken implements Serializable {
this.sid = sid;
}
public String getSbj_id() {
return sbj_id;
public String getSbjId() {
return sbjId;
}
public void setSbj_id(String sbj_id) {
this.sbj_id = sbj_id;
public void setSbjId(String sbjId) {
this.sbjId = sbjId;
}
public String getClient_id() {
return client_id;
public String getClientId() {
return clientId;
}
public void setClient_id(String client_id) {
this.client_id = client_id;
public void setClientId(String clientId) {
this.clientId = clientId;
}
public Long getIat() {

View file

@ -3,6 +3,7 @@ package ru.micord.ervu.security.esia.model;
import java.io.Serializable;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
/**
* @author Eduard Tihomirov
@ -12,44 +13,46 @@ public class EsiaTokenResponse implements Serializable {
private static final long serialVersionUID = 7655328287602576975L;
private String id_token;
private String access_token;
private String refresh_token;
@JsonProperty("id_token")
private String tokenId;
@JsonProperty("access_token")
private String accessToken;
@JsonProperty("refresh_token")
private String refreshToken;
private String state;
private String token_type;
private Long expires_in;
@JsonProperty("token_type")
private String tokenType;
@JsonProperty("expires_in")
private Long expiresIn;
private String error;
private String error_description;
@JsonProperty("error_description")
private String errorDescription;
public String getId_token() {
return id_token;
public String getTokenId() {
return tokenId;
}
public void setId_token(String id_token) {
this.id_token = id_token;
public void setTokenId(String tokenId) {
this.tokenId = tokenId;
}
public String getAccess_token() {
return access_token;
public String getAccessToken() {
return accessToken;
}
public void setAccess_token(String access_token) {
this.access_token = access_token;
public void setAccessToken(String accessToken) {
this.accessToken = accessToken;
}
public String getRefresh_token() {
return refresh_token;
public String getRefreshToken() {
return refreshToken;
}
public void setRefresh_token(String refresh_token) {
this.refresh_token = refresh_token;
public void setRefreshToken(String refreshToken) {
this.refreshToken = refreshToken;
}
public String getState() {
@ -60,20 +63,20 @@ public class EsiaTokenResponse implements Serializable {
this.state = state;
}
public String getToken_type() {
return token_type;
public String getTokenType() {
return tokenType;
}
public void setToken_type(String token_type) {
this.token_type = token_type;
public void setTokenType(String tokenType) {
this.tokenType = tokenType;
}
public Long getExpires_in() {
return expires_in;
public Long getExpiresIn() {
return expiresIn;
}
public void setExpires_in(Long expires_in) {
this.expires_in = expires_in;
public void setExpiresIn(Long expiresIn) {
this.expiresIn = expiresIn;
}
public String getError() {
@ -84,11 +87,11 @@ public class EsiaTokenResponse implements Serializable {
this.error = error;
}
public String getError_description() {
return error_description;
public String getErrorDescription() {
return errorDescription;
}
public void setError_description(String error_description) {
this.error_description = error_description;
public void setErrorDescription(String errorDescription) {
this.errorDescription = errorDescription;
}
}

View file

@ -0,0 +1,32 @@
package ru.micord.ervu.security.esia.model;
import java.io.Serializable;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
/**
* @author Eduard Tihomirov
*/
@JsonIgnoreProperties(ignoreUnknown = true)
public class SignResponse implements Serializable {
private static final long serialVersionUID = 1L;
private String signature;
private String state;
public String getSignature() {
return signature;
}
public void setSignature(String signature) {
this.signature = signature;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
}

View file

@ -34,6 +34,8 @@ import org.springframework.security.core.context.SecurityContext;
import ru.micord.ervu.audit.constants.AuditConstants;
import ru.micord.ervu.audit.service.AuditService;
import org.springframework.web.util.WebUtils;
import ru.micord.ervu.audit.constants.AuditConstants;
import ru.micord.ervu.audit.service.AuditService;
import ru.micord.ervu.kafka.model.Document;
import ru.micord.ervu.kafka.model.Person;
import ru.micord.ervu.kafka.model.Response;
@ -58,6 +60,9 @@ import ru.micord.ervu.security.webbpm.jwt.model.Token;
import ru.cg.webbpm.modules.core.runtime.api.MessageBundleUtils;
import static ru.micord.ervu.security.webbpm.jwt.util.SecurityUtil.getCurrentUserEsiaId;
import ru.cg.webbpm.modules.core.runtime.api.MessageBundleUtils;
/**
* @author Eduard Tihomirov
*/
@ -233,23 +238,23 @@ public class EsiaAuthService {
if (tokenResponse == null || tokenResponse.getError() != null) {
String errMsg =
tokenResponse != null ? tokenResponse.getError_description() : "response is empty";
tokenResponse != null ? tokenResponse.getErrorDescription() : "response is empty";
throw new IllegalStateException("Esia response error. " + errMsg);
}
if (!tokenResponse.getState().equals(newState)) {
throw new EsiaException("Token invalid. State from request not equals with state from response.");
}
esiaAccessTokenStr = tokenResponse.getAccess_token();
esiaAccessTokenStr = tokenResponse.getAccessToken();
startTime = System.currentTimeMillis();
String verifyResult = verifyToken(esiaAccessTokenStr);
verifySecret = System.currentTimeMillis() - startTime;
if (verifyResult != null) {
throw new EsiaException(verifyResult);
}
String esiaRefreshTokenStr = tokenResponse.getRefresh_token();
String esiaRefreshTokenStr = tokenResponse.getRefreshToken();
EsiaAccessToken esiaAccessToken = personalDataService.readToken(esiaAccessTokenStr);
prnOid = esiaAccessToken.getSbj_id();
expiresIn = tokenResponse.getExpires_in();
prnOid = esiaAccessToken.getSbjId();
expiresIn = tokenResponse.getExpiresIn();
EsiaAuthInfoStore.addAccessToken(prnOid, esiaAccessTokenStr, expiresIn);
EsiaAuthInfoStore.addRefreshToken(prnOid, esiaRefreshTokenStr, expiresIn);
}
@ -329,26 +334,26 @@ public class EsiaAuthService {
EsiaTokenResponse tokenResponse = objectMapper.readValue(responseString, EsiaTokenResponse.class);
if (tokenResponse == null || tokenResponse.getError() != null) {
String errMsg =
tokenResponse != null ? tokenResponse.getError_description() : "response is empty";
tokenResponse != null ? tokenResponse.getErrorDescription() : "response is empty";
throw new IllegalStateException("Esia response error. " + errMsg);
}
if (!tokenResponse.getState().equals(state)) {
throw new EsiaException("Token invalid. State from request not equals with state from response.");
}
String esiaAccessTokenStr = tokenResponse.getAccess_token();
String esiaAccessTokenStr = tokenResponse.getAccessToken();
String verifyResult = verifyToken(esiaAccessTokenStr);
if (verifyResult != null) {
throw new EsiaException(verifyResult);
}
String esiaNewRefreshTokenStr = tokenResponse.getRefresh_token();
String esiaNewRefreshTokenStr = tokenResponse.getRefreshToken();
EsiaAccessToken esiaAccessToken = personalDataService.readToken(esiaAccessTokenStr);
String prnOid = esiaAccessToken.getSbj_id();
Long expiresIn = tokenResponse.getExpires_in();
String prnOid = esiaAccessToken.getSbjId();
Long expiresIn = tokenResponse.getExpiresIn();
EsiaAuthInfoStore.addAccessToken(prnOid, esiaAccessTokenStr, expiresIn);
EsiaAuthInfoStore.addRefreshToken(prnOid, esiaNewRefreshTokenStr, expiresIn);
PersonModel personModel = personalDataService.getPersonModel(esiaAccessTokenStr);
Response ervuIdResponse = getErvuIdResponse(personModel);
createTokenAndAddCookie(response, esiaAccessToken.getSbj_id(), ervuIdResponse.getErvuId(), expiresIn);
createTokenAndAddCookie(response, esiaAccessToken.getSbjId(), ervuIdResponse.getErvuId(), expiresIn);
}
catch (Exception e) {
throw new EsiaException(e);
@ -469,8 +474,8 @@ public class EsiaAuthService {
if (!esiaHeader.getTyp().equals("JWT")) {
return "Token invalid. Token type: " + esiaHeader.getTyp() + " invalid";
}
if (!esiaAccessToken.getClient_id().equals(esiaConfig.getClientId())) {
return "Token invalid. Token clientId: " + esiaAccessToken.getClient_id() + " invalid";
if (!esiaAccessToken.getClientId().equals(esiaConfig.getClientId())) {
return "Token invalid. Token clientId: " + esiaAccessToken.getClientId() + " invalid";
}
if (!esiaAccessToken.getIss().equals(esiaConfig.getEsiaIssuerUrl())) {
return "Token invalid. Token issuer:" + esiaAccessToken.getIss() + " invalid";

View file

@ -39,7 +39,7 @@ public class EsiaPersonalDataService implements PersonalDataService {
long startTime = System.currentTimeMillis();
try {
EsiaAccessToken esiaAccessToken = readToken(accessToken);
String prnsId = esiaAccessToken.getSbj_id();
String prnsId = esiaAccessToken.getSbjId();
PersonModel personModel = getPersonData(prnsId, accessToken);
personModel.setPassportModel(
getPassportModel(prnsId, accessToken, personModel.getrIdDoc()));
@ -49,7 +49,7 @@ public class EsiaPersonalDataService implements PersonalDataService {
}
catch (Exception e) {
LOGGER.error("Thread {} - RequestPersonData: {} ms", Thread.currentThread().getId(), System.currentTimeMillis() - startTime);
throw new RuntimeException(e);
throw new EsiaException(e);
}
}
@ -70,7 +70,7 @@ public class EsiaPersonalDataService implements PersonalDataService {
return objectMapper.readValue(getRespDoc.body(), PassportModel.class);
}
catch (Exception e) {
throw new RuntimeException(e);
throw new EsiaException(e);
}
}
@ -90,7 +90,7 @@ public class EsiaPersonalDataService implements PersonalDataService {
return objectMapper.readValue(getResp.body(), PersonModel.class);
}
catch (Exception e) {
throw new RuntimeException(e);
throw new EsiaException(e);
}
}
@ -109,7 +109,7 @@ public class EsiaPersonalDataService implements PersonalDataService {
return esiaAccessToken;
}
catch (Exception e) {
throw new RuntimeException(e);
throw new EsiaException(e);
}
}

View file

@ -0,0 +1,19 @@
package ru.micord.ervu.security.exception;
/**
* @author Adel Kalimullin
*/
public class UnauthorizedException extends RuntimeException{
public UnauthorizedException(String message) {
super(message);
}
public UnauthorizedException(String message, Throwable cause) {
super(message, cause);
}
public UnauthorizedException(Throwable cause) {
super(cause);
}
}

View file

@ -15,6 +15,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import ru.micord.ervu.security.esia.EsiaAuthInfoStore;
import ru.micord.ervu.security.exception.UnauthorizedException;
import ru.micord.ervu.security.webbpm.jwt.UserIdsPair;
import ru.micord.ervu.security.webbpm.jwt.model.Token;
@ -33,13 +34,13 @@ public class JwtTokenService {
@Value("${webbpm.security.token.issuer:#{null}}")
private final String tokenIssuerName =
ResourceMetadataUtils.PROJECT_GROUP_ID + "." + ResourceMetadataUtils.PROJECT_ARTIFACT_ID;
private final SecretKey SIGNING_KEY;
private final SecretKey signingKey;
@Autowired
public JwtTokenService(@Value("${webbpm.security.token.secret.key:ZjE5ZjMxNmYtODViZC00ZTQ5LWIxZmYtOGEzYzE3Yjc1MDVk}")
String secretKey) {
byte[] encodedKey = Base64.getDecoder().decode(secretKey);
this.SIGNING_KEY = Keys.hmacShaKeyFor(encodedKey);
this.signingKey = Keys.hmacShaKeyFor(encodedKey);
}
public Token createAccessToken(String userAccountId, Long expiresIn, String ervuId) {
@ -51,7 +52,7 @@ public class JwtTokenService {
.setIssuer(tokenIssuerName)
.setIssuedAt(new Date(System.currentTimeMillis()))
.setExpiration(expirationDate)
.signWith(SIGNING_KEY)
.signWith(signingKey)
.compact();
return new Token(idsConcatenated, tokenIssuerName, expirationDate, value);
}
@ -72,7 +73,7 @@ public class JwtTokenService {
public Token getToken(String token) {
Claims claims = Jwts.parser()
.setSigningKey(SIGNING_KEY)
.setSigningKey(signingKey)
.parseClaimsJws(token)
.getBody();
@ -95,7 +96,7 @@ public class JwtTokenService {
return esiaUserId;
}
else {
throw new RuntimeException("Failed to get auth data. User unauthorized.");
throw new UnauthorizedException("Failed to get auth data. User unauthorized.");
}
}
}

View file

@ -1,2 +1,2 @@
kafka_reply_timeout=Превышено время ожидания ответа от сервера. Попробуйте повторить запрос позже или обратитесь к системному администратору
kafka_reply_timeout=Превышено время ожидания ответа от сервера.
access_denied=Доступ запрещен. Пользователь должен быть включен в группу "Сотрудник, ответственный за военно-учетную работу" в ЕСИА

View file

@ -1,2 +1,2 @@
kafka_reply_timeout=Превышено время ожидания ответа от сервера. Попробуйте повторить запрос позже или обратитесь к системному администратору
kafka_reply_timeout=Превышено время ожидания ответа от сервера.
access_denied=Доступ запрещен. Пользователь должен быть включен в группу "Сотрудник, ответственный за военно-учетную работу" в ЕСИА

View file

@ -769,12 +769,12 @@ JBPM использует 3 корневых категории логирова
- `ESIA_CLIENT_CERT_HASH` - параметр, содержащий хэш сертификата (fingerprint сертификата) системы-клиента в hexформате
#### Конфигурация и топики Kafka
- `ERVU_KAFKA_BOOTSTRAP_SERVERS` - список пар хост:порт, использующихся для установки первоначального соединения с кластером Kafka
- `ERVU_KAFKA_USERNAME` - пользователь для подключения к Kafka
- `ERVU_KAFKA_PASSWORD` - пароль для подключения к Kafka
- `ERVU_KAFKA_SASL_MECHANISM` - механизм SASL, используемый для клиентских подключений
- `ERVU_KAFKA_SECURITY_PROTOCOL` - протокол, используемый для взаимодействия с брокерами
- `ERVU_KAFKA_DOC_LOGIN_MODULE` - имя класса для входа в систему для SASL-соединений в формате, используемом конфигурационными файлами JAAS
- `KAFKA_HOSTS` - список пар хост:порт, использующихся для установки первоначального соединения с кластером Kafka
- `KAFKA_USER` - пользователь для подключения к Kafka
- `KAFKA_PASS` - пароль для подключения к Kafka
- `KAFKA_AUTH_SASL_MECH` - механизм SASL, используемый для клиентских подключений
- `KAFKA_AUTH_SEC_PROTO` - протокол, используемый для взаимодействия с брокерами
- `KAFKA_AUTH_SASL_MODULE` - имя класса для входа в систему для SASL-соединений в формате, используемом конфигурационными файлами JAAS
- `ERVU_KAFKA_GROUP_ID` - идентификатор группы потребителей, который отвечает за создание группы для объединения нескольких потребителей
- `ERVU_KAFKA_REPLY_TIMEOUT` - таймаут ожидания ответа
- `ERVU_KAFKA_REQUEST_TOPIC` - топик для отправки запроса на получение id пользователя в системе ЕРВУ

View file

@ -1,6 +1,6 @@
ARG BUILDER_IMAGE=registry.altlinux.org/basealt/altsp:c10f1
ARG BACKEND_IMAGE=repo.micord.ru/alt/alt-tomcat:c10f1-9.0.59-20240903
ARG FRONTEND_IMAGE=nginx:1.24-alpine-slim
ARG FRONTEND_IMAGE=nginx:1.26.2-alpine-slim
FROM $BUILDER_IMAGE AS builder

View file

@ -1,5 +1,5 @@
ARG BUILDER_IMAGE=registry.altlinux.org/basealt/altsp:c10f1
ARG RUNTIME_IMAGE=nginx:1.24-alpine-slim
ARG RUNTIME_IMAGE=nginx:1.26.2-alpine-slim
FROM $BUILDER_IMAGE AS builder

View file

@ -0,0 +1,5 @@
JCSP_KEYSTORE_ALIAS=aef8d0e0-bcaa-4e07-8bbe-4953c6eea458
JCSP_KEYSTORE_PASS=1234567890
SF_OFFLINE_CRL_ENABLED=false
CRYPTO_OFFLINE_CRL_ENABLED=false

View file

@ -0,0 +1,19 @@
PG_HOST=10.10.31.119
PG_PORT=5432
PG_DATABASE=ervu_decision_document_local
PG_USER=ervu_decision_document
PG_PASSWORD=ervu_decision_document
KAFKA_HOSTS=local-kafka:9094
KAFKA_AUTH_SASL_MODULE=org.apache.kafka.common.security.plain.PlainLoginModule
KAFKA_AUTH_SEC_PROTO=PLAINTEXT
KAFKA_AUTH_SASL_MECH=PLAIN
KAFKA_USER=user2
KAFKA_PASS=Blfi9d2OFG
EXTERNAL_KAFKA_HOSTS=local-kafka:9094
EXTERNAL_KAFKA_AUTH_SASL_MODULE=org.apache.kafka.common.security.plain.PlainLoginModule
EXTERNAL_KAFKA_AUTH_SEC_PROTO=PLAINTEXT
EXTERNAL_KAFKA_AUTH_SASL_MECH=PLAIN
EXTERNAL_KAFKA_USER=user2
EXTERNAL_KAFKA_PASS=Blfi9d2OFG

View file

@ -0,0 +1,25 @@
PG_HOST=10.10.31.119
PG_PORT=5432
PG_DATABASE=ervu_extract_from_registry_provider
PG_USER=ervu_extract_from_registry_provider
PG_PASSWORD=ervu_extract_from_registry_provider
KAFKA_HOSTS=local-kafka:9094
KAFKA_AUTH_SASL_MODULE=org.apache.kafka.common.security.plain.PlainLoginModule
KAFKA_AUTH_SEC_PROTO=PLAINTEXT
KAFKA_AUTH_SASL_MECH=PLAIN
KAFKA_USER=user2
KAFKA_PASS=Blfi9d2OFG
EXTERNAL_KAFKA_HOSTS=local-kafka:9094
EXTERNAL_KAFKA_AUTH_SASL_MODULE=org.apache.kafka.common.security.plain.PlainLoginModule
EXTERNAL_KAFKA_AUTH_SEC_PROTO=PLAINTEXT
EXTERNAL_KAFKA_AUTH_SASL_MECH=PLAIN
EXTERNAL_KAFKA_USER=user2
EXTERNAL_KAFKA_PASS=Blfi9d2OFG
AWS_ENDPOINT=http://ervu-minio.k8s.micord.ru:31900
AWS_ACCESS_KEY_ID=rlTdTvkmSXu9FsLhfecw
AWS_SECRET_ACCESS_KEY=NUmY0wwRIEyAd98GCKd1cOgJWvLQYAcMMul5Ulu0
CRYPTO_GATEWAY_URL=http://crypto-gateway:8080

View file

@ -0,0 +1,19 @@
PG_HOST=10.10.31.119
PG_PORT=5432
PG_DATABASE=ervu_journal
PG_USER=ervu_journal
PG_PASSWORD=ervu_journal
KAFKA_HOSTS=local-kafka:9094
KAFKA_AUTH_SASL_MODULE=org.apache.kafka.common.security.plain.PlainLoginModule
KAFKA_AUTH_SEC_PROTO=PLAINTEXT
KAFKA_AUTH_SASL_MECH=PLAIN
KAFKA_USER=user2
KAFKA_PASS=Blfi9d2OFG
EXTERNAL_KAFKA_HOSTS=local-kafka:9094
EXTERNAL_KAFKA_AUTH_SASL_MODULE=org.apache.kafka.common.security.plain.PlainLoginModule
EXTERNAL_KAFKA_AUTH_SEC_PROTO=PLAINTEXT
EXTERNAL_KAFKA_AUTH_SASL_MECH=PLAIN
EXTERNAL_KAFKA_USER=user2
EXTERNAL_KAFKA_PASS=Blfi9d2OFG

View file

@ -0,0 +1,13 @@
KAFKA_HOSTS=local-kafka:9094
KAFKA_AUTH_SASL_MODULE=org.apache.kafka.common.security.plain.PlainLoginModule
KAFKA_AUTH_SEC_PROTO=PLAINTEXT
KAFKA_AUTH_SASL_MECH=PLAIN
KAFKA_USER=user2
KAFKA_PASS=Blfi9d2OFG
EXTERNAL_KAFKA_HOSTS=local-kafka:9094
EXTERNAL_KAFKA_AUTH_SASL_MODULE=org.apache.kafka.common.security.plain.PlainLoginModule
EXTERNAL_KAFKA_AUTH_SEC_PROTO=PLAINTEXT
EXTERNAL_KAFKA_AUTH_SASL_MECH=PLAIN
EXTERNAL_KAFKA_USER=user2
EXTERNAL_KAFKA_PASS=Blfi9d2OFG

View file

@ -0,0 +1,21 @@
PG_HOST=10.10.31.119
PG_PORT=5432
PG_DATABASE=ervu_journal
PG_USER=ervu_journal
PG_PASSWORD=ervu_journal
KAFKA_HOSTS=local-kafka:9094
KAFKA_AUTH_SASL_MODULE=org.apache.kafka.common.security.plain.PlainLoginModule
KAFKA_AUTH_SEC_PROTO=PLAINTEXT
KAFKA_AUTH_SASL_MECH=PLAIN
KAFKA_USER=user2
KAFKA_PASS=Blfi9d2OFG
EXTERNAL_KAFKA_HOSTS=local-kafka:9094
EXTERNAL_KAFKA_AUTH_SASL_MODULE=org.apache.kafka.common.security.plain.PlainLoginModule
EXTERNAL_KAFKA_AUTH_SEC_PROTO=PLAINTEXT
EXTERNAL_KAFKA_AUTH_SASL_MECH=PLAIN
EXTERNAL_KAFKA_USER=user2
EXTERNAL_KAFKA_PASS=Blfi9d2OFG
OBJECT_DIFF_CALC_URL=http://ervu-object-diff-calc:8080/

View file

@ -0,0 +1,23 @@
PG_HOST=10.10.31.119
PG_PORT=5432
PG_DATABASE=ervu_person_registry_local
PG_USER=ervu_person_registry
PG_PASSWORD=ervu_person_registry
KAFKA_HOSTS=local-kafka:9094
KAFKA_AUTH_SASL_MODULE=org.apache.kafka.common.security.plain.PlainLoginModule
KAFKA_AUTH_SEC_PROTO=PLAINTEXT
KAFKA_AUTH_SASL_MECH=PLAIN
KAFKA_USER=user2
KAFKA_PASS=Blfi9d2OFG
EXTERNAL_KAFKA_HOSTS=local-kafka:9094
EXTERNAL_KAFKA_AUTH_SASL_MODULE=org.apache.kafka.common.security.plain.PlainLoginModule
EXTERNAL_KAFKA_AUTH_SEC_PROTO=PLAINTEXT
EXTERNAL_KAFKA_AUTH_SASL_MECH=PLAIN
EXTERNAL_KAFKA_USER=user2
EXTERNAL_KAFKA_PASS=Blfi9d2OFG
AWS_ENDPOINT=http://ervu-minio.k8s.micord.ru:31900
AWS_ACCESS_KEY_ID=rlTdTvkmSXu9FsLhfecw
AWS_SECRET_ACCESS_KEY=NUmY0wwRIEyAd98GCKd1cOgJWvLQYAcMMul5Ulu0

View file

@ -0,0 +1,19 @@
PGHOST=10.10.31.119
PGPORT=5432
PGDATABASE=ervu_rp_summons_service
PGUSER=ervu_rp_summons_service
PGPASSWORD=ervu_rp_summons_service
KAFKA_HOSTS=local-kafka:9094
KAFKA_AUTH_SASL_MODULE=org.apache.kafka.common.security.plain.PlainLoginModule
KAFKA_AUTH_SEC_PROTO=PLAINTEXT
KAFKA_AUTH_SASL_MECH=PLAIN
KAFKA_USER=user2
KAFKA_PASS=Blfi9d2OFG
EXTERNAL_KAFKA_HOSTS=local-kafka:9094
EXTERNAL_KAFKA_AUTH_SASL_MODULE=org.apache.kafka.common.security.plain.PlainLoginModule
EXTERNAL_KAFKA_AUTH_SEC_PROTO=PLAINTEXT
EXTERNAL_KAFKA_AUTH_SASL_MECH=PLAIN
EXTERNAL_KAFKA_USER=user2
EXTERNAL_KAFKA_PASS=Blfi9d2OFG

View file

@ -0,0 +1,19 @@
PG_HOST=10.10.31.119
PG_PORT=5432
PG_DATABASE=ervu_subpoena_registry_local
PG_USER=ervu_subpoena_registry
PG_PASSWORD=ervu_subpoena_registry
KAFKA_HOSTS=local-kafka:9094
KAFKA_AUTH_SASL_MODULE=org.apache.kafka.common.security.plain.PlainLoginModule
KAFKA_AUTH_SEC_PROTO=PLAINTEXT
KAFKA_AUTH_SASL_MECH=PLAIN
KAFKA_USER=user2
KAFKA_PASS=Blfi9d2OFG
EXTERNAL_KAFKA_HOSTS=local-kafka:9094
EXTERNAL_KAFKA_AUTH_SASL_MODULE=org.apache.kafka.common.security.plain.PlainLoginModule
EXTERNAL_KAFKA_AUTH_SEC_PROTO=PLAINTEXT
EXTERNAL_KAFKA_AUTH_SASL_MECH=PLAIN
EXTERNAL_KAFKA_USER=user2
EXTERNAL_KAFKA_PASS=Blfi9d2OFG

2
config/kafdrop.env Normal file
View file

@ -0,0 +1,2 @@
KAFKA_BROKERCONNECT=local-kafka:9094
KAFKA_PROPERTIES=c2VjdXJpdHkucHJvdG9jb2w9UExBSU5URVhUDQpzYXNsLm1lY2hhbmlzbT1QTEFJTg0Kc2FzbC5qYWFzLmNvbmZpZz1vcmcuYXBhY2hlLmthZmthLmNvbW1vbi5zZWN1cml0eS5wbGFpbi5QbGFpbkxvZ2luTW9kdWxlIHJlcXVpcmVkIHVzZXJuYW1lPSd1c2VyMicgcGFzc3dvcmQ9J0JsZmk5ZDJPRkcnOw==

23
config/kafka.env Normal file
View file

@ -0,0 +1,23 @@
KAFKA_CFG_NODE_ID=0
KAFKA_CFG_PROCESS_ROLES=controller,broker
KAFKA_CFG_LISTENERS=CLIENT://:9092,INTERNAL://:9094,CONTROLLER://:9093
KAFKA_CFG_ADVERTISED_LISTENERS=CLIENT://local-kafka:9092,INTERNAL://local-kafka:9094,CONTROLLER://localhost:9093
KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CLIENT:SASL_PLAINTEXT,INTERNAL:PLAINTEXT,CONTROLLER:SASL_PLAINTEXT,
KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@local-kafka:9093
KAFKA_KRAFT_BOOTSTRAP_SCRAM_USERS=true
# Controller
KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER
#KAFKA_CONTROLLER_USER=controller_user
#KAFKA_CONTROLLER_PASSWORD=Blfi9d2OFG
KAFKA_CFG_SASL_MECHANISM_CONTROLLER_PROTOCOL=PLAIN
# Client CLIENT
KAFKA_CLIENT_USERS=user2
KAFKA_CLIENT_PASSWORDS=Blfi9d2OFG
KAFKA_CLIENT_LISTENER_NAME=CLIENT
KAFKA_CFG_SASL_JAAS_CONFIG=org.apache.kafka.common.security.scram.ScramLoginModule required username="user2" password="Blfi9d2OFG";
# Client internal
KAFKA_INTER_BROKER_LISTENER_NAME=INTERNAL
KAFKA_CFG_SASL_MECHANISM_INTER_BROKER_PROTOCOL=PLAIN

3
config/kafka.properties Normal file
View file

@ -0,0 +1,3 @@
security.protocol=PLAINTEXT
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username='user2' password='Blfi9d2OFG';

View file

@ -17,11 +17,12 @@ ESIA_REDIRECT_URL=http://localhost:8080/
SIGN_URL=https://ervu-sign-dev.k8s.micord.ru/sign
SIGN_VERIFY_URL=https://ervu-sign-dev.k8s.micord.ru/verify
ERVU_KAFKA_BOOTSTRAP_SERVERS=local-kafka:9094
ERVU_KAFKA_USERNAME=user2
ERVU_KAFKA_PASSWORD=Blfi9d2OFG
ERVU_KAFKA_SASL_MECHANISM=PLAIN
ERVU_KAFKA_SECURITY_PROTOCOL=PLAINTEXT
KAFKA_HOSTS=local-kafka:9094
KAFKA_USER=user2
KAFKA_PASS=Blfi9d2OFG
KAFKA_AUTH_SASL_MECH=PLAIN
KAFKA_AUTH_SEC_PROTO=PLAINTEXT
KAFKA_AUTH_SASL_MODULE=org.apache.kafka.common.security.plain.PlainLoginModule
ERVU_KAFKA_GROUP_ID=ervu-lkrp-fl-new
ERVU_KAFKA_REPLY_TOPIC=ervu.lkpr.person.search.response
ERVU_KAFKA_REQUEST_TOPIC=ervu.lkpr.person.search.request
@ -33,7 +34,6 @@ ERVU_KAFKA_REGISTRY_EXTRACT_EMPTY_REQUEST_TOPIC=ervu.extract.empty.request
ERVU_KAFKA_REGISTRY_EXTRACT_REQUEST_TOPIC=ervu.extract.info.request
ERVU_KAFKA_REGISTRY_EXTRACT_REPLY_TOPIC=ervu.extract.info.response
ERVU_KAFKA_EXTRACT_HEADER_CLASS=request@urn://rostelekom.ru/ERVU-extractFromRegistryTR/1.0.3
ERVU_KAFKA_DOC_LOGIN_MODULE=org.apache.kafka.common.security.plain.PlainLoginModule
ESIA_AUTH_INFO_CLEAR_CRON=0 0 */1 * * *
COOKIE_PATH=/fl

View file

@ -1,26 +1,28 @@
TZ=Europe/Moscow
# App datasource
DB_APP_USERNAME=ervu-lkrp-fl
DB_APP_PASSWORD=ervu-lkrp-fl
DB_APP_USERNAME=ervu_lkrp_fl
DB_APP_PASSWORD=ervu_lkrp_fl
DB_APP_HOST=10.10.31.119
DB_APP_PORT=5432
DB_APP_NAME=ervu-lkrp-fl
DB_APP_NAME=ervu_lkrp_fl
ESIA_SCOPES=snils, fullname, birthdate, id_doc
ESIA_BASE_URI=https://esia-portal1.test.gosuslugi.ru/
ESIA_BASE_URI=https://esia-portal1.test.gosuslugi.ru/
ESIA_CLIENT_ID=MNSV89
ESIA_CLIENT_CERT_HASH=04508B4B0B58776A954A0E15F574B4E58799D74C61EE020B3330716C203E3BDD
ESIA_REDIRECT_URL=https://lkrp-dev.micord.ru/fl/
ESIA_LOGOUT_REDIRECT_URL=https://lkrp-dev.micord.ru/fl/home.html
SIGN_URL=https://ervu-sign-dev.k8s.micord.ru/sign
SIGN_VERIFY_URL=https://ervu-sign-dev.k8s.micord.ru/verify
ERVU_KAFKA_BOOTSTRAP_SERVERS=http://10.10.31.11:32609
ERVU_KAFKA_USERNAME=user1
ERVU_KAFKA_PASSWORD=Blfi9d2OFG
ERVU_KAFKA_SASL_MECHANISM=SCRAM-SHA-256
ERVU_KAFKA_SECURITY_PROTOCOL=SASL_PLAINTEXT
KAFKA_HOSTS=http://10.10.31.11:32609
KAFKA_USER=user1
KAFKA_PASS=Blfi9d2OFG
KAFKA_AUTH_SASL_MECH=SCRAM-SHA-256
KAFKA_AUTH_SEC_PROTO=SASL_PLAINTEXT
ERVU_KAFKA_GROUP_ID=1
ERVU_KAFKA_REPLY_TOPIC=ervu.lkpr.person.search.response
ERVU_KAFKA_REQUEST_TOPIC=ervu.lkpr.person.search.request
@ -32,7 +34,7 @@ ERVU_KAFKA_REGISTRY_EXTRACT_EMPTY_REQUEST_TOPIC=ervu.extract.empty.request
ERVU_KAFKA_REGISTRY_EXTRACT_REQUEST_TOPIC=ervu.extract.info.request
ERVU_KAFKA_REGISTRY_EXTRACT_REPLY_TOPIC=ervu.extract.info.response
ERVU_KAFKA_EXTRACT_HEADER_CLASS=request@urn://rostelekom.ru/ERVU-extractFromRegistryTR/1.0.3
ERVU_KAFKA_DOC_LOGIN_MODULE=org.apache.kafka.common.security.scram.ScramLoginModule
KAFKA_AUTH_SASL_MODULE=org.apache.kafka.common.security.scram.ScramLoginModule
AUDIT_KAFKA_AUTHORIZATION_TOPIC=ervu.lkrp.auth.events
AUDIT_KAFKA_ACTION_TOPIC=ervu.lkrp.action.events
AUDIT_KAFKA_FILE_DOWNLOAD_TOPIC=ervu.lkrp.import.file

15
config/printer.env Normal file
View file

@ -0,0 +1,15 @@
MICRONAUT_ENVIRONMENTS=local
MICRONAUT_SERVER_PORT=8080
MICRONAUT_SECURITY_ENABLED=false
KAFKA_BOOTSTRAP_SERVERS=local-kafka:9094
KAFKA_SASL_MECHANISM=PLAIN
KAFKA_SASL_JAAS_CONFIG=''
KAKFA_SECURITY_PROTOCOL=PLAINTEXT
S3_CLIENTS_DEFAULT_ENDPOINT=http://ervu-minio.k8s.micord.ru:31900
S3_CLIENTS_DEFAULT_ACCESS_KEY=rlTdTvkmSXu9FsLhfecw
S3_CLIENTS_DEFAULT_SECRET_KEY=NUmY0wwRIEyAd98GCKd1cOgJWvLQYAcMMul5Ulu0
S3_CLIENTS_DEFAULT_BUCKET=printer
REDIS_URI=redis://:@redis:6379
RTL_MONITORING_HEALTH_INDICATOR_LIBREOFFICE_ENABLED=false
TOKEN_MANAGER_ENABLED=false
LIBREOFFICE_PORT_NUMBERS=8101,8102,8103,8104,8105,8106,8107,8108

View file

@ -56,22 +56,23 @@
<property name="com.arjuna.ats.arjuna.allowMultipleLastResources" value="true"/>
<property name="esia.scopes" value="snils, fullname, birthdate, id_doc"/>
<property name="esia.base.uri" value="https://esia-portal1.test.gosuslugi.ru/"/>
<property name="esia.issuer.url" value="http://esia-portal1.test.gosuslugi.ru/"/>
<property name="esia.client.id" value="MNSV89"/>
<property name="esia.redirect.url" value="https://lkrp.micord.ru"/>
<property name="sign.url" value="https://ervu-sign-dev.k8s.micord.ru/sign"/>
<property name="esia.client.cert.hash" value="04508B4B0B58776A954A0E15F574B4E58799D74C61EE020B3330716C203E3BDD"/>
<property name="bpmn.enable" value="false"/>
<property name="ervu.kafka.bootstrap.servers" value="localhost:9092"/>
<property name="kafka.hosts" value="localhost:9092"/>
<property name="ervu.kafka.reply.topic" value="ervu.lkpr.person.search.response"/>
<property name="ervu.kafka.group.id" value="1"/>
<property name="ervu.kafka.request.topic" value="ervu.lkpr.person.search.request"/>
<property name="ervu.kafka.reply.timeout" value="30"/>
<property name="bpmn.enable" value="false"/>
<property name="ervu.kafka.security.protocol" value="SASL_PLAINTEXT"/>
<property name="ervu.kafka.doc.login.module" value="org.apache.kafka.common.security.scram.ScramLoginModule"/>
<property name="ervu.kafka.sasl.mechanism" value="SCRAM-SHA-256"/>
<property name="ervu.kafka.username" value="user1"/>
<property name="ervu.kafka.password" value="Blfi9d2OFG"/>
<property name="kafka.auth_sec_proto" value="SASL_PLAINTEXT"/>
<property name="kafka.auth_sasl_module" value="org.apache.kafka.common.security.scram.ScramLoginModule"/>
<property name="kafka.auth_sasl_mech" value="SCRAM-SHA-256"/>
<property name="kafka.user" value="user1"/>
<property name="kafka.pass" value="Blfi9d2OFG"/>
<property name="ervu.kafka.recruit.request.topic" value="ervu.recruit.info.request"/>
<property name="ervu.kafka.recruit.reply.topic" value="ervu.recruit.info.response"/>
<property name="ervu.kafka.recruit.header.class" value="Request@urn://rostelekom.ru/RP-SummonsTR/1.0.5"/>
@ -80,6 +81,7 @@
<property name="ervu.kafka.registry.extract.reply.topic" value="ervu.extract.info.response"/>
<property name="ervu.kafka.extract.header.class" value="request@urn://rostelekom.ru/ERVU-extractFromRegistryTR/1.0.3"/>
<property name="esia.auth.info.clear.cron" value="0 0 */1 * * *"/>
<property name="sign.verify.url" value="https://ervu-sign-dev.k8s.micord.ru/verify"/>
<property name="audit.kafka.bootstrap.servers" value="localhost:9092"/>
<property name="audit.kafka.authorization.topic" value="ervu.lkrp.auth.events"/>
<property name="audit.kafka.file.download.topic" value="ervu.lkrp.import.file"/>

View file

@ -1,39 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<tomcat-users xmlns="http://tomcat.apache.org/xml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
version="1.0">
<!--
By default, no user is included in the "manager-gui" role required
to operate the "/manager/html" web application. If you wish to use this app,
you must define such a user - the username and password are arbitrary.
Built-in Tomcat manager roles:
- manager-gui - allows access to the HTML GUI and the status pages
- manager-script - allows access to the HTTP API and the status pages
- manager-jmx - allows access to the JMX proxy and the status pages
- manager-status - allows access to the status pages only
The users below are wrapped in a comment and are therefore ignored. If you
wish to configure one or more of these users for use with the manager web
application, do not forget to remove the <!.. ..> that surrounds them. You
will also need to set the passwords to something appropriate.
-->
<user username="admin" password="<must-be-changed>" roles="manager-gui"/>
</tomcat-users>

View file

@ -1,26 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<Context antiResourceLocking="false" privileged="true" >
<CookieProcessor className="org.apache.tomcat.util.http.Rfc6265CookieProcessor"
sameSiteCookies="strict" />
<!--
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="d+\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
-->
<Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>

View file

@ -4,7 +4,7 @@
<parent>
<groupId>ru.micord.ervu.lkrp</groupId>
<artifactId>fl</artifactId>
<version>1.9.10</version>
<version>1.9.11</version>
</parent>
<groupId>ru.micord.ervu.lkrp.fl</groupId>

166
docker-compose.yaml Normal file
View file

@ -0,0 +1,166 @@
services:
local-kafka:
image: docker.io/bitnami/kafka:3.9.0
container_name: kafka-fl
ports:
- 9092:9092
- 9094:9094
volumes:
- ./config/kafka_data:/bitnami/kafka
env_file:
- config/kafka.env
healthcheck:
test: ["CMD", "kafka-topics.sh", "--list", "--bootstrap-server", "localhost:9094"]
interval: 30s
timeout: 10s
retries: 4
kafdrop:
container_name: kafdrop-fl
image: obsidiandynamics/kafdrop
restart: "no"
ports:
- 9000:9000
env_file:
config/kafdrop.env
depends_on:
local-kafka:
condition: service_healthy
redis:
image: redis/redis-stack:latest
container_name: redis
ports:
- 6379:6379
ervu-rp-summons-service:
image: registry-dev.pgs.rtlabs.ru/ervu/ervu-rp-summons-service:0.0.1-sha05ea36ab
container_name: rp-summons-service
env_file:
- config/ervu-rp-summons-service.env
depends_on:
local-kafka:
condition: service_healthy
ervu-person-registry:
container_name: person-registry
image: registry-dev.pgs.rtlabs.ru/ervu/ervu-person-registry:0.0.1-shad32a31f0
env_file:
- config/ervu-person-registry.env
depends_on:
local-kafka:
condition: service_healthy
crypto-gateway:
image: registry-dev.pgs.rtlabs.ru/ervu/crypto-gateway:0.0.1-shada76e6e7
container_name: crypto-gateway
ports:
- 8080
env_file:
config/crypto-gateway.env
printer:
image: registry-dev.pgs.rtlabs.ru/ervu/printer:0.0.1-shabd591b88
container_name: printer
depends_on:
redis:
condition: service_started
local-kafka:
condition: service_healthy
ports:
- 8080
- 5005
env_file:
- config/printer.env
ervu-object-diff-calc:
container_name: object-diff-calc
image: registry-dev.pgs.rtlabs.ru/ervu/ervu-object-diff-calc:0.0.1-sha4142b581
env_file:
- config/ervu-subpoena-registry.env
depends_on:
local-kafka:
condition: service_healthy
ports:
- 8080
ervu-extract-from-registry-provider:
container_name: extract-from-registry-provider
image: registry-dev.pgs.rtlabs.ru/ervu/ervu-extract-from-registry-provider:0.0.1-shaa6a2261f
env_file:
- config/ervu-extract-from-registry-provider.env
depends_on:
local-kafka:
condition: service_healthy
ervu-person-registry:
condition: service_started
ervu-subpoena-registry:
condition: service_started
ervu-decision-document-service:
condition: service_started
ervu-object-history-service:
condition: service_started
crypto-gateway:
condition: service_started
printer:
condition: service_started
ervu-object-diff-calc:
condition: service_started
ervu-subpoena-registry:
container_name: subpoena-registry
image: registry-dev.pgs.rtlabs.ru/ervu/ervu-subpoena-registry:0.0.1-shacb5d0dbb
env_file:
- config/ervu-subpoena-registry.env
depends_on:
local-kafka:
condition: service_healthy
ervu-decision-document-service:
container_name: decision-document-service
image: registry-dev.pgs.rtlabs.ru/ervu/ervu-decision-document-service:0.0.1-sha238f27f3
env_file:
- config/ervu-decision-document-service.env
depends_on:
local-kafka:
condition: service_healthy
# ervu-object-history-service uses database, created in this service
ervu-journal-service:
container_name: journal-service
image: registry-dev.pgs.rtlabs.ru/ervu/ervu-journal-service:0.0.1-sha74f87e3c
env_file:
- config/ervu-journal-service.env
depends_on:
local-kafka:
condition: service_healthy
ervu-object-history-service:
container_name: object-history-service
image: registry-dev.pgs.rtlabs.ru/ervu/ervu-object-history-service:0.0.1-shae5cd29cc
env_file:
- config/ervu-object-history-service.env
depends_on:
local-kafka:
condition: service_healthy
ervu-journal-service:
condition: service_started
lkrp-fl:
container_name: lkrp-fl
build:
context: .
dockerfile: Dockerfile
ports:
- 8080:8080
env_file:
- config/local.env
depends_on:
local-kafka:
condition: service_healthy
ervu-extract-from-registry-provider:
condition: service_started
ervu-person-registry:
condition: service_started
ervu-rp-summons-service:
condition: service_started

105
ervu_lkrp_fl-openapi.yaml Normal file
View file

@ -0,0 +1,105 @@
openapi: 3.0.3
info:
title: ervu-lkrp-fl API
description: API сервиса ervu-lkrp-fl
version: 1.9.1
servers:
- url: https://fl-lkrp-ervu-test.pgs.rtlabs.ru
paths:
/esia/auth:
get:
summary: Получение маркера доступа
operationId: esiaAuth
description: Получение маркера доступа в обмен на код от ЕСИА и создание внутреннего токена
parameters:
- name: code
in: query
required: true
description: Код, присланный ЕСИА после успешной авторизации
schema:
type: string
responses:
"200":
description: Authentication successful
/esia/person:
get:
summary: Получение информации о пользователе
operationId: getPersonModel
description: Получение информации о пользователе ЕСИА
responses:
"200":
description: OK
content:
application/json:
schema:
type: object
/esia/refresh:
post:
summary: Обновление токена
operationId: refreshToken
description: Обновление токена
responses:
"200":
description: OK
/esia/url:
get:
summary: Получение URL ЕСИА
operationId: getEsiaUrl
description: Получение URL ЕСИА
responses:
"200":
description: OK
content:
application/json:
schema:
type: string
/esia/userfullname:
get:
summary: Получение полного имени пользователя
operationId: getUserFullname
description: Получение полного имени пользователя ЕСИА
responses:
"200":
description: OK
content:
application/json:
schema:
type: string
/extract/{formatRegistry}:
get:
summary: Получение выписки
operationId: getExtract
description: Получение выписки из реестров повесток и воинского учета
parameters:
- name: formatRegistry
in: path
required: true
description: Формат выписки (1 - по воинскому учету; 2 - по повесткам)
schema:
type: string
responses:
"200":
description: OK
headers:
Content-Disposition:
schema:
type: string
example: attachment; filename*=UTF-8''encodedfilename.zip
content:
application/octet-stream:
schema:
type: object
"204":
description: No Content
/recruit:
get:
summary: Получение информации о повестке, временных мерах и воинскому учету
operationId: getData
description: Получение информации о повестке, временных мерах и воинскому учету
responses:
"200":
description: OK
content:
application/json:
schema:
type: object

View file

@ -1748,9 +1748,9 @@
}
},
"@webbpm/base-package": {
"version": "3.187.4",
"resolved": "https://repo.micord.ru/repository/npm-all/@webbpm/base-package/-/base-package-3.187.4.tgz",
"integrity": "sha512-2MrVersJ+No7/DMDxJPuBXGoy3NmLNPtTsa4Ua0kooZmR1er7w7YnrIUtkakEXrWSODt0ki7XB9w3f1RFVAGtg==",
"version": "3.192.4",
"resolved": "https://repo.micord.ru/repository/npm-all/@webbpm/base-package/-/base-package-3.192.4.tgz",
"integrity": "sha512-x2SFa7O/aUf4fyfiHrJMVuQZAMMOuQoqHuuVJiuBUI3nLTfUmdb+Pnqu+nCcKc+qahT6PYzzJ0t0Wub3bw/JGQ==",
"requires": {
"tslib": "^1.9.0"
}

View file

@ -26,7 +26,7 @@
"@angular/platform-browser-dynamic": "7.2.15",
"@angular/router": "7.2.15",
"@ng-bootstrap/ng-bootstrap": "4.2.2-micord.1",
"@webbpm/base-package": "3.187.4",
"@webbpm/base-package": "3.192.4",
"ag-grid-angular": "29.0.0-micord.4",
"ag-grid-community": "29.0.0-micord.4",
"angular-calendar": "0.28.28",

View file

@ -4,7 +4,7 @@
<parent>
<groupId>ru.micord.ervu.lkrp</groupId>
<artifactId>fl</artifactId>
<version>1.9.10</version>
<version>1.9.11</version>
</parent>
<groupId>ru.micord.ervu.lkrp.fl</groupId>

View file

@ -7,6 +7,6 @@ export class EsiaErrorDetail {
};
public static getDescription(code: string): string {
return this.errors[code] || 'Доступ запрещен. Обратитесь к системному администратору. Ошибка ' + code;
return this.errors[code] || 'Система временно недоступна. Пожалуйста, повторите попытку позже. Ошибка ЕСИА ' + code;
}
}

View file

@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>ru.cg.webbpm.packages.base</groupId>
<artifactId>resources</artifactId>
<version>3.187.4</version>
<version>3.192.4</version>
<organization>
<name>Micord</name>
</organization>
@ -28,13 +28,13 @@
<jooq.version>3.19.3</jooq.version>
<jupiter.version>5.10.2</jupiter.version>
<enforcer.manageVersions>true</enforcer.manageVersions>
<webbpm-platform.version>3.187.4</webbpm-platform.version>
<webbpm-platform.version>3.192.4</webbpm-platform.version>
<h2.version>1.4.200</h2.version>
<build.timestamp>0226064041</build.timestamp>
<build.timestamp>0324074119</build.timestamp>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<junit.platform.version>1.10.0</junit.platform.version>
<enforcer.manageExclusions>true</enforcer.manageExclusions>
<revision>3.187.4</revision>
<revision>3.192.4</revision>
<metadata.ts.filename>typescript.metadata.json</metadata.ts.filename>
<package.repository.url>https://repo.micord.ru</package.repository.url>
<maven.build.timestamp.format>MMddHHmmss</maven.build.timestamp.format>
@ -47,19 +47,19 @@
<dependency>
<groupId>ru.cg.webbpm.packages.base</groupId>
<artifactId>converters</artifactId>
<version>3.187.4</version>
<version>3.192.4</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>ru.cg.webbpm.packages.base</groupId>
<artifactId>backend</artifactId>
<version>3.187.4</version>
<version>3.192.4</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>ru.cg.webbpm.packages.base</groupId>
<artifactId>frontend</artifactId>
<version>3.187.4</version>
<version>3.192.4</version>
<scope>compile</scope>
</dependency>
</dependencies>

View file

@ -60,7 +60,7 @@
<ul>
<li>&#x41e;&#x431;&#x440;&#x430;&#x437;&#x435;&#x446; &#x432;&#x43d;&#x435;&#x448;&#x43d;&#x435;&#x439; &#x441;&#x441;&#x44b;&#x43b;&#x43a;&#x438;: <code>https://www.wildberries.ru/catalog/${sku}/detail.aspx</code></li>
<li>&#x41e;&#x431;&#x440;&#x430;&#x437;&#x435;&#x446; &#x432;&#x43d;&#x443;&#x442;&#x440;&#x435;&#x43d;&#x43d;&#x435;&#x439; &#x441;&#x441;&#x44b;&#x43b;&#x43a;&#x438;: <code>products/ru.cg.webbpm.packages.base:resources:jar:3.187.4</code></li>
<li>&#x41e;&#x431;&#x440;&#x430;&#x437;&#x435;&#x446; &#x432;&#x43d;&#x443;&#x442;&#x440;&#x435;&#x43d;&#x43d;&#x435;&#x439; &#x441;&#x441;&#x44b;&#x43b;&#x43a;&#x438;: <code>products/ru.cg.webbpm.packages.base:resources:jar:3.192.4</code></li>
</ul>
</li>
<li>

View file

@ -4,17 +4,17 @@
<description>Base webbpm package</description>
<groupId>ru.cg.webbpm.packages.base</groupId>
<artifactId>resources</artifactId>
<version>3.187.4</version>
<studioVersion>3.187.4</studioVersion>
<version>3.192.4</version>
<studioVersion>3.192.4</studioVersion>
<backendModule>
<groupId>ru.cg.webbpm.packages.base</groupId>
<artifactId>backend</artifactId>
<version>3.187.4</version>
<version>3.192.4</version>
</backendModule>
<frontendModule>
<packageName>@webbpm/base-package</packageName>
<version>3.187.4</version>
<version>3.192.4</version>
</frontendModule>
</packageInfo>

View file

@ -8,11 +8,11 @@
<documentation>component/buttons/Кнопка.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.187.4</studioVersion>
<studioVersion>3.192.4</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.187.4</value>
<value>3.192.4</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/buttons/Кнопка_отмены.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.187.4</studioVersion>
<studioVersion>3.192.4</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.187.4</value>
<value>3.192.4</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/buttons/Кнопка_очистки_фильтра.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.187.4</studioVersion>
<studioVersion>3.192.4</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.187.4</value>
<value>3.192.4</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/buttons/Кнопка_удаления.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.187.4</studioVersion>
<studioVersion>3.192.4</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.187.4</value>
<value>3.192.4</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/buttons/Кнопкаагрузки.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.187.4</studioVersion>
<studioVersion>3.192.4</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.187.4</value>
<value>3.192.4</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/buttons/Кнопка_вызова_ошибки.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.187.4</studioVersion>
<studioVersion>3.192.4</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.187.4</value>
<value>3.192.4</value>
</entry>
</packageVersions>
</versions>

View file

@ -7,11 +7,11 @@
<documentation>component/buttons/Кнопка_выполнения_бизнес-процесса.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.187.4</studioVersion>
<studioVersion>3.192.4</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.187.4</value>
<value>3.192.4</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/buttons/Кнопка_выполнения_SQL.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.187.4</studioVersion>
<studioVersion>3.192.4</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.187.4</value>
<value>3.192.4</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/buttons/Кнопка_для_фильтрации.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.187.4</studioVersion>
<studioVersion>3.192.4</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.187.4</value>
<value>3.192.4</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/buttons/Кнопкаавигации.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.187.4</studioVersion>
<studioVersion>3.192.4</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.187.4</value>
<value>3.192.4</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/buttons/Кнопка_сохранения.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.187.4</studioVersion>
<studioVersion>3.192.4</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.187.4</value>
<value>3.192.4</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/buttons/Кнопка_выбора.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.187.4</studioVersion>
<studioVersion>3.192.4</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.187.4</value>
<value>3.192.4</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/buttons/Кнопка_подписи.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.187.4</studioVersion>
<studioVersion>3.192.4</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.187.4</value>
<value>3.192.4</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/buttons/Кнопкаапуска_бизнес-процесса.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.187.4</studioVersion>
<studioVersion>3.192.4</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.187.4</value>
<value>3.192.4</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/buttons/reporting/Кнопка_печати_из_графа_сущности.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.187.4</studioVersion>
<studioVersion>3.192.4</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.187.4</value>
<value>3.192.4</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/buttons/reporting/Кнопка_печати_отчета_из_формы.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.187.4</studioVersion>
<studioVersion>3.192.4</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.187.4</value>
<value>3.192.4</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/containers/Сворачиваемая_панель.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.187.4</studioVersion>
<studioVersion>3.192.4</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.187.4</value>
<value>3.192.4</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/containers/Диалог.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.187.4</studioVersion>
<studioVersion>3.192.4</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.187.4</value>
<value>3.192.4</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/containers/Контейнер_с_кнопками.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.187.4</studioVersion>
<studioVersion>3.192.4</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.187.4</value>
<value>3.192.4</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/containers/Группа_полей.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.187.4</studioVersion>
<studioVersion>3.192.4</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.187.4</value>
<value>3.192.4</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/containers/Набор_фильтров.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.187.4</studioVersion>
<studioVersion>3.192.4</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.187.4</value>
<value>3.192.4</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/containers/Форма.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.187.4</studioVersion>
<studioVersion>3.192.4</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.187.4</value>
<value>3.192.4</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/containers/Горизонтальный_контейнер.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.187.4</studioVersion>
<studioVersion>3.192.4</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.187.4</value>
<value>3.192.4</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/containers/Контейнер_вкладок.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.187.4</studioVersion>
<studioVersion>3.192.4</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.187.4</value>
<value>3.192.4</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/containers/Вкладка.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.187.4</studioVersion>
<studioVersion>3.192.4</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.187.4</value>
<value>3.192.4</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/containers/Вертикальный_контейнер.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.187.4</studioVersion>
<studioVersion>3.192.4</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.187.4</value>
<value>3.192.4</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/containers/Окно.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.187.4</studioVersion>
<studioVersion>3.192.4</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.187.4</value>
<value>3.192.4</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/editable-grids/EditableGrid.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.187.4</studioVersion>
<studioVersion>3.192.4</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.187.4</value>
<value>3.192.4</value>
</entry>
</packageVersions>
</versions>

View file

@ -7,11 +7,11 @@
<localization>META-INF/components/localization/editable-grids/autocomplete</localization>
<internal>false</internal>
<versions>
<studioVersion>3.187.4</studioVersion>
<studioVersion>3.192.4</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.187.4</value>
<value>3.192.4</value>
</entry>
</packageVersions>
</versions>

View file

@ -7,11 +7,11 @@
<localization>META-INF/components/localization/editable-grids/check-box</localization>
<internal>false</internal>
<versions>
<studioVersion>3.187.4</studioVersion>
<studioVersion>3.192.4</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.187.4</value>
<value>3.192.4</value>
</entry>
</packageVersions>
</versions>

View file

@ -7,11 +7,11 @@
<localization>META-INF/components/localization/editable-grids/combo-box</localization>
<internal>false</internal>
<versions>
<studioVersion>3.187.4</studioVersion>
<studioVersion>3.192.4</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.187.4</value>
<value>3.192.4</value>
</entry>
</packageVersions>
</versions>

View file

@ -7,11 +7,11 @@
<localization>META-INF/components/localization/editable-grids/date-time-picker</localization>
<internal>false</internal>
<versions>
<studioVersion>3.187.4</studioVersion>
<studioVersion>3.192.4</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.187.4</value>
<value>3.192.4</value>
</entry>
</packageVersions>
</versions>

View file

@ -7,11 +7,11 @@
<localization>META-INF/components/localization/editable-grids/money-field</localization>
<internal>true</internal>
<versions>
<studioVersion>3.187.4</studioVersion>
<studioVersion>3.192.4</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.187.4</value>
<value>3.192.4</value>
</entry>
</packageVersions>
</versions>

View file

@ -7,11 +7,11 @@
<localization>META-INF/components/localization/editable-grids/number-field</localization>
<internal>false</internal>
<versions>
<studioVersion>3.187.4</studioVersion>
<studioVersion>3.192.4</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.187.4</value>
<value>3.192.4</value>
</entry>
</packageVersions>
</versions>

View file

@ -7,11 +7,11 @@
<localization>META-INF/components/localization/editable-grids/one-to-many</localization>
<internal>true</internal>
<versions>
<studioVersion>3.187.4</studioVersion>
<studioVersion>3.192.4</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.187.4</value>
<value>3.192.4</value>
</entry>
</packageVersions>
</versions>

View file

@ -7,11 +7,11 @@
<localization>META-INF/components/localization/editable-grids/one-to-many</localization>
<internal>false</internal>
<versions>
<studioVersion>3.187.4</studioVersion>
<studioVersion>3.192.4</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.187.4</value>
<value>3.192.4</value>
</entry>
</packageVersions>
</versions>

View file

@ -6,11 +6,11 @@
<localization>META-INF/components/localization/editable-grids/read-only</localization>
<internal>true</internal>
<versions>
<studioVersion>3.187.4</studioVersion>
<studioVersion>3.192.4</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.187.4</value>
<value>3.192.4</value>
</entry>
</packageVersions>
</versions>

View file

@ -5,11 +5,11 @@
<category>editable-grids</category>
<internal>true</internal>
<versions>
<studioVersion>3.187.4</studioVersion>
<studioVersion>3.192.4</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.187.4</value>
<value>3.192.4</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>Статичный_выпадающий_список_колонки_таблицы.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.187.4</studioVersion>
<studioVersion>3.192.4</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.187.4</value>
<value>3.192.4</value>
</entry>
</packageVersions>
</versions>

View file

@ -7,11 +7,11 @@
<localization>META-INF/components/localization/editable-grids/text-area</localization>
<internal>false</internal>
<versions>
<studioVersion>3.187.4</studioVersion>
<studioVersion>3.192.4</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.187.4</value>
<value>3.192.4</value>
</entry>
</packageVersions>
</versions>

View file

@ -7,11 +7,11 @@
<localization>META-INF/components/localization/editable-grids/text-field</localization>
<internal>false</internal>
<versions>
<studioVersion>3.187.4</studioVersion>
<studioVersion>3.192.4</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.187.4</value>
<value>3.192.4</value>
</entry>
</packageVersions>
</versions>

View file

@ -7,11 +7,11 @@
<localization>META-INF/components/localization/editable-grids/time-picker</localization>
<internal>false</internal>
<versions>
<studioVersion>3.187.4</studioVersion>
<studioVersion>3.192.4</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.187.4</value>
<value>3.192.4</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/fields/ФИАС.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.187.4</studioVersion>
<studioVersion>3.192.4</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.187.4</value>
<value>3.192.4</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/fields/Поле_ввода_с_подбором_значения.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.187.4</studioVersion>
<studioVersion>3.192.4</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.187.4</value>
<value>3.192.4</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/fields/Флаг.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.187.4</studioVersion>
<studioVersion>3.192.4</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.187.4</value>
<value>3.192.4</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/fields/Выпадающий_список.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.187.4</studioVersion>
<studioVersion>3.192.4</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.187.4</value>
<value>3.192.4</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/fields/Дата.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.187.4</studioVersion>
<studioVersion>3.192.4</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.187.4</value>
<value>3.192.4</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/fields/EditableOneToMany.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.187.4</studioVersion>
<studioVersion>3.192.4</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.187.4</value>
<value>3.192.4</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/fields/Файл.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.187.4</studioVersion>
<studioVersion>3.192.4</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.187.4</value>
<value>3.192.4</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/fields/Файл.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.187.4</studioVersion>
<studioVersion>3.192.4</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.187.4</value>
<value>3.192.4</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/fields/ManyToMany.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.187.4</studioVersion>
<studioVersion>3.192.4</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.187.4</value>
<value>3.192.4</value>
</entry>
</packageVersions>
</versions>

Some files were not shown because too many files have changed in this diff Show more