mirror of
https://github.com/crypto-pro-web/crypto-pro-js.git
synced 2025-04-18 19:43:12 +03:00
100 lines
3.5 KiB
TypeScript
100 lines
3.5 KiB
TypeScript
import { CadesCertificate, Certificate } from './certificate';
|
|
import { _afterPluginsLoaded } from '../helpers/_afterPluginsLoaded';
|
|
import { _extractCommonName } from '../helpers/_extractCommonName';
|
|
import { _extractMeaningfulErrorMessage } from '../helpers/_extractMeaningfulErrorMessage';
|
|
import { __cadesAsyncToken__, __createCadesPluginObject__, _generateCadesFn } from '../helpers/_generateCadesFn';
|
|
|
|
let certificatesCache: Certificate[];
|
|
|
|
/**
|
|
* Возвращает все сертификаты без фильтрации по дате и наличию приватного ключа
|
|
*
|
|
* @param resetCache = false - позволяет сбросить кэш ранее полученных сертификатов
|
|
* @returns список сертификатов
|
|
*/
|
|
export const getAllUserCertificates = _afterPluginsLoaded((resetCache: boolean = false): Certificate[] => {
|
|
const { cadesplugin } = window;
|
|
|
|
if (!resetCache && certificatesCache) {
|
|
return certificatesCache;
|
|
}
|
|
|
|
return eval(
|
|
_generateCadesFn(function getAllUserCertificates(): Certificate[] {
|
|
let cadesStore;
|
|
|
|
try {
|
|
cadesStore = __cadesAsyncToken__ + __createCadesPluginObject__('CAdESCOM.Store');
|
|
} catch (error) {
|
|
console.error(error);
|
|
|
|
throw new Error(_extractMeaningfulErrorMessage(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 cadesCertificates;
|
|
let cadesCertificatesCount;
|
|
|
|
try {
|
|
cadesCertificates = __cadesAsyncToken__ + cadesStore.Certificates;
|
|
cadesCertificatesCount = __cadesAsyncToken__ + cadesCertificates.Count;
|
|
} catch (error) {
|
|
console.error(error);
|
|
|
|
throw new Error(_extractMeaningfulErrorMessage(error) || 'Ошибка получения списка сертификатов');
|
|
}
|
|
|
|
if (!cadesCertificatesCount) {
|
|
throw new Error('Нет доступных сертификатов');
|
|
}
|
|
|
|
const certificateList: Certificate[] = [];
|
|
|
|
try {
|
|
while (cadesCertificatesCount) {
|
|
const cadesCertificate: CadesCertificate =
|
|
__cadesAsyncToken__ + cadesCertificates.Item(cadesCertificatesCount);
|
|
|
|
certificateList.push(
|
|
new Certificate(
|
|
cadesCertificate,
|
|
_extractCommonName(__cadesAsyncToken__ + cadesCertificate.SubjectName),
|
|
__cadesAsyncToken__ + cadesCertificate.IssuerName,
|
|
__cadesAsyncToken__ + cadesCertificate.SubjectName,
|
|
__cadesAsyncToken__ + cadesCertificate.Thumbprint,
|
|
__cadesAsyncToken__ + cadesCertificate.ValidFromDate,
|
|
__cadesAsyncToken__ + cadesCertificate.ValidToDate,
|
|
),
|
|
);
|
|
|
|
cadesCertificatesCount--;
|
|
}
|
|
} catch (error) {
|
|
console.error(error);
|
|
|
|
throw new Error(_extractMeaningfulErrorMessage(error) || 'Ошибка обработки сертификатов');
|
|
}
|
|
|
|
cadesStore.Close();
|
|
|
|
certificatesCache = certificateList;
|
|
|
|
return certificatesCache;
|
|
}),
|
|
);
|
|
});
|