mirror of
https://github.com/crypto-pro-web/crypto-pro-js.git
synced 2025-04-19 12:03:10 +03:00
93 lines
3.3 KiB
TypeScript
Executable File
93 lines
3.3 KiB
TypeScript
Executable File
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;
|
||
}),
|
||
);
|
||
},
|
||
);
|