Merge branch 'develop' into release/1.10.0

This commit is contained in:
Zaripov Emil 2025-05-28 09:18:00 +03:00
commit 02f58a7797
138 changed files with 475 additions and 379 deletions

View file

@ -0,0 +1,16 @@
package ru.micord.ervu.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author gulnaz
*/
@RestController
public class HealthController {
@GetMapping(value = "/health")
public String health() {
return "healthy";
}
}

View file

@ -31,7 +31,7 @@ import static ru.micord.ervu.security.SecurityConstants.ESIA_LOGOUT;
@EnableWebSecurity @EnableWebSecurity
public class SecurityConfig { public class SecurityConfig {
private static final String[] PERMIT_ALL = new String[] { private static final String[] PERMIT_ALL = new String[] {
"/version", "/esia/url", "/esia/auth", "esia/refresh", "/esia/logout" "/health", "/esia/url", "/esia/auth", "esia/refresh", "/esia/logout"
}; };
@Autowired @Autowired
private JwtAuthenticationFilter jwtAuthenticationFilter; private JwtAuthenticationFilter jwtAuthenticationFilter;
@ -60,6 +60,8 @@ public class SecurityConfig {
http.authorizeHttpRequests( http.authorizeHttpRequests(
(authorizeHttpRequests) -> authorizeHttpRequests.requestMatchers(PERMIT_ALL) (authorizeHttpRequests) -> authorizeHttpRequests.requestMatchers(PERMIT_ALL)
.permitAll() .permitAll()
.requestMatchers("/version")
.denyAll()
.anyRequest() .anyRequest()
.authenticated()) .authenticated())
.csrf((csrf) -> csrf.csrfTokenRepository(tokenRepository) .csrf((csrf) -> csrf.csrfTokenRepository(tokenRepository)

View file

@ -2,4 +2,8 @@ package ru.micord.ervu.security;
public class SecurityConstants { public class SecurityConstants {
public static final String ESIA_LOGOUT = "/esia/logout"; public static final String ESIA_LOGOUT = "/esia/logout";
public static final String AUTH_TOKEN = "auth_token";
public static final String AUTH_MARKER = "webbpm.ervu-lkrp-fl";
public static final String PRNS_UUID = "prns_uuid_fl";
public static final String STICKY_SESSION = "stickysession";
} }

View file

@ -9,8 +9,10 @@ import java.util.concurrent.CopyOnWriteArrayList;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.context.support.MessageSourceAccessor; import org.springframework.context.support.MessageSourceAccessor;
import ru.micord.ervu.security.esia.exception.EsiaException;
import ru.micord.ervu.security.esia.model.ExpiringState; import ru.micord.ervu.security.esia.model.ExpiringState;
import ru.micord.ervu.security.esia.model.ExpiringToken; import ru.micord.ervu.security.esia.model.ExpiringToken;
import ru.micord.ervu.security.exception.UnauthorizedException;
import ru.cg.webbpm.modules.core.runtime.api.LocalizedException; import ru.cg.webbpm.modules.core.runtime.api.LocalizedException;
import ru.cg.webbpm.modules.core.runtime.api.MessageBundleUtils; import ru.cg.webbpm.modules.core.runtime.api.MessageBundleUtils;
@ -34,7 +36,14 @@ public class EsiaAuthInfoStore {
} }
public static String getAccessToken(String prnOid) { public static String getAccessToken(String prnOid) {
return ACCESS_TOKENS_MAP.get(prnOid).getAccessToken(); ExpiringToken token = ACCESS_TOKENS_MAP.get(prnOid);
if (token == null || token.getAccessToken() == null) {
throw new UnauthorizedException("Failed to get access token. No access token found for prnOid: " + prnOid);
}
else if (token.isExpired()) {
throw new UnauthorizedException("Failed to get access token. Access token is expired for prnOid: " + prnOid);
}
return token.getAccessToken();
} }
public static boolean validateAccessToken(String prnOid) { public static boolean validateAccessToken(String prnOid) {
@ -105,19 +114,30 @@ public class EsiaAuthInfoStore {
}); });
} }
public static boolean containsState(String prnsUUID, String state) { public static void validateState(String prnsUUID, String state, String stickySession) {
List<ExpiringState> states = PRNS_UUID_STATE_MAP.get(prnsUUID); List<ExpiringState> states = PRNS_UUID_STATE_MAP.get(prnsUUID);
if (states == null) { if (states == null) {
return false; throw new EsiaException(
"State invalid. No state found. PrnsUUID: " + prnsUUID + ". State: " + state
+ ". Sticky session:" + stickySession);
} }
long currentTime = System.currentTimeMillis(); long currentTime = System.currentTimeMillis();
states.removeIf(expiringState -> expiringState.getExpiryTime() < currentTime);
StringBuilder statesStringBuilder = new StringBuilder();
for (ExpiringState expiringState : states) { for (ExpiringState expiringState : states) {
if (expiringState.getState().equals(state)) { if (expiringState.getState().equals(state)) {
return true; if (expiringState.getExpiryTime() < currentTime) {
throw new EsiaException(
"State invalid. PrnsUUID: " + prnsUUID + ". Sticky session:" + stickySession
+ ". State : " + state + " expired at : " + expiringState.getExpiryTime());
}
return;
} }
statesStringBuilder.append(expiringState.getState()).append(", ");
} }
return false; throw new EsiaException(
"State invalid. PrnsUUID: " + prnsUUID + ". Sticky session:" + stickySession
+ ". Backend states :" + statesStringBuilder + " cookie state :" + state);
} }
public static void removeState(String prnsUUID) { public static void removeState(String prnsUUID) {

View file

@ -34,8 +34,6 @@ import org.springframework.security.core.context.SecurityContext;
import ru.micord.ervu.audit.constants.AuditConstants; import ru.micord.ervu.audit.constants.AuditConstants;
import ru.micord.ervu.audit.service.AuditService; import ru.micord.ervu.audit.service.AuditService;
import org.springframework.web.util.WebUtils; 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.Document;
import ru.micord.ervu.kafka.model.Person; import ru.micord.ervu.kafka.model.Person;
import ru.micord.ervu.kafka.model.Response; import ru.micord.ervu.kafka.model.Response;
@ -46,6 +44,7 @@ import ru.micord.ervu.security.esia.model.EsiaHeader;
import ru.micord.ervu.security.esia.model.EsiaTokenResponse; import ru.micord.ervu.security.esia.model.EsiaTokenResponse;
import ru.micord.ervu.security.esia.model.FormUrlencoded; import ru.micord.ervu.security.esia.model.FormUrlencoded;
import ru.micord.ervu.security.esia.model.PersonModel; import ru.micord.ervu.security.esia.model.PersonModel;
import ru.micord.ervu.security.esia.model.SignResponse;
import ru.micord.ervu.security.esia.EsiaAuthInfoStore; import ru.micord.ervu.security.esia.EsiaAuthInfoStore;
import ru.micord.ervu.security.esia.config.EsiaConfig; import ru.micord.ervu.security.esia.config.EsiaConfig;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -53,6 +52,7 @@ import org.springframework.http.HttpHeaders;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import ru.micord.ervu.security.exception.UnauthorizedException;
import ru.micord.ervu.security.webbpm.jwt.JwtAuthentication; import ru.micord.ervu.security.webbpm.jwt.JwtAuthentication;
import ru.micord.ervu.security.webbpm.jwt.helper.SecurityHelper; import ru.micord.ervu.security.webbpm.jwt.helper.SecurityHelper;
import ru.micord.ervu.security.webbpm.jwt.service.JwtTokenService; import ru.micord.ervu.security.webbpm.jwt.service.JwtTokenService;
@ -60,8 +60,8 @@ import ru.micord.ervu.security.webbpm.jwt.model.Token;
import ru.cg.webbpm.modules.core.runtime.api.MessageBundleUtils; import ru.cg.webbpm.modules.core.runtime.api.MessageBundleUtils;
import static ru.micord.ervu.security.webbpm.jwt.util.SecurityUtil.getCurrentUserEsiaId; import static ru.micord.ervu.security.SecurityConstants.PRNS_UUID;
import ru.cg.webbpm.modules.core.runtime.api.MessageBundleUtils; import static ru.micord.ervu.security.SecurityConstants.STICKY_SESSION;
/** /**
* @author Eduard Tihomirov * @author Eduard Tihomirov
@ -71,7 +71,6 @@ public class EsiaAuthService {
private static final Logger LOGGER = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); private static final Logger LOGGER = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
private static final MessageSourceAccessor MESSAGE_SOURCE = MessageBundleUtils.createAccessor( private static final MessageSourceAccessor MESSAGE_SOURCE = MessageBundleUtils.createAccessor(
"messages/common_errors_messages"); "messages/common_errors_messages");
private static final String PRNS_UUID = "prns_uuid";
@Autowired @Autowired
private ObjectMapper objectMapper; private ObjectMapper objectMapper;
@ -106,7 +105,6 @@ public class EsiaAuthService {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy.MM.dd HH:mm:ss xx"); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy.MM.dd HH:mm:ss xx");
ZonedDateTime dt = ZonedDateTime.now(); ZonedDateTime dt = ZonedDateTime.now();
String timestamp = dt.format(formatter); String timestamp = dt.format(formatter);
String state = UUID.randomUUID().toString();
String prnsUUID = UUID.randomUUID().toString(); String prnsUUID = UUID.randomUUID().toString();
Cookie oldPrnsCookie = WebUtils.getCookie(request, PRNS_UUID); Cookie oldPrnsCookie = WebUtils.getCookie(request, PRNS_UUID);
if (oldPrnsCookie != null) { if (oldPrnsCookie != null) {
@ -121,12 +119,18 @@ public class EsiaAuthService {
parameters.put("client_id", clientId); parameters.put("client_id", clientId);
parameters.put("scope", scope); parameters.put("scope", scope);
parameters.put("timestamp", timestamp); parameters.put("timestamp", timestamp);
parameters.put("state", state); parameters.put("state", "%s");
parameters.put("redirect_uri", esiaConfig.getRedirectUrl()); parameters.put("redirect_uri", esiaConfig.getRedirectUrl());
String clientSecret = signMap(parameters); SignResponse signResponse = signMap(parameters);
String state = signResponse.getState();
String clientSecret = signResponse.getSignature();
EsiaAuthInfoStore.addState(prnsUUID, state, esiaConfig.getEsiaStateCookieLifeTime(), esiaConfig.getEsiaLoginAttemptsCount()); EsiaAuthInfoStore.addState(prnsUUID, state, esiaConfig.getEsiaStateCookieLifeTime(), esiaConfig.getEsiaLoginAttemptsCount());
ResponseCookie prnsCookie = securityHelper.createCookie(PRNS_UUID, prnsUUID, "/") Cookie stickySession = WebUtils.getCookie(request, STICKY_SESSION);
LOGGER.info("Auth states initialized: PrnsUUID: {}; State: {}; StickySession: {}", prnsUUID, state,
stickySession != null ? stickySession.getValue() : "is null"
);
ResponseCookie prnsCookie = securityHelper.createAccessCookie(PRNS_UUID, prnsUUID)
.maxAge(esiaConfig.getEsiaStateCookieLifeTime()) .maxAge(esiaConfig.getEsiaStateCookieLifeTime())
.build(); .build();
securityHelper.addResponseCookie(response, prnsCookie); securityHelper.addResponseCookie(response, prnsCookie);
@ -183,16 +187,12 @@ public class EsiaAuthService {
String prnOid = null; String prnOid = null;
Long expiresIn = null; Long expiresIn = null;
long signSecret = 0, requestAccessToken = 0, verifySecret = 0; long signSecret = 0, requestAccessToken = 0, verifySecret = 0;
String verifyStateResult = verifyStateFromCookie(request, state, response); verifyStateFromCookie(request, state, response);
if (verifyStateResult != null) {
throw new EsiaException(verifyStateResult);
}
try { try {
String clientId = esiaConfig.getClientId(); String clientId = esiaConfig.getClientId();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy.MM.dd HH:mm:ss xx"); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy.MM.dd HH:mm:ss xx");
ZonedDateTime dt = ZonedDateTime.now(); ZonedDateTime dt = ZonedDateTime.now();
String timestamp = dt.format(formatter); String timestamp = dt.format(formatter);
String newState = UUID.randomUUID().toString();
String redirectUrl = esiaConfig.getRedirectUrl(); String redirectUrl = esiaConfig.getRedirectUrl();
String scope = esiaConfig.getEsiaScopes(); String scope = esiaConfig.getEsiaScopes();
@ -200,13 +200,14 @@ public class EsiaAuthService {
parameters.put("client_id", clientId); parameters.put("client_id", clientId);
parameters.put("scope", scope); parameters.put("scope", scope);
parameters.put("timestamp", timestamp); parameters.put("timestamp", timestamp);
parameters.put("state", newState); parameters.put("state", "%s");
parameters.put("redirect_uri", redirectUrl); parameters.put("redirect_uri", redirectUrl);
parameters.put("code", esiaAuthCode); parameters.put("code", esiaAuthCode);
long startTime = System.currentTimeMillis(); long startTime = System.currentTimeMillis();
String clientSecret = signMap(parameters); SignResponse signResponse = signMap(parameters);
signSecret = System.currentTimeMillis() - startTime; signSecret = System.currentTimeMillis() - startTime;
String newState = signResponse.getState();
String clientSecret = signResponse.getSignature();
String authUrl = esiaConfig.getEsiaBaseUri() + esiaConfig.getEsiaTokenUrl(); String authUrl = esiaConfig.getEsiaBaseUri() + esiaConfig.getEsiaTokenUrl();
String postBody = new FormUrlencoded() String postBody = new FormUrlencoded()
.setParameter("client_id", clientId) .setParameter("client_id", clientId)
@ -296,18 +297,19 @@ public class EsiaAuthService {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy.MM.dd HH:mm:ss xx"); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy.MM.dd HH:mm:ss xx");
ZonedDateTime dt = ZonedDateTime.now(); ZonedDateTime dt = ZonedDateTime.now();
String timestamp = dt.format(formatter); String timestamp = dt.format(formatter);
String state = UUID.randomUUID().toString();
String redirectUrl = esiaConfig.getRedirectUrl(); String redirectUrl = esiaConfig.getRedirectUrl();
Map<String, String> parameters = new LinkedHashMap<String, String>(); Map<String, String> parameters = new LinkedHashMap<String, String>();
parameters.put("client_id", clientId); parameters.put("client_id", clientId);
parameters.put("scope", esiaConfig.getEsiaScopes()); parameters.put("scope", esiaConfig.getEsiaScopes());
parameters.put("timestamp", timestamp); parameters.put("timestamp", timestamp);
parameters.put("state", state); parameters.put("state", "%s");
parameters.put("redirect_uri", esiaConfig.getRedirectUrl()); parameters.put("redirect_uri", esiaConfig.getRedirectUrl());
parameters.put("refresh_token", refreshToken); parameters.put("refresh_token", refreshToken);
String clientSecret = signMap(parameters); SignResponse signResponse = signMap(parameters);
String state = signResponse.getState();
String clientSecret = signResponse.getSignature();
String authUrl = esiaConfig.getEsiaBaseUri() + esiaConfig.getEsiaTokenUrl(); String authUrl = esiaConfig.getEsiaBaseUri() + esiaConfig.getEsiaTokenUrl();
String postBody = new FormUrlencoded() String postBody = new FormUrlencoded()
.setParameter("client_id", clientId) .setParameter("client_id", clientId)
@ -360,7 +362,7 @@ public class EsiaAuthService {
} }
} }
private String signMap(Map<String, String> paramsToSign) { private SignResponse signMap(Map<String, String> paramsToSign) {
try { try {
StringBuilder toSign = new StringBuilder(); StringBuilder toSign = new StringBuilder();
for (String s : paramsToSign.values()) { for (String s : paramsToSign.values()) {
@ -379,7 +381,7 @@ public class EsiaAuthService {
.build() .build()
.send(request, HttpResponse.BodyHandlers.ofString()); .send(request, HttpResponse.BodyHandlers.ofString());
errorHandler(response); errorHandler(response);
return response.body(); return objectMapper.readValue(response.body(), SignResponse.class);
} }
catch (Exception e) { catch (Exception e) {
@ -397,12 +399,20 @@ public class EsiaAuthService {
PersonModel personModel = null; PersonModel personModel = null;
String status = null; String status = null;
try { try {
String userId = jwtTokenService.getUserAccountId(request); try {
String accessToken = EsiaAuthInfoStore.getAccessToken(userId); String userId = jwtTokenService.getUserAccountId(request);
personModel = personalDataService.getPersonModel(accessToken); String accessToken = jwtTokenService.getAccessTokenByUserId(userId);
personModel = personalDataService.getPersonModel(accessToken);
EsiaAuthInfoStore.removeAccessToken(userId);
EsiaAuthInfoStore.removeRefreshToken(userId);
}
catch (UnauthorizedException e) {
//logout should always happen
}
catch (Exception e) {
LOGGER.error(e.getMessage());
}
securityHelper.clearAccessCookies(response); securityHelper.clearAccessCookies(response);
EsiaAuthInfoStore.removeAccessToken(userId);
EsiaAuthInfoStore.removeRefreshToken(userId);
String logoutUrl = esiaConfig.getEsiaBaseUri() + esiaConfig.getEsiaLogoutUrl(); String logoutUrl = esiaConfig.getEsiaBaseUri() + esiaConfig.getEsiaLogoutUrl();
String redirectUrl = esiaConfig.getLogoutRedirectUrl(); String redirectUrl = esiaConfig.getLogoutRedirectUrl();
URL url = new URL(logoutUrl); URL url = new URL(logoutUrl);
@ -521,17 +531,24 @@ public class EsiaAuthService {
} }
} }
private String verifyStateFromCookie(HttpServletRequest request, String state, HttpServletResponse response) { private void verifyStateFromCookie(HttpServletRequest request, String state, HttpServletResponse response) {
Cookie cookie = WebUtils.getCookie(request, PRNS_UUID); Cookie cookie = WebUtils.getCookie(request, PRNS_UUID);
Cookie stickySessionCookie = WebUtils.getCookie(request, STICKY_SESSION);
String stickySession = stickySessionCookie != null ? stickySessionCookie.getValue() : "is null";
if (cookie == null) { if (cookie == null) {
return "State invalid. Cookie not found"; throw new EsiaException(
"State invalid. Cookie not found. State: " + state + ". Sticky session: " + stickySession);
} }
String prnsUUID = cookie.getValue(); String prnsUUID = cookie.getValue();
if (!EsiaAuthInfoStore.containsState(prnsUUID, state)) { try {
return "State invalid. State from ESIA not equals with state before"; EsiaAuthInfoStore.validateState(prnsUUID, state, stickySession);
}
finally {
EsiaAuthInfoStore.removeState(prnsUUID);
LOGGER.info(
"Remove all states for prnsUUID: " + prnsUUID + ". State: " + state + ". Sticky session: "
+ stickySession);
securityHelper.clearAccessCookie(response, PRNS_UUID);
} }
EsiaAuthInfoStore.removeState(prnsUUID);
securityHelper.clearCookie(response, PRNS_UUID, "/");
return null;
} }
} }

View file

@ -14,8 +14,9 @@ import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.RequestContextHolder;
import static org.springframework.web.context.request.RequestAttributes.REFERENCE_REQUEST; import static org.springframework.web.context.request.RequestAttributes.REFERENCE_REQUEST;
import static ru.micord.ervu.security.webbpm.jwt.util.SecurityUtil.AUTH_MARKER; import static ru.micord.ervu.security.SecurityConstants.AUTH_MARKER;
import static ru.micord.ervu.security.webbpm.jwt.util.SecurityUtil.AUTH_TOKEN; import static ru.micord.ervu.security.SecurityConstants.AUTH_TOKEN;
import static ru.micord.ervu.security.SecurityConstants.PRNS_UUID;
public final class SecurityHelper { public final class SecurityHelper {
@Value("${cookie.path:#{null}}") @Value("${cookie.path:#{null}}")
@ -36,9 +37,7 @@ public final class SecurityHelper {
} }
public void clearAccessCookies(HttpServletResponse response) { public void clearAccessCookies(HttpServletResponse response) {
ResponseCookie emptyAuthToken = createCookie(AUTH_TOKEN, null, accessCookiePath) clearCookie(response, AUTH_TOKEN, accessCookiePath);
.maxAge(0).build();
addResponseCookie(response, emptyAuthToken);
ResponseCookie emptyAuthMarker = createCookie(AUTH_MARKER, null, "/") ResponseCookie emptyAuthMarker = createCookie(AUTH_MARKER, null, "/")
.maxAge(0) .maxAge(0)
@ -46,6 +45,7 @@ public final class SecurityHelper {
.httpOnly(false) .httpOnly(false)
.build(); .build();
addResponseCookie(response, emptyAuthMarker); addResponseCookie(response, emptyAuthMarker);
clearCookie(response, PRNS_UUID, accessCookiePath);
} }
public void clearCookie(HttpServletResponse response, String name, String path) { public void clearCookie(HttpServletResponse response, String name, String path) {
@ -92,4 +92,12 @@ public final class SecurityHelper {
.secure(accessCookieSecure) .secure(accessCookieSecure)
.sameSite(accessCookieSameSite); .sameSite(accessCookieSameSite);
} }
public ResponseCookie.ResponseCookieBuilder createAccessCookie(String name, String value) {
return createCookie(name, value, accessCookiePath);
}
public void clearAccessCookie(HttpServletResponse response, String name) {
clearCookie(response, name, accessCookiePath);
}
} }

View file

@ -88,6 +88,10 @@ public class JwtTokenService {
return EsiaAuthInfoStore.getRefreshToken(getUserAccountId(request)); return EsiaAuthInfoStore.getRefreshToken(getUserAccountId(request));
} }
public String getAccessTokenByUserId(String userId) {
return EsiaAuthInfoStore.getAccessToken(userId);
}
public String getUserAccountId(HttpServletRequest request) { public String getUserAccountId(HttpServletRequest request) {
String authToken = extractAuthToken(request); String authToken = extractAuthToken(request);

View file

@ -10,10 +10,9 @@ import org.springframework.web.util.WebUtils;
import ru.micord.ervu.security.webbpm.jwt.JwtAuthentication; import ru.micord.ervu.security.webbpm.jwt.JwtAuthentication;
import ru.micord.ervu.security.webbpm.jwt.UserIdsPair; import ru.micord.ervu.security.webbpm.jwt.UserIdsPair;
public final class SecurityUtil { import static ru.micord.ervu.security.SecurityConstants.AUTH_TOKEN;
public static final String AUTH_TOKEN = "auth_token";
public static final String AUTH_MARKER = "webbpm.ervu-lkrp-fl"; public final class SecurityUtil {
private SecurityUtil() { private SecurityUtil() {
//empty //empty

View file

@ -1748,9 +1748,9 @@
} }
}, },
"@webbpm/base-package": { "@webbpm/base-package": {
"version": "3.192.9", "version": "3.192.12",
"resolved": "https://repo.micord.ru/repository/npm-all/@webbpm/base-package/-/base-package-3.192.9.tgz", "resolved": "https://repo.micord.ru/repository/npm-all/@webbpm/base-package/-/base-package-3.192.12.tgz",
"integrity": "sha512-W93LcQTm/OUGwRLJqyffNOqs0Uv9F4bdV26SqZr4QWngPeWKQ0pO8Jg5Lsy7d0xTVN4rfMM/NEaU2FYCC/yKzw==", "integrity": "sha512-IZvSvh7fgPTe8TIISvARjVV4xFsTQbLEfmxw5Pi493TYDMIAEWAH0zoIHh7ZTHBDSS598lvjpFCOKxduP26ywg==",
"requires": { "requires": {
"tslib": "^1.9.0" "tslib": "^1.9.0"
} }

View file

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

View file

@ -81,7 +81,7 @@ body.webbpm.ervu_lkrp_fl {
--size-text-title: 36px; --size-text-title: 36px;
--size-text-subtitle: 20px; --size-text-subtitle: 20px;
--size-text-primary: 18px; --size-text-primary: 18px;
--size-text-secondary: 16px; --size-text-secondary: 16px;
--indent-huge: 48px; --indent-huge: 48px;
--indent-big: 40px; --indent-big: 40px;
@ -101,7 +101,7 @@ body.webbpm.ervu_lkrp_fl {
} }
.webbpm.ervu_lkrp_fl a { .webbpm.ervu_lkrp_fl a {
color: var(--color-link); color: var(--color-link);
text-decoration: none; text-decoration: none;
} }
.webbpm.ervu_lkrp_fl a:is(:hover, :focus, :active) { .webbpm.ervu_lkrp_fl a:is(:hover, :focus, :active) {
@ -109,7 +109,7 @@ body.webbpm.ervu_lkrp_fl {
} }
.webbpm.ervu_lkrp_fl .header { .webbpm.ervu_lkrp_fl .header {
font-family: 'Inter'; font-family: 'Inter';
min-height: var(--h-header); min-height: var(--h-header);
border: 0; border: 0;
background-color: var(--color-text-primary); background-color: var(--color-text-primary);
@ -138,7 +138,7 @@ body.webbpm.ervu_lkrp_fl {
} }
.webbpm.ervu_lkrp_fl .header .header-logo .header-menu-left { .webbpm.ervu_lkrp_fl .header .header-logo .header-menu-left {
font-family: 'InterL'; font-family: 'InterL';
margin-left: 24px; margin-left: 24px;
} }
.webbpm.ervu_lkrp_fl .header .header-menu { .webbpm.ervu_lkrp_fl .header .header-menu {
margin-right: var(--w-screen); margin-right: var(--w-screen);
@ -210,7 +210,7 @@ body.webbpm.ervu_lkrp_fl {
top: auto; top: auto;
bottom: auto; bottom: auto;
left: auto; left: auto;
right: auto; right: auto;
height: var(--h-footer); height: var(--h-footer);
border: 0; border: 0;
background-color: var(--color-text-primary); background-color: var(--color-text-primary);
@ -226,7 +226,7 @@ body.webbpm.ervu_lkrp_fl {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
font-family: 'Inter'; font-family: 'Inter';
height: 100%; height: 100%;
padding: 0; padding: 0;
overflow: auto; overflow: auto;
} }
@ -290,6 +290,13 @@ body.webbpm.ervu_lkrp_fl {
max-width: 85px; max-width: 85px;
overflow: hidden; overflow: hidden;
} }
.webbpm.ervu_lkrp_fl .overlay-container {
width: calc(100% - 30px);
}
.webbpm.ervu_lkrp_fl #toast-container .toast-error {
width: 100%;
min-width: auto;
}
} }
/*----------------- Login ---------------- */ /*----------------- Login ---------------- */
@ -377,7 +384,16 @@ body.webbpm.ervu_lkrp_fl {
} }
/*--------------- end Login -------------- */ /*--------------- end Login -------------- */
.webbpm.ervu_lkrp_fl .loader { .webbpm.ervu_lkrp_fl .modal.show.loader .modal-content {
background: none;
border: none;
}
.webbpm.ervu_lkrp_fl .modal.show.loader .modal-dialog {
margin: auto;
}
.webbpm.ervu_lkrp_fl .loader:not(.modal) {
font-size: 15px; font-size: 15px;
left: calc(50% - 0.4em); left: calc(50% - 0.4em);
top: calc(50% - 0.4em); top: calc(50% - 0.4em);
@ -415,4 +431,4 @@ body.webbpm.ervu_lkrp_fl {
87.5% { 87.5% {
box-shadow: 0em -2.6em 0em 0em rgba(198, 78, 27, 0.3), 1.8em -1.8em 0 0em rgba(198, 78, 27, 0.3), 2.5em 0em 0 0em rgba(198, 78, 27, 0.3), 1.75em 1.75em 0 0em rgba(198, 78, 27, 0.3), 0em 2.5em 0 0em rgba(198, 78, 27, 0.3), -1.8em 1.8em 0 0em rgba(198, 78, 27, 0.7), -2.6em 0em 0 0em rgba(198, 78, 27, 1), -1.8em -1.8em 0 0em #ffffff; box-shadow: 0em -2.6em 0em 0em rgba(198, 78, 27, 0.3), 1.8em -1.8em 0 0em rgba(198, 78, 27, 0.3), 2.5em 0em 0 0em rgba(198, 78, 27, 0.3), 1.75em 1.75em 0 0em rgba(198, 78, 27, 0.3), 0em 2.5em 0 0em rgba(198, 78, 27, 0.3), -1.8em 1.8em 0 0em rgba(198, 78, 27, 0.7), -2.6em 0em 0 0em rgba(198, 78, 27, 1), -1.8em -1.8em 0 0em #ffffff;
} }
} }

View file

@ -14,7 +14,6 @@ import {
import {AppHeaderComponent} from "./component/app-header.component"; import {AppHeaderComponent} from "./component/app-header.component";
import {AppFooterComponent} from "./component/app-footer.component"; import {AppFooterComponent} from "./component/app-footer.component";
import {AccessDeniedComponent} from "./component/access-denied.component"; import {AccessDeniedComponent} from "./component/access-denied.component";
import {ApplicationVersionComponent} from "./component/application-version.component";
import {RouterModule} from "@angular/router"; import {RouterModule} from "@angular/router";
import {InternationalPhoneNumberModule} from "ngx-international-phone-number"; import {InternationalPhoneNumberModule} from "ngx-international-phone-number";
import {AppProgressIndicationComponent} from "./component/app-progress-indication.component"; import {AppProgressIndicationComponent} from "./component/app-progress-indication.component";
@ -31,7 +30,6 @@ registerLocaleData(localeRu);
export const DIRECTIVES = [ export const DIRECTIVES = [
forwardRef(() => AppHeaderComponent), forwardRef(() => AppHeaderComponent),
forwardRef(() => AppFooterComponent), forwardRef(() => AppFooterComponent),
forwardRef(() => ApplicationVersionComponent),
forwardRef(() => LogOutComponent), forwardRef(() => LogOutComponent),
forwardRef(() => AccessDeniedComponent), forwardRef(() => AccessDeniedComponent),
forwardRef(() => AppProgressIndicationComponent), forwardRef(() => AppProgressIndicationComponent),

View file

@ -1,24 +0,0 @@
import {ChangeDetectionStrategy, ChangeDetectorRef, Component, Input} from "@angular/core";
import {HttpClient} from "@angular/common/http";
@Component({
moduleId: module.id,
selector: "application-version",
templateUrl: "../../../../../src/resources/template/app/component/application_version.html",
changeDetection: ChangeDetectionStrategy.OnPush
})
export class ApplicationVersionComponent {
@Input()
public applicationVersion: string;
constructor(private httpClient: HttpClient, private cd: ChangeDetectorRef) {
this.loadAppVersion(); //TODO: check version url
}
private loadAppVersion() {
this.httpClient.get("version").toPromise().then((version: any) => {
this.applicationVersion = version.number;
this.cd.markForCheck();
})
}
}

View file

@ -13,7 +13,7 @@ export class AuthenticationService {
} }
checkAuthentication(): Promise<any>{ checkAuthentication(): Promise<any>{
return this.appConfigService.load().then(() => this.http.get<any>("version").toPromise()) return this.appConfigService.load().then(() => this.http.get<any>("health").toPromise());
} }
logout(): Promise<string> { logout(): Promise<string> {

View file

@ -2,7 +2,7 @@ import {Injectable} from "@angular/core";
import {ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot} from "@angular/router"; import {ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot} from "@angular/router";
import {Observable} from "rxjs"; import {Observable} from "rxjs";
import {HttpClient, HttpParams} from "@angular/common/http"; import {HttpClient, HttpParams} from "@angular/common/http";
import {MessagesService} from "@webbpm/base-package"; import {MessagesService, ProgressIndicationService} from "@webbpm/base-package";
import {AuthenticationService} from "../authentication.service"; import {AuthenticationService} from "../authentication.service";
import {EsiaErrorDetail} from "../EsiaErrorDetail"; import {EsiaErrorDetail} from "../EsiaErrorDetail";
@ -13,6 +13,7 @@ export abstract class AuthGuard implements CanActivate {
protected router: Router, protected router: Router,
private httpClient: HttpClient, private httpClient: HttpClient,
private authenticationService: AuthenticationService, private authenticationService: AuthenticationService,
private progressIndicationService: ProgressIndicationService,
private messageService: MessagesService private messageService: MessagesService
) { ) {
} }
@ -28,6 +29,9 @@ export abstract class AuthGuard implements CanActivate {
let state = params.get('state'); let state = params.get('state');
let error = params.get('error'); let error = params.get('error');
let errorDescription = params.get('error_description'); let errorDescription = params.get('error_description');
if (code || state || error || errorDescription) {
window.history.replaceState({}, document.title, url.pathname);
}
if (isAccess) { if (isAccess) {
return true; return true;
} }
@ -41,8 +45,10 @@ export abstract class AuthGuard implements CanActivate {
let consoleError = error + ', error description = ' + errorDescription; let consoleError = error + ', error description = ' + errorDescription;
this.messageService.error(errorMessage); this.messageService.error(errorMessage);
console.error(consoleError); console.error(consoleError);
return false;
} }
if (code && state) { if (code && state) {
this.progressIndicationService.showProgressBar();
const params = new HttpParams().set('code', code).set('state', state); const params = new HttpParams().set('code', code).set('state', state);
this.httpClient.get("esia/auth", this.httpClient.get("esia/auth",
{ {
@ -56,6 +62,7 @@ export abstract class AuthGuard implements CanActivate {
.toPromise() .toPromise()
.then( .then(
() => { () => {
this.progressIndicationService.hideProgressBar();
window.open(url.origin + url.pathname, "_self"); window.open(url.origin + url.pathname, "_self");
}) })
.catch(reason => { .catch(reason => {
@ -63,7 +70,8 @@ export abstract class AuthGuard implements CanActivate {
json.messages.forEach((errorMessage) => { json.messages.forEach((errorMessage) => {
this.messageService.error(errorMessage, json); this.messageService.error(errorMessage, json);
}) })
}); })
.finally(() => this.progressIndicationService.hideProgressBar());
return false; return false;
} }
else { else {

View file

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

View file

@ -60,7 +60,7 @@
<ul> <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;&#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.192.9</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.12</code></li>
</ul> </ul>
</li> </li>
<li> <li>

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -8,11 +8,11 @@
<documentation>component/editable-grids/EditableGrid.html</documentation> <documentation>component/editable-grids/EditableGrid.html</documentation>
<internal>false</internal> <internal>false</internal>
<versions> <versions>
<studioVersion>3.192.9</studioVersion> <studioVersion>3.192.12</studioVersion>
<packageVersions> <packageVersions>
<entry> <entry>
<key>ru.cg.webbpm.packages.base.resources</key> <key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.9</value> <value>3.192.12</value>
</entry> </entry>
</packageVersions> </packageVersions>
</versions> </versions>
@ -181,5 +181,12 @@
</classRef> </classRef>
<enabled>true</enabled> <enabled>true</enabled>
</scripts> </scripts>
<scripts id="2db2ad18-0ad6-4965-962c-9f98b199cac0">
<classRef type="TS">
<className>RequiredFieldValidator</className>
<packageName>scripts</packageName>
</classRef>
<enabled>true</enabled>
</scripts>
</rootObject> </rootObject>
</xmlComponent> </xmlComponent>

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -8,11 +8,11 @@
<documentation>component/fields/EditableOneToMany.html</documentation> <documentation>component/fields/EditableOneToMany.html</documentation>
<internal>false</internal> <internal>false</internal>
<versions> <versions>
<studioVersion>3.192.9</studioVersion> <studioVersion>3.192.12</studioVersion>
<packageVersions> <packageVersions>
<entry> <entry>
<key>ru.cg.webbpm.packages.base.resources</key> <key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.9</value> <value>3.192.12</value>
</entry> </entry>
</packageVersions> </packageVersions>
</versions> </versions>
@ -371,6 +371,13 @@
</entry> </entry>
</properties> </properties>
</scripts> </scripts>
<scripts id="64f66c80-bec2-4745-ad6d-d13bceebf5df">
<classRef type="TS">
<className>RequiredFieldValidator</className>
<packageName>scripts</packageName>
</classRef>
<enabled>true</enabled>
</scripts>
</children> </children>
<children id="a5848add-1dcf-45d2-8918-12d2aaf7f827"> <children id="a5848add-1dcf-45d2-8918-12d2aaf7f827">
<prototypeId>86f297f1-ab3d-40e0-ac2f-89cc944b7f0a</prototypeId> <prototypeId>86f297f1-ab3d-40e0-ac2f-89cc944b7f0a</prototypeId>

View file

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

View file

@ -8,11 +8,11 @@
<documentation>component/fields/Файл.html</documentation> <documentation>component/fields/Файл.html</documentation>
<internal>false</internal> <internal>false</internal>
<versions> <versions>
<studioVersion>3.192.9</studioVersion> <studioVersion>3.192.12</studioVersion>
<packageVersions> <packageVersions>
<entry> <entry>
<key>ru.cg.webbpm.packages.base.resources</key> <key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.9</value> <value>3.192.12</value>
</entry> </entry>
</packageVersions> </packageVersions>
</versions> </versions>
@ -133,5 +133,12 @@
<expanded>true</expanded> <expanded>true</expanded>
<properties/> <properties/>
</scripts> </scripts>
<scripts id="daf1f718-6fad-4bdb-9690-1229d0c8bb2d">
<classRef type="TS">
<className>FileUploadValidator</className>
<packageName>component.field.validation</packageName>
</classRef>
<enabled>true</enabled>
</scripts>
</rootObject> </rootObject>
</xmlComponent> </xmlComponent>

View file

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

View file

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

View file

@ -8,11 +8,11 @@
<documentation>component/fields/Денежное_поле.html</documentation> <documentation>component/fields/Денежное_поле.html</documentation>
<internal>true</internal> <internal>true</internal>
<versions> <versions>
<studioVersion>3.192.9</studioVersion> <studioVersion>3.192.12</studioVersion>
<packageVersions> <packageVersions>
<entry> <entry>
<key>ru.cg.webbpm.packages.base.resources</key> <key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.9</value> <value>3.192.12</value>
</entry> </entry>
</packageVersions> </packageVersions>
</versions> </versions>

View file

@ -8,11 +8,11 @@
<documentation>component/fields/Числовое_поле.html</documentation> <documentation>component/fields/Числовое_поле.html</documentation>
<internal>false</internal> <internal>false</internal>
<versions> <versions>
<studioVersion>3.192.9</studioVersion> <studioVersion>3.192.12</studioVersion>
<packageVersions> <packageVersions>
<entry> <entry>
<key>ru.cg.webbpm.packages.base.resources</key> <key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.9</value> <value>3.192.12</value>
</entry> </entry>
</packageVersions> </packageVersions>
</versions> </versions>

View file

@ -8,11 +8,11 @@
<documentation>component/fields/OneToMany.html</documentation> <documentation>component/fields/OneToMany.html</documentation>
<internal>true</internal> <internal>true</internal>
<versions> <versions>
<studioVersion>3.192.9</studioVersion> <studioVersion>3.192.12</studioVersion>
<packageVersions> <packageVersions>
<entry> <entry>
<key>ru.cg.webbpm.packages.base.resources</key> <key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.9</value> <value>3.192.12</value>
</entry> </entry>
</packageVersions> </packageVersions>
</versions> </versions>

View file

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

View file

@ -8,11 +8,11 @@
<documentation>component/fields/Переключатель.html</documentation> <documentation>component/fields/Переключатель.html</documentation>
<internal>false</internal> <internal>false</internal>
<versions> <versions>
<studioVersion>3.192.9</studioVersion> <studioVersion>3.192.12</studioVersion>
<packageVersions> <packageVersions>
<entry> <entry>
<key>ru.cg.webbpm.packages.base.resources</key> <key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.9</value> <value>3.192.12</value>
</entry> </entry>
</packageVersions> </packageVersions>
</versions> </versions>

View file

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

View file

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

View file

@ -8,11 +8,11 @@
<documentation>component/fields/Статичный_переключатель.html</documentation> <documentation>component/fields/Статичный_переключатель.html</documentation>
<internal>false</internal> <internal>false</internal>
<versions> <versions>
<studioVersion>3.192.9</studioVersion> <studioVersion>3.192.12</studioVersion>
<packageVersions> <packageVersions>
<entry> <entry>
<key>ru.cg.webbpm.packages.base.resources</key> <key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.9</value> <value>3.192.12</value>
</entry> </entry>
</packageVersions> </packageVersions>
</versions> </versions>

View file

@ -8,11 +8,11 @@
<documentation>component/fields/Текст.html</documentation> <documentation>component/fields/Текст.html</documentation>
<internal>false</internal> <internal>false</internal>
<versions> <versions>
<studioVersion>3.192.9</studioVersion> <studioVersion>3.192.12</studioVersion>
<packageVersions> <packageVersions>
<entry> <entry>
<key>ru.cg.webbpm.packages.base.resources</key> <key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.9</value> <value>3.192.12</value>
</entry> </entry>
</packageVersions> </packageVersions>
</versions> </versions>

View file

@ -8,11 +8,11 @@
<documentation>component/fields/Многострочное_поле.html</documentation> <documentation>component/fields/Многострочное_поле.html</documentation>
<internal>false</internal> <internal>false</internal>
<versions> <versions>
<studioVersion>3.192.9</studioVersion> <studioVersion>3.192.12</studioVersion>
<packageVersions> <packageVersions>
<entry> <entry>
<key>ru.cg.webbpm.packages.base.resources</key> <key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.9</value> <value>3.192.12</value>
</entry> </entry>
</packageVersions> </packageVersions>
</versions> </versions>

View file

@ -8,11 +8,11 @@
<documentation>component/fields/Текстовое_поле.html</documentation> <documentation>component/fields/Текстовое_поле.html</documentation>
<internal>false</internal> <internal>false</internal>
<versions> <versions>
<studioVersion>3.192.9</studioVersion> <studioVersion>3.192.12</studioVersion>
<packageVersions> <packageVersions>
<entry> <entry>
<key>ru.cg.webbpm.packages.base.resources</key> <key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.9</value> <value>3.192.12</value>
</entry> </entry>
</packageVersions> </packageVersions>
</versions> </versions>

View file

@ -8,11 +8,11 @@
<documentation>component/fields/Время.html</documentation> <documentation>component/fields/Время.html</documentation>
<internal>false</internal> <internal>false</internal>
<versions> <versions>
<studioVersion>3.192.9</studioVersion> <studioVersion>3.192.12</studioVersion>
<packageVersions> <packageVersions>
<entry> <entry>
<key>ru.cg.webbpm.packages.base.resources</key> <key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.9</value> <value>3.192.12</value>
</entry> </entry>
</packageVersions> </packageVersions>
</versions> </versions>

View file

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

View file

@ -5,11 +5,11 @@
<localization>META-INF/components/localization/editable-grid</localization> <localization>META-INF/components/localization/editable-grid</localization>
<internal>true</internal> <internal>true</internal>
<versions> <versions>
<studioVersion>3.192.9</studioVersion> <studioVersion>3.192.12</studioVersion>
<packageVersions> <packageVersions>
<entry> <entry>
<key>ru.cg.webbpm.packages.base.resources</key> <key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.9</value> <value>3.192.12</value>
</entry> </entry>
</packageVersions> </packageVersions>
</versions> </versions>

View file

@ -4,11 +4,11 @@
<name>EditableOneToManyForm</name> <name>EditableOneToManyForm</name>
<internal>true</internal> <internal>true</internal>
<versions> <versions>
<studioVersion>3.192.9</studioVersion> <studioVersion>3.192.12</studioVersion>
<packageVersions> <packageVersions>
<entry> <entry>
<key>ru.cg.webbpm.packages.base.resources</key> <key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.9</value> <value>3.192.12</value>
</entry> </entry>
</packageVersions> </packageVersions>
</versions> </versions>

View file

@ -5,11 +5,11 @@
<localization>META-INF/components/localization/fields/file-upload-field</localization> <localization>META-INF/components/localization/fields/file-upload-field</localization>
<internal>true</internal> <internal>true</internal>
<versions> <versions>
<studioVersion>3.192.9</studioVersion> <studioVersion>3.192.12</studioVersion>
<packageVersions> <packageVersions>
<entry> <entry>
<key>ru.cg.webbpm.packages.base.resources</key> <key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.9</value> <value>3.192.12</value>
</entry> </entry>
</packageVersions> </packageVersions>
</versions> </versions>

View file

@ -8,11 +8,11 @@
<documentation>component/fields/filters/Фильтр_по_полю_адреса.html</documentation> <documentation>component/fields/filters/Фильтр_по_полю_адреса.html</documentation>
<internal>false</internal> <internal>false</internal>
<versions> <versions>
<studioVersion>3.192.9</studioVersion> <studioVersion>3.192.12</studioVersion>
<packageVersions> <packageVersions>
<entry> <entry>
<key>ru.cg.webbpm.packages.base.resources</key> <key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.9</value> <value>3.192.12</value>
</entry> </entry>
</packageVersions> </packageVersions>
</versions> </versions>

View file

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

View file

@ -8,11 +8,11 @@
<documentation>component/fields/filters/Фильтр_поомпоненте_Флаг.html</documentation> <documentation>component/fields/filters/Фильтр_поомпоненте_Флаг.html</documentation>
<internal>false</internal> <internal>false</internal>
<versions> <versions>
<studioVersion>3.192.9</studioVersion> <studioVersion>3.192.12</studioVersion>
<packageVersions> <packageVersions>
<entry> <entry>
<key>ru.cg.webbpm.packages.base.resources</key> <key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.9</value> <value>3.192.12</value>
</entry> </entry>
</packageVersions> </packageVersions>
</versions> </versions>

View file

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

View file

@ -8,11 +8,11 @@
<documentation>component/fields/filters/Фильтр_по_выпадающему_списку.html</documentation> <documentation>component/fields/filters/Фильтр_по_выпадающему_списку.html</documentation>
<internal>false</internal> <internal>false</internal>
<versions> <versions>
<studioVersion>3.192.9</studioVersion> <studioVersion>3.192.12</studioVersion>
<packageVersions> <packageVersions>
<entry> <entry>
<key>ru.cg.webbpm.packages.base.resources</key> <key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.9</value> <value>3.192.12</value>
</entry> </entry>
</packageVersions> </packageVersions>
</versions> </versions>

View file

@ -8,11 +8,11 @@
<documentation>component/fields/filters/Фильтр_поате.html</documentation> <documentation>component/fields/filters/Фильтр_поате.html</documentation>
<internal>false</internal> <internal>false</internal>
<versions> <versions>
<studioVersion>3.192.9</studioVersion> <studioVersion>3.192.12</studioVersion>
<packageVersions> <packageVersions>
<entry> <entry>
<key>ru.cg.webbpm.packages.base.resources</key> <key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.9</value> <value>3.192.12</value>
</entry> </entry>
</packageVersions> </packageVersions>
</versions> </versions>

View file

@ -8,11 +8,11 @@
<documentation>component/fields/filters/Фильтр_по_числовому_полю.html</documentation> <documentation>component/fields/filters/Фильтр_по_числовому_полю.html</documentation>
<internal>false</internal> <internal>false</internal>
<versions> <versions>
<studioVersion>3.192.9</studioVersion> <studioVersion>3.192.12</studioVersion>
<packageVersions> <packageVersions>
<entry> <entry>
<key>ru.cg.webbpm.packages.base.resources</key> <key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.9</value> <value>3.192.12</value>
</entry> </entry>
</packageVersions> </packageVersions>
</versions> </versions>

View file

@ -8,11 +8,11 @@
<documentation>component/fields/filters/Переключатель.html</documentation> <documentation>component/fields/filters/Переключатель.html</documentation>
<internal>false</internal> <internal>false</internal>
<versions> <versions>
<studioVersion>3.192.9</studioVersion> <studioVersion>3.192.12</studioVersion>
<packageVersions> <packageVersions>
<entry> <entry>
<key>ru.cg.webbpm.packages.base.resources</key> <key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.9</value> <value>3.192.12</value>
</entry> </entry>
</packageVersions> </packageVersions>
</versions> </versions>

View file

@ -8,11 +8,11 @@
<documentation>component/fields/filters/Фильтр_по_статичному_выпадающему_списку.html</documentation> <documentation>component/fields/filters/Фильтр_по_статичному_выпадающему_списку.html</documentation>
<internal>false</internal> <internal>false</internal>
<versions> <versions>
<studioVersion>3.192.9</studioVersion> <studioVersion>3.192.12</studioVersion>
<packageVersions> <packageVersions>
<entry> <entry>
<key>ru.cg.webbpm.packages.base.resources</key> <key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.9</value> <value>3.192.12</value>
</entry> </entry>
</packageVersions> </packageVersions>
</versions> </versions>

View file

@ -8,11 +8,11 @@
<documentation>component/fields/filters/Фильтр_по_полю_многострочного_ввода.html</documentation> <documentation>component/fields/filters/Фильтр_по_полю_многострочного_ввода.html</documentation>
<internal>false</internal> <internal>false</internal>
<versions> <versions>
<studioVersion>3.192.9</studioVersion> <studioVersion>3.192.12</studioVersion>
<packageVersions> <packageVersions>
<entry> <entry>
<key>ru.cg.webbpm.packages.base.resources</key> <key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.9</value> <value>3.192.12</value>
</entry> </entry>
</packageVersions> </packageVersions>
</versions> </versions>

View file

@ -8,11 +8,11 @@
<documentation>component/fields/filters/Текстовое_поле.html</documentation> <documentation>component/fields/filters/Текстовое_поле.html</documentation>
<internal>false</internal> <internal>false</internal>
<versions> <versions>
<studioVersion>3.192.9</studioVersion> <studioVersion>3.192.12</studioVersion>
<packageVersions> <packageVersions>
<entry> <entry>
<key>ru.cg.webbpm.packages.base.resources</key> <key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.9</value> <value>3.192.12</value>
</entry> </entry>
</packageVersions> </packageVersions>
</versions> </versions>

View file

@ -5,11 +5,11 @@
<localization>META-INF/components/localization/fields/link-field</localization> <localization>META-INF/components/localization/fields/link-field</localization>
<internal>true</internal> <internal>true</internal>
<versions> <versions>
<studioVersion>3.192.9</studioVersion> <studioVersion>3.192.12</studioVersion>
<packageVersions> <packageVersions>
<entry> <entry>
<key>ru.cg.webbpm.packages.base.resources</key> <key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.9</value> <value>3.192.12</value>
</entry> </entry>
</packageVersions> </packageVersions>
</versions> </versions>
@ -182,5 +182,12 @@
<expanded>true</expanded> <expanded>true</expanded>
<properties/> <properties/>
</scripts> </scripts>
<scripts id="0adea248-242f-4141-8160-619d8b6e40a9">
<classRef type="TS">
<className>RequiredFieldValidator</className>
<packageName>scripts</packageName>
</classRef>
<enabled>true</enabled>
</scripts>
</rootObject> </rootObject>
</xmlComponent> </xmlComponent>

View file

@ -5,11 +5,11 @@
<localization>META-INF/components/localization/fields/multi-value-field</localization> <localization>META-INF/components/localization/fields/multi-value-field</localization>
<internal>true</internal> <internal>true</internal>
<versions> <versions>
<studioVersion>3.192.9</studioVersion> <studioVersion>3.192.12</studioVersion>
<packageVersions> <packageVersions>
<entry> <entry>
<key>ru.cg.webbpm.packages.base.resources</key> <key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.9</value> <value>3.192.12</value>
</entry> </entry>
</packageVersions> </packageVersions>
</versions> </versions>

View file

@ -8,11 +8,11 @@
<documentation>component/grids/Таблица.html</documentation> <documentation>component/grids/Таблица.html</documentation>
<internal>true</internal> <internal>true</internal>
<versions> <versions>
<studioVersion>3.192.9</studioVersion> <studioVersion>3.192.12</studioVersion>
<packageVersions> <packageVersions>
<entry> <entry>
<key>ru.cg.webbpm.packages.base.resources</key> <key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.9</value> <value>3.192.12</value>
</entry> </entry>
</packageVersions> </packageVersions>
</versions> </versions>

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