mirror of
https://github.com/crypto-pro-web/crypto-pro-js.git
synced 2025-04-21 04:53:08 +03:00
Получение сертификата в формате Cades из личного хранилища пользователя и хранилища закрытого ключа
This commit is contained in:
parent
937da83bb4
commit
f0aeb16ec4
@ -1,7 +1,7 @@
|
|||||||
import { CadesCertificate } from '../api/certificate';
|
import {CadesCertificate} from '../api/certificate';
|
||||||
import { _afterPluginsLoaded } from './_afterPluginsLoaded';
|
import {_afterPluginsLoaded} from './_afterPluginsLoaded';
|
||||||
import { _extractMeaningfulErrorMessage } from './_extractMeaningfulErrorMessage';
|
import {_getCadesUserCert} from "./_getCadesUserCert";
|
||||||
import { __cadesAsyncToken__, __createCadesPluginObject__, _generateCadesFn } from './_generateCadesFn';
|
import {_getCadesContainerCert} from "./_getCadesContainerCert";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Возвращает сертификат в формате Cades по отпечатку
|
* Возвращает сертификат в формате Cades по отпечатку
|
||||||
@ -10,79 +10,17 @@ import { __cadesAsyncToken__, __createCadesPluginObject__, _generateCadesFn } fr
|
|||||||
* @returns сертификат в формате Cades
|
* @returns сертификат в формате Cades
|
||||||
*/
|
*/
|
||||||
export const _getCadesCert = _afterPluginsLoaded(
|
export const _getCadesCert = _afterPluginsLoaded(
|
||||||
(thumbprint: string): CadesCertificate => {
|
async (thumbprint: string): Promise<CadesCertificate> => {
|
||||||
const { cadesplugin } = window;
|
let cadesCertificate: CadesCertificate;
|
||||||
|
|
||||||
return eval(
|
try {
|
||||||
_generateCadesFn(function _getCadesCert() {
|
cadesCertificate = await _getCadesUserCert(thumbprint);
|
||||||
let cadesStore;
|
} catch (error) {
|
||||||
|
console.log(error);
|
||||||
|
|
||||||
try {
|
cadesCertificate = await _getCadesContainerCert(thumbprint);
|
||||||
cadesStore = __cadesAsyncToken__ + __createCadesPluginObject__('CAdESCOM.Store');
|
}
|
||||||
} catch (error) {
|
|
||||||
console.error(error);
|
|
||||||
|
|
||||||
throw new Error(_extractMeaningfulErrorMessage(error) || 'Ошибка при попытке доступа к хранилищу');
|
return cadesCertificate;
|
||||||
}
|
}
|
||||||
|
|
||||||
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;
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
},
|
|
||||||
);
|
);
|
||||||
|
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