mirror of
				https://github.com/crypto-pro-web/crypto-pro-js.git
				synced 2025-10-31 06:13:22 +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 {CadesCertificate} from '../api/certificate'; | ||||
| import {_afterPluginsLoaded} from './_afterPluginsLoaded'; | ||||
| 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; | ||||
|   async (thumbprint: string): Promise<CadesCertificate> => { | ||||
|     let cadesCertificate: CadesCertificate; | ||||
| 
 | ||||
|     return eval( | ||||
|       _generateCadesFn(function _getCadesCert() { | ||||
|         let cadesStore; | ||||
|     try { | ||||
|       cadesCertificate = await _getCadesUserCert(thumbprint); | ||||
|     } catch (error) { | ||||
|       console.log(error); | ||||
| 
 | ||||
|         try { | ||||
|           cadesStore = __cadesAsyncToken__ + __createCadesPluginObject__('CAdESCOM.Store'); | ||||
|         } catch (error) { | ||||
|           console.error(error); | ||||
|       cadesCertificate = await _getCadesContainerCert(thumbprint); | ||||
|     } | ||||
| 
 | ||||
|           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; | ||||
|       }), | ||||
|     ); | ||||
|   }, | ||||
|     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