mirror of
https://github.com/crypto-pro-web/crypto-pro-js.git
synced 2025-04-19 12:03:10 +03:00
Получение сертификата в формате Cades из личного хранилища пользователя и хранилища закрытого ключа
This commit is contained in:
parent
937da83bb4
commit
f0aeb16ec4
@ -1,7 +1,7 @@
|
||||
import {CadesCertificate} from '../api/certificate';
|
||||
import {_afterPluginsLoaded} from './_afterPluginsLoaded';
|
||||
import { _extractMeaningfulErrorMessage } from './_extractMeaningfulErrorMessage';
|
||||
import { __cadesAsyncToken__, __createCadesPluginObject__, _generateCadesFn } from './_generateCadesFn';
|
||||
import {_getCadesUserCert} from "./_getCadesUserCert";
|
||||
import {_getCadesContainerCert} from "./_getCadesContainerCert";
|
||||
|
||||
/**
|
||||
* Возвращает сертификат в формате Cades по отпечатку
|
||||
@ -10,79 +10,17 @@ import { __cadesAsyncToken__, __createCadesPluginObject__, _generateCadesFn } fr
|
||||
* @returns сертификат в формате Cades
|
||||
*/
|
||||
export const _getCadesCert = _afterPluginsLoaded(
|
||||
(thumbprint: string): CadesCertificate => {
|
||||
const { cadesplugin } = window;
|
||||
|
||||
return eval(
|
||||
_generateCadesFn(function _getCadesCert() {
|
||||
let cadesStore;
|
||||
|
||||
try {
|
||||
cadesStore = __cadesAsyncToken__ + __createCadesPluginObject__('CAdESCOM.Store');
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
|
||||
throw new Error(_extractMeaningfulErrorMessage(error) || 'Ошибка при попытке доступа к хранилищу');
|
||||
}
|
||||
|
||||
if (!cadesStore) {
|
||||
throw new Error('Не удалось получить доступ к хранилищу сертификатов');
|
||||
}
|
||||
|
||||
try {
|
||||
void (
|
||||
__cadesAsyncToken__ +
|
||||
cadesStore.Open(
|
||||
cadesplugin.CAPICOM_CURRENT_USER_STORE,
|
||||
cadesplugin.CAPICOM_MY_STORE,
|
||||
cadesplugin.CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED,
|
||||
)
|
||||
);
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
|
||||
throw new Error(_extractMeaningfulErrorMessage(error) || 'Ошибка при открытии хранилища');
|
||||
}
|
||||
|
||||
let cadesCertificateList;
|
||||
let certificatesCount;
|
||||
|
||||
try {
|
||||
cadesCertificateList = __cadesAsyncToken__ + cadesStore.Certificates;
|
||||
certificatesCount = __cadesAsyncToken__ + cadesCertificateList.Count;
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
|
||||
throw new Error(_extractMeaningfulErrorMessage(error) || 'Ошибка получения списка сертификатов');
|
||||
}
|
||||
|
||||
if (!certificatesCount) {
|
||||
throw new Error('Нет доступных сертификатов');
|
||||
}
|
||||
|
||||
async (thumbprint: string): Promise<CadesCertificate> => {
|
||||
let cadesCertificate: CadesCertificate;
|
||||
|
||||
try {
|
||||
cadesCertificateList =
|
||||
__cadesAsyncToken__ + cadesCertificateList.Find(cadesplugin.CAPICOM_CERTIFICATE_FIND_SHA1_HASH, thumbprint);
|
||||
|
||||
const count = __cadesAsyncToken__ + cadesCertificateList.Count;
|
||||
|
||||
if (!count) {
|
||||
throw new Error(`Сертификат с отпечатком: "${thumbprint}" не найден`);
|
||||
}
|
||||
|
||||
cadesCertificate = __cadesAsyncToken__ + cadesCertificateList.Item(1);
|
||||
cadesCertificate = await _getCadesUserCert(thumbprint);
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
console.log(error);
|
||||
|
||||
throw new Error(_extractMeaningfulErrorMessage(error) || 'Ошибка при получении сертификата');
|
||||
cadesCertificate = await _getCadesContainerCert(thumbprint);
|
||||
}
|
||||
|
||||
cadesStore.Close();
|
||||
|
||||
return cadesCertificate;
|
||||
}),
|
||||
);
|
||||
},
|
||||
}
|
||||
);
|
||||
|
88
src/helpers/_getCadesContainerCert.ts
Executable file
88
src/helpers/_getCadesContainerCert.ts
Executable file
@ -0,0 +1,88 @@
|
||||
import {CadesCertificate} from '../api/certificate';
|
||||
import {_afterPluginsLoaded} from './_afterPluginsLoaded';
|
||||
import {_extractMeaningfulErrorMessage} from './_extractMeaningfulErrorMessage';
|
||||
import {__cadesAsyncToken__, __createCadesPluginObject__, _generateCadesFn} from './_generateCadesFn';
|
||||
|
||||
/**
|
||||
* Возвращает сертификат в формате Cades по отпечатку из хранилища закрытого ключа
|
||||
*
|
||||
* @param thumbprint - отпечаток сертификата
|
||||
* @returns сертификат в формате Cades
|
||||
*/
|
||||
export const _getCadesContainerCert = _afterPluginsLoaded(
|
||||
(thumbprint: string): CadesCertificate => {
|
||||
const {cadesplugin} = window;
|
||||
|
||||
return eval(
|
||||
_generateCadesFn(function _getCadesCert() {
|
||||
let cadesStore;
|
||||
|
||||
try {
|
||||
cadesStore = __cadesAsyncToken__ + __createCadesPluginObject__('CAdESCOM.Store');
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
|
||||
throw new Error(_extractMeaningfulErrorMessage(error) || 'Ошибка при попытке доступа к хранилищу');
|
||||
}
|
||||
|
||||
if (!cadesStore) {
|
||||
throw new Error('Не удалось получить доступ к хранилищу сертификатов');
|
||||
}
|
||||
|
||||
try {
|
||||
void (
|
||||
__cadesAsyncToken__ +
|
||||
cadesStore.Open(
|
||||
cadesplugin.CADESCOM_CONTAINER_STORE,
|
||||
cadesplugin.CAPICOM_MY_STORE,
|
||||
cadesplugin.CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED,
|
||||
)
|
||||
);
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
|
||||
throw new Error(_extractMeaningfulErrorMessage(error) || 'Ошибка при открытии хранилища закрытого ключа');
|
||||
}
|
||||
|
||||
let cadesCertificateList;
|
||||
let certificatesCount;
|
||||
|
||||
try {
|
||||
cadesCertificateList = __cadesAsyncToken__ + cadesStore.Certificates;
|
||||
certificatesCount = __cadesAsyncToken__ + cadesCertificateList.Count;
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
|
||||
throw new Error(_extractMeaningfulErrorMessage(error) || 'Ошибка получения списка сертификатов из хранилища закрытого ключа');
|
||||
}
|
||||
|
||||
if (!certificatesCount) {
|
||||
throw new Error('Нет доступных сертификатов в хранилище закрытого ключа');
|
||||
}
|
||||
|
||||
let cadesCertificate: CadesCertificate;
|
||||
|
||||
try {
|
||||
cadesCertificateList =
|
||||
__cadesAsyncToken__ + cadesCertificateList.Find(cadesplugin.CAPICOM_CERTIFICATE_FIND_SHA1_HASH, thumbprint);
|
||||
|
||||
const count = __cadesAsyncToken__ + cadesCertificateList.Count;
|
||||
|
||||
if (!count) {
|
||||
throw new Error(`Сертификат с отпечатком: "${thumbprint}" не найден в хранилище закрытого ключа`);
|
||||
}
|
||||
|
||||
cadesCertificate = __cadesAsyncToken__ + cadesCertificateList.Item(1);
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
|
||||
throw new Error(_extractMeaningfulErrorMessage(error) || 'Ошибка при получении сертификата из хранилища закрытого ключа');
|
||||
}
|
||||
|
||||
cadesStore.Close();
|
||||
|
||||
return cadesCertificate;
|
||||
}),
|
||||
);
|
||||
},
|
||||
);
|
88
src/helpers/_getCadesUserCert.ts
Executable file
88
src/helpers/_getCadesUserCert.ts
Executable file
@ -0,0 +1,88 @@
|
||||
import {CadesCertificate} from '../api/certificate';
|
||||
import {_afterPluginsLoaded} from './_afterPluginsLoaded';
|
||||
import {_extractMeaningfulErrorMessage} from './_extractMeaningfulErrorMessage';
|
||||
import {__cadesAsyncToken__, __createCadesPluginObject__, _generateCadesFn} from './_generateCadesFn';
|
||||
|
||||
/**
|
||||
* Возвращает сертификат в формате Cades по отпечатку из хранилища пользователя
|
||||
*
|
||||
* @param thumbprint - отпечаток сертификата
|
||||
* @returns сертификат в формате Cades
|
||||
*/
|
||||
export const _getCadesUserCert = _afterPluginsLoaded(
|
||||
(thumbprint: string): CadesCertificate => {
|
||||
const {cadesplugin} = window;
|
||||
|
||||
return eval(
|
||||
_generateCadesFn(function _getCadesCert() {
|
||||
let cadesStore;
|
||||
|
||||
try {
|
||||
cadesStore = __cadesAsyncToken__ + __createCadesPluginObject__('CAdESCOM.Store');
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
|
||||
throw new Error(_extractMeaningfulErrorMessage(error) || 'Ошибка при попытке доступа к хранилищу');
|
||||
}
|
||||
|
||||
if (!cadesStore) {
|
||||
throw new Error('Не удалось получить доступ к хранилищу сертификатов');
|
||||
}
|
||||
|
||||
try {
|
||||
void (
|
||||
__cadesAsyncToken__ +
|
||||
cadesStore.Open(
|
||||
cadesplugin.CAPICOM_CURRENT_USER_STORE,
|
||||
cadesplugin.CAPICOM_MY_STORE,
|
||||
cadesplugin.CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED,
|
||||
)
|
||||
);
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
|
||||
throw new Error(_extractMeaningfulErrorMessage(error) || 'Ошибка при открытии хранилища пользователя');
|
||||
}
|
||||
|
||||
let cadesCertificateList;
|
||||
let certificatesCount;
|
||||
|
||||
try {
|
||||
cadesCertificateList = __cadesAsyncToken__ + cadesStore.Certificates;
|
||||
certificatesCount = __cadesAsyncToken__ + cadesCertificateList.Count;
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
|
||||
throw new Error(_extractMeaningfulErrorMessage(error) || 'Ошибка получения списка сертификатов из хранилища пользователя');
|
||||
}
|
||||
|
||||
if (!certificatesCount) {
|
||||
throw new Error('Нет доступных сертификатов в хранилище пользователя');
|
||||
}
|
||||
|
||||
let cadesCertificate: CadesCertificate;
|
||||
|
||||
try {
|
||||
cadesCertificateList =
|
||||
__cadesAsyncToken__ + cadesCertificateList.Find(cadesplugin.CAPICOM_CERTIFICATE_FIND_SHA1_HASH, thumbprint);
|
||||
|
||||
const count = __cadesAsyncToken__ + cadesCertificateList.Count;
|
||||
|
||||
if (!count) {
|
||||
throw new Error(`Сертификат с отпечатком: "${thumbprint}" не найден в хранилище пользователя`);
|
||||
}
|
||||
|
||||
cadesCertificate = __cadesAsyncToken__ + cadesCertificateList.Item(1);
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
|
||||
throw new Error(_extractMeaningfulErrorMessage(error) || 'Ошибка при получении сертификата из хранилища пользователя');
|
||||
}
|
||||
|
||||
cadesStore.Close();
|
||||
|
||||
return cadesCertificate;
|
||||
}),
|
||||
);
|
||||
},
|
||||
);
|
Loading…
Reference in New Issue
Block a user