import React, { useState, useEffect } from 'react'; import { getCertificate, getUserCertificates } from 'crypto-pro'; function Certificate({onChange}) { const [certificates, setCertificates] = useState([]); const [certificatesError, setCertificatesError] = useState([]); const [certificate, setCertificate] = useState(null); const [certificateDetails, setCertificateDetails] = useState(null); const [detailsError, setDetailsError] = useState(null); function selectCertificate(event) { const certificate = certificates.find(({thumbprint}) => thumbprint === event.target.value); setCertificate(certificate); onChange(certificate); } async function loadCertificateDetails(thumbprint) { try { const certificate = await getCertificate(thumbprint); setCertificateDetails({ name: certificate.name, issuerName: certificate.issuerName, subjectName: certificate.subjectName, thumbprint: certificate.thumbprint, validFrom: certificate.validFrom, validTo: certificate.validTo, isValid: await certificate.isValid(), version: await certificate.getCadesProp('Version'), base64: await certificate.exportBase64(), algorithm: await certificate.getAlgorithm(), extendedKeyUsage: await certificate.getExtendedKeyUsage(), ownerInfo: await certificate.getOwnerInfo(), issuerInfo: await certificate.getIssuerInfo(), decodedExtendedKeyUsage: await certificate.getDecodedExtendedKeyUsage(), '1.3.6.1.4.1.311.80.1': await certificate.hasExtendedKeyUsage('1.3.6.1.4.1.311.80.1'), '[\'1.3.6.1.5.5.7.3.2\', \'1.3.6.1.4.1.311.10.3.12\']': await certificate.hasExtendedKeyUsage([ '1.3.6.1.5.5.7.3.2', '1.3.6.1.4.1.311.10.3.12' ]), '1.3.6.1.4.1.311.80.2': await certificate.hasExtendedKeyUsage('1.3.6.1.4.1.311.80.2'), '\'1.3.6.1.5.5.7.3.3\', \'1.3.6.1.4.1.311.10.3.12\'': await certificate.hasExtendedKeyUsage([ '1.3.6.1.5.5.7.3.3', '1.3.6.1.4.1.311.10.3.12' ]), }); } catch (error) { setDetailsError(error); } } useEffect(() => { (async () => { try { setCertificates(await getUserCertificates()); } catch (error) { setCertificatesError(error.message); } })(); }); return ( <>
{certificatesError || null}
{certificate ? ( <>
Информация о сертификате
              {certificateDetails ? (
                JSON.stringify(certificateDetails, null, '  ')
              ) : 'Запрашивается...'}
            
{detailsError || null}
) : null} ); } export default Certificate;