@astral/features 2.19.0 → 2.20.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cryproPro/components/CryptoProCertAutocomplete/AutocompleteListItem/AutocompleteListItem.d.ts +13 -0
- package/cryproPro/components/CryptoProCertAutocomplete/AutocompleteListItem/AutocompleteListItem.js +20 -0
- package/cryproPro/components/CryptoProCertAutocomplete/AutocompleteListItem/index.d.ts +1 -0
- package/cryproPro/components/CryptoProCertAutocomplete/AutocompleteListItem/index.js +1 -0
- package/cryproPro/components/CryptoProCertAutocomplete/AutocompleteListItem/styles.d.ts +361 -0
- package/cryproPro/components/CryptoProCertAutocomplete/AutocompleteListItem/styles.js +45 -0
- package/cryproPro/components/CryptoProCertAutocomplete/AutocompleteListItem/utils/getShortFullName/getShortFullName.d.ts +1 -0
- package/cryproPro/components/CryptoProCertAutocomplete/AutocompleteListItem/utils/getShortFullName/getShortFullName.js +8 -0
- package/cryproPro/components/CryptoProCertAutocomplete/AutocompleteListItem/utils/getShortFullName/getShortFullName.test.d.ts +1 -0
- package/cryproPro/components/CryptoProCertAutocomplete/AutocompleteListItem/utils/getShortFullName/getShortFullName.test.js +9 -0
- package/cryproPro/components/CryptoProCertAutocomplete/AutocompleteListItem/utils/getShortFullName/index.d.ts +1 -0
- package/cryproPro/components/CryptoProCertAutocomplete/AutocompleteListItem/utils/getShortFullName/index.js +1 -0
- package/cryproPro/components/CryptoProCertAutocomplete/AutocompleteListItem/utils/index.d.ts +1 -0
- package/cryproPro/components/CryptoProCertAutocomplete/AutocompleteListItem/utils/index.js +1 -0
- package/cryproPro/components/CryptoProCertAutocomplete/CryptoProCertAutocomplete.d.ts +7 -0
- package/cryproPro/components/CryptoProCertAutocomplete/CryptoProCertAutocomplete.js +29 -0
- package/cryproPro/components/CryptoProCertAutocomplete/index.d.ts +1 -0
- package/cryproPro/components/CryptoProCertAutocomplete/index.js +1 -0
- package/cryproPro/components/CryptoProCertAutocomplete/utils/index.d.ts +1 -0
- package/cryproPro/components/CryptoProCertAutocomplete/utils/index.js +1 -0
- package/cryproPro/components/CryptoProCertAutocomplete/utils/transformCertificates/index.d.ts +1 -0
- package/cryproPro/components/CryptoProCertAutocomplete/utils/transformCertificates/index.js +1 -0
- package/cryproPro/components/CryptoProCertAutocomplete/utils/transformCertificates/transformCertificates.d.ts +12 -0
- package/cryproPro/components/CryptoProCertAutocomplete/utils/transformCertificates/transformCertificates.js +18 -0
- package/cryproPro/components/CryptoProCertAutocomplete/utils/transformCertificates/transformCertificates.test.d.ts +1 -0
- package/cryproPro/components/CryptoProCertAutocomplete/utils/transformCertificates/transformCertificates.test.js +61 -0
- package/cryproPro/components/CryptoProCertFormAutocomplete/CryptoProCertFormAutocomplete.d.ts +8 -0
- package/cryproPro/components/CryptoProCertFormAutocomplete/CryptoProCertFormAutocomplete.js +11 -0
- package/cryproPro/components/CryptoProCertFormAutocomplete/index.d.ts +1 -0
- package/cryproPro/components/CryptoProCertFormAutocomplete/index.js +1 -0
- package/cryproPro/components/CryptoProProvider/CryptoProProvider.d.ts +14 -0
- package/cryproPro/components/CryptoProProvider/CryptoProProvider.js +14 -0
- package/cryproPro/components/CryptoProProvider/index.d.ts +1 -0
- package/cryproPro/components/CryptoProProvider/index.js +1 -0
- package/cryproPro/components/SetupCryptoProWorkspaceModal/CryptoproviderInfo/CryptoproviderInfo.d.ts +7 -0
- package/cryproPro/components/SetupCryptoProWorkspaceModal/CryptoproviderInfo/CryptoproviderInfo.js +25 -0
- package/cryproPro/components/SetupCryptoProWorkspaceModal/CryptoproviderInfo/index.d.ts +1 -0
- package/cryproPro/components/SetupCryptoProWorkspaceModal/CryptoproviderInfo/index.js +1 -0
- package/cryproPro/components/SetupCryptoProWorkspaceModal/CryptoproviderInfo/styles.d.ts +5 -0
- package/cryproPro/components/SetupCryptoProWorkspaceModal/CryptoproviderInfo/styles.js +12 -0
- package/cryproPro/components/SetupCryptoProWorkspaceModal/PluginInfo/PluginInfo.d.ts +7 -0
- package/cryproPro/components/SetupCryptoProWorkspaceModal/PluginInfo/PluginInfo.js +11 -0
- package/cryproPro/components/SetupCryptoProWorkspaceModal/PluginInfo/index.d.ts +1 -0
- package/cryproPro/components/SetupCryptoProWorkspaceModal/PluginInfo/index.js +1 -0
- package/cryproPro/components/SetupCryptoProWorkspaceModal/SetupCryptoProWorkspaceModal.d.ts +8 -1
- package/cryproPro/components/SetupCryptoProWorkspaceModal/SetupCryptoProWorkspaceModal.js +11 -4
- package/cryproPro/components/SetupCryptoProWorkspaceModal/styles.d.ts +9 -0
- package/cryproPro/components/SetupCryptoProWorkspaceModal/styles.js +18 -0
- package/cryproPro/components/index.d.ts +3 -0
- package/cryproPro/components/index.js +3 -0
- package/cryproPro/constants/enums.d.ts +5 -0
- package/cryproPro/constants/enums.js +6 -0
- package/cryproPro/constants/error.d.ts +3 -0
- package/cryproPro/constants/error.js +3 -0
- package/cryproPro/constants/index.d.ts +2 -0
- package/cryproPro/constants/index.js +2 -0
- package/cryproPro/index.d.ts +2 -1
- package/cryproPro/index.js +2 -1
- package/cryproPro/services/CryptoProCertificateService/CryptoProCertificateService.d.ts +28 -1
- package/cryproPro/services/CryptoProCertificateService/CryptoProCertificateService.js +53 -1
- package/cryproPro/services/CryptoProCertificateService/CryptoProCertificateService.test.d.ts +4 -1
- package/cryproPro/services/CryptoProCertificateService/CryptoProCertificateService.test.js +117 -2
- package/cryproPro/services/CryptoProCertificateService/index.d.ts +1 -0
- package/cryproPro/services/CryptoProCertificateService/index.js +1 -0
- package/cryproPro/services/CryptoProCertificateService/utils/convertBase64toBlob/convertBase64toBlob.d.ts +1 -0
- package/cryproPro/services/CryptoProCertificateService/utils/convertBase64toBlob/convertBase64toBlob.js +3 -0
- package/cryproPro/services/CryptoProCertificateService/utils/convertBase64toBlob/index.d.ts +1 -0
- package/cryproPro/services/CryptoProCertificateService/utils/convertBase64toBlob/index.js +1 -0
- package/cryproPro/services/CryptoProCertificateService/utils/getCertificateExpiresDate/getCertificateExpiresDate.d.ts +1 -0
- package/cryproPro/services/CryptoProCertificateService/utils/getCertificateExpiresDate/getCertificateExpiresDate.js +6 -0
- package/cryproPro/services/CryptoProCertificateService/utils/getCertificateExpiresDate/index.d.ts +1 -0
- package/cryproPro/services/CryptoProCertificateService/utils/getCertificateExpiresDate/index.js +1 -0
- package/cryproPro/services/CryptoProCertificateService/utils/getCertificateOwnerShortName/getCertificateOwnerShortName.d.ts +1 -0
- package/cryproPro/services/CryptoProCertificateService/utils/getCertificateOwnerShortName/getCertificateOwnerShortName.js +11 -0
- package/cryproPro/services/CryptoProCertificateService/utils/getCertificateOwnerShortName/index.d.ts +1 -0
- package/cryproPro/services/CryptoProCertificateService/utils/getCertificateOwnerShortName/index.js +1 -0
- package/cryproPro/services/CryptoProCertificateService/utils/getCertificateType/getCertificateType.d.ts +2 -0
- package/cryproPro/services/CryptoProCertificateService/utils/getCertificateType/getCertificateType.js +12 -0
- package/cryproPro/services/CryptoProCertificateService/utils/getCertificateType/index.d.ts +1 -0
- package/cryproPro/services/CryptoProCertificateService/utils/getCertificateType/index.js +1 -0
- package/cryproPro/services/CryptoProCertificateService/utils/index.d.ts +4 -0
- package/cryproPro/services/CryptoProCertificateService/utils/index.js +4 -0
- package/cryproPro/services/CryptoProSignService/CryptoProSignService.d.ts +33 -0
- package/cryproPro/services/CryptoProSignService/CryptoProSignService.js +52 -0
- package/cryproPro/services/CryptoProSignService/index.d.ts +1 -0
- package/cryproPro/services/CryptoProSignService/index.js +1 -0
- package/cryproPro/services/WorkspaceSetupService/WorkspaceSetupService.d.ts +42 -0
- package/cryproPro/services/WorkspaceSetupService/WorkspaceSetupService.js +93 -0
- package/cryproPro/services/WorkspaceSetupService/index.d.ts +1 -0
- package/cryproPro/services/WorkspaceSetupService/index.js +1 -0
- package/cryproPro/services/index.d.ts +2 -0
- package/cryproPro/services/index.js +2 -0
- package/cryproPro/stores/CryptoProStore/CryptoProStore.d.ts +87 -0
- package/cryproPro/stores/CryptoProStore/CryptoProStore.js +132 -0
- package/cryproPro/types.d.ts +1 -0
- package/cryproPro/types.js +1 -0
- package/package.json +4 -3
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { transformCertificate } from './transformCertificates';
|
|
11
|
+
describe('transformCertificate', () => {
|
|
12
|
+
const originalCertificate = {
|
|
13
|
+
subject: {
|
|
14
|
+
commonName: 'Кузнецова Таисия Болеславовна',
|
|
15
|
+
surname: 'Кузнецова',
|
|
16
|
+
name: 'Таисия Болеславовна',
|
|
17
|
+
country: 'RU',
|
|
18
|
+
region: 'Ханты-Мансийский АО',
|
|
19
|
+
locality: 'клх Усть-Ишим',
|
|
20
|
+
street: 'бул. Зои Космодемьянской, д. 366 стр. 78',
|
|
21
|
+
ogrnip: '318389344539622',
|
|
22
|
+
snils: '96147439743',
|
|
23
|
+
inn: '966785728532',
|
|
24
|
+
email: 'gorbunovaregina@example.org',
|
|
25
|
+
ogrn: null,
|
|
26
|
+
innLe: null,
|
|
27
|
+
organization: null,
|
|
28
|
+
department: null,
|
|
29
|
+
post: null,
|
|
30
|
+
},
|
|
31
|
+
issuer: {
|
|
32
|
+
commonName: 'CRYPTO-PRO Test Center 2',
|
|
33
|
+
inn: null,
|
|
34
|
+
innLe: null,
|
|
35
|
+
},
|
|
36
|
+
thumbprint: 'B5F3C0ED1B2A589F9C8673AAC6491A0981913ADD',
|
|
37
|
+
notBefore: new Date('2022-05-30T10:03:12.000Z'),
|
|
38
|
+
notAfter: new Date('2022-08-30T10:13:12.000Z'),
|
|
39
|
+
subjectName: 'ОГРНИП=318389344539622, CN=Кузнецова Таисия Болеславовна, C=RU, G=Таисия Болеславовна, SN=Кузнецова, СНИЛС=96147439743, S=Ханты-Мансийский АО, L=клх Усть-Ишим, E=gorbunovaregina@example.org, STREET="бул. Зои Космодемьянской, д. 366 стр. 78", ИНН=966785728532',
|
|
40
|
+
subjectKeyId: '91835696AEFD6AFD9AE5D504339BC510674C6E39',
|
|
41
|
+
certificateBase64Data: 'MIIE9zCCBKagAwIBAgITEgBe8fOVQaR3CDtTngABAF7x8zAIBgYqhQMCAgMwfzEj\r\nMCEGCSqGSIb3DQEJARYUc3VwcG9ydEBjcnlwdG9wcm8ucnUxCzAJBgNVBAYTAlJV\r\nMQ8wDQYDVQQHEwZNb3Njb3cxFzAVBgNVBAoTDkNSWVBUTy1QUk8gTExDMSEwHwYD\r\nVQQDExhDUllQVE8tUFJPIFRlc3QgQ2VudGVyIDIwHhcNMjIwNTMwMTAwMzEyWhcN\r\nMjIwODMwMTAxMzEyWjCCAbcxGjAYBggqhQMDgQMBARIMOTY2Nzg1NzI4NTMyMUow\r\nSAYDVQQJDEHQsdGD0LsuINCX0L7QuCDQmtC+0YHQvNC+0LTQtdC80YzRj9C90YHQ\r\nutC+0LksINC0LiAzNjYg0YHRgtGALiA3ODEqMCgGCSqGSIb3DQEJARYbZ29yYnVu\r\nb3ZhcmVnaW5hQGV4YW1wbGUub3JnMSEwHwYDVQQHDBjQutC70YUg0KPRgdGC0Ywt\r\n0JjRiNC40LwxLTArBgNVBAgMJNCl0LDQvdGC0Yst0JzQsNC90YHQuNC50YHQutC4\r\n0Lkg0JDQnjEWMBQGBSqFA2QDEgs5NjE0NzQzOTc0MzEbMBkGA1UEBAwS0JrRg9C3\r\n0L3QtdGG0L7QstCwMS4wLAYDVQQqDCXQotCw0LjRgdC40Y8g0JHQvtC70LXRgdC7\r\n0LDQstC+0LLQvdCwMQswCQYDVQQGEwJSVTFBMD8GA1UEAww40JrRg9C30L3QtdGG\r\n0L7QstCwINCi0LDQuNGB0LjRjyDQkdC+0LvQtdGB0LvQsNCy0L7QstC90LAxGjAY\r\nBgUqhQNkBRIPMzE4Mzg5MzQ0NTM5NjIyMGYwHwYIKoUDBwEBAQEwEwYHKoUDAgIk\r\nAAYIKoUDBwEBAgIDQwAEQCO/cqWQDtuCyTDzXV1xHp0hdVlQQwmgzFh6cZ2t6kzk\r\nC+tE1rp2vpi0GINw3h4mx+Noxgy6/t7WJVY7c9tdFU6jggG6MIIBtjAOBgNVHQ8B\r\nAf8EBAMCBPAwGQYJKoZIhvcNAQkPBAwwCjAIBgYqhQMCAhUwHQYDVR0lBBYwFAYI\r\nKwYBBQUHAwIGCCsGAQUFBwMEMB0GA1UdIAQWMBQwCAYGKoUDZHEBMAgGBiqFA2Rx\r\nAjAdBgNVHQ4EFgQUkYNWlq79av2a5dUEM5vFEGdMbjkwHwYDVR0jBBgwFoAUToM+\r\nFGnv7F16lStfEf43MhZJVSswXAYDVR0fBFUwUzBRoE+gTYZLaHR0cDovL3Rlc3Rj\r\nYS5jcnlwdG9wcm8ucnUvQ2VydEVucm9sbC9DUllQVE8tUFJPJTIwVGVzdCUyMENl\r\nbnRlciUyMDIoMSkuY3JsMIGsBggrBgEFBQcBAQSBnzCBnDBkBggrBgEFBQcwAoZY\r\naHR0cDovL3Rlc3RjYS5jcnlwdG9wcm8ucnUvQ2VydEVucm9sbC90ZXN0LWNhLTIw\r\nMTRfQ1JZUFRPLVBSTyUyMFRlc3QlMjBDZW50ZXIlMjAyKDEpLmNydDA0BggrBgEF\r\nBQcwAYYoaHR0cDovL3Rlc3RjYS5jcnlwdG9wcm8ucnUvb2NzcC9vY3NwLnNyZjAI\r\nBgYqhQMCAgMDQQBUTN70+MchU7VIL9WLWkucmFq/99/FZJr4udD+vMgwNqTrG7LU\r\nUFL5pMYdRd+JDxHm6/qIawLOrN3WbCg5M2Hs\r\n',
|
|
42
|
+
certificateBin: null,
|
|
43
|
+
providerName: 'Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider',
|
|
44
|
+
providerType: 80,
|
|
45
|
+
hasPrivateKey: true,
|
|
46
|
+
isGost: true,
|
|
47
|
+
algorithm: '1.2.643.7.1.1.1.1',
|
|
48
|
+
};
|
|
49
|
+
const transformedCertificate = {
|
|
50
|
+
inn: '966785728532',
|
|
51
|
+
name: 'Кузнецова Таисия Болеславовна',
|
|
52
|
+
notAfter: '30.08.2022',
|
|
53
|
+
ownerName: 'Кузнецова Таисия Болеславовна',
|
|
54
|
+
subjectKeyId: '91835696AEFD6AFD9AE5D504339BC510674C6E39',
|
|
55
|
+
type: 'ИП',
|
|
56
|
+
};
|
|
57
|
+
it('Props:certificate: приведение сертификата к типу CertificateShortInfo', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
58
|
+
const resultCertificate = transformCertificate(originalCertificate);
|
|
59
|
+
expect(resultCertificate).toStrictEqual(transformedCertificate);
|
|
60
|
+
}));
|
|
61
|
+
});
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { Certificate } from '@astral/cryptopro-cades';
|
|
3
|
+
import { AutocompleteProps, WithFormFieldProps } from '@astral/ui';
|
|
4
|
+
export type CryptoProCertFormAutocompleteProps<Multiple extends boolean = false, DisableClearable extends boolean = false, FreeSolo extends boolean = false> = WithFormFieldProps<AutocompleteProps<Certificate, Multiple, DisableClearable, FreeSolo>, any>;
|
|
5
|
+
/**
|
|
6
|
+
* @description Autocomplete с сертификатами для формы
|
|
7
|
+
*/
|
|
8
|
+
export declare const CryptoProCertFormAutocomplete: <Multiple extends boolean = false, DisableClearable extends boolean = false>(props: CryptoProCertFormAutocompleteProps<Multiple, DisableClearable, false>) => JSX.Element;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useFormController, useFormFieldErrorProps, } from '@astral/ui';
|
|
3
|
+
import { CryptoProCertAutocomplete } from '../CryptoProCertAutocomplete';
|
|
4
|
+
/**
|
|
5
|
+
* @description Autocomplete с сертификатами для формы
|
|
6
|
+
*/
|
|
7
|
+
export const CryptoProCertFormAutocomplete = (props) => {
|
|
8
|
+
const { field, fieldState } = useFormController(props);
|
|
9
|
+
const errorProps = useFormFieldErrorProps(fieldState);
|
|
10
|
+
return (_jsx(CryptoProCertAutocomplete, Object.assign({}, field, props, errorProps, { onChange: (_, value) => field.onChange(value) })));
|
|
11
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './CryptoProCertFormAutocomplete';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './CryptoProCertFormAutocomplete';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { PropsWithChildren } from 'react';
|
|
2
|
+
import { CryptoProStore } from '../../stores/CryptoProStore';
|
|
3
|
+
/**
|
|
4
|
+
* @description Провайдер, который в случае отсутствия или неактивности
|
|
5
|
+
* КриптоПро browser plug-in или отсутствия КриптоПро провайдера на
|
|
6
|
+
* устройстве пользователя - отображает окно настройки рабочего места
|
|
7
|
+
* @param children все что необходимо обернуть в провайдер
|
|
8
|
+
* @param cryptoProStore стор с информацией о плагине
|
|
9
|
+
* */
|
|
10
|
+
export declare const CryptoProProvider: (({ children, cryptoProStore, }: PropsWithChildren<{
|
|
11
|
+
cryptoProStore: CryptoProStore;
|
|
12
|
+
}>) => JSX.Element) & {
|
|
13
|
+
displayName: string;
|
|
14
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { observer } from 'mobx-react-lite';
|
|
3
|
+
import { SetupCryptoProWorkspaceModal } from '..';
|
|
4
|
+
/**
|
|
5
|
+
* @description Провайдер, который в случае отсутствия или неактивности
|
|
6
|
+
* КриптоПро browser plug-in или отсутствия КриптоПро провайдера на
|
|
7
|
+
* устройстве пользователя - отображает окно настройки рабочего места
|
|
8
|
+
* @param children все что необходимо обернуть в провайдер
|
|
9
|
+
* @param cryptoProStore стор с информацией о плагине
|
|
10
|
+
* */
|
|
11
|
+
export const CryptoProProvider = observer(({ children, cryptoProStore, }) => {
|
|
12
|
+
return (_jsxs(_Fragment, { children: [children, _jsx(SetupCryptoProWorkspaceModal, { workspaceSetupInfo: cryptoProStore.workspaceSetupInfo, isDialogOpen: cryptoProStore.isRequestSetupWorkspace &&
|
|
13
|
+
!cryptoProStore.isPluginInstalled, onCloseButtonClick: cryptoProStore.resetIsRequestSetupWorkspace })] }));
|
|
14
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './CryptoProProvider';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './CryptoProProvider';
|
package/cryproPro/components/SetupCryptoProWorkspaceModal/CryptoproviderInfo/CryptoproviderInfo.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Button, Description, Tooltip } from '@astral/ui';
|
|
3
|
+
import { InfoFillSm, OpenLinkOutlineMd } from '@astral/ui';
|
|
4
|
+
import { WorkspaceInfoItem } from '../styles';
|
|
5
|
+
import { CryptoproviderInfoIconWrapper } from './styles';
|
|
6
|
+
export const CryptoproviderInfo = ({ workspaceSetupInfo }) => {
|
|
7
|
+
const getDescription = () => {
|
|
8
|
+
if (!workspaceSetupInfo.isPluginInstalled) {
|
|
9
|
+
return (_jsxs(_Fragment, { children: ["\u041D\u0435\u0442 \u0434\u0430\u043D\u043D\u044B\u0445", _jsx(Tooltip, Object.assign({ title: "\u0414\u0430\u043D\u043D\u044B\u0435 \u043E \u043A\u0440\u0438\u043F\u0442\u043E\u043F\u0440\u043E\u0432\u0430\u0439\u0434\u0435\u0440\u0435 \u0431\u0443\u0434\u0443\u0442 \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u044B \u043F\u043E\u0441\u043B\u0435 \n \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0438 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u201C\u041A\u0440\u0438\u043F\u0442\u043E\u041F\u0440\u043E \u042D\u0426\u041F Browser plug-in\u201D \u0438 \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u044F \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430." }, { children: _jsx(CryptoproviderInfoIconWrapper, { children: _jsx(InfoFillSm, {}) }) }))] }));
|
|
10
|
+
}
|
|
11
|
+
else if (workspaceSetupInfo.hasCryptoProvider) {
|
|
12
|
+
return 'Установлен';
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
return 'Не установлен';
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
return (_jsxs(WorkspaceInfoItem, { children: [_jsxs(Description, { children: [_jsx(Description.Name, { children: "\u041A\u0440\u0438\u043F\u0442\u043E\u043F\u0440\u043E\u0432\u0430\u0439\u0434\u0435\u0440" }), _jsx(Description.Value, { children: workspaceSetupInfo.cspVersion
|
|
19
|
+
? `Крипто Про CSP v${workspaceSetupInfo.cspVersion}`
|
|
20
|
+
: getDescription() })] }), !workspaceSetupInfo.isPluginInstalled && (_jsx(Button, Object.assign({ variant: "link", endIcon: _jsx(OpenLinkOutlineMd, {}), href: "https://cryptopro.ru/downloads",
|
|
21
|
+
/*
|
|
22
|
+
проблемы с типами кнопки
|
|
23
|
+
// @ts-ignore */
|
|
24
|
+
target: "_blank", rel: "noopener noreferrer" }, { children: "\u0420\u0435\u043A\u043E\u043C\u0435\u043D\u0434\u0443\u0435\u043C \u041A\u0440\u0438\u043F\u0442\u043E\u041F\u0440\u043E CSP" })))] }));
|
|
25
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './CryptoproviderInfo';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './CryptoproviderInfo';
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
export declare const CryptoproviderInfoIconWrapper: import("@emotion/styled").StyledComponent<{
|
|
3
|
+
theme?: import("@emotion/react").Theme | undefined;
|
|
4
|
+
as?: import("react").ElementType<any> | undefined;
|
|
5
|
+
}, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, {}>;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { styled } from '@astral/ui';
|
|
2
|
+
export const CryptoproviderInfoIconWrapper = styled.span `
|
|
3
|
+
display: inline-flex;
|
|
4
|
+
margin-left: ${({ theme }) => theme.spacing(1)};
|
|
5
|
+
|
|
6
|
+
vertical-align: middle;
|
|
7
|
+
|
|
8
|
+
& > svg {
|
|
9
|
+
width: 16px;
|
|
10
|
+
height: 16px;
|
|
11
|
+
}
|
|
12
|
+
`;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Button, Description, Typography } from '@astral/ui';
|
|
3
|
+
import { DownloadOutlineMd } from '@astral/ui';
|
|
4
|
+
import { WorkspaceInfoItem } from '../styles';
|
|
5
|
+
export const PluginInfo = ({ workspaceSetupInfo }) => {
|
|
6
|
+
return (_jsxs(WorkspaceInfoItem, { children: [_jsxs(Description, { children: [_jsx(Description.Name, { children: "\u041F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435" }), _jsx(Description.Value, { children: "\u041A\u0440\u0438\u043F\u0442\u043E\u041F\u0440\u043E \u042D\u0426\u041F Browser plug-in" })] }), workspaceSetupInfo.isPluginInstalled ? (_jsx(Typography, Object.assign({ color: "green", colorIntensity: "900" }, { children: "\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043E" }))) : (_jsx(Button, Object.assign({ variant: "text", endIcon: _jsx(DownloadOutlineMd, {}), href: "https://www.cryptopro.ru/products/cades/plugin/get_2_0",
|
|
7
|
+
/*
|
|
8
|
+
проблемы с типами кнопки
|
|
9
|
+
// @ts-ignore */
|
|
10
|
+
target: "_blank", rel: "noopener noreferrer" }, { children: "\u0421\u043A\u0430\u0447\u0430\u0442\u044C" })))] }));
|
|
11
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './PluginInfo';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './PluginInfo';
|
|
@@ -1,2 +1,9 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
|
|
2
|
+
import { CheckWorkspace } from '../../services/WorkspaceSetupService';
|
|
3
|
+
type SetupCryptoProWorkspaceModalProps = {
|
|
4
|
+
isDialogOpen: boolean;
|
|
5
|
+
onCloseButtonClick: () => void;
|
|
6
|
+
workspaceSetupInfo: CheckWorkspace;
|
|
7
|
+
};
|
|
8
|
+
export declare const SetupCryptoProWorkspaceModal: ({ isDialogOpen, onCloseButtonClick, workspaceSetupInfo, }: SetupCryptoProWorkspaceModalProps) => JSX.Element;
|
|
9
|
+
export {};
|
|
@@ -1,5 +1,12 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { Dialog } from '@astral/ui';
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Button, Dialog, DialogActions, DialogContent, Typography, } from '@astral/ui';
|
|
3
|
+
import { RefreshOutlineMd } from '@astral/ui';
|
|
4
|
+
import { CryptoproviderInfo } from './CryptoproviderInfo';
|
|
5
|
+
import { PluginInfo } from './PluginInfo';
|
|
6
|
+
import { WorkspaceInfoWrapper } from './styles';
|
|
7
|
+
export const SetupCryptoProWorkspaceModal = ({ isDialogOpen, onCloseButtonClick, workspaceSetupInfo, }) => {
|
|
8
|
+
const handleRefreshButtonClick = () => {
|
|
9
|
+
location.reload();
|
|
10
|
+
};
|
|
11
|
+
return (_jsxs(Dialog, Object.assign({ open: isDialogOpen, onClose: onCloseButtonClick, title: "\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0430 \u0440\u0430\u0431\u043E\u0447\u0435\u0433\u043E \u043C\u0435\u0441\u0442\u0430", maxWidth: "sm", fullWidth: true }, { children: [_jsxs(DialogContent, { children: [_jsx(Typography, { children: "\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0430 \u0440\u0430\u0431\u043E\u0447\u0435\u0433\u043E \u043C\u0435\u0441\u0442\u0430 \u043D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u0430 \u0434\u043B\u044F \u0432\u044B\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u044F \u043A\u0440\u0438\u043F\u0442\u043E\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043A\u0438\u0445 \u043E\u043F\u0435\u0440\u0430\u0446\u0438\u0439. \u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u0435 \u043D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u044B\u0435 \u0434\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u044F, \u0430 \u0437\u0430\u0442\u0435\u043C \u043E\u0431\u043D\u043E\u0432\u0438\u0442\u0435 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0443." }), _jsxs(WorkspaceInfoWrapper, { children: [_jsx(PluginInfo, { workspaceSetupInfo: workspaceSetupInfo }), _jsx(CryptoproviderInfo, { workspaceSetupInfo: workspaceSetupInfo })] })] }), _jsxs(DialogActions, { children: [_jsx(Button, Object.assign({ variant: "text", onClick: onCloseButtonClick }, { children: "\u0417\u0430\u043A\u0440\u044B\u0442\u044C" })), _jsx(Button, Object.assign({ endIcon: _jsx(RefreshOutlineMd, {}), onClick: handleRefreshButtonClick }, { children: "\u041E\u0431\u043D\u043E\u0432\u0438\u0442\u044C \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0443" }))] })] })));
|
|
5
12
|
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
export declare const WorkspaceInfoItem: import("@emotion/styled").StyledComponent<{
|
|
3
|
+
theme?: import("@emotion/react").Theme | undefined;
|
|
4
|
+
as?: import("react").ElementType<any> | undefined;
|
|
5
|
+
}, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
|
|
6
|
+
export declare const WorkspaceInfoWrapper: import("@emotion/styled").StyledComponent<{
|
|
7
|
+
theme?: import("@emotion/react").Theme | undefined;
|
|
8
|
+
as?: import("react").ElementType<any> | undefined;
|
|
9
|
+
}, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { styled } from '@astral/ui';
|
|
2
|
+
export const WorkspaceInfoItem = styled.div `
|
|
3
|
+
display: flex;
|
|
4
|
+
align-items: center;
|
|
5
|
+
justify-content: space-between;
|
|
6
|
+
height: 48px;
|
|
7
|
+
padding: ${({ theme }) => theme.spacing(2, 4)};
|
|
8
|
+
|
|
9
|
+
& + & {
|
|
10
|
+
border-top: 1px solid ${({ theme }) => theme.palette.grey[300]};
|
|
11
|
+
}
|
|
12
|
+
`;
|
|
13
|
+
export const WorkspaceInfoWrapper = styled.div `
|
|
14
|
+
margin-top: ${({ theme }) => theme.spacing(4)};
|
|
15
|
+
|
|
16
|
+
background-color: ${({ theme }) => theme.palette.grey[100]};
|
|
17
|
+
border-radius: ${({ theme }) => theme.shape.small};
|
|
18
|
+
`;
|
package/cryproPro/index.d.ts
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
export { SetupCryptoProWorkspaceModal } from './components';
|
|
1
|
+
export { SetupCryptoProWorkspaceModal, CryptoProCertFormAutocomplete, CryptoProCertAutocomplete, CryptoProProvider, } from './components';
|
|
2
2
|
export { CryptoProStore } from './stores';
|
|
3
|
+
export { Certificate } from './types';
|
package/cryproPro/index.js
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
export { SetupCryptoProWorkspaceModal } from './components';
|
|
1
|
+
export { SetupCryptoProWorkspaceModal, CryptoProCertFormAutocomplete, CryptoProCertAutocomplete, CryptoProProvider, } from './components';
|
|
2
2
|
export { CryptoProStore } from './stores';
|
|
3
|
+
export { Certificate } from './types';
|
|
@@ -1,3 +1,30 @@
|
|
|
1
|
+
import { Certificate } from '@astral/cryptopro-cades';
|
|
2
|
+
export type FormatedCertificate = {
|
|
3
|
+
type: string;
|
|
4
|
+
title: string;
|
|
5
|
+
inn: string;
|
|
6
|
+
owner: string | null;
|
|
7
|
+
skid: string;
|
|
8
|
+
expires: string | null;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* @description Сервис для сертификатов КриптоПро
|
|
12
|
+
* */
|
|
1
13
|
export declare class CryptoProCertificateService {
|
|
2
|
-
|
|
14
|
+
/**
|
|
15
|
+
* @description Метод получения списка сертификатов
|
|
16
|
+
* */
|
|
17
|
+
getCertificateList: () => Promise<Certificate[]>;
|
|
18
|
+
/**
|
|
19
|
+
* @description Метод получения сертификата по skid
|
|
20
|
+
* */
|
|
21
|
+
getCertificateBySkid: (skid: string, certificates?: Certificate[]) => Certificate | Promise<Certificate> | undefined;
|
|
22
|
+
/**
|
|
23
|
+
* @description Метод фильтрации списка сертификатов по ключам: subjectKeyId, innLe, inn
|
|
24
|
+
* */
|
|
25
|
+
filterCertificateList: (certificates: Certificate[], certificateSelectors?: string[]) => Certificate[];
|
|
26
|
+
/**
|
|
27
|
+
* @description Метод приведения списка сертификатов к интерфейсу FormatedCertificate
|
|
28
|
+
* */
|
|
29
|
+
formatCertificateList: (certificates: Certificate[]) => FormatedCertificate[];
|
|
3
30
|
}
|
|
@@ -1,5 +1,57 @@
|
|
|
1
|
+
import { STORE_TYPE, findCertificateBySkid, getCertificates, } from '@astral/cryptopro-cades';
|
|
2
|
+
import { getCertificateExpiresDate, getCertificateOwnerShortName, getCertificateType, } from './utils';
|
|
3
|
+
/**
|
|
4
|
+
* @description Сервис для сертификатов КриптоПро
|
|
5
|
+
* */
|
|
1
6
|
export class CryptoProCertificateService {
|
|
2
7
|
constructor() {
|
|
3
|
-
|
|
8
|
+
/**
|
|
9
|
+
* @description Метод получения списка сертификатов
|
|
10
|
+
* */
|
|
11
|
+
this.getCertificateList = () => {
|
|
12
|
+
return getCertificates(STORE_TYPE.ALL);
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* @description Метод получения сертификата по skid
|
|
16
|
+
* */
|
|
17
|
+
this.getCertificateBySkid = (skid, certificates) => {
|
|
18
|
+
return (certificates === null || certificates === void 0 ? void 0 : certificates.length)
|
|
19
|
+
? certificates.find((certificate) => certificate.subjectKeyId === skid)
|
|
20
|
+
: findCertificateBySkid(skid);
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* @description Метод фильтрации списка сертификатов по ключам: subjectKeyId, innLe, inn
|
|
24
|
+
* */
|
|
25
|
+
this.filterCertificateList = (certificates, certificateSelectors) => {
|
|
26
|
+
return certificates.filter((certificate) => {
|
|
27
|
+
const isCertificateExpired = new Date(certificate.notAfter).getTime() < new Date().getTime();
|
|
28
|
+
// проверяем, пришел ли certificateSelector, если его нет - возвращаем true (отключаем фильтр по селектору)
|
|
29
|
+
const filterByCertificateSelector = certificateSelectors
|
|
30
|
+
? certificateSelectors.some((certificateSelector) => {
|
|
31
|
+
return (certificate.subjectKeyId === certificateSelector ||
|
|
32
|
+
certificate.subject.innLe === certificateSelector ||
|
|
33
|
+
certificate.subject.inn === certificateSelector);
|
|
34
|
+
})
|
|
35
|
+
: true;
|
|
36
|
+
return (certificate.hasPrivateKey &&
|
|
37
|
+
!isCertificateExpired &&
|
|
38
|
+
filterByCertificateSelector);
|
|
39
|
+
});
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* @description Метод приведения списка сертификатов к интерфейсу FormatedCertificate
|
|
43
|
+
* */
|
|
44
|
+
this.formatCertificateList = (certificates) => {
|
|
45
|
+
return certificates.map((certificate) => {
|
|
46
|
+
return {
|
|
47
|
+
type: getCertificateType(certificate.subject.innLe || certificate.subject.inn, certificate.subject.ogrn || certificate.subject.ogrnip),
|
|
48
|
+
title: certificate.subject.commonName || '',
|
|
49
|
+
inn: certificate.subject.innLe || certificate.subject.inn || '',
|
|
50
|
+
owner: getCertificateOwnerShortName(certificate.subject.surname, certificate.subject.name),
|
|
51
|
+
skid: certificate.subjectKeyId || '',
|
|
52
|
+
expires: getCertificateExpiresDate(certificate.notAfter),
|
|
53
|
+
};
|
|
54
|
+
});
|
|
55
|
+
};
|
|
4
56
|
}
|
|
5
57
|
}
|
|
@@ -1,6 +1,121 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
1
10
|
import { CryptoProCertificateService } from './CryptoProCertificateService';
|
|
11
|
+
export const formatedCertificatesList = [
|
|
12
|
+
{
|
|
13
|
+
type: 'ИП',
|
|
14
|
+
title: 'Кузнецова Таисия Болеславовна',
|
|
15
|
+
inn: '966785728532',
|
|
16
|
+
owner: 'Кузнецова Т. Б.',
|
|
17
|
+
skid: '91835696AEFD6AFD9AE5D504339BC510674C6E39',
|
|
18
|
+
expires: '30.08.2032',
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
type: 'ЮЛ',
|
|
22
|
+
title: '_тест_Кордиант',
|
|
23
|
+
inn: '9622038976',
|
|
24
|
+
owner: 'Шестаков Д. Г.',
|
|
25
|
+
skid: '9BAC1B50B2D987FC6C2903EC73F1DDD8694188CE',
|
|
26
|
+
expires: '10.04.2024',
|
|
27
|
+
},
|
|
28
|
+
];
|
|
29
|
+
export const certificatesList = [
|
|
30
|
+
{
|
|
31
|
+
subject: {
|
|
32
|
+
commonName: 'Кузнецова Таисия Болеславовна',
|
|
33
|
+
surname: 'Кузнецова',
|
|
34
|
+
name: 'Таисия Болеславовна',
|
|
35
|
+
country: 'RU',
|
|
36
|
+
region: 'Ханты-Мансийский АО',
|
|
37
|
+
locality: 'клх Усть-Ишим',
|
|
38
|
+
street: 'бул. Зои Космодемьянской, д. 366 стр. 78',
|
|
39
|
+
ogrnip: '318389344539622',
|
|
40
|
+
snils: '96147439743',
|
|
41
|
+
inn: '966785728532',
|
|
42
|
+
email: 'gorbunovaregina@example.org',
|
|
43
|
+
ogrn: null,
|
|
44
|
+
innLe: null,
|
|
45
|
+
organization: null,
|
|
46
|
+
department: null,
|
|
47
|
+
post: null,
|
|
48
|
+
},
|
|
49
|
+
issuer: {
|
|
50
|
+
commonName: 'CRYPTO-PRO Test Center 2',
|
|
51
|
+
inn: null,
|
|
52
|
+
innLe: null,
|
|
53
|
+
},
|
|
54
|
+
thumbprint: 'B5F3C0ED1B2A589F9C8673AAC6491A0981913ADD',
|
|
55
|
+
notBefore: new Date('2022-05-30T10:03:12.000Z'),
|
|
56
|
+
notAfter: new Date('2032-08-30T10:13:12.000Z'),
|
|
57
|
+
subjectName: 'ОГРНИП=318389344539622, CN=Кузнецова Таисия Болеславовна, C=RU, G=Таисия Болеславовна, SN=Кузнецова, СНИЛС=96147439743, S=Ханты-Мансийский АО, L=клх Усть-Ишим, E=gorbunovaregina@example.org, STREET="бул. Зои Космодемьянской, д. 366 стр. 78", ИНН=966785728532',
|
|
58
|
+
subjectKeyId: '91835696AEFD6AFD9AE5D504339BC510674C6E39',
|
|
59
|
+
certificateBase64Data: 'MIIE9zCCBKagAwIBAgITEgBe8fOVQaR3CDtTngABAF7x8zAIBgYqhQMCAgMwfzEj\r\nMCEGCSqGSIb3DQEJARYUc3VwcG9ydEBjcnlwdG9wcm8ucnUxCzAJBgNVBAYTAlJV\r\nMQ8wDQYDVQQHEwZNb3Njb3cxFzAVBgNVBAoTDkNSWVBUTy1QUk8gTExDMSEwHwYD\r\nVQQDExhDUllQVE8tUFJPIFRlc3QgQ2VudGVyIDIwHhcNMjIwNTMwMTAwMzEyWhcN\r\nMjIwODMwMTAxMzEyWjCCAbcxGjAYBggqhQMDgQMBARIMOTY2Nzg1NzI4NTMyMUow\r\nSAYDVQQJDEHQsdGD0LsuINCX0L7QuCDQmtC+0YHQvNC+0LTQtdC80YzRj9C90YHQ\r\nutC+0LksINC0LiAzNjYg0YHRgtGALiA3ODEqMCgGCSqGSIb3DQEJARYbZ29yYnVu\r\nb3ZhcmVnaW5hQGV4YW1wbGUub3JnMSEwHwYDVQQHDBjQutC70YUg0KPRgdGC0Ywt\r\n0JjRiNC40LwxLTArBgNVBAgMJNCl0LDQvdGC0Yst0JzQsNC90YHQuNC50YHQutC4\r\n0Lkg0JDQnjEWMBQGBSqFA2QDEgs5NjE0NzQzOTc0MzEbMBkGA1UEBAwS0JrRg9C3\r\n0L3QtdGG0L7QstCwMS4wLAYDVQQqDCXQotCw0LjRgdC40Y8g0JHQvtC70LXRgdC7\r\n0LDQstC+0LLQvdCwMQswCQYDVQQGEwJSVTFBMD8GA1UEAww40JrRg9C30L3QtdGG\r\n0L7QstCwINCi0LDQuNGB0LjRjyDQkdC+0LvQtdGB0LvQsNCy0L7QstC90LAxGjAY\r\nBgUqhQNkBRIPMzE4Mzg5MzQ0NTM5NjIyMGYwHwYIKoUDBwEBAQEwEwYHKoUDAgIk\r\nAAYIKoUDBwEBAgIDQwAEQCO/cqWQDtuCyTDzXV1xHp0hdVlQQwmgzFh6cZ2t6kzk\r\nC+tE1rp2vpi0GINw3h4mx+Noxgy6/t7WJVY7c9tdFU6jggG6MIIBtjAOBgNVHQ8B\r\nAf8EBAMCBPAwGQYJKoZIhvcNAQkPBAwwCjAIBgYqhQMCAhUwHQYDVR0lBBYwFAYI\r\nKwYBBQUHAwIGCCsGAQUFBwMEMB0GA1UdIAQWMBQwCAYGKoUDZHEBMAgGBiqFA2Rx\r\nAjAdBgNVHQ4EFgQUkYNWlq79av2a5dUEM5vFEGdMbjkwHwYDVR0jBBgwFoAUToM+\r\nFGnv7F16lStfEf43MhZJVSswXAYDVR0fBFUwUzBRoE+gTYZLaHR0cDovL3Rlc3Rj\r\nYS5jcnlwdG9wcm8ucnUvQ2VydEVucm9sbC9DUllQVE8tUFJPJTIwVGVzdCUyMENl\r\nbnRlciUyMDIoMSkuY3JsMIGsBggrBgEFBQcBAQSBnzCBnDBkBggrBgEFBQcwAoZY\r\naHR0cDovL3Rlc3RjYS5jcnlwdG9wcm8ucnUvQ2VydEVucm9sbC90ZXN0LWNhLTIw\r\nMTRfQ1JZUFRPLVBSTyUyMFRlc3QlMjBDZW50ZXIlMjAyKDEpLmNydDA0BggrBgEF\r\nBQcwAYYoaHR0cDovL3Rlc3RjYS5jcnlwdG9wcm8ucnUvb2NzcC9vY3NwLnNyZjAI\r\nBgYqhQMCAgMDQQBUTN70+MchU7VIL9WLWkucmFq/99/FZJr4udD+vMgwNqTrG7LU\r\nUFL5pMYdRd+JDxHm6/qIawLOrN3WbCg5M2Hs\r\n',
|
|
60
|
+
certificateBin: null,
|
|
61
|
+
providerName: 'Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider',
|
|
62
|
+
providerType: 80,
|
|
63
|
+
hasPrivateKey: true,
|
|
64
|
+
isGost: true,
|
|
65
|
+
algorithm: '1.2.643.7.1.1.1.1',
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
subject: {
|
|
69
|
+
commonName: '_тест_Кордиант',
|
|
70
|
+
surname: 'Шестаков',
|
|
71
|
+
name: 'Доброслав Глебович',
|
|
72
|
+
country: 'RU',
|
|
73
|
+
region: 'Камчатский край',
|
|
74
|
+
locality: 'с. Мичуринск',
|
|
75
|
+
street: 'наб. Поселковая, д. 744 к. 458',
|
|
76
|
+
post: 'Гидролог',
|
|
77
|
+
ogrn: '5208280797313',
|
|
78
|
+
snils: '29682610722',
|
|
79
|
+
innLe: '9622038976',
|
|
80
|
+
inn: '968971594488',
|
|
81
|
+
email: 'suvorovparamon@example.org',
|
|
82
|
+
ogrnip: null,
|
|
83
|
+
organization: null,
|
|
84
|
+
department: null,
|
|
85
|
+
},
|
|
86
|
+
issuer: {
|
|
87
|
+
commonName: 'Тестовый АО КАЛУГА АСТРАЛ',
|
|
88
|
+
inn: '4029017981',
|
|
89
|
+
innLe: null,
|
|
90
|
+
},
|
|
91
|
+
thumbprint: '052241BCA8EC58174A3E7CC49AEC71FCC921C782',
|
|
92
|
+
notBefore: new Date('2023-01-10T08:50:35.000Z'),
|
|
93
|
+
notAfter: new Date('2024-04-10T09:00:35.000Z'),
|
|
94
|
+
subjectName: 'CN=_тест_Кордиант, O=_тест_Кордиант, L=с. Мичуринск, S=Камчатский край, C=RU, SN=Шестаков, G=Доброслав Глебович, T=Гидролог, ИНН=968971594488, СНИЛС=29682610722, ОГРН=5208280797313, E=suvorovparamon@example.org, ИНН ЮЛ=9622038976, STREET="наб. Поселковая, д. 744 к. 458"',
|
|
95
|
+
subjectKeyId: '9BAC1B50B2D987FC6C2903EC73F1DDD8694188CE',
|
|
96
|
+
certificateBase64Data: 'MIIIGjCCB8egAwIBAgIRAl95lACGr3qwSg+56yHWkC0wCgYIKoUDBwEBAwIwggEP\r\nMRgwFgYFKoUDZAESDTEwMjQwMDE0MzQwNDkxGjAYBggqhQMDgQMBARIMMDA0MDI5\r\nMDE3OTgxMQswCQYDVQQGEwJSVTEeMBwGA1UECAwVNDAg0JrQsNC70YPQttGB0LrQ\r\nsNGPMRkwFwYDVQQHDBDQsy4g0JrQsNC70YPQs9CwMSwwKgYDVQQJDCPQv9C10YAu\r\nINCi0LXRgNC10L3QuNC90YHQutC40Lkg0LQuNjEnMCUGA1UECgwe0JDQniDQmtCQ\r\n0JvQo9CT0JAg0JDQodCi0KDQkNCbMTgwNgYDVQQDDC/QotC10YHRgtC+0LLRi9C5\r\nINCQ0J4g0JrQkNCb0KPQk9CQINCQ0KHQotCg0JDQmzAeFw0yMzAxMTAwODUwMzVa\r\nFw0yNDA0MTAwOTAwMzVaMIIBzDE2MDQGA1UECQwt0L3QsNCxLiDQn9C+0YHQtdC7\r\n0LrQvtCy0LDRjywg0LQuIDc0NCDQui4gNDU4MRUwEwYFKoUDZAQSCjk2MjIwMzg5\r\nNzYxKTAnBgkqhkiG9w0BCQEWGnN1dm9yb3ZwYXJhbW9uQGV4YW1wbGUub3JnMRgw\r\nFgYFKoUDZAESDTUyMDgyODA3OTczMTMxFjAUBgUqhQNkAxILMjk2ODI2MTA3MjIx\r\nGjAYBggqhQMDgQMBARIMOTY4OTcxNTk0NDg4MRkwFwYDVQQMDBDQk9C40LTRgNC+\r\n0LvQvtCzMSwwKgYDVQQqDCPQlNC+0LHRgNC+0YHQu9Cw0LIg0JPQu9C10LHQvtCy\r\n0LjRhzEZMBcGA1UEBAwQ0KjQtdGB0YLQsNC60L7QsjELMAkGA1UEBhMCUlUxJjAk\r\nBgNVBAgMHdCa0LDQvNGH0LDRgtGB0LrQuNC5INC60YDQsNC5MR8wHQYDVQQHDBbR\r\ngS4g0JzQuNGH0YPRgNC40L3RgdC6MSMwIQYDVQQKDBpf0YLQtdGB0YJf0JrQvtGA\r\n0LTQuNCw0L3RgjEjMCEGA1UEAwwaX9GC0LXRgdGCX9Ca0L7RgNC00LjQsNC90YIw\r\nZjAfBggqhQMHAQEBATATBgcqhQMCAiQABggqhQMHAQECAgNDAARA198GaOv4e/UD\r\nFhSevuwzITC9rnVG433kDmwQpt+FGj8rpR7TOoHnc+cti/uqyM++wPp7lrneMRzb\r\nqOwH/8KkA6OCBDQwggQwMA4GA1UdDwEB/wQEAwID+DAdBgNVHSUEFjAUBggrBgEF\r\nBQcDAgYIKwYBBQUHAwQwHQYDVR0gBBYwFDAIBgYqhQNkcQEwCAYGKoUDZHECMCwG\r\nBSqFA2RvBCMMIdCh0JrQl9CYICLQmtGA0LjQv9GC0L7Qn9GA0L4gQ1NQIjAMBgUq\r\nhQNkcgQDAgEAMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwIwCgYIKwYBBQUH\r\nAwQwUQYIKwYBBQUHAQEERTBDMEEGCCsGAQUFBzAChjVodHRwOi8vcmVnc2Vydmlj\r\nZS5rZXlkaXNrLnJ1L3Rlc3RjYS9yb290L3Rlc3RjYTEzLmNydDAfBgkrBgEEAYI3\r\nFQcEEjAQBggqhQMCAi4ACAIBAQIBADCCAUoGBSqFA2RwBIIBPzCCATsMU9Ch0JrQ\r\nl9CYICLQmtGA0LjQv9GC0L7Qn9Cg0J4gQ1NQIiAo0LLQtdGA0YHQuNGPIDQuMCkg\r\nKNC40YHQv9C+0LvQvdC10L3QuNC1IDIgLUJhc2UpDIGR0J/RgNC+0LPRgNCw0LzQ\r\nvNC90L4t0LDQv9C/0LDRgNCw0YLQvdGL0Lkg0LrQvtC80L/Qu9C10LrRgSAi0KPQ\r\ntNC+0YHRgtC+0LLQtdGA0Y/RjtGJ0LjQuSDRhtC10L3RgtGAICLQmtGA0LjQv9GC\r\n0L7Qn9GA0L4g0KPQpiIg0LLQtdGA0YHQuNC40LggMi4wIgwh0KHQpC8xMjQtMzM4\r\nMCDQvtGCIDExINC80LDRjyAyMDE4DC3QodCkLzEyOC0zNTkyINC+0YIgMTcg0L7Q\r\nutGC0Y/QsdGA0Y8gMjAxOCDQsy4wRQYDVR0fBD4wPDA6oDigNoY0aHR0cDovL3Jl\r\nZ3NlcnZpY2Uua2V5ZGlzay5ydS90ZXN0Y2EvY3JsL3Rlc3RjYTEzLmNybDCCAVEG\r\nA1UdIwSCAUgwggFEgBRj07CB78JgsUL8w2rFd2LLBc0Dy6GCARekggETMIIBDzEY\r\nMBYGBSqFA2QBEg0xMDI0MDAxNDM0MDQ5MRowGAYIKoUDA4EDAQESDDAwNDAyOTAx\r\nNzk4MTELMAkGA1UEBhMCUlUxHjAcBgNVBAgMFTQwINCa0LDQu9GD0LbRgdC60LDR\r\njzEZMBcGA1UEBwwQ0LMuINCa0LDQu9GD0LPQsDEsMCoGA1UECQwj0L/QtdGALiDQ\r\notC10YDQtdC90LjQvdGB0LrQuNC5INC0LjYxJzAlBgNVBAoMHtCQ0J4g0JrQkNCb\r\n0KPQk9CQINCQ0KHQotCg0JDQmzE4MDYGA1UEAwwv0KLQtdGB0YLQvtCy0YvQuSDQ\r\nkNCeINCa0JDQm9Cj0JPQkCDQkNCh0KLQoNCQ0JuCEQLUAIoAl640nEf/8T8srwn2\r\nMB0GA1UdDgQWBBSbrBtQstmH/GwpA+xz8d3YaUGIzjAKBggqhQMHAQEDAgNBAHFz\r\n7Y2Lswi2bItHcs4eIH9youmpfpObeIdnmdPZK1OLodfLeEYdxU4AzURwprtSXplS\r\n7X7eNneZqbl0jf3fQug=\r\n',
|
|
97
|
+
certificateBin: null,
|
|
98
|
+
providerName: 'Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider',
|
|
99
|
+
providerType: 80,
|
|
100
|
+
hasPrivateKey: true,
|
|
101
|
+
isGost: true,
|
|
102
|
+
algorithm: '1.2.643.7.1.1.1.1',
|
|
103
|
+
},
|
|
104
|
+
];
|
|
2
105
|
describe('CryptoProCertificateService.getCerts', () => {
|
|
3
|
-
|
|
4
|
-
|
|
106
|
+
const cryptoProCertificateService = new CryptoProCertificateService();
|
|
107
|
+
it('Props:Skid: происходит поиск сертификата по ключу', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
108
|
+
const certificateBySkid = yield cryptoProCertificateService.getCertificateBySkid('91835696AEFD6AFD9AE5D504339BC510674C6E39', certificatesList);
|
|
109
|
+
expect(certificateBySkid).toEqual(certificatesList[0]);
|
|
110
|
+
}));
|
|
111
|
+
it('Props:Skid: фильтрация списка по ключу', () => {
|
|
112
|
+
const filteredCertificates = cryptoProCertificateService.filterCertificateList(certificatesList, [
|
|
113
|
+
'91835696AEFD6AFD9AE5D504339BC510674C6E39',
|
|
114
|
+
]);
|
|
115
|
+
expect(filteredCertificates).toEqual([certificatesList[0]]);
|
|
116
|
+
});
|
|
117
|
+
it('Props:certificates: происходит форматирование списка сертификатов', () => {
|
|
118
|
+
const result = cryptoProCertificateService.formatCertificateList(certificatesList);
|
|
119
|
+
expect(result).toStrictEqual(formatedCertificatesList);
|
|
5
120
|
});
|
|
6
121
|
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const convertBase64toBlob: (base64: string, type?: string) => Promise<Blob>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './convertBase64toBlob';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './convertBase64toBlob';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const getCertificateExpiresDate: (date: Date | null) => string | null;
|
package/cryproPro/services/CryptoProCertificateService/utils/getCertificateExpiresDate/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './getCertificateExpiresDate';
|