@peculiar/certificates-viewer 4.7.1-alpha.5 → 4.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/actions.js +1 -2
- package/components/actions.js.map +1 -1
- package/components/arrow_top.js +2 -4
- package/components/arrow_top.js.map +1 -1
- package/components/attribute-certificate-viewer.js +7 -12
- package/components/attribute-certificate-viewer.js.map +1 -1
- package/components/button-menu.js +4 -2
- package/components/button-menu.js.map +1 -1
- package/components/button.js +5 -8
- package/components/button.js.map +1 -1
- package/components/certificate-chain-viewer.js +5 -3
- package/components/certificate-chain-viewer.js.map +1 -1
- package/components/certificate-viewer.js +4 -2
- package/components/certificate-viewer.js.map +1 -1
- package/components/circular-progress.js +4 -2
- package/components/circular-progress.js.map +1 -1
- package/components/crl-viewer.js +6 -7
- package/components/crl-viewer.js.map +1 -1
- package/components/cross.js +3 -6
- package/components/cross.js.map +1 -1
- package/components/csr-viewer.js +4 -2
- package/components/csr-viewer.js.map +1 -1
- package/components/download.js +89 -89
- package/components/download.js.map +1 -1
- package/components/highlight-words.js +4 -2
- package/components/highlight-words.js.map +1 -1
- package/components/index2.js +14 -49
- package/components/index2.js.map +1 -1
- package/components/issuer_name.js.map +1 -1
- package/components/miscellaneous.js +61 -153
- package/components/miscellaneous.js.map +1 -1
- package/components/peculiar-certificate-decoder.js +5 -3
- package/components/peculiar-certificate-decoder.js.map +1 -1
- package/components/peculiar-certificates-viewer.js +6 -16
- package/components/peculiar-certificates-viewer.js.map +1 -1
- package/components/pkcs10_certificate_request.js.map +1 -1
- package/components/row.js +6 -17
- package/components/row.js.map +1 -1
- package/components/ssh-certificate-viewer.js +5 -5
- package/components/ssh-certificate-viewer.js.map +1 -1
- package/components/subject_name.js.map +1 -1
- package/components/text-hider.js +4 -2
- package/components/text-hider.js.map +1 -1
- package/dist/cjs/{actions-ByC9jQU-.js → actions-mGiqn4uZ.js} +4 -5
- package/dist/cjs/{actions-ByC9jQU-.js.map → actions-mGiqn4uZ.js.map} +1 -1
- package/dist/cjs/{arrow_top-Cw9KN115.js → arrow_top-opfTrg-m.js} +5 -7
- package/dist/cjs/{arrow_top-Cw9KN115.js.map → arrow_top-opfTrg-m.js.map} +1 -1
- package/dist/cjs/{button-C8EWG_-r.js → button-B215SxsO.js} +8 -11
- package/dist/{esm-es5/button-Bbh7MwG6.js.map → cjs/button-B215SxsO.js.map} +1 -1
- package/dist/cjs/cross-DV79hJ_S.js +49 -0
- package/dist/cjs/{cross-3DqhA0G_.js.map → cross-DV79hJ_S.js.map} +1 -1
- package/dist/cjs/download-DAw3krU6.js +23 -0
- package/dist/cjs/{download-DQP0KR4o.js.map → download-DAw3krU6.js.map} +1 -1
- package/dist/cjs/{extension-CjXYQXbF.js → extension-BDpdRJkE.js} +3 -3
- package/dist/cjs/extension-BDpdRJkE.js.map +1 -0
- package/dist/cjs/{index-uHmGhObe.js → index-BDWR3dnW.js} +88 -47
- package/dist/cjs/index-BDWR3dnW.js.map +1 -0
- package/dist/cjs/index.cjs.js +9 -11
- package/dist/cjs/{link-Cgh8wnbs.js → link-BScgjwVZ.js} +5 -5
- package/dist/cjs/{link-Cgh8wnbs.js.map → link-BScgjwVZ.js.map} +1 -1
- package/dist/cjs/loader.cjs.js +2 -4
- package/dist/cjs/{miscellaneous-7gtHz795.js → miscellaneous-Bomq8zQH.js} +75 -178
- package/dist/cjs/miscellaneous-Bomq8zQH.js.map +1 -0
- package/dist/cjs/peculiar-attribute-certificate-viewer.peculiar-certificate-chain-viewer.peculiar-crl-viewer.peculiar-csr-viewer.peculiar-ssh-certificate-viewer.entry.cjs.js.map +1 -1
- package/dist/cjs/peculiar-attribute-certificate-viewer_5.cjs.entry.js +30 -79
- package/dist/cjs/peculiar-button-menu_3.cjs.entry.js +3 -5
- package/dist/cjs/peculiar-certificate-decoder.cjs.entry.js +7 -9
- package/dist/cjs/peculiar-certificate-decoder.entry.cjs.js.map +1 -1
- package/dist/cjs/peculiar-certificate-viewer.cjs.entry.js +8 -10
- package/dist/cjs/peculiar-certificate-viewer.entry.cjs.js.map +1 -1
- package/dist/cjs/peculiar-certificates-viewer.cjs.entry.js +10 -24
- package/dist/cjs/peculiar-certificates-viewer.entry.cjs.js.map +1 -1
- package/dist/cjs/peculiar-text-hider.cjs.entry.js +3 -5
- package/dist/cjs/peculiar.cjs.js +3 -5
- package/dist/cjs/peculiar.cjs.js.map +1 -1
- package/dist/cjs/{pkcs10_certificate_request-CIOxDu_Z.js → pkcs10_certificate_request-DZLiHGCV.js} +3 -3
- package/dist/cjs/{pkcs10_certificate_request-CIOxDu_Z.js.map → pkcs10_certificate_request-DZLiHGCV.js.map} +1 -1
- package/dist/cjs/{ssh_certificate-DnXj2sM0.js → ssh_certificate-Bh14rhzR.js} +89 -88
- package/dist/cjs/ssh_certificate-Bh14rhzR.js.map +1 -0
- package/dist/cjs/{x509_certificate-DPgu-mwG.js → x509_certificate-p8RMn7Hw.js} +4 -4
- package/dist/cjs/{x509_certificate-DPgu-mwG.js.map → x509_certificate-p8RMn7Hw.js.map} +1 -1
- package/dist/cjs/{x509_crl-D_DKkGcn.js → x509_crl-tjmX6l3R.js} +5 -5
- package/dist/cjs/{x509_crl-D_DKkGcn.js.map → x509_crl-tjmX6l3R.js.map} +1 -1
- package/dist/collection/collection-manifest.json +2 -2
- package/dist/collection/components/attribute-certificate-viewer/attribute-certificate-viewer.js +14 -14
- package/dist/collection/components/button-menu/button-menu.js +1 -2
- package/dist/collection/components/button-menu/button-menu.js.map +1 -1
- package/dist/collection/components/certificate-chain-viewer/certificate-chain-viewer.css +0 -447
- package/dist/collection/components/certificate-chain-viewer/certificate-chain-viewer.js +2 -3
- package/dist/collection/components/certificate-chain-viewer/certificate-chain-viewer.js.map +1 -1
- package/dist/collection/components/certificate-decoder/certificate-decoder.js +2 -3
- package/dist/collection/components/certificate-decoder/certificate-decoder.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/extensions/certificate_transparency_extension.js +1 -1
- package/dist/collection/components/certificate-details-parts/extensions/certificate_transparency_extension.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/extensions/qc_statements_extension.js +1 -1
- package/dist/collection/components/certificate-details-parts/extensions/qc_statements_extension.js.map +1 -1
- package/dist/collection/components/certificate-viewer/certificate-viewer.js +16 -16
- package/dist/collection/components/certificates-viewer/certificates-viewer.js +4 -5
- package/dist/collection/components/certificates-viewer/certificates-viewer.js.map +1 -1
- package/dist/collection/components/circular-progress/circular-progress.js +2 -2
- package/dist/collection/components/crl-viewer/crl-viewer.js +12 -12
- package/dist/collection/components/csr-viewer/csr-viewer.js +10 -10
- package/dist/collection/components/highlight-words/highlight-words.js +2 -2
- package/dist/collection/components/ssh-certificate-viewer/ssh-certificate-viewer.js +6 -6
- package/dist/collection/crypto/extensions/cabforganization_identifier.js.map +1 -1
- package/dist/collection/crypto/ssh_certificate.js +8 -3
- package/dist/collection/crypto/ssh_certificate.js.map +1 -1
- package/dist/esm/{actions-BOY2Tl0T.js → actions-CabuIstu.js} +4 -5
- package/dist/esm/{actions-BOY2Tl0T.js.map → actions-CabuIstu.js.map} +1 -1
- package/dist/esm/{arrow_top-DL0RWe4n.js → arrow_top-CWdnzNJA.js} +5 -7
- package/dist/{esm-es5/arrow_top-DL0RWe4n.js.map → esm/arrow_top-CWdnzNJA.js.map} +1 -1
- package/dist/esm/{button-Bbh7MwG6.js → button-DoyFdU2L.js} +8 -11
- package/dist/esm/{button-Bbh7MwG6.js.map → button-DoyFdU2L.js.map} +1 -1
- package/dist/esm/cross-B4NPVkar.js +45 -0
- package/dist/{esm-es5/cross-G84H_-QL.js.map → esm/cross-B4NPVkar.js.map} +1 -1
- package/dist/esm/download-C7Viw-3R.js +21 -0
- package/dist/esm/{download-ykcxSgxU.js.map → download-C7Viw-3R.js.map} +1 -1
- package/dist/esm/{extension-B3br1_Py.js → extension-xW03sQxn.js} +3 -3
- package/dist/esm/extension-xW03sQxn.js.map +1 -0
- package/dist/esm/{index-CwgZaF40.js → index-B0tLzdJT.js} +88 -47
- package/dist/esm/index-B0tLzdJT.js.map +1 -0
- package/dist/esm/index.js +9 -11
- package/dist/esm/{link-CGURvKy1.js → link-BDCg-T_l.js} +5 -5
- package/dist/esm/{link-CGURvKy1.js.map → link-BDCg-T_l.js.map} +1 -1
- package/dist/esm/loader.js +3 -5
- package/dist/esm/{miscellaneous-phHcBJWR.js → miscellaneous-DxE6a1mr.js} +75 -178
- package/dist/esm/miscellaneous-DxE6a1mr.js.map +1 -0
- package/dist/esm/peculiar-attribute-certificate-viewer.peculiar-certificate-chain-viewer.peculiar-crl-viewer.peculiar-csr-viewer.peculiar-ssh-certificate-viewer.entry.js.map +1 -1
- package/dist/esm/peculiar-attribute-certificate-viewer_5.entry.js +30 -79
- package/dist/esm/peculiar-button-menu_3.entry.js +3 -5
- package/dist/esm/peculiar-certificate-decoder.entry.js +7 -9
- package/dist/esm/peculiar-certificate-decoder.entry.js.map +1 -1
- package/dist/esm/peculiar-certificate-viewer.entry.js +8 -10
- package/dist/esm/peculiar-certificate-viewer.entry.js.map +1 -1
- package/dist/esm/peculiar-certificates-viewer.entry.js +10 -24
- package/dist/esm/peculiar-certificates-viewer.entry.js.map +1 -1
- package/dist/esm/peculiar-text-hider.entry.js +3 -5
- package/dist/esm/peculiar.js +4 -6
- package/dist/esm/peculiar.js.map +1 -1
- package/dist/esm/{pkcs10_certificate_request-HIoLPXGQ.js → pkcs10_certificate_request-Crr9FABo.js} +3 -3
- package/dist/esm/{pkcs10_certificate_request-HIoLPXGQ.js.map → pkcs10_certificate_request-Crr9FABo.js.map} +1 -1
- package/dist/esm/{ssh_certificate-rmToyzuK.js → ssh_certificate-CmOVFH_Z.js} +89 -88
- package/dist/esm/ssh_certificate-CmOVFH_Z.js.map +1 -0
- package/dist/esm/{x509_certificate-C1VvfHQ5.js → x509_certificate-C2EVTspY.js} +4 -4
- package/dist/{esm-es5/x509_certificate-C1VvfHQ5.js.map → esm/x509_certificate-C2EVTspY.js.map} +1 -1
- package/dist/esm/{x509_crl-rfnWQkGD.js → x509_crl-Bdnys_YT.js} +5 -5
- package/dist/{esm-es5/x509_crl-rfnWQkGD.js.map → esm/x509_crl-Bdnys_YT.js.map} +1 -1
- package/dist/esm-es5/{actions-BOY2Tl0T.js → actions-CabuIstu.js} +3 -3
- package/dist/esm-es5/{actions-BOY2Tl0T.js.map → actions-CabuIstu.js.map} +1 -1
- package/dist/esm-es5/{arrow_top-DL0RWe4n.js → arrow_top-CWdnzNJA.js} +2 -2
- package/dist/{esm/arrow_top-DL0RWe4n.js.map → esm-es5/arrow_top-CWdnzNJA.js.map} +1 -1
- package/dist/esm-es5/{button-Bbh7MwG6.js → button-DoyFdU2L.js} +2 -2
- package/dist/{cjs/button-C8EWG_-r.js.map → esm-es5/button-DoyFdU2L.js.map} +1 -1
- package/dist/esm-es5/{cross-G84H_-QL.js → cross-B4NPVkar.js} +2 -2
- package/dist/{esm/cross-G84H_-QL.js.map → esm-es5/cross-B4NPVkar.js.map} +1 -1
- package/dist/esm-es5/{download-ykcxSgxU.js → download-C7Viw-3R.js} +2 -2
- package/dist/esm-es5/{download-ykcxSgxU.js.map → download-C7Viw-3R.js.map} +1 -1
- package/dist/esm-es5/{extension-B3br1_Py.js → extension-xW03sQxn.js} +2 -2
- package/dist/esm-es5/extension-xW03sQxn.js.map +1 -0
- package/dist/esm-es5/index-B0tLzdJT.js +6 -0
- package/dist/esm-es5/index-B0tLzdJT.js.map +1 -0
- package/dist/esm-es5/index.js +1 -1
- package/dist/esm-es5/{link-CGURvKy1.js → link-BDCg-T_l.js} +3 -3
- package/dist/esm-es5/{link-CGURvKy1.js.map → link-BDCg-T_l.js.map} +1 -1
- package/dist/esm-es5/loader.js +2 -2
- package/dist/esm-es5/{miscellaneous-phHcBJWR.js → miscellaneous-DxE6a1mr.js} +4 -4
- package/dist/esm-es5/miscellaneous-DxE6a1mr.js.map +1 -0
- package/dist/esm-es5/peculiar-attribute-certificate-viewer.peculiar-certificate-chain-viewer.peculiar-crl-viewer.peculiar-csr-viewer.peculiar-ssh-certificate-viewer.entry.js.map +1 -1
- package/dist/esm-es5/peculiar-attribute-certificate-viewer_5.entry.js +3 -3
- package/dist/esm-es5/peculiar-attribute-certificate-viewer_5.entry.js.map +1 -1
- package/dist/esm-es5/peculiar-button-menu_3.entry.js +1 -1
- package/dist/esm-es5/peculiar-button-menu_3.entry.js.map +1 -1
- package/dist/esm-es5/peculiar-certificate-decoder.entry.js +2 -2
- package/dist/esm-es5/peculiar-certificate-decoder.entry.js.map +1 -1
- package/dist/esm-es5/peculiar-certificate-viewer.entry.js +2 -2
- package/dist/esm-es5/peculiar-certificate-viewer.entry.js.map +1 -1
- package/dist/esm-es5/peculiar-certificates-viewer.entry.js +2 -2
- package/dist/esm-es5/peculiar-certificates-viewer.entry.js.map +1 -1
- package/dist/esm-es5/peculiar-text-hider.entry.js +1 -1
- package/dist/esm-es5/peculiar.js +2 -2
- package/dist/esm-es5/peculiar.js.map +1 -1
- package/dist/esm-es5/{pkcs10_certificate_request-HIoLPXGQ.js → pkcs10_certificate_request-Crr9FABo.js} +3 -3
- package/dist/esm-es5/{pkcs10_certificate_request-HIoLPXGQ.js.map → pkcs10_certificate_request-Crr9FABo.js.map} +1 -1
- package/dist/esm-es5/{ssh_certificate-rmToyzuK.js → ssh_certificate-CmOVFH_Z.js} +5 -5
- package/dist/esm-es5/ssh_certificate-CmOVFH_Z.js.map +1 -0
- package/dist/esm-es5/{x509_certificate-C1VvfHQ5.js → x509_certificate-C2EVTspY.js} +3 -3
- package/dist/{esm/x509_certificate-C1VvfHQ5.js.map → esm-es5/x509_certificate-C2EVTspY.js.map} +1 -1
- package/dist/esm-es5/{x509_crl-rfnWQkGD.js → x509_crl-Bdnys_YT.js} +4 -4
- package/dist/{esm/x509_crl-rfnWQkGD.js.map → esm-es5/x509_crl-Bdnys_YT.js.map} +1 -1
- package/dist/peculiar/index.esm.js +1 -1
- package/dist/peculiar/p--UIbyTPo.system.js.map +1 -0
- package/dist/peculiar/{p-872f7312.system.entry.js → p-16bd5fac.system.entry.js} +18 -18
- package/dist/peculiar/p-16bd5fac.system.entry.js.map +1 -0
- package/dist/peculiar/{p-04422929.entry.js → p-26e1e392.entry.js} +3 -3
- package/dist/peculiar/p-26e1e392.entry.js.map +1 -0
- package/dist/peculiar/{p-154dd0da.entry.js → p-2c5ec624.entry.js} +2 -2
- package/dist/peculiar/p-2c5ec624.entry.js.map +1 -0
- package/dist/peculiar/{p-27ae6a3a.entry.js → p-4111bd62.entry.js} +2 -2
- package/dist/peculiar/p-4111bd62.entry.js.map +1 -0
- package/dist/peculiar/{p-3685975d.system.entry.js → p-4b510453.system.entry.js} +3 -3
- package/dist/peculiar/p-4b510453.system.entry.js.map +1 -0
- package/dist/peculiar/{p-6f0f2749.system.entry.js → p-4fc81fd0.system.entry.js} +3 -3
- package/dist/peculiar/p-4fc81fd0.system.entry.js.map +1 -0
- package/dist/peculiar/p-51832de2.entry.js +152 -0
- package/dist/peculiar/p-51832de2.entry.js.map +1 -0
- package/dist/peculiar/{p-B4PdAFCr.system.js → p-AHlPpL1z.system.js} +2 -2
- package/dist/peculiar/{p-B4PdAFCr.system.js.map → p-AHlPpL1z.system.js.map} +1 -1
- package/dist/peculiar/p-B0tLzdJT.js +6 -0
- package/dist/peculiar/p-B0tLzdJT.js.map +1 -0
- package/dist/peculiar/{p-B1eGYq5U.js → p-B4vvBwd6.js} +3 -3
- package/dist/peculiar/{p-B1eGYq5U.js.map → p-B4vvBwd6.js.map} +1 -1
- package/dist/peculiar/{p-CYFfXlCT.js → p-B7cL9SBA.js} +4 -4
- package/dist/peculiar/{p-CYFfXlCT.js.map → p-B7cL9SBA.js.map} +1 -1
- package/dist/peculiar/{p-DanjeXNk.js → p-BAAnYCav.js} +3 -3
- package/dist/peculiar/{p-DanjeXNk.js.map → p-BAAnYCav.js.map} +1 -1
- package/dist/peculiar/{p-CHnDlTqM.js → p-BLjDwIXV.js} +3 -3
- package/dist/peculiar/{p-CHnDlTqM.js.map → p-BLjDwIXV.js.map} +1 -1
- package/dist/peculiar/{p-CutTi-2B.js → p-BNRN5kAu.js} +2 -2
- package/dist/peculiar/{p-CutTi-2B.js.map → p-BNRN5kAu.js.map} +1 -1
- package/dist/peculiar/{p-Bi5mjeeg.system.js → p-BX5m4Pk2.system.js} +2 -2
- package/dist/peculiar/{p-Bi5mjeeg.system.js.map → p-BX5m4Pk2.system.js.map} +1 -1
- package/dist/peculiar/{p-N3w4Sc5c.system.js.map → p-BdGJr6Nw.system.js.map} +1 -1
- package/dist/peculiar/{p-CTksa0ml.system.js → p-Bfl7RVFY.system.js} +4 -4
- package/dist/peculiar/{p-CTksa0ml.system.js.map → p-Bfl7RVFY.system.js.map} +1 -1
- package/dist/peculiar/{p-B8_0p5ke.js → p-BjREwt05.js} +43 -43
- package/dist/peculiar/p-BjREwt05.js.map +1 -0
- package/dist/peculiar/{p-BGASC3UX.system.js → p-BjfN0sUP.system.js} +3 -3
- package/dist/peculiar/p-BjfN0sUP.system.js.map +1 -0
- package/dist/peculiar/{p-DMZr5ztF.js → p-BrjKJZAs.js} +2 -2
- package/dist/peculiar/{p-DMZr5ztF.js.map → p-BrjKJZAs.js.map} +1 -1
- package/dist/peculiar/{p-CkePJXWQ.js → p-BxiR02Uf.js} +4 -4
- package/dist/peculiar/{p-CkePJXWQ.js.map → p-BxiR02Uf.js.map} +1 -1
- package/dist/peculiar/{p-ZT6tVIen.js → p-C-zA8CWJ.js} +2 -2
- package/dist/peculiar/{p-ZT6tVIen.js.map → p-C-zA8CWJ.js.map} +1 -1
- package/dist/peculiar/{p-Bknpl7EO.system.js → p-C9U3cZjb.system.js} +3 -3
- package/dist/peculiar/{p-Bknpl7EO.system.js.map → p-C9U3cZjb.system.js.map} +1 -1
- package/dist/peculiar/{p-DorRvFf7.system.js → p-CCPSoWEH.system.js} +43 -43
- package/dist/peculiar/p-CCPSoWEH.system.js.map +1 -0
- package/dist/peculiar/{p-ZxTK29QB.system.js → p-CGipIfjs.system.js} +5 -5
- package/dist/peculiar/{p-ZxTK29QB.system.js.map → p-CGipIfjs.system.js.map} +1 -1
- package/dist/peculiar/{p-kq9wAWxW.system.js → p-CLcRtCZ9.system.js} +5 -5
- package/dist/peculiar/p-CLcRtCZ9.system.js.map +1 -0
- package/dist/peculiar/{p-CdS84qJs.system.js → p-CNRpL2vk.system.js} +2 -2
- package/dist/peculiar/{p-CdS84qJs.system.js.map → p-CNRpL2vk.system.js.map} +1 -1
- package/dist/peculiar/{p-JyD6URnB.js → p-CVqAvraM.js} +2 -2
- package/dist/peculiar/{p-JyD6URnB.js.map → p-CVqAvraM.js.map} +1 -1
- package/dist/peculiar/{p-D8xU284r.system.js → p-CWwlqwKM.system.js} +2 -2
- package/dist/peculiar/{p-D8xU284r.system.js.map → p-CWwlqwKM.system.js.map} +1 -1
- package/dist/peculiar/p-CbJUBy06.system.js +5 -0
- package/dist/peculiar/p-CbJUBy06.system.js.map +1 -0
- package/dist/peculiar/p-CfHXB_pJ.system.js.map +1 -0
- package/dist/peculiar/p-Ckf8xErP.system.js +12 -0
- package/dist/peculiar/p-Ckf8xErP.system.js.map +1 -0
- package/dist/peculiar/{p-rmToyzuK.js → p-CmOVFH_Z.js} +4 -4
- package/dist/peculiar/p-CmOVFH_Z.js.map +1 -0
- package/dist/peculiar/{p-CbJQZ9Hh.system.js.map → p-Cp79UjaU.system.js.map} +1 -1
- package/dist/peculiar/p-D4MqnJ9p.system.js.map +1 -0
- package/dist/peculiar/p-D5BlV4_w.system.js +6 -0
- package/dist/peculiar/p-D5BlV4_w.system.js.map +1 -0
- package/dist/peculiar/{p-eziSY5IJ.system.js.map → p-DOSHmuRc.system.js.map} +1 -1
- package/dist/peculiar/p-DXA1451q.js +12 -0
- package/dist/peculiar/p-DXA1451q.js.map +1 -0
- package/dist/peculiar/{p-DkshB-5z.system.js → p-DberG072.system.js} +5 -5
- package/dist/peculiar/{p-DkshB-5z.system.js.map → p-DberG072.system.js.map} +1 -1
- package/dist/peculiar/{p-de857304.system.entry.js → p-ae88bf01.system.entry.js} +2 -2
- package/dist/peculiar/p-ae88bf01.system.entry.js.map +1 -0
- package/dist/peculiar/{p-a4454e2d.system.entry.js → p-c4bbd44c.system.entry.js} +3 -3
- package/dist/peculiar/p-c4bbd44c.system.entry.js.map +1 -0
- package/dist/peculiar/{p-9d9f24bd.entry.js → p-d212830c.entry.js} +2 -2
- package/dist/peculiar/p-d212830c.entry.js.map +1 -0
- package/dist/peculiar/{p-019339d6.entry.js → p-e40e47be.entry.js} +2 -2
- package/dist/peculiar/p-e40e47be.entry.js.map +1 -0
- package/dist/peculiar/{p-607d08e8.system.entry.js → p-ef52478f.system.entry.js} +2 -2
- package/dist/peculiar/p-ef52478f.system.entry.js.map +1 -0
- package/dist/peculiar/p-qOxEa6Ap.system.js.map +1 -0
- package/dist/peculiar/{p-NnCM1ETy.system.js → p-vusQjz44.system.js} +2 -2
- package/dist/peculiar/{p-NnCM1ETy.system.js.map → p-vusQjz44.system.js.map} +1 -1
- package/dist/peculiar/peculiar-attribute-certificate-viewer.peculiar-certificate-chain-viewer.peculiar-crl-viewer.peculiar-csr-viewer.peculiar-ssh-certificate-viewer.entry.esm.js.map +1 -1
- package/dist/peculiar/peculiar-certificate-decoder.entry.esm.js.map +1 -1
- package/dist/peculiar/peculiar-certificate-viewer.entry.esm.js.map +1 -1
- package/dist/peculiar/peculiar-certificates-viewer.entry.esm.js.map +1 -1
- package/dist/peculiar/peculiar.esm.js +1 -1
- package/dist/peculiar/peculiar.esm.js.map +1 -1
- package/dist/peculiar/peculiar.js +1 -1
- package/dist/types/crypto/ssh_certificate.d.ts +1 -1
- package/dist/types/interface.d.ts +86 -86
- package/dist/types/stencil-public-runtime.d.ts +49 -2
- package/hydrate/index.d.ts +2 -0
- package/hydrate/index.js +368 -496
- package/hydrate/index.mjs +368 -496
- package/package.json +4 -4
- package/dist/cjs/cross-3DqhA0G_.js +0 -52
- package/dist/cjs/download-DQP0KR4o.js +0 -24
- package/dist/cjs/extension-CjXYQXbF.js.map +0 -1
- package/dist/cjs/index-uHmGhObe.js.map +0 -1
- package/dist/cjs/miscellaneous-7gtHz795.js.map +0 -1
- package/dist/cjs/peculiar-attribute-certificate-viewer_5.cjs.entry.js.map +0 -1
- package/dist/cjs/peculiar-button-menu_3.cjs.entry.js.map +0 -1
- package/dist/cjs/peculiar-certificate-decoder.cjs.entry.js.map +0 -1
- package/dist/cjs/peculiar-certificate-viewer.cjs.entry.js.map +0 -1
- package/dist/cjs/peculiar-certificates-viewer.cjs.entry.js.map +0 -1
- package/dist/cjs/peculiar-text-hider.cjs.entry.js.map +0 -1
- package/dist/cjs/ssh_certificate-DnXj2sM0.js.map +0 -1
- package/dist/esm/cross-G84H_-QL.js +0 -48
- package/dist/esm/download-ykcxSgxU.js +0 -22
- package/dist/esm/extension-B3br1_Py.js.map +0 -1
- package/dist/esm/index-CwgZaF40.js.map +0 -1
- package/dist/esm/miscellaneous-phHcBJWR.js.map +0 -1
- package/dist/esm/peculiar-attribute-certificate-viewer_5.entry.js.map +0 -1
- package/dist/esm/peculiar-button-menu_3.entry.js.map +0 -1
- package/dist/esm/ssh_certificate-rmToyzuK.js.map +0 -1
- package/dist/esm-es5/extension-B3br1_Py.js.map +0 -1
- package/dist/esm-es5/index-CwgZaF40.js +0 -6
- package/dist/esm-es5/index-CwgZaF40.js.map +0 -1
- package/dist/esm-es5/miscellaneous-phHcBJWR.js.map +0 -1
- package/dist/esm-es5/ssh_certificate-rmToyzuK.js.map +0 -1
- package/dist/peculiar/p-019339d6.entry.js.map +0 -1
- package/dist/peculiar/p-04422929.entry.js.map +0 -1
- package/dist/peculiar/p-154dd0da.entry.js.map +0 -1
- package/dist/peculiar/p-27ae6a3a.entry.js.map +0 -1
- package/dist/peculiar/p-3685975d.system.entry.js.map +0 -1
- package/dist/peculiar/p-607d08e8.system.entry.js.map +0 -1
- package/dist/peculiar/p-6f0f2749.system.entry.js.map +0 -1
- package/dist/peculiar/p-7385d0bb.entry.js +0 -152
- package/dist/peculiar/p-7385d0bb.entry.js.map +0 -1
- package/dist/peculiar/p-872f7312.system.entry.js.map +0 -1
- package/dist/peculiar/p-9d9f24bd.entry.js.map +0 -1
- package/dist/peculiar/p-B2GW-g6v.system.js +0 -5
- package/dist/peculiar/p-B2GW-g6v.system.js.map +0 -1
- package/dist/peculiar/p-B8_0p5ke.js.map +0 -1
- package/dist/peculiar/p-BGASC3UX.system.js.map +0 -1
- package/dist/peculiar/p-BdfvItQB.system.js.map +0 -1
- package/dist/peculiar/p-BtqN4pgo.js +0 -12
- package/dist/peculiar/p-BtqN4pgo.js.map +0 -1
- package/dist/peculiar/p-CuX3t1Hg.system.js.map +0 -1
- package/dist/peculiar/p-Cv-b9S6H.system.js.map +0 -1
- package/dist/peculiar/p-CwgZaF40.js +0 -6
- package/dist/peculiar/p-CwgZaF40.js.map +0 -1
- package/dist/peculiar/p-D0w6miI2.system.js +0 -12
- package/dist/peculiar/p-D0w6miI2.system.js.map +0 -1
- package/dist/peculiar/p-DKl0YViA.system.js +0 -6
- package/dist/peculiar/p-DKl0YViA.system.js.map +0 -1
- package/dist/peculiar/p-DOFJd-ye.system.js.map +0 -1
- package/dist/peculiar/p-DorRvFf7.system.js.map +0 -1
- package/dist/peculiar/p-a4454e2d.system.entry.js.map +0 -1
- package/dist/peculiar/p-de857304.system.entry.js.map +0 -1
- package/dist/peculiar/p-kq9wAWxW.system.js.map +0 -1
- package/dist/peculiar/p-rmToyzuK.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["certificateViewerCss","CertificateViewer","constructor","hostRef","this","mobileMediaQueryString","mobileScreenView","isDecodeInProcess","getAuthKeyIdParentLink","value","_a","authKeyIdParentLink","replace","getAuthKeyIdSiblingsLink","authKeyIdSiblingsLink","getSubjectKeyIdChildrenLink","subjectKeyIdChildrenLink","getSubjectKeyIdSiblingsLink","subjectKeyIdSiblingsLink","handleMediaQueryChange","event","matches","componentWillLoad","decodeCertificate","certificate","mobileMediaQuery","window","matchMedia","addEventListener","bind","disconnectedCallback","removeEventListener","X509Certificate","certificateDecoded","parseExtensions","getThumbprint","error","certificateDecodeError","console","watchCertificateAndDecode","newValue","oldValue","serialNumber","getIssuerDnLink","issuerDnLink","renderErrorState","h","class","Typography","renderEmptyState","render","Host","String","BasicInformation","Object","assign","SubjectName","name","subject","IssuerName","issuer","PublicKey","publicKey","Signature","signature","Thumbprints","thumbprints","Extensions","extensions","getLEILink","getDNSNameLink","getIPAddressLink","download","Miscellaneous"],"sources":["src/components/certificate-viewer/certificate-viewer.scss?tag=peculiar-certificate-viewer&encapsulation=shadow","src/components/certificate-viewer/certificate-viewer.tsx"],"sourcesContent":["@import '../../css/base.scss';\n\n:host {\n display: block;\n width: 100%;\n position: relative;\n min-width: 280px;\n min-height: 300px;\n word-wrap: break-word;\n word-break: break-word;\n}\n\nth, td {\n border: none;\n}\n\ntable {\n width: 100%;\n border-spacing: 0;\n border-collapse: collapse;\n\n tr:last-child {\n .divider {\n display: none;\n }\n }\n\n td {\n padding: var(--pv-size-base-2) var(--pv-size-base-4);\n vertical-align: top;\n\n &:first-child {\n width: 220px;\n }\n\n &:last-child {\n width: calc(100% - 220px)\n }\n\n &.monospace {\n max-width: 0;\n }\n\n &.divider {\n padding: var(--pv-size-base-2) 0;\n\n span {\n height: 1px;\n display: block;\n background-color: var(--pv-color-gray-4);\n }\n }\n }\n\n .title td {\n padding-top: var(--pv-size-base-6);\n padding-bottom: var(--pv-size-base-2);\n }\n\n table {\n border-left: 1px solid var(--pv-color-gray-5);\n }\n}\n\n.status_wrapper {\n min-height: inherit;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n:host([data-mobile-screen-view=\"true\"]) {\n table, tr, td {\n display: block;\n }\n\n table {\n tr {\n padding: var(--pv-size-base-2) 0;\n\n &.title {\n padding-top: var(--pv-size-base-6);\n\n td {\n padding: 0 var(--pv-size-base-4);\n }\n }\n }\n\n td {\n padding: 0 var(--pv-size-base-4);\n width: 100% !important;\n max-width: 100% !important;\n\n &.divider {\n padding: 0;\n }\n }\n }\n}\n","/**\n * @license\n * Copyright (c) Peculiar Ventures, LLC.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport {\n Component,\n h,\n Prop,\n State,\n Watch,\n Host,\n Build,\n} from '@stencil/core';\nimport { X509Certificate } from '../../crypto';\nimport {\n getDNSNameLink, getIPAddressLink, getLEILink,\n} from '../../utils/third_party_links';\nimport {\n BasicInformation,\n SubjectName,\n IssuerName,\n PublicKey,\n Signature,\n Thumbprints,\n Extensions,\n Miscellaneous,\n} from '../certificate-details-parts';\nimport { Typography } from '../typography';\n\nexport type TCertificateProp = string | X509Certificate;\n\n@Component({\n tag: 'peculiar-certificate-viewer',\n styleUrl: 'certificate-viewer.scss',\n shadow: true,\n})\nexport class CertificateViewer {\n private certificateDecoded: X509Certificate;\n\n private certificateDecodeError: Error;\n\n private mobileMediaQuery: MediaQueryList;\n\n /**\n * The certificate value for decode and show details. Use PEM or DER.\n */\n @Prop({ reflect: true }) certificate: TCertificateProp;\n\n /**\n * If `true` - component will show split-button to download certificate as PEM or DER.\n */\n @Prop({ reflect: true }) download?: boolean;\n\n /**\n * Authority Key Identifier extension parent link.\n * <br />\n * **NOTE**: `{{authKeyId}}` will be replaced to value from the extension.\n * @example\n * https://censys.io/certificates?q=parsed.extensions.subject_key_id:%20{{authKeyId}}\n */\n @Prop({ reflect: true }) authKeyIdParentLink?: string;\n\n /**\n * Authority Key Identifier extension siblings link.\n * <br />\n * **NOTE**: `{{authKeyId}}` will be replaced to value from the extension.\n * @example\n * https://censys.io/certificates?q=parsed.extensions.authority_key_id:%20{{authKeyId}}\n */\n @Prop({ reflect: true }) authKeyIdSiblingsLink?: string;\n\n /**\n * Subject Key Identifier extension children link.\n * <br />\n * **NOTE**: `{{subjectKeyId}}` will be replaced to value from the extension.\n * @example\n * https://censys.io/certificates?q=parsed.extensions.authority_key_id:%20{{subjectKeyId}}\n */\n @Prop({ reflect: true }) subjectKeyIdChildrenLink?: string;\n\n /**\n * Subject Key Identifier extension siblings link.\n * <br />\n * **NOTE**: `{{subjectKeyId}}` will be replaced to value from the extension.\n * @example\n * https://some.com/{{subjectKeyId}}\n */\n @Prop({ reflect: true }) subjectKeyIdSiblingsLink?: string;\n\n /**\n * Issuer DN link.\n * **NOTE**: HTML component attribute must be `issuer-dn-link`.\n */\n @Prop({ reflect: true }) issuerDnLink?: string;\n\n /**\n * Mobile media query string to control screen view change.\n * <br />\n * **NOTE**: Based on https://developer.mozilla.org/en-US/docs/Web/API/Window/matchMedia.\n * @example\n * (max-width: 900px)\n */\n @Prop({ reflect: false }) mobileMediaQueryString?: string = '(max-width: 900px)';\n\n @State() mobileScreenView = false;\n\n @State() isDecodeInProcess = true;\n\n private handleMediaQueryChange(event: MediaQueryListEvent) {\n this.mobileScreenView = event.matches;\n }\n\n componentWillLoad() {\n this.decodeCertificate(this.certificate);\n\n if (Build.isBrowser) {\n this.mobileMediaQuery = window.matchMedia(this.mobileMediaQueryString);\n this.mobileMediaQuery.addEventListener('change', this.handleMediaQueryChange.bind(this));\n this.mobileScreenView = this.mobileMediaQuery.matches;\n }\n }\n\n disconnectedCallback() {\n this.mobileMediaQuery.removeEventListener('change', this.handleMediaQueryChange.bind(this));\n }\n\n private async decodeCertificate(certificate: TCertificateProp) {\n this.isDecodeInProcess = true;\n\n try {\n if (certificate instanceof X509Certificate) {\n this.certificateDecoded = certificate;\n } else if (typeof certificate === 'string') {\n this.certificateDecoded = new X509Certificate(certificate);\n } else {\n return;\n }\n\n this.certificateDecoded.parseExtensions();\n await this.certificateDecoded.getThumbprint('SHA-1');\n await this.certificateDecoded.getThumbprint('SHA-256');\n } catch (error) {\n this.certificateDecodeError = error;\n\n console.error('Error certificate parse:', error);\n }\n\n this.isDecodeInProcess = false;\n }\n\n /**\n * Rerun decodeCertificate if previuos value not equal current value\n */\n @Watch('certificate')\n watchCertificateAndDecode(newValue: TCertificateProp, oldValue: TCertificateProp) {\n if (typeof newValue === 'string' && typeof oldValue === 'string') {\n if (newValue !== oldValue) {\n this.decodeCertificate(newValue);\n }\n\n return;\n }\n\n if (newValue instanceof X509Certificate && oldValue instanceof X509Certificate) {\n if (newValue.serialNumber !== oldValue.serialNumber) {\n this.decodeCertificate(newValue);\n }\n }\n }\n\n private getAuthKeyIdParentLink = (value: string) => this.authKeyIdParentLink\n ?.replace('{{authKeyId}}', value);\n\n private getAuthKeyIdSiblingsLink = (value: string) => this.authKeyIdSiblingsLink\n ?.replace('{{authKeyId}}', value);\n\n private getSubjectKeyIdChildrenLink = (value: string) => this.subjectKeyIdChildrenLink\n ?.replace('{{subjectKeyId}}', value);\n\n private getSubjectKeyIdSiblingsLink = (value: string) => this.subjectKeyIdSiblingsLink\n ?.replace('{{subjectKeyId}}', value);\n\n private getIssuerDnLink() {\n return this.issuerDnLink;\n }\n\n private renderErrorState() {\n return (\n <div class=\"status_wrapper\">\n <Typography>\n There was an error decoding this certificate.\n </Typography>\n </div>\n );\n }\n\n private renderEmptyState() {\n return (\n <div class=\"status_wrapper\">\n <Typography>\n There is no certificate available.\n </Typography>\n </div>\n );\n }\n\n render() {\n if (this.certificateDecodeError) {\n return this.renderErrorState();\n }\n\n if (!this.certificateDecoded) {\n return this.renderEmptyState();\n }\n\n return (\n <Host\n data-mobile-screen-view={String(this.mobileScreenView)}\n >\n <table>\n <BasicInformation\n {...this.certificateDecoded}\n />\n\n <SubjectName\n name={this.certificateDecoded.subject}\n />\n\n <IssuerName\n name={this.certificateDecoded.issuer}\n issuerDnLink={this.getIssuerDnLink()}\n />\n\n <PublicKey\n publicKey={this.certificateDecoded.publicKey}\n />\n\n <Signature\n signature={this.certificateDecoded.signature}\n />\n\n <Thumbprints\n thumbprints={this.certificateDecoded.thumbprints}\n />\n\n <Extensions\n extensions={this.certificateDecoded.extensions}\n getLEILink={getLEILink}\n getDNSNameLink={getDNSNameLink}\n getIPAddressLink={getIPAddressLink}\n getAuthKeyIdParentLink={this.getAuthKeyIdParentLink}\n getAuthKeyIdSiblingsLink={this.getAuthKeyIdSiblingsLink}\n getSubjectKeyIdChildrenLink={this.getSubjectKeyIdChildrenLink}\n getSubjectKeyIdSiblingsLink={this.getSubjectKeyIdSiblingsLink}\n />\n\n {this.download && (\n <Miscellaneous\n certificate={this.certificateDecoded}\n />\n )}\n </table>\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["CertificateSummary","props","certificate","showIssuer","renderRow","name","value","h","Typography","variant","color","l10n","getString","subjectToString","issuerToString","serialNumber","version","validity","dateShort","notBefore","notAfter","certificatesViewerCss","CertificatesViewer","constructor","hostRef","this","isHasRoots","certificates","filterWithSearch","highlightWithSearch","mobileMediaQueryString","mobileScreenView","search","certificatesDecoded","isDecodeInProcess","handleClickDetails","certificateSelectedForDetails","detailsOpen","emit","handleModalClose","undefined","detailsClose","handleSearch","event","target","trim","handleMediaQueryChange","matches","componentWillLoad","certificatesDecodeAndSet","mobileMediaQuery","window","matchMedia","addEventListener","bind","disconnectedCallback","removeEventListener","watchCertificates","newValue","oldValue","JSON","stringify","hasRoots","Array","isArray","data","decoded","X509Certificate","getThumbprint","push","body","tests","isRoot","error","console","getCertificateName","commonName","handleClickDownloadAsPem","downloadAsPEM","handleClickDownloadAsDer","downloadAsDER","handleClickRow","index","isExpandedRowClicked","expandedRow","getMaxColSpanValue","colSpan","renderCertificateButtonActions","isHasTestURLs","expired","revoked","valid","class","groups","title","options","text","startIcon","DetailsIcon","onClick","DownloadIcon","_a","href","LinkIcon","_b","_c","renderExpandedRow","renderCertificatesRows","searchHighlight","content","forEach","isExpandedRow","publicKeyValue","OIDs","signature","algorithm","certificateStringForSearch","issuerCommonName","thumbprints","join","toLowerCase","indexOf","certificate_row","m_expanded","key","Button","ArrowTopIcon","ArrowBottomIcon","renderCertificateDetailsModal","role","part","CrossIcon","renderSearch","type","disabled","length","placeholder","onInput","renderEmptyState","renderEmptySearchState","renderLoadingState","renderTableBody","certificatesRows","render","Host","String"],"sources":["src/components/certificate-summary/certificate-summary.tsx","src/components/certificates-viewer/certificates-viewer.scss?tag=peculiar-certificates-viewer&encapsulation=shadow","src/components/certificates-viewer/certificates-viewer.tsx"],"sourcesContent":["/**\n * @license\n * Copyright (c) Peculiar Ventures, LLC.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { FunctionalComponent, h } from '@stencil/core';\nimport type { X509Certificate } from '../../crypto';\nimport { dateShort, l10n } from '../../utils';\nimport { Typography } from '../typography';\n\ninterface ICertificateSummaryProps {\n certificate: X509Certificate;\n showIssuer?: boolean;\n}\n\nexport const CertificateSummary: FunctionalComponent<ICertificateSummaryProps> = (props) => {\n const {\n certificate,\n showIssuer,\n } = props;\n\n const renderRow = (name: string | string[], value: string | number) => (\n <tr>\n <td>\n <Typography\n variant=\"b2\"\n color=\"gray-9\"\n >\n {name}\n </Typography>\n </td>\n <td>\n <Typography\n variant=\"b2\"\n color=\"black\"\n >\n {value}\n </Typography>\n </td>\n </tr>\n );\n\n return (\n <table>\n <tbody>\n {renderRow(\n l10n.getString('subjectName'),\n certificate.subjectToString(),\n )}\n {showIssuer && renderRow(\n l10n.getString('issuerName'),\n certificate.issuerToString(),\n )}\n\n {renderRow(\n l10n.getString('serialNumber'),\n certificate.serialNumber,\n )}\n {renderRow(\n l10n.getString('version'),\n certificate.version,\n )}\n {renderRow(\n l10n.getString('validity'),\n certificate.validity,\n )}\n {renderRow(\n l10n.getString('issued'),\n dateShort(certificate.notBefore),\n )}\n {renderRow(\n l10n.getString('expired'),\n dateShort(certificate.notAfter),\n )}\n </tbody>\n </table>\n );\n};\n","@import '../../css/base.scss';\n\n:host {\n display: block;\n width: 100%;\n word-wrap: break-word;\n min-width: 280px;\n overflow: auto;\n position: relative;\n}\n\n.search_section {\n padding: var(--pv-size-base-4);\n border-bottom: 1px solid var(--pv-color-gray-4);\n}\n\n.input_search {\n height: var(--pv-size-base-8);\n width: 100%;\n outline: none;\n background-color: var(--pv-color-gray-1);\n padding: 0 var(--pv-size-base-2);\n border: 1px solid var(--pv-color-gray-7);\n border-radius: 4px;\n transition: background-color 200ms ease 0s, color 200ms ease 0s, border-color 200ms ease 0s;\n &::placeholder {\n color: var(--pv-color-gray-9);\n }\n}\n\ntable {\n width: 100%;\n table-layout: fixed;\n border-collapse: collapse;\n border-spacing: 0;\n\n td, th {\n border-bottom: 1px solid var(--pv-color-gray-4);\n vertical-align: top;\n text-align: left;\n\n &:first-child {\n padding-right: 0;\n width: var(--pv-size-base-10);\n }\n &:last-child {\n padding-left: 0;\n width: var(--pv-size-base-10);\n }\n }\n\n th {\n padding: var(--pv-size-base-2) var(--pv-size-base-4);\n\n &.col_action {\n padding: 0;\n }\n }\n\n td {\n padding: var(--pv-size-base-4);\n }\n\n tr {\n &.m_expanded {\n background: var(--pv-color-gray-1);\n\n > td {\n border-bottom: none;\n }\n }\n\n &.expanded_summary {\n background: var(--pv-color-gray-1);\n\n table {\n table-layout: initial;\n\n td {\n border-bottom: none;\n padding: var(--pv-size-base-2);\n\n &:first-child {\n width: 200px;\n }\n\n &:last-child {\n width: auto;\n }\n }\n }\n }\n }\n}\n\n.button_table_cell {\n margin-top: -3px;\n}\n\n.status_wrapper {\n text-align: center;\n height: var(--pv-size-base-16);\n vertical-align: middle;\n}\n\n.modal_wrapper {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 1;\n animation: fadeIn 200ms;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.modal_backdrop {\n background: var(--pv-color-black);\n z-index: -1;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n opacity: 0.5;\n}\n\n.modal_container {\n background: var(--pv-color-white);\n width: 100%;\n display: flex;\n max-height: calc(100% - 60px);\n flex-direction: column;\n margin: var(--pv-size-base-6);\n position: relative;\n outline: none;\n box-shadow: var(--pv-shadow-dark-hight);\n overflow: hidden;\n border: 0px;\n padding: 0px;\n max-width: 640px;\n border-radius: 4px;\n}\n\n.modal_header {\n padding: var(--pv-size-base-3) var(--pv-size-base-4);\n display: flex;\n flex: 0 0 auto;\n -webkit-box-pack: justify;\n justify-content: space-between;\n gap: var(--pv-size-base-2);\n border-bottom: 1px solid var(--pv-color-gray-5);\n}\n\n.modal_content {\n flex: 1 1 auto;\n overflow: auto;\n}\n\n:host([data-mobile-screen-view=\"true\"]) {\n table, tbody, tr, td {\n display: block;\n width: 100% !important;\n padding: 0;\n border: none;\n }\n\n thead {\n display: none;\n }\n\n table {\n tr {\n padding: var(--pv-size-base-2) 0;\n }\n\n .expanded_summary {\n padding: 0;\n }\n\n .certificate_row {\n border-bottom: 1px solid var(--pv-color-gray-5);\n padding: var(--pv-size-base-2) var(--pv-size-base-4);\n }\n\n .certificate_row_actions {\n padding-top: var(--pv-size-base-6);\n\n td {\n display: flex;\n justify-content: right;\n gap: var(--pv-size-base-4);\n }\n }\n }\n\n .button_table_cell {\n margin-top: 0;\n }\n}\n","/**\n * @license\n * Copyright (c) Peculiar Ventures, LLC.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport {\n Component,\n h,\n Prop,\n State,\n Watch,\n Host,\n Event,\n EventEmitter,\n Build,\n} from '@stencil/core';\nimport { X509Certificate } from '../../crypto';\nimport { OIDs } from '../../constants/oids';\nimport { l10n } from '../../utils';\nimport { Typography } from '../typography';\nimport { CertificateSummary } from '../certificate-summary';\nimport { Button } from '../button';\nimport {\n DownloadIcon,\n LinkIcon,\n DetailsIcon,\n ArrowBottomIcon,\n ArrowTopIcon,\n CrossIcon,\n} from '../icons';\n\nexport interface ICertificate {\n value: string;\n name?: string | ((certificate: X509Certificate) => string);\n tests?: {\n valid?: string;\n revoked?: string;\n expired?: string;\n };\n}\n\ninterface ICertificateDecoded {\n body: X509Certificate;\n tests?: ICertificate['tests'];\n name?: ICertificate['name'];\n}\n\n@Component({\n tag: 'peculiar-certificates-viewer',\n styleUrl: 'certificates-viewer.scss',\n shadow: true,\n})\nexport class CertificatesViewer {\n private isHasRoots = false;\n\n private mobileMediaQuery: MediaQueryList;\n\n /**\n * List of certificates values for decode and show in the list.\n * <br />\n * **NOTE**: If you do not provide a `name` value when\n * invocing the component it will take the first Subject CN value.\n * <br />\n * **NOTE**: If you do not provide a `tests` this column will be ommited from the rendered page.\n * <br />\n * **NOTE**: If the supplied certificates are self-signed the issuer column will be ommited.\n */\n @Prop() certificates: ICertificate[] = [];\n\n /**\n * Use filter in the list when search is changed.\n */\n @Prop() filterWithSearch = true;\n\n /**\n * Use highlight chapters in the list when search is changed.\n */\n @Prop() highlightWithSearch = true;\n\n /**\n * Mobile media query string to control screen view change.\n * <br />\n * **NOTE**: Based on https://developer.mozilla.org/en-US/docs/Web/API/Window/matchMedia.\n * @example\n * (max-width: 900px)\n */\n @Prop({ reflect: false }) mobileMediaQueryString?: string = '(max-width: 900px)';\n\n /**\n * Emitted when the user open certificate details modal.\n */\n @Event() detailsOpen!: EventEmitter<X509Certificate>;\n\n /**\n * Emitted when the user close certificate details modal.\n */\n @Event() detailsClose!: EventEmitter<void>;\n\n @State() mobileScreenView = false;\n\n @State() search = '';\n\n @State() certificatesDecoded: ICertificateDecoded[] = [];\n\n @State() expandedRow?: number;\n\n @State() certificateSelectedForDetails?: X509Certificate;\n\n @State() isDecodeInProcess = true;\n\n private handleMediaQueryChange(event: MediaQueryListEvent) {\n this.mobileScreenView = event.matches;\n }\n\n componentWillLoad() {\n this.certificatesDecodeAndSet();\n\n if (Build.isBrowser) {\n this.mobileMediaQuery = window.matchMedia(this.mobileMediaQueryString);\n this.mobileMediaQuery.addEventListener('change', this.handleMediaQueryChange.bind(this));\n this.mobileScreenView = this.mobileMediaQuery.matches;\n }\n }\n\n disconnectedCallback() {\n this.mobileMediaQuery.removeEventListener('change', this.handleMediaQueryChange.bind(this));\n }\n\n @Watch('certificates')\n watchCertificates(newValue: ICertificate[], oldValue: ICertificate[]) {\n /**\n * Prevent rerender after set the same `certificates` prop.\n */\n if (JSON.stringify(newValue) !== JSON.stringify(oldValue)) {\n this.certificatesDecodeAndSet();\n }\n }\n\n async certificatesDecodeAndSet() {\n let hasRoots = false;\n\n if (!Array.isArray(this.certificates)) {\n return;\n }\n\n const data: ICertificateDecoded[] = [];\n\n for (const certificate of this.certificates) {\n try {\n const decoded = new X509Certificate(certificate.value);\n\n await decoded.getThumbprint('SHA-1');\n\n data.push({\n body: decoded,\n tests: certificate.tests,\n name: certificate.name,\n });\n\n if (!hasRoots && decoded.isRoot) {\n hasRoots = true;\n }\n } catch (error) {\n console.error('Error certificate parse:', error);\n }\n }\n\n this.isHasRoots = hasRoots;\n this.isDecodeInProcess = false;\n this.certificatesDecoded = data;\n }\n\n private getCertificateName(certificate: ICertificateDecoded) {\n if (typeof certificate.name === 'function') {\n return certificate.name(certificate.body);\n }\n\n return certificate.name || certificate.body.commonName;\n }\n\n private handleClickDownloadAsPem(certificate: ICertificateDecoded) {\n certificate.body.downloadAsPEM(this.getCertificateName(certificate));\n }\n\n private handleClickDownloadAsDer(certificate: ICertificateDecoded) {\n certificate.body.downloadAsDER(this.getCertificateName(certificate));\n }\n\n private handleClickDetails = (certificate: X509Certificate) => {\n this.certificateSelectedForDetails = certificate;\n this.detailsOpen.emit(certificate);\n };\n\n private handleModalClose = () => {\n this.certificateSelectedForDetails = undefined;\n\n this.detailsClose.emit();\n };\n\n private handleClickRow(index: number) {\n const isExpandedRowClicked = this.expandedRow === index;\n\n this.expandedRow = isExpandedRowClicked\n ? undefined\n : index;\n }\n\n private handleSearch = (event: Event) => {\n const target = event.target as HTMLInputElement;\n\n this.search = target.value.trim();\n };\n\n private getMaxColSpanValue() {\n let colSpan = 5;\n\n if (!this.isHasRoots) {\n colSpan += 1;\n }\n\n return colSpan;\n }\n\n private renderCertificateButtonActions(certificate: ICertificateDecoded) {\n const isHasTestURLs = certificate.tests\n && (certificate.tests.expired || certificate.tests.revoked || certificate.tests.valid);\n\n return (\n <peculiar-button-menu\n class=\"button_table_cell\"\n groups={[\n {\n title: l10n.getString('previewCertificate'),\n options: [\n {\n text: l10n.getString('viewDetails'),\n startIcon: <DetailsIcon />,\n onClick: () => this.handleClickDetails(certificate.body),\n },\n ],\n },\n {\n title: l10n.getString('downloadOptions'),\n options: [\n {\n text: l10n.getString('download.pem'),\n startIcon: <DownloadIcon />,\n onClick: () => this.handleClickDownloadAsPem(certificate),\n },\n {\n text: l10n.getString('download.der'),\n startIcon: <DownloadIcon />,\n onClick: () => this.handleClickDownloadAsDer(certificate),\n },\n ],\n },\n ...(isHasTestURLs\n ? [{\n title: l10n.getString('testURLs'),\n options: [\n ...(certificate.tests?.valid\n ? [{\n text: l10n.getString('valid'),\n href: certificate.tests.valid,\n startIcon: <LinkIcon />,\n }]\n : []),\n ...(certificate.tests?.revoked\n ? [{\n text: l10n.getString('revoked'),\n href: certificate.tests.revoked,\n startIcon: <LinkIcon />,\n }]\n : []),\n ...(certificate.tests?.expired\n ? [{\n text: l10n.getString('expired'),\n href: certificate.tests.expired,\n startIcon: <LinkIcon />,\n }]\n : []),\n ],\n }]\n : []),\n ]}\n />\n );\n }\n\n private renderExpandedRow(certificate: X509Certificate) {\n const colSpan = this.getMaxColSpanValue() - 2;\n\n return (\n <tr class=\"expanded_summary\">\n <td />\n <td colSpan={colSpan}>\n <CertificateSummary\n certificate={certificate}\n showIssuer={!certificate.isRoot}\n />\n </td>\n <td />\n </tr>\n );\n }\n\n private renderCertificatesRows() {\n const searchHighlight = this.highlightWithSearch\n ? this.search\n : '';\n const content = [];\n\n this.certificatesDecoded.forEach((certificate, index) => {\n const isExpandedRow = index === this.expandedRow;\n const publicKeyValue = OIDs[certificate.body.signature.algorithm]\n || certificate.body.signature.algorithm;\n\n if (this.filterWithSearch && this.search) {\n const certificateStringForSearch = [\n publicKeyValue,\n certificate.body.issuerCommonName,\n this.getCertificateName(certificate),\n certificate.body.thumbprints['SHA-1'],\n ]\n .join(' ')\n .toLowerCase();\n\n if (certificateStringForSearch.indexOf(this.search.toLowerCase()) === -1) {\n return;\n }\n }\n\n if (this.mobileScreenView) {\n content.push([\n <tr\n class={{\n certificate_row: true,\n m_expanded: isExpandedRow,\n }}\n key={certificate.body.thumbprints['SHA-1']}\n >\n <td>\n <table>\n <tbody>\n {!this.isHasRoots && (\n <tr>\n <td>\n <Typography variant=\"b2\" color=\"gray-9\">\n {l10n.getString('issuer')}\n </Typography>\n </td>\n <td>\n <Typography variant=\"b2\" color=\"black\">\n <peculiar-highlight-words search={searchHighlight}>\n {certificate.body.issuerCommonName}\n </peculiar-highlight-words>\n </Typography>\n </td>\n </tr>\n )}\n <tr>\n <td>\n <Typography variant=\"b2\" color=\"gray-9\">\n {l10n.getString('name')}\n </Typography>\n </td>\n <td>\n <Typography variant=\"b2\" color=\"black\">\n <peculiar-highlight-words search={searchHighlight}>\n {this.getCertificateName(certificate)}\n </peculiar-highlight-words>\n </Typography>\n </td>\n </tr>\n <tr>\n <td>\n <Typography variant=\"b2\" color=\"gray-9\">\n {l10n.getString('publicKey')}\n </Typography>\n </td>\n <td>\n <Typography variant=\"b2\" color=\"black\">\n <peculiar-highlight-words search={searchHighlight}>\n {publicKeyValue}\n </peculiar-highlight-words>\n </Typography>\n </td>\n </tr>\n <tr>\n <td>\n <Typography variant=\"b2\" color=\"gray-9\">\n {l10n.getString('fingerprint')}\n (SHA-1)\n </Typography>\n </td>\n <td>\n <Typography variant=\"b2\" color=\"black\">\n <peculiar-highlight-words search={searchHighlight}>\n {certificate.body.thumbprints['SHA-1']}\n </peculiar-highlight-words>\n </Typography>\n </td>\n </tr>\n {isExpandedRow && this.renderExpandedRow(certificate.body)}\n <tr class=\"certificate_row_actions\">\n <td>\n {this.renderCertificateButtonActions(certificate)}\n <Button\n startIcon={isExpandedRow ? <ArrowTopIcon /> : <ArrowBottomIcon />}\n onClick={this.handleClickRow.bind(this, index)}\n />\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>,\n ]);\n\n return;\n }\n\n content.push([\n <tr\n class={{ m_expanded: isExpandedRow }}\n key={certificate.body.thumbprints['SHA-1']}\n >\n <td>\n <Button\n startIcon={isExpandedRow ? <ArrowTopIcon /> : <ArrowBottomIcon />}\n class=\"button_table_cell\"\n\n onClick={this.handleClickRow.bind(this, index)}\n />\n </td>\n {!this.isHasRoots && (\n <td>\n <Typography>\n <peculiar-highlight-words search={searchHighlight}>\n {certificate.body.issuerCommonName}\n </peculiar-highlight-words>\n </Typography>\n </td>\n )}\n <td>\n <Typography>\n <peculiar-highlight-words search={searchHighlight}>\n {this.getCertificateName(certificate)}\n </peculiar-highlight-words>\n </Typography>\n </td>\n <td>\n <Typography>\n <peculiar-highlight-words search={searchHighlight}>\n {publicKeyValue}\n </peculiar-highlight-words>\n </Typography>\n </td>\n <td>\n <Typography>\n <peculiar-highlight-words search={searchHighlight}>\n {certificate.body.thumbprints['SHA-1']}\n </peculiar-highlight-words>\n </Typography>\n </td>\n <td>\n {this.renderCertificateButtonActions(certificate)}\n </td>\n </tr>,\n isExpandedRow && this.renderExpandedRow(certificate.body),\n ]);\n });\n\n return content;\n }\n\n private renderCertificateDetailsModal() {\n if (!this.certificateSelectedForDetails) {\n return null;\n }\n\n return (\n <div\n class=\"modal_wrapper\"\n role=\"presentation\"\n aria-hidden=\"false\"\n part=\"presentation\"\n >\n <div\n class=\"modal_backdrop\"\n aria-hidden=\"true\"\n onClick={this.handleModalClose}\n />\n <div\n class=\"modal_container\"\n role=\"dialog\"\n part=\"presentation_container\"\n >\n <header class=\"modal_header\">\n <Typography\n variant=\"h4\"\n >\n {l10n.getString('certificateDetails')}\n </Typography>\n <Button\n startIcon={<CrossIcon />}\n onClick={this.handleModalClose}\n />\n </header>\n <div class=\"modal_content\">\n <peculiar-certificate-viewer\n certificate={this.certificateSelectedForDetails}\n mobileMediaQueryString={this.mobileMediaQueryString}\n />\n </div>\n </div>\n </div>\n );\n }\n\n private renderSearch() {\n if (!this.filterWithSearch && !this.highlightWithSearch) {\n return null;\n }\n\n return (\n <div class=\"search_section\">\n <input\n type=\"search\"\n value=\"\"\n class=\"input_search t-b3 c-black\"\n disabled={!this.certificatesDecoded.length}\n placeholder=\"Search\"\n onInput={this.handleSearch}\n />\n </div>\n );\n }\n\n private renderEmptyState() {\n const colSpan = this.getMaxColSpanValue();\n\n return (\n <tr>\n <td\n class=\"status_wrapper\"\n colSpan={colSpan}\n >\n <Typography\n variant=\"b1\"\n >\n There are no certificates available.\n </Typography>\n </td>\n </tr>\n );\n }\n\n private renderEmptySearchState() {\n const colSpan = this.getMaxColSpanValue();\n\n return (\n <tr>\n <td\n class=\"status_wrapper\"\n colSpan={colSpan}\n >\n <Typography\n variant=\"b1\"\n >\n No results found for “\n {this.search}\n “\n </Typography>\n </td>\n </tr>\n );\n }\n\n private renderLoadingState() {\n return (\n <div class=\"loading_container\">\n <peculiar-circular-progress />\n </div>\n );\n }\n\n private renderTableBody() {\n if (this.isDecodeInProcess) {\n return null;\n }\n\n if (!this.certificatesDecoded.length) {\n return this.renderEmptyState();\n }\n\n const certificatesRows = this.renderCertificatesRows();\n\n if (this.search && !certificatesRows.length) {\n return this.renderEmptySearchState();\n }\n\n return certificatesRows;\n }\n\n render() {\n return (\n <Host\n data-mobile-screen-view={String(this.mobileScreenView)}\n >\n {this.renderSearch()}\n <table>\n {!this.mobileScreenView && (\n <thead>\n <tr>\n <th />\n {!this.isHasRoots && (\n <th class=\"col_issuer\">\n <Typography variant=\"s2\">\n {l10n.getString('issuer')}\n </Typography>\n </th>\n )}\n <th class=\"col_name\">\n <Typography variant=\"s2\">\n {l10n.getString('name')}\n </Typography>\n </th>\n <th class=\"col_public_key\">\n <Typography variant=\"s2\">\n {l10n.getString('publicKey')}\n </Typography>\n </th>\n <th class=\"col_fingerprint\">\n <Typography variant=\"s2\">\n {l10n.getString('fingerprint')}\n (SHA-1)\n </Typography>\n </th>\n <th />\n </tr>\n </thead>\n )}\n <tbody>\n {this.renderTableBody()}\n </tbody>\n </table>\n\n {this.renderCertificateDetailsModal()}\n {this.isDecodeInProcess && this.renderLoadingState()}\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["id_data","id_signedData","X509Certificates","Array","constructor","raw","super","rawItems","PemConverter","isPem","decode","map","value","Convert","ToBase64Url","split","length","Error","item","this","push","X509Certificate","commonName","from","o","join","signedData","SignedData","version","encapContentInfo","eContentType","eContent","EncapsulatedContent","single","OctetString","certificates","CertificateSet","CertificateChoices","certificate","AsnConvert","parse","Certificate","cms","ContentInfo","contentType","content","serialize","toString","format","downloadAsPEM","name","Download","cert","asPEM","downloadAsDER","asDER","certificateDecoderCss","CertificateDecoder","hostRef","handleClickDecode","inputPaste","handleClickClear","clearValue","handleChangeInputFile","async","event","element","target","files","file","readAsBinaryString","handleChangeExample","handleDropFile","stopPropagation","preventDefault","dataTransfer","componentDidLoad","certificateToDecode","setTimeout","certificateDecoded","clearCertificate","emit","setValue","successParse","Promise","resolve","catch","X509AttributeCertificate","Pkcs10CertificateRequest","X509Crl","SshCertificate","then","res","error","console","log","alert","renderCertificate","h","download","render","Host","key","placeholder","class","ref","el","onDrop","Typography","variant","color","type","accept","onChange","_a","certificateExamples","example","title","Button","onClick"],"sources":["../../node_modules/.pnpm/@peculiar+asn1-cms@2.4.0/node_modules/@peculiar/asn1-cms/build/es2015/object_identifiers.js","src/crypto/x509_certificates.ts","src/components/certificate-decoder/certificate-decoder.scss?tag=peculiar-certificate-decoder&encapsulation=shadow","src/components/certificate-decoder/certificate-decoder.tsx"],"sourcesContent":["export const id_ct_contentInfo = \"1.2.840.113549.1.9.16.1.6\";\nexport const id_data = \"1.2.840.113549.1.7.1\";\nexport const id_signedData = \"1.2.840.113549.1.7.2\";\nexport const id_envelopedData = \"1.2.840.113549.1.7.3\";\nexport const id_digestedData = \"1.2.840.113549.1.7.5\";\nexport const id_encryptedData = \"1.2.840.113549.1.7.6\";\nexport const id_authData = \"1.2.840.113549.1.9.16.1.2\";\n","import { Convert } from 'pvtsutils';\nimport {\n SignedData,\n id_data,\n EncapsulatedContent,\n CertificateSet,\n CertificateChoices,\n ContentInfo,\n id_signedData,\n} from '@peculiar/asn1-cms';\nimport { Certificate } from '@peculiar/asn1-x509';\nimport { AsnConvert, OctetString } from '@peculiar/asn1-schema';\nimport { Download } from '../utils';\nimport { PemConverter } from './pem_converter';\nimport { X509Certificate } from './x509_certificate';\n\nexport class X509Certificates extends Array<X509Certificate> {\n constructor(raw: string) {\n super();\n\n const rawItems = PemConverter.isPem(raw)\n ? PemConverter.decode(raw).map((value) => Convert.ToBase64Url(value))\n : raw.split(',');\n\n if (rawItems.length < 2) {\n throw new Error('Unable to parse string. The array of elements is less than 2');\n }\n\n for (const item of rawItems) {\n this.push(new X509Certificate(item));\n }\n }\n\n public get commonName(): string {\n return Array.from(this)\n .map((o) => o.commonName)\n .join('_');\n }\n\n public get raw(): ArrayBuffer {\n const signedData = new SignedData();\n\n signedData.version = 1;\n signedData.encapContentInfo.eContentType = id_data;\n signedData.encapContentInfo.eContent = new EncapsulatedContent({ single: new OctetString() });\n signedData.certificates = new CertificateSet(\n Array.from(this)\n .map((o) => new CertificateChoices({ certificate: AsnConvert.parse(o.raw, Certificate) })),\n );\n\n const cms = new ContentInfo({\n contentType: id_signedData,\n content: AsnConvert.serialize(signedData),\n });\n\n return AsnConvert.serialize(cms);\n }\n\n public toString(format: 'pem' | 'base64' | 'base64url' = 'pem'): string {\n switch (format) {\n case 'pem':\n return Array.from(this)\n .map((o) => o.toString('pem'))\n .join('\\n');\n case 'base64url':\n return Array.from(this)\n .map((o) => o.toString('base64url'))\n .join(',');\n default:\n return Array.from(this)\n .map((o) => o.toString('base64'))\n .join(',');\n }\n }\n\n public downloadAsPEM(name?: string) {\n Download.cert.asPEM(\n this.toString('pem'),\n name || this.commonName,\n );\n }\n\n public downloadAsDER(name?: string) {\n Download.cert.asDER(\n this.raw,\n name || this.commonName,\n );\n }\n}\n","@import '../../css/base.scss';\n\n:host {\n display: block;\n width: 100%;\n}\n\n.textarea {\n min-height: 300px;\n width: 100%;\n border-radius: 4px;\n border: 1px solid var(--pv-color-gray-5);;\n padding: 14px;\n font-family: monospace;\n resize: vertical;\n}\n\n.controls {\n margin-top: var(--pv-size-base-2);\n display: flex;\n flex-direction: column;\n gap: var(--pv-size-base-2);\n margin-bottom: var(--pv-size-base-12);\n}\n\n.control_row {\n display: flex;\n align-items: center;\n gap: var(--pv-size-base);\n}\n","/**\n * @license\n * Copyright (c) Peculiar Ventures, LLC.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport {\n Component,\n Host,\n h,\n State,\n Prop,\n Event,\n EventEmitter,\n} from '@stencil/core';\nimport { readAsBinaryString } from '../../utils';\nimport {\n X509Certificate,\n X509AttributeCertificate,\n Pkcs10CertificateRequest,\n X509Crl,\n X509Certificates,\n SshCertificate,\n} from '../../crypto';\nimport { Button } from '../button';\nimport { Typography } from '../typography';\n\n@Component({\n tag: 'peculiar-certificate-decoder',\n styleUrl: 'certificate-decoder.scss',\n shadow: true,\n})\nexport class CertificateDecoder {\n private inputPaste?: HTMLTextAreaElement;\n\n /**\n * The example certificate value for decode and show details. Use PEM or DER.\n */\n @Prop() certificateExamples?: {\n title: string;\n value: string;\n }[];\n\n /**\n * The default certificate value for decode and show details. Use PEM or DER.\n */\n @Prop() certificateToDecode?: string;\n\n @State() certificateDecoded: X509Certificates\n | X509Certificate\n | X509AttributeCertificate\n | Pkcs10CertificateRequest\n | X509Crl\n | SshCertificate;\n\n /**\n * Emitted when the certificate has been successfully parsed.\n */\n @Event() successParse!: EventEmitter<string>;\n\n /**\n * Emitted when the certificate has been removed.\n */\n @Event() clearCertificate!: EventEmitter<void>;\n\n componentDidLoad() {\n if (this.certificateToDecode) {\n /**\n * Prevent Stencil warning about re-render\n */\n setTimeout(() => this.decode(this.certificateToDecode), 100);\n }\n }\n\n private handleClickDecode = () => {\n const { value } = this.inputPaste;\n\n if (value) {\n this.decode(value);\n }\n };\n\n private handleClickClear = () => {\n this.clearValue();\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private handleChangeInputFile = async (event: any) => {\n const element = event.target;\n\n if (element.files) {\n const file = await readAsBinaryString(element.files[0]);\n\n if (typeof file.value === 'string') {\n this.decode(file.value);\n }\n\n element.value = '';\n }\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private handleChangeExample = (event: any) => {\n if (event.target.value) {\n this.decode(event.target.value);\n } else {\n this.clearValue();\n }\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private handleDropFile = async (event: any) => {\n event.stopPropagation();\n event.preventDefault();\n\n const element = event.dataTransfer;\n\n if (element.files) {\n const file = await readAsBinaryString(element.files[0]);\n\n if (typeof file.value === 'string') {\n this.decode(file.value);\n }\n }\n };\n\n clearValue() {\n this.inputPaste.value = '';\n this.certificateDecoded = null;\n this.clearCertificate.emit();\n }\n\n async setValue(value: typeof this.certificateDecoded) {\n this.certificateDecoded = value;\n\n this.inputPaste.value = await value.toString('pem');\n this.successParse.emit(await value.toString('base64url'));\n }\n\n async decode(value: string) {\n new Promise<X509Certificates>((resolve) => {\n resolve(new X509Certificates(value));\n })\n .catch(() => new X509Certificate(value))\n .catch(() => new X509AttributeCertificate(value))\n .catch(() => new Pkcs10CertificateRequest(value))\n .catch(() => new X509Crl(value))\n .catch(() => new SshCertificate(value))\n .then((res: typeof this.certificateDecoded) => this.setValue(res))\n .catch((error) => {\n console.log(error);\n\n alert(`Error decoding certificate:\\n\"${value}\"\\n\\nPlease try to use Certificate/AttributeCertificate/CertificateRequest/CRL.`);\n });\n }\n\n renderCertificate() {\n if (this.certificateDecoded instanceof X509Certificates) {\n return (\n <peculiar-certificate-chain-viewer\n certificates={this.certificateDecoded}\n download\n />\n );\n }\n\n if (this.certificateDecoded instanceof X509Certificate) {\n return (\n <peculiar-certificate-viewer\n certificate={this.certificateDecoded}\n download\n />\n );\n }\n\n if (this.certificateDecoded instanceof X509AttributeCertificate) {\n return (\n <peculiar-attribute-certificate-viewer\n certificate={this.certificateDecoded}\n download\n />\n );\n }\n\n if (this.certificateDecoded instanceof Pkcs10CertificateRequest) {\n return (\n <peculiar-csr-viewer\n certificate={this.certificateDecoded}\n download\n />\n );\n }\n\n if (this.certificateDecoded instanceof X509Crl) {\n return (\n <peculiar-crl-viewer\n certificate={this.certificateDecoded}\n download\n />\n );\n }\n\n if (this.certificateDecoded instanceof SshCertificate) {\n return (\n <peculiar-ssh-certificate-viewer\n certificate={this.certificateDecoded}\n download\n />\n );\n }\n\n return null;\n }\n\n render() {\n return (\n <Host>\n <textarea\n placeholder=\"Certificate DER or PEM\"\n class=\"textarea t-b2 c-black\"\n ref={(el) => { this.inputPaste = el; }}\n onDrop={this.handleDropFile}\n />\n <div class=\"controls\">\n <div class=\"control_row\">\n <Typography\n variant=\"b3\"\n color=\"secondary-tint-2\"\n >\n Drag or load file:\n </Typography>\n <input\n type=\"file\"\n accept=\"application/pkix-cert,application/x-x509-ca-cert,application/x-x509-user-cert,application/pkcs10,application/pkix-crl,.csr,.req,.crl,.pub\"\n value=\"\"\n onChange={this.handleChangeInputFile}\n />\n </div>\n {this.certificateExamples?.length && (\n <div class=\"control_row\">\n <Typography\n variant=\"b3\"\n color=\"secondary-tint-2\"\n >\n Load examples:\n </Typography>\n <select onChange={this.handleChangeExample}>\n <option value=\"\">None</option>\n {this.certificateExamples.map((example) => (\n <option value={example.value}>\n {example.title}\n </option>\n ))}\n </select>\n </div>\n )}\n <div class=\"control_row\">\n <Button\n onClick={this.handleClickDecode}\n >\n Decode\n </Button>\n <Button\n onClick={this.handleClickClear}\n >\n Clear\n </Button>\n </div>\n </div>\n {this.renderCertificate()}\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["buttonMenuCss","ButtonMenu","constructor","hostRef","this","groups","open","handleClick","render","h","Host","key","class","is_shown","Button","startIcon","ActionsIcon","onClick","role","tabIndex","String","map","group","Typography","variant","color","title","options","option","href","event","stopPropagation","text","circularProgressCss","CircularProgress","size","width","box","style","height","viewBox","cx","cy","r","fill","strokeWidth","highlightWordsCss","HighlightWords","tag","componentDidLoad","handleHighlightSearch","componentDidUpdate","basicString","resetHighlightSearch","host","innerHTML","result","search","substring","RegExp","replace","source"],"sources":["src/components/button-menu/button-menu.scss?tag=peculiar-button-menu&encapsulation=scoped","src/components/button-menu/button-menu.tsx","src/components/circular-progress/circular-progress.scss?tag=peculiar-circular-progress&encapsulation=shadow","src/components/circular-progress/circular-progress.tsx","src/components/highlight-words/highlight-words.scss?tag=peculiar-highlight-words&encapsulation=shadow","src/components/highlight-words/highlight-words.tsx"],"sourcesContent":[":host {\n display: inline-flex;\n position: relative;\n\n &.is_shown {\n .button_popover {\n &:before {\n position: fixed;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n content: '';\n }\n }\n\n .popover {\n display: block;\n }\n }\n}\n\n.popover {\n min-width: 200px;\n position: absolute;\n top: 100%;\n right: 0;\n border-radius: 4px;\n z-index: 1;\n box-shadow: var(--pv-shadow-light-medium);\n background: var(--pv-color-white);\n padding: var(--pv-size-base-2) 0;\n margin: var(--pv-size-base) 0;\n display: none;\n}\n\n.button_option {\n width: 100%;\n justify-content: flex-start;\n border-radius: 0;\n}\n\n.group {\n &:not(:last-child) {\n border-bottom: 1px solid var(--pv-color-gray-5);\n padding-bottom: var(--pv-size-base-2);\n margin-bottom: var(--pv-size-base);\n }\n}\n\n.group_title {\n line-height: var(--pv-size-base-6);\n padding: 0 var(--pv-size-base-2);\n}\n","/**\n * @license\n * Copyright (c) Peculiar Ventures, LLC.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport {\n Component,\n h,\n State,\n Prop,\n Host,\n} from '@stencil/core';\nimport { Button, IButtonProps } from '../button';\nimport { Typography } from '../typography';\nimport { ActionsIcon } from '../icons';\n\nexport interface IButtonMenuGroupOptions extends IButtonProps {\n text: string | string[];\n}\n\nexport interface IButtonMenuGroup {\n title: string | string[];\n options: IButtonMenuGroupOptions[];\n}\n\n@Component({\n tag: 'peculiar-button-menu',\n styleUrl: 'button-menu.scss',\n scoped: true,\n})\nexport class ButtonMenu {\n @Prop() groups: IButtonMenuGroup[] = [];\n\n @State() open = false;\n\n handleClick = () => {\n this.open = !this.open;\n };\n\n render() {\n return (\n <Host\n class={{ is_shown: this.open }}\n >\n <Button\n class=\"button_popover\"\n startIcon={<ActionsIcon />}\n onClick={this.handleClick}\n />\n <div\n role=\"dialog\"\n tabIndex={-1}\n class=\"popover\"\n aria-hidden={String(this.open)}\n >\n {this.groups.map((group) => (\n <div class=\"group\">\n <Typography\n variant=\"c2\"\n color=\"gray-9\"\n class=\"group_title\"\n >\n {group.title}\n </Typography>\n {group.options.map((option) => (\n <Button\n class=\"button_option\"\n startIcon={option.startIcon}\n href={option.href}\n onClick={(event) => {\n event.stopPropagation();\n\n this.handleClick();\n\n if (option.onClick) {\n option.onClick(event);\n }\n }}\n >\n {option.text}\n </Button>\n ))}\n </div>\n ))}\n </div>\n </Host>\n );\n }\n}\n",":host {\n display: block;\n width: 100%;\n}\n\n@keyframes circular-rotate {\n to {\n transform: rotate(1turn);\n }\n}\n\n@keyframes circular-dash {\n 0% {\n stroke-dasharray: 1,200;\n stroke-dashoffset: 0;\n }\n\n 50% {\n stroke-dasharray: 100,200;\n stroke-dashoffset: -15;\n }\n\n to {\n stroke-dasharray: 100,200;\n stroke-dashoffset: -120;\n }\n}\n\n.circle_progress {\n margin: 0 auto;\n}\n\n.circle_progress_svg {\n animation: circular-rotate 1.4s linear infinite;\n}\n\n.circle_progress_circle {\n stroke-linecap: round;\n animation: circular-dash 1.4s ease-in-out infinite;\n stroke-dasharray: 80,200;\n stroke-dashoffset: 0;\n stroke: var(--pv-color-secondary);\n}\n\n.circle_progress_backdrop {\n stroke: var(--pv-color-gray-3);\n}\n","/**\n * @license\n * Copyright (c) Peculiar Ventures, LLC.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport {\n Component,\n Host,\n h,\n Prop,\n} from '@stencil/core';\n\n@Component({\n tag: 'peculiar-circular-progress',\n styleUrl: 'circular-progress.scss',\n shadow: true,\n})\nexport class CircularProgress {\n /**\n * Width/height of progress circle.\n */\n @Prop() size = 24;\n\n /**\n * Stroke width of progress bar circle.\n */\n @Prop() width = 4;\n\n private box = 50;\n\n render() {\n return (\n <Host>\n <div\n class=\"circle_progress\"\n style={{\n width: `${this.size}px`,\n height: `${this.size}px`,\n }}\n >\n <svg\n class=\"circle_progress_svg\"\n viewBox={`0 0 ${this.box} ${this.box}`}\n >\n <circle\n class=\"circle_progress_backdrop\"\n cx={this.box / 2}\n cy={this.box / 2}\n r={(this.box / 2) - 5}\n fill=\"none\"\n style={{ strokeWidth: `${this.width}px` }}\n />\n <circle\n class=\"circle_progress_circle\"\n cx={this.box / 2}\n cy={this.box / 2}\n r={(this.box / 2) - 5}\n fill=\"none\"\n style={{ strokeWidth: `${this.width}px` }}\n />\n </svg>\n </div>\n </Host>\n );\n }\n}\n",":host {\n display: inline;\n}\n\n::slotted(mark) {\n background-color: var(--pv-color-attention-tint-4);\n}\n","/**\n * @license\n * Copyright (c) Peculiar Ventures, LLC.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport {\n Component, Host, h, Element, Prop,\n} from '@stencil/core';\n\n@Component({\n tag: 'peculiar-highlight-words',\n styleUrl: 'highlight-words.scss',\n shadow: true,\n})\nexport class HighlightWords {\n @Element() host: HTMLElement;\n\n @Prop() search: string;\n\n private tag = 'mark';\n\n componentDidLoad() {\n this.handleHighlightSearch();\n }\n\n componentDidUpdate() {\n this.handleHighlightSearch();\n }\n\n handleHighlightSearch() {\n const basicString = this.resetHighlightSearch(this.host.innerHTML);\n let result = basicString;\n\n if (this.search) {\n const substring = new RegExp(`(${this.search})`, 'gi');\n\n result = basicString.replace(substring, `<${this.tag}>$1</${this.tag}>`);\n }\n\n this.host.innerHTML = result;\n }\n\n resetHighlightSearch(source: string) {\n // eslint-disable-next-line no-useless-escape\n const substring = new RegExp(`<\\/?${this.tag}>`, 'g');\n\n return source.replace(substring, '');\n }\n\n render() {\n return (\n <Host>\n <slot />\n </Host>\n );\n }\n}\n"],"mappings":";;;wIAAA,MAAMA,EAAgB,s/B,MCiCTC,EAAU,MALvB,WAAAC,CAAAC,G,UAMUC,KAAMC,OAAuB,GAE5BD,KAAIE,KAAG,MAEhBF,KAAWG,YAAG,KACZH,KAAKE,MAAQF,KAAKE,IAAI,CAoDzB,CAjDC,MAAAE,GACE,OACEC,EAACC,EAAI,CAAAC,IAAA,2CACHC,MAAO,CAAEC,SAAUT,KAAKE,OAExBG,EAACK,EACC,CAAAH,IAAA,2CAAAC,MAAM,iBACNG,UAAWN,EAACO,EAAW,MACvBC,QAASb,KAAKG,cAEhBE,EAAA,OAAAE,IAAA,2CACEO,KAAK,SACLC,UAAU,EACVP,MAAM,UACO,cAAAQ,OAAOhB,KAAKE,OAExBF,KAAKC,OAAOgB,KAAKC,GAChBb,EAAK,OAAAG,MAAM,SACTH,EAACc,EACC,CAAAC,QAAQ,KACRC,MAAM,SACNb,MAAM,eAELU,EAAMI,OAERJ,EAAMK,QAAQN,KAAKO,GAClBnB,EAACK,EAAM,CACLF,MAAM,gBACNG,UAAWa,EAAOb,UAClBc,KAAMD,EAAOC,KACbZ,QAAUa,IACRA,EAAMC,kBAEN3B,KAAKG,cAEL,GAAIqB,EAAOX,QAAS,CAClBW,EAAOX,QAAQa,E,IAIlBF,EAAOI,Y,aClF1B,MAAMC,EAAsB,2/B,MCoBfC,EAAgB,MAL7B,WAAAhC,CAAAC,G,UASUC,KAAI+B,KAAG,GAKP/B,KAAKgC,MAAG,EAERhC,KAAGiC,IAAG,EAqCf,CAnCC,MAAA7B,GACE,OACEC,EAACC,EAAI,CAAAC,IAAA,4CACHF,EAAA,OAAAE,IAAA,2CACEC,MAAM,kBACN0B,MAAO,CACLF,MAAO,GAAGhC,KAAK+B,SACfI,OAAQ,GAAGnC,KAAK+B,WAGlB1B,EAAA,OAAAE,IAAA,2CACEC,MAAM,sBACN4B,QAAS,OAAOpC,KAAKiC,OAAOjC,KAAKiC,OAEjC5B,EACE,UAAAE,IAAA,2CAAAC,MAAM,2BACN6B,GAAIrC,KAAKiC,IAAM,EACfK,GAAItC,KAAKiC,IAAM,EACfM,EAAIvC,KAAKiC,IAAM,EAAK,EACpBO,KAAK,OACLN,MAAO,CAAEO,YAAa,GAAGzC,KAAKgC,aAEhC3B,EACE,UAAAE,IAAA,2CAAAC,MAAM,yBACN6B,GAAIrC,KAAKiC,IAAM,EACfK,GAAItC,KAAKiC,IAAM,EACfM,EAAIvC,KAAKiC,IAAM,EAAK,EACpBO,KAAK,OACLN,MAAO,CAAEO,YAAa,GAAGzC,KAAKgC,e,aC7D5C,MAAMU,EAAoB,0F,MCiBbC,EAAc,MAL3B,WAAA7C,CAAAC,G,UAUUC,KAAG4C,IAAG,MAqCf,CAnCC,gBAAAC,GACE7C,KAAK8C,uB,CAGP,kBAAAC,GACE/C,KAAK8C,uB,CAGP,qBAAAA,GACE,MAAME,EAAchD,KAAKiD,qBAAqBjD,KAAKkD,KAAKC,WACxD,IAAIC,EAASJ,EAEb,GAAIhD,KAAKqD,OAAQ,CACf,MAAMC,EAAY,IAAIC,OAAO,IAAIvD,KAAKqD,UAAW,MAEjDD,EAASJ,EAAYQ,QAAQF,EAAW,IAAItD,KAAK4C,WAAW5C,KAAK4C,O,CAGnE5C,KAAKkD,KAAKC,UAAYC,C,CAGxB,oBAAAH,CAAqBQ,GAEnB,MAAMH,EAAY,IAAIC,OAAO,MAAOvD,KAAK4C,OAAQ,KAEjD,OAAOa,EAAOD,QAAQF,EAAW,G,CAGnC,MAAAlD,GACE,OACEC,EAACC,EAAI,CAAAC,IAAA,4CACHF,EAAQ,QAAAE,IAAA,6C","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["CertificateSummary","props","certificate","showIssuer","renderRow","name","value","h","Typography","variant","color","l10n","getString","subjectToString","issuerToString","serialNumber","version","validity","dateShort","notBefore","notAfter","certificatesViewerCss","CertificatesViewer","exports","class_1","hostRef","_this","this","isHasRoots","certificates","filterWithSearch","highlightWithSearch","mobileMediaQueryString","mobileScreenView","search","certificatesDecoded","isDecodeInProcess","handleClickDetails","certificateSelectedForDetails","detailsOpen","emit","handleModalClose","undefined","detailsClose","handleSearch","event","target","trim","prototype","handleMediaQueryChange","matches","componentWillLoad","certificatesDecodeAndSet","mobileMediaQuery","window","matchMedia","addEventListener","bind","disconnectedCallback","removeEventListener","watchCertificates","newValue","oldValue","JSON","stringify","hasRoots","Array","isArray","data","_d","_i","length","decoded","X509Certificate","getThumbprint","_e","sent","push","body","tests","isRoot","console","error","error_1","getCertificateName","commonName","handleClickDownloadAsPem","downloadAsPEM","handleClickDownloadAsDer","downloadAsDER","handleClickRow","index","isExpandedRowClicked","expandedRow","getMaxColSpanValue","colSpan","renderCertificateButtonActions","isHasTestURLs","expired","revoked","valid","class","groups","__spreadArray","title","options","text","startIcon","DetailsIcon","onClick","DownloadIcon","_a","href","LinkIcon","_b","_c","renderExpandedRow","renderCertificatesRows","searchHighlight","content","forEach","isExpandedRow","publicKeyValue","OIDs","signature","algorithm","certificateStringForSearch","issuerCommonName","thumbprints","join","toLowerCase","indexOf","certificate_row","m_expanded","key","Button","ArrowTopIcon","ArrowBottomIcon","renderCertificateDetailsModal","role","part","CrossIcon","renderSearch","type","disabled","placeholder","onInput","renderEmptyState","renderEmptySearchState","renderLoadingState","renderTableBody","certificatesRows","render","Host","String"],"sources":["src/components/certificate-summary/certificate-summary.tsx","src/components/certificates-viewer/certificates-viewer.scss?tag=peculiar-certificates-viewer&encapsulation=shadow","src/components/certificates-viewer/certificates-viewer.tsx"],"sourcesContent":["/**\n * @license\n * Copyright (c) Peculiar Ventures, LLC.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { FunctionalComponent, h } from '@stencil/core';\nimport type { X509Certificate } from '../../crypto';\nimport { dateShort, l10n } from '../../utils';\nimport { Typography } from '../typography';\n\ninterface ICertificateSummaryProps {\n certificate: X509Certificate;\n showIssuer?: boolean;\n}\n\nexport const CertificateSummary: FunctionalComponent<ICertificateSummaryProps> = (props) => {\n const {\n certificate,\n showIssuer,\n } = props;\n\n const renderRow = (name: string | string[], value: string | number) => (\n <tr>\n <td>\n <Typography\n variant=\"b2\"\n color=\"gray-9\"\n >\n {name}\n </Typography>\n </td>\n <td>\n <Typography\n variant=\"b2\"\n color=\"black\"\n >\n {value}\n </Typography>\n </td>\n </tr>\n );\n\n return (\n <table>\n <tbody>\n {renderRow(\n l10n.getString('subjectName'),\n certificate.subjectToString(),\n )}\n {showIssuer && renderRow(\n l10n.getString('issuerName'),\n certificate.issuerToString(),\n )}\n\n {renderRow(\n l10n.getString('serialNumber'),\n certificate.serialNumber,\n )}\n {renderRow(\n l10n.getString('version'),\n certificate.version,\n )}\n {renderRow(\n l10n.getString('validity'),\n certificate.validity,\n )}\n {renderRow(\n l10n.getString('issued'),\n dateShort(certificate.notBefore),\n )}\n {renderRow(\n l10n.getString('expired'),\n dateShort(certificate.notAfter),\n )}\n </tbody>\n </table>\n );\n};\n","@import '../../css/base.scss';\n\n:host {\n display: block;\n width: 100%;\n word-wrap: break-word;\n min-width: 280px;\n overflow: auto;\n position: relative;\n}\n\n.search_section {\n padding: var(--pv-size-base-4);\n border-bottom: 1px solid var(--pv-color-gray-4);\n}\n\n.input_search {\n height: var(--pv-size-base-8);\n width: 100%;\n outline: none;\n background-color: var(--pv-color-gray-1);\n padding: 0 var(--pv-size-base-2);\n border: 1px solid var(--pv-color-gray-7);\n border-radius: 4px;\n transition: background-color 200ms ease 0s, color 200ms ease 0s, border-color 200ms ease 0s;\n &::placeholder {\n color: var(--pv-color-gray-9);\n }\n}\n\ntable {\n width: 100%;\n table-layout: fixed;\n border-collapse: collapse;\n border-spacing: 0;\n\n td, th {\n border-bottom: 1px solid var(--pv-color-gray-4);\n vertical-align: top;\n text-align: left;\n\n &:first-child {\n padding-right: 0;\n width: var(--pv-size-base-10);\n }\n &:last-child {\n padding-left: 0;\n width: var(--pv-size-base-10);\n }\n }\n\n th {\n padding: var(--pv-size-base-2) var(--pv-size-base-4);\n\n &.col_action {\n padding: 0;\n }\n }\n\n td {\n padding: var(--pv-size-base-4);\n }\n\n tr {\n &.m_expanded {\n background: var(--pv-color-gray-1);\n\n > td {\n border-bottom: none;\n }\n }\n\n &.expanded_summary {\n background: var(--pv-color-gray-1);\n\n table {\n table-layout: initial;\n\n td {\n border-bottom: none;\n padding: var(--pv-size-base-2);\n\n &:first-child {\n width: 200px;\n }\n\n &:last-child {\n width: auto;\n }\n }\n }\n }\n }\n}\n\n.button_table_cell {\n margin-top: -3px;\n}\n\n.status_wrapper {\n text-align: center;\n height: var(--pv-size-base-16);\n vertical-align: middle;\n}\n\n.modal_wrapper {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 1;\n animation: fadeIn 200ms;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.modal_backdrop {\n background: var(--pv-color-black);\n z-index: -1;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n opacity: 0.5;\n}\n\n.modal_container {\n background: var(--pv-color-white);\n width: 100%;\n display: flex;\n max-height: calc(100% - 60px);\n flex-direction: column;\n margin: var(--pv-size-base-6);\n position: relative;\n outline: none;\n box-shadow: var(--pv-shadow-dark-hight);\n overflow: hidden;\n border: 0px;\n padding: 0px;\n max-width: 640px;\n border-radius: 4px;\n}\n\n.modal_header {\n padding: var(--pv-size-base-3) var(--pv-size-base-4);\n display: flex;\n flex: 0 0 auto;\n -webkit-box-pack: justify;\n justify-content: space-between;\n gap: var(--pv-size-base-2);\n border-bottom: 1px solid var(--pv-color-gray-5);\n}\n\n.modal_content {\n flex: 1 1 auto;\n overflow: auto;\n}\n\n:host([data-mobile-screen-view=\"true\"]) {\n table, tbody, tr, td {\n display: block;\n width: 100% !important;\n padding: 0;\n border: none;\n }\n\n thead {\n display: none;\n }\n\n table {\n tr {\n padding: var(--pv-size-base-2) 0;\n }\n\n .expanded_summary {\n padding: 0;\n }\n\n .certificate_row {\n border-bottom: 1px solid var(--pv-color-gray-5);\n padding: var(--pv-size-base-2) var(--pv-size-base-4);\n }\n\n .certificate_row_actions {\n padding-top: var(--pv-size-base-6);\n\n td {\n display: flex;\n justify-content: right;\n gap: var(--pv-size-base-4);\n }\n }\n }\n\n .button_table_cell {\n margin-top: 0;\n }\n}\n","/**\n * @license\n * Copyright (c) Peculiar Ventures, LLC.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport {\n Component,\n h,\n Prop,\n State,\n Watch,\n Host,\n Event,\n EventEmitter,\n Build,\n} from '@stencil/core';\nimport { X509Certificate } from '../../crypto';\nimport { OIDs } from '../../constants/oids';\nimport { l10n } from '../../utils';\nimport { Typography } from '../typography';\nimport { CertificateSummary } from '../certificate-summary';\nimport { Button } from '../button';\nimport {\n DownloadIcon,\n LinkIcon,\n DetailsIcon,\n ArrowBottomIcon,\n ArrowTopIcon,\n CrossIcon,\n} from '../icons';\n\nexport interface ICertificate {\n value: string;\n name?: string | ((certificate: X509Certificate) => string);\n tests?: {\n valid?: string;\n revoked?: string;\n expired?: string;\n };\n}\n\ninterface ICertificateDecoded {\n body: X509Certificate;\n tests?: ICertificate['tests'];\n name?: ICertificate['name'];\n}\n\n@Component({\n tag: 'peculiar-certificates-viewer',\n styleUrl: 'certificates-viewer.scss',\n shadow: true,\n})\nexport class CertificatesViewer {\n private isHasRoots = false;\n\n private mobileMediaQuery: MediaQueryList;\n\n /**\n * List of certificates values for decode and show in the list.\n * <br />\n * **NOTE**: If you do not provide a `name` value when\n * invocing the component it will take the first Subject CN value.\n * <br />\n * **NOTE**: If you do not provide a `tests` this column will be ommited from the rendered page.\n * <br />\n * **NOTE**: If the supplied certificates are self-signed the issuer column will be ommited.\n */\n @Prop() certificates: ICertificate[] = [];\n\n /**\n * Use filter in the list when search is changed.\n */\n @Prop() filterWithSearch = true;\n\n /**\n * Use highlight chapters in the list when search is changed.\n */\n @Prop() highlightWithSearch = true;\n\n /**\n * Mobile media query string to control screen view change.\n * <br />\n * **NOTE**: Based on https://developer.mozilla.org/en-US/docs/Web/API/Window/matchMedia.\n * @example\n * (max-width: 900px)\n */\n @Prop({ reflect: false }) mobileMediaQueryString?: string = '(max-width: 900px)';\n\n /**\n * Emitted when the user open certificate details modal.\n */\n @Event() detailsOpen!: EventEmitter<X509Certificate>;\n\n /**\n * Emitted when the user close certificate details modal.\n */\n @Event() detailsClose!: EventEmitter<void>;\n\n @State() mobileScreenView = false;\n\n @State() search = '';\n\n @State() certificatesDecoded: ICertificateDecoded[] = [];\n\n @State() expandedRow?: number;\n\n @State() certificateSelectedForDetails?: X509Certificate;\n\n @State() isDecodeInProcess = true;\n\n private handleMediaQueryChange(event: MediaQueryListEvent) {\n this.mobileScreenView = event.matches;\n }\n\n componentWillLoad() {\n this.certificatesDecodeAndSet();\n\n if (Build.isBrowser) {\n this.mobileMediaQuery = window.matchMedia(this.mobileMediaQueryString);\n this.mobileMediaQuery.addEventListener('change', this.handleMediaQueryChange.bind(this));\n this.mobileScreenView = this.mobileMediaQuery.matches;\n }\n }\n\n disconnectedCallback() {\n this.mobileMediaQuery.removeEventListener('change', this.handleMediaQueryChange.bind(this));\n }\n\n @Watch('certificates')\n watchCertificates(newValue: ICertificate[], oldValue: ICertificate[]) {\n /**\n * Prevent rerender after set the same `certificates` prop.\n */\n if (JSON.stringify(newValue) !== JSON.stringify(oldValue)) {\n this.certificatesDecodeAndSet();\n }\n }\n\n async certificatesDecodeAndSet() {\n let hasRoots = false;\n\n if (!Array.isArray(this.certificates)) {\n return;\n }\n\n const data: ICertificateDecoded[] = [];\n\n for (const certificate of this.certificates) {\n try {\n const decoded = new X509Certificate(certificate.value);\n\n await decoded.getThumbprint('SHA-1');\n\n data.push({\n body: decoded,\n tests: certificate.tests,\n name: certificate.name,\n });\n\n if (!hasRoots && decoded.isRoot) {\n hasRoots = true;\n }\n } catch (error) {\n console.error('Error certificate parse:', error);\n }\n }\n\n this.isHasRoots = hasRoots;\n this.isDecodeInProcess = false;\n this.certificatesDecoded = data;\n }\n\n private getCertificateName(certificate: ICertificateDecoded) {\n if (typeof certificate.name === 'function') {\n return certificate.name(certificate.body);\n }\n\n return certificate.name || certificate.body.commonName;\n }\n\n private handleClickDownloadAsPem(certificate: ICertificateDecoded) {\n certificate.body.downloadAsPEM(this.getCertificateName(certificate));\n }\n\n private handleClickDownloadAsDer(certificate: ICertificateDecoded) {\n certificate.body.downloadAsDER(this.getCertificateName(certificate));\n }\n\n private handleClickDetails = (certificate: X509Certificate) => {\n this.certificateSelectedForDetails = certificate;\n this.detailsOpen.emit(certificate);\n };\n\n private handleModalClose = () => {\n this.certificateSelectedForDetails = undefined;\n\n this.detailsClose.emit();\n };\n\n private handleClickRow(index: number) {\n const isExpandedRowClicked = this.expandedRow === index;\n\n this.expandedRow = isExpandedRowClicked\n ? undefined\n : index;\n }\n\n private handleSearch = (event: Event) => {\n const target = event.target as HTMLInputElement;\n\n this.search = target.value.trim();\n };\n\n private getMaxColSpanValue() {\n let colSpan = 5;\n\n if (!this.isHasRoots) {\n colSpan += 1;\n }\n\n return colSpan;\n }\n\n private renderCertificateButtonActions(certificate: ICertificateDecoded) {\n const isHasTestURLs = certificate.tests\n && (certificate.tests.expired || certificate.tests.revoked || certificate.tests.valid);\n\n return (\n <peculiar-button-menu\n class=\"button_table_cell\"\n groups={[\n {\n title: l10n.getString('previewCertificate'),\n options: [\n {\n text: l10n.getString('viewDetails'),\n startIcon: <DetailsIcon />,\n onClick: () => this.handleClickDetails(certificate.body),\n },\n ],\n },\n {\n title: l10n.getString('downloadOptions'),\n options: [\n {\n text: l10n.getString('download.pem'),\n startIcon: <DownloadIcon />,\n onClick: () => this.handleClickDownloadAsPem(certificate),\n },\n {\n text: l10n.getString('download.der'),\n startIcon: <DownloadIcon />,\n onClick: () => this.handleClickDownloadAsDer(certificate),\n },\n ],\n },\n ...(isHasTestURLs\n ? [{\n title: l10n.getString('testURLs'),\n options: [\n ...(certificate.tests?.valid\n ? [{\n text: l10n.getString('valid'),\n href: certificate.tests.valid,\n startIcon: <LinkIcon />,\n }]\n : []),\n ...(certificate.tests?.revoked\n ? [{\n text: l10n.getString('revoked'),\n href: certificate.tests.revoked,\n startIcon: <LinkIcon />,\n }]\n : []),\n ...(certificate.tests?.expired\n ? [{\n text: l10n.getString('expired'),\n href: certificate.tests.expired,\n startIcon: <LinkIcon />,\n }]\n : []),\n ],\n }]\n : []),\n ]}\n />\n );\n }\n\n private renderExpandedRow(certificate: X509Certificate) {\n const colSpan = this.getMaxColSpanValue() - 2;\n\n return (\n <tr class=\"expanded_summary\">\n <td />\n <td colSpan={colSpan}>\n <CertificateSummary\n certificate={certificate}\n showIssuer={!certificate.isRoot}\n />\n </td>\n <td />\n </tr>\n );\n }\n\n private renderCertificatesRows() {\n const searchHighlight = this.highlightWithSearch\n ? this.search\n : '';\n const content = [];\n\n this.certificatesDecoded.forEach((certificate, index) => {\n const isExpandedRow = index === this.expandedRow;\n const publicKeyValue = OIDs[certificate.body.signature.algorithm]\n || certificate.body.signature.algorithm;\n\n if (this.filterWithSearch && this.search) {\n const certificateStringForSearch = [\n publicKeyValue,\n certificate.body.issuerCommonName,\n this.getCertificateName(certificate),\n certificate.body.thumbprints['SHA-1'],\n ]\n .join(' ')\n .toLowerCase();\n\n if (certificateStringForSearch.indexOf(this.search.toLowerCase()) === -1) {\n return;\n }\n }\n\n if (this.mobileScreenView) {\n content.push([\n <tr\n class={{\n certificate_row: true,\n m_expanded: isExpandedRow,\n }}\n key={certificate.body.thumbprints['SHA-1']}\n >\n <td>\n <table>\n <tbody>\n {!this.isHasRoots && (\n <tr>\n <td>\n <Typography variant=\"b2\" color=\"gray-9\">\n {l10n.getString('issuer')}\n </Typography>\n </td>\n <td>\n <Typography variant=\"b2\" color=\"black\">\n <peculiar-highlight-words search={searchHighlight}>\n {certificate.body.issuerCommonName}\n </peculiar-highlight-words>\n </Typography>\n </td>\n </tr>\n )}\n <tr>\n <td>\n <Typography variant=\"b2\" color=\"gray-9\">\n {l10n.getString('name')}\n </Typography>\n </td>\n <td>\n <Typography variant=\"b2\" color=\"black\">\n <peculiar-highlight-words search={searchHighlight}>\n {this.getCertificateName(certificate)}\n </peculiar-highlight-words>\n </Typography>\n </td>\n </tr>\n <tr>\n <td>\n <Typography variant=\"b2\" color=\"gray-9\">\n {l10n.getString('publicKey')}\n </Typography>\n </td>\n <td>\n <Typography variant=\"b2\" color=\"black\">\n <peculiar-highlight-words search={searchHighlight}>\n {publicKeyValue}\n </peculiar-highlight-words>\n </Typography>\n </td>\n </tr>\n <tr>\n <td>\n <Typography variant=\"b2\" color=\"gray-9\">\n {l10n.getString('fingerprint')}\n (SHA-1)\n </Typography>\n </td>\n <td>\n <Typography variant=\"b2\" color=\"black\">\n <peculiar-highlight-words search={searchHighlight}>\n {certificate.body.thumbprints['SHA-1']}\n </peculiar-highlight-words>\n </Typography>\n </td>\n </tr>\n {isExpandedRow && this.renderExpandedRow(certificate.body)}\n <tr class=\"certificate_row_actions\">\n <td>\n {this.renderCertificateButtonActions(certificate)}\n <Button\n startIcon={isExpandedRow ? <ArrowTopIcon /> : <ArrowBottomIcon />}\n onClick={this.handleClickRow.bind(this, index)}\n />\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>,\n ]);\n\n return;\n }\n\n content.push([\n <tr\n class={{ m_expanded: isExpandedRow }}\n key={certificate.body.thumbprints['SHA-1']}\n >\n <td>\n <Button\n startIcon={isExpandedRow ? <ArrowTopIcon /> : <ArrowBottomIcon />}\n class=\"button_table_cell\"\n\n onClick={this.handleClickRow.bind(this, index)}\n />\n </td>\n {!this.isHasRoots && (\n <td>\n <Typography>\n <peculiar-highlight-words search={searchHighlight}>\n {certificate.body.issuerCommonName}\n </peculiar-highlight-words>\n </Typography>\n </td>\n )}\n <td>\n <Typography>\n <peculiar-highlight-words search={searchHighlight}>\n {this.getCertificateName(certificate)}\n </peculiar-highlight-words>\n </Typography>\n </td>\n <td>\n <Typography>\n <peculiar-highlight-words search={searchHighlight}>\n {publicKeyValue}\n </peculiar-highlight-words>\n </Typography>\n </td>\n <td>\n <Typography>\n <peculiar-highlight-words search={searchHighlight}>\n {certificate.body.thumbprints['SHA-1']}\n </peculiar-highlight-words>\n </Typography>\n </td>\n <td>\n {this.renderCertificateButtonActions(certificate)}\n </td>\n </tr>,\n isExpandedRow && this.renderExpandedRow(certificate.body),\n ]);\n });\n\n return content;\n }\n\n private renderCertificateDetailsModal() {\n if (!this.certificateSelectedForDetails) {\n return null;\n }\n\n return (\n <div\n class=\"modal_wrapper\"\n role=\"presentation\"\n aria-hidden=\"false\"\n part=\"presentation\"\n >\n <div\n class=\"modal_backdrop\"\n aria-hidden=\"true\"\n onClick={this.handleModalClose}\n />\n <div\n class=\"modal_container\"\n role=\"dialog\"\n part=\"presentation_container\"\n >\n <header class=\"modal_header\">\n <Typography\n variant=\"h4\"\n >\n {l10n.getString('certificateDetails')}\n </Typography>\n <Button\n startIcon={<CrossIcon />}\n onClick={this.handleModalClose}\n />\n </header>\n <div class=\"modal_content\">\n <peculiar-certificate-viewer\n certificate={this.certificateSelectedForDetails}\n mobileMediaQueryString={this.mobileMediaQueryString}\n />\n </div>\n </div>\n </div>\n );\n }\n\n private renderSearch() {\n if (!this.filterWithSearch && !this.highlightWithSearch) {\n return null;\n }\n\n return (\n <div class=\"search_section\">\n <input\n type=\"search\"\n value=\"\"\n class=\"input_search t-b3 c-black\"\n disabled={!this.certificatesDecoded.length}\n placeholder=\"Search\"\n onInput={this.handleSearch}\n />\n </div>\n );\n }\n\n private renderEmptyState() {\n const colSpan = this.getMaxColSpanValue();\n\n return (\n <tr>\n <td\n class=\"status_wrapper\"\n colSpan={colSpan}\n >\n <Typography\n variant=\"b1\"\n >\n There are no certificates available.\n </Typography>\n </td>\n </tr>\n );\n }\n\n private renderEmptySearchState() {\n const colSpan = this.getMaxColSpanValue();\n\n return (\n <tr>\n <td\n class=\"status_wrapper\"\n colSpan={colSpan}\n >\n <Typography\n variant=\"b1\"\n >\n No results found for “\n {this.search}\n “\n </Typography>\n </td>\n </tr>\n );\n }\n\n private renderLoadingState() {\n return (\n <div class=\"loading_container\">\n <peculiar-circular-progress />\n </div>\n );\n }\n\n private renderTableBody() {\n if (this.isDecodeInProcess) {\n return null;\n }\n\n if (!this.certificatesDecoded.length) {\n return this.renderEmptyState();\n }\n\n const certificatesRows = this.renderCertificatesRows();\n\n if (this.search && !certificatesRows.length) {\n return this.renderEmptySearchState();\n }\n\n return certificatesRows;\n }\n\n render() {\n return (\n <Host\n data-mobile-screen-view={String(this.mobileScreenView)}\n >\n {this.renderSearch()}\n <table>\n {!this.mobileScreenView && (\n <thead>\n <tr>\n <th />\n {!this.isHasRoots && (\n <th class=\"col_issuer\">\n <Typography variant=\"s2\">\n {l10n.getString('issuer')}\n </Typography>\n </th>\n )}\n <th class=\"col_name\">\n <Typography variant=\"s2\">\n {l10n.getString('name')}\n </Typography>\n </th>\n <th class=\"col_public_key\">\n <Typography variant=\"s2\">\n {l10n.getString('publicKey')}\n </Typography>\n </th>\n <th class=\"col_fingerprint\">\n <Typography variant=\"s2\">\n {l10n.getString('fingerprint')}\n (SHA-1)\n </Typography>\n </th>\n <th />\n </tr>\n </thead>\n )}\n <tbody>\n {this.renderTableBody()}\n </tbody>\n </table>\n\n {this.renderCertificateDetailsModal()}\n {this.isDecodeInProcess && this.renderLoadingState()}\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["textHiderCss","TextHider","exports","class_1","hostRef","this","opened","prototype","render","_this","h","Host","key","String","class","Button","startIcon","ArrowTopIcon","color","ArrowBottomIcon","onClick"],"sources":["src/components/text-hider/text-hider.scss?tag=peculiar-text-hider&encapsulation=scoped","src/components/text-hider/text-hider.tsx"],"sourcesContent":[":host {\n display: flex;\n width: 100%;\n gap: var(--pv-size-base-4);\n\n &[aria-expanded=\"true\"] {\n .content {\n white-space: initial;\n }\n }\n}\n\n.content {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n width: 100%;\n}\n\n.action {\n flex-shrink: 0;\n margin-top: calc(var(--pv-size-base) * -1);\n}\n","/**\n * @license\n * Copyright (c) Peculiar Ventures, LLC.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport {\n Component,\n Host,\n h,\n State,\n} from '@stencil/core';\nimport { Button } from '../button';\nimport { ArrowBottomIcon, ArrowTopIcon } from '../icons';\n\n@Component({\n tag: 'peculiar-text-hider',\n styleUrl: 'text-hider.scss',\n scoped: true,\n})\nexport class TextHider {\n @State() opened = false;\n\n render() {\n return (\n <Host\n aria-expanded={String(this.opened)}\n >\n <div class=\"content\">\n <slot />\n </div>\n <Button\n class=\"action\"\n startIcon={this.opened ? <ArrowTopIcon color=\"secondary\" /> : <ArrowBottomIcon color=\"secondary\" />}\n onClick={() => { this.opened = !this.opened; }}\n />\n </Host>\n );\n }\n}\n"],"mappings":";;;sPAAA,IAAMA,EAAe,qZ,ICsBRC,EAASC,EAAA,iCALtB,SAAAC,EAAAC,G,UAMWC,KAAMC,OAAG,KAkBnB,CAhBCH,EAAAI,UAAAC,OAAA,eAAAC,EAAAJ,KACE,OACEK,EAACC,EAAI,CAAAC,IAAA,2DACYC,OAAOR,KAAKC,SAE3BI,EAAK,OAAAE,IAAA,2CAAAE,MAAM,WACTJ,EAAA,QAAAE,IAAA,8CAEFF,EAACK,EAAM,CAAAH,IAAA,2CACLE,MAAM,SACNE,UAAWX,KAAKC,OAASI,EAACO,EAAa,CAAAC,MAAM,cAAiBR,EAACS,EAAgB,CAAAD,MAAM,cACrFE,QAAS,WAAQX,EAAKH,QAAUG,EAAKH,MAAO,I,WAdhC,I","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["id_data","id_signedData","X509Certificates","_super","__extends","raw","_this","call","this","rawItems","PemConverter","isPem","decode","map","value","Convert","ToBase64Url","split","length","Error","_i","rawItems_1","item","push","X509Certificate","Object","defineProperty","prototype","Array","from","o","commonName","join","signedData","SignedData","version","encapContentInfo","eContentType","eContent","EncapsulatedContent","single","OctetString","certificates","CertificateSet","CertificateChoices","certificate","AsnConvert","parse","Certificate","cms","ContentInfo","contentType","content","serialize","toString","format","downloadAsPEM","name","Download","cert","asPEM","downloadAsDER","asDER","certificateDecoderCss","CertificateDecoder","exports","class_1","hostRef","handleClickDecode","inputPaste","handleClickClear","clearValue","handleChangeInputFile","event","__awaiter","element","target","files","readAsBinaryString","file","_b","sent","handleChangeExample","handleDropFile","stopPropagation","preventDefault","dataTransfer","componentDidLoad","certificateToDecode","setTimeout","certificateDecoded","clearCertificate","emit","setValue","_e","_d","_c","successParse","apply","Promise","resolve","catch","X509AttributeCertificate","Pkcs10CertificateRequest","X509Crl","SshCertificate","then","res","error","console","log","alert","concat","renderCertificate","h","download","render","Host","key","placeholder","class","ref","el","onDrop","Typography","variant","color","type","accept","onChange","_a","certificateExamples","example","title","Button","onClick"],"sources":["../../node_modules/.pnpm/@peculiar+asn1-cms@2.4.0/node_modules/@peculiar/asn1-cms/build/es2015/object_identifiers.js","src/crypto/x509_certificates.ts","src/components/certificate-decoder/certificate-decoder.scss?tag=peculiar-certificate-decoder&encapsulation=shadow","src/components/certificate-decoder/certificate-decoder.tsx"],"sourcesContent":["export const id_ct_contentInfo = \"1.2.840.113549.1.9.16.1.6\";\nexport const id_data = \"1.2.840.113549.1.7.1\";\nexport const id_signedData = \"1.2.840.113549.1.7.2\";\nexport const id_envelopedData = \"1.2.840.113549.1.7.3\";\nexport const id_digestedData = \"1.2.840.113549.1.7.5\";\nexport const id_encryptedData = \"1.2.840.113549.1.7.6\";\nexport const id_authData = \"1.2.840.113549.1.9.16.1.2\";\n","import { Convert } from 'pvtsutils';\nimport {\n SignedData,\n id_data,\n EncapsulatedContent,\n CertificateSet,\n CertificateChoices,\n ContentInfo,\n id_signedData,\n} from '@peculiar/asn1-cms';\nimport { Certificate } from '@peculiar/asn1-x509';\nimport { AsnConvert, OctetString } from '@peculiar/asn1-schema';\nimport { Download } from '../utils';\nimport { PemConverter } from './pem_converter';\nimport { X509Certificate } from './x509_certificate';\n\nexport class X509Certificates extends Array<X509Certificate> {\n constructor(raw: string) {\n super();\n\n const rawItems = PemConverter.isPem(raw)\n ? PemConverter.decode(raw).map((value) => Convert.ToBase64Url(value))\n : raw.split(',');\n\n if (rawItems.length < 2) {\n throw new Error('Unable to parse string. The array of elements is less than 2');\n }\n\n for (const item of rawItems) {\n this.push(new X509Certificate(item));\n }\n }\n\n public get commonName(): string {\n return Array.from(this)\n .map((o) => o.commonName)\n .join('_');\n }\n\n public get raw(): ArrayBuffer {\n const signedData = new SignedData();\n\n signedData.version = 1;\n signedData.encapContentInfo.eContentType = id_data;\n signedData.encapContentInfo.eContent = new EncapsulatedContent({ single: new OctetString() });\n signedData.certificates = new CertificateSet(\n Array.from(this)\n .map((o) => new CertificateChoices({ certificate: AsnConvert.parse(o.raw, Certificate) })),\n );\n\n const cms = new ContentInfo({\n contentType: id_signedData,\n content: AsnConvert.serialize(signedData),\n });\n\n return AsnConvert.serialize(cms);\n }\n\n public toString(format: 'pem' | 'base64' | 'base64url' = 'pem'): string {\n switch (format) {\n case 'pem':\n return Array.from(this)\n .map((o) => o.toString('pem'))\n .join('\\n');\n case 'base64url':\n return Array.from(this)\n .map((o) => o.toString('base64url'))\n .join(',');\n default:\n return Array.from(this)\n .map((o) => o.toString('base64'))\n .join(',');\n }\n }\n\n public downloadAsPEM(name?: string) {\n Download.cert.asPEM(\n this.toString('pem'),\n name || this.commonName,\n );\n }\n\n public downloadAsDER(name?: string) {\n Download.cert.asDER(\n this.raw,\n name || this.commonName,\n );\n }\n}\n","@import '../../css/base.scss';\n\n:host {\n display: block;\n width: 100%;\n}\n\n.textarea {\n min-height: 300px;\n width: 100%;\n border-radius: 4px;\n border: 1px solid var(--pv-color-gray-5);;\n padding: 14px;\n font-family: monospace;\n resize: vertical;\n}\n\n.controls {\n margin-top: var(--pv-size-base-2);\n display: flex;\n flex-direction: column;\n gap: var(--pv-size-base-2);\n margin-bottom: var(--pv-size-base-12);\n}\n\n.control_row {\n display: flex;\n align-items: center;\n gap: var(--pv-size-base);\n}\n","/**\n * @license\n * Copyright (c) Peculiar Ventures, LLC.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport {\n Component,\n Host,\n h,\n State,\n Prop,\n Event,\n EventEmitter,\n} from '@stencil/core';\nimport { readAsBinaryString } from '../../utils';\nimport {\n X509Certificate,\n X509AttributeCertificate,\n Pkcs10CertificateRequest,\n X509Crl,\n X509Certificates,\n SshCertificate,\n} from '../../crypto';\nimport { Button } from '../button';\nimport { Typography } from '../typography';\n\n@Component({\n tag: 'peculiar-certificate-decoder',\n styleUrl: 'certificate-decoder.scss',\n shadow: true,\n})\nexport class CertificateDecoder {\n private inputPaste?: HTMLTextAreaElement;\n\n /**\n * The example certificate value for decode and show details. Use PEM or DER.\n */\n @Prop() certificateExamples?: {\n title: string;\n value: string;\n }[];\n\n /**\n * The default certificate value for decode and show details. Use PEM or DER.\n */\n @Prop() certificateToDecode?: string;\n\n @State() certificateDecoded: X509Certificates\n | X509Certificate\n | X509AttributeCertificate\n | Pkcs10CertificateRequest\n | X509Crl\n | SshCertificate;\n\n /**\n * Emitted when the certificate has been successfully parsed.\n */\n @Event() successParse!: EventEmitter<string>;\n\n /**\n * Emitted when the certificate has been removed.\n */\n @Event() clearCertificate!: EventEmitter<void>;\n\n componentDidLoad() {\n if (this.certificateToDecode) {\n /**\n * Prevent Stencil warning about re-render\n */\n setTimeout(() => this.decode(this.certificateToDecode), 100);\n }\n }\n\n private handleClickDecode = () => {\n const { value } = this.inputPaste;\n\n if (value) {\n this.decode(value);\n }\n };\n\n private handleClickClear = () => {\n this.clearValue();\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private handleChangeInputFile = async (event: any) => {\n const element = event.target;\n\n if (element.files) {\n const file = await readAsBinaryString(element.files[0]);\n\n if (typeof file.value === 'string') {\n this.decode(file.value);\n }\n\n element.value = '';\n }\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private handleChangeExample = (event: any) => {\n if (event.target.value) {\n this.decode(event.target.value);\n } else {\n this.clearValue();\n }\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private handleDropFile = async (event: any) => {\n event.stopPropagation();\n event.preventDefault();\n\n const element = event.dataTransfer;\n\n if (element.files) {\n const file = await readAsBinaryString(element.files[0]);\n\n if (typeof file.value === 'string') {\n this.decode(file.value);\n }\n }\n };\n\n clearValue() {\n this.inputPaste.value = '';\n this.certificateDecoded = null;\n this.clearCertificate.emit();\n }\n\n async setValue(value: typeof this.certificateDecoded) {\n this.certificateDecoded = value;\n\n this.inputPaste.value = await value.toString('pem');\n this.successParse.emit(await value.toString('base64url'));\n }\n\n async decode(value: string) {\n new Promise<X509Certificates>((resolve) => {\n resolve(new X509Certificates(value));\n })\n .catch(() => new X509Certificate(value))\n .catch(() => new X509AttributeCertificate(value))\n .catch(() => new Pkcs10CertificateRequest(value))\n .catch(() => new X509Crl(value))\n .catch(() => new SshCertificate(value))\n .then((res: typeof this.certificateDecoded) => this.setValue(res))\n .catch((error) => {\n console.log(error);\n\n alert(`Error decoding certificate:\\n\"${value}\"\\n\\nPlease try to use Certificate/AttributeCertificate/CertificateRequest/CRL.`);\n });\n }\n\n renderCertificate() {\n if (this.certificateDecoded instanceof X509Certificates) {\n return (\n <peculiar-certificate-chain-viewer\n certificates={this.certificateDecoded}\n download\n />\n );\n }\n\n if (this.certificateDecoded instanceof X509Certificate) {\n return (\n <peculiar-certificate-viewer\n certificate={this.certificateDecoded}\n download\n />\n );\n }\n\n if (this.certificateDecoded instanceof X509AttributeCertificate) {\n return (\n <peculiar-attribute-certificate-viewer\n certificate={this.certificateDecoded}\n download\n />\n );\n }\n\n if (this.certificateDecoded instanceof Pkcs10CertificateRequest) {\n return (\n <peculiar-csr-viewer\n certificate={this.certificateDecoded}\n download\n />\n );\n }\n\n if (this.certificateDecoded instanceof X509Crl) {\n return (\n <peculiar-crl-viewer\n certificate={this.certificateDecoded}\n download\n />\n );\n }\n\n if (this.certificateDecoded instanceof SshCertificate) {\n return (\n <peculiar-ssh-certificate-viewer\n certificate={this.certificateDecoded}\n download\n />\n );\n }\n\n return null;\n }\n\n render() {\n return (\n <Host>\n <textarea\n placeholder=\"Certificate DER or PEM\"\n class=\"textarea t-b2 c-black\"\n ref={(el) => { this.inputPaste = el; }}\n onDrop={this.handleDropFile}\n />\n <div class=\"controls\">\n <div class=\"control_row\">\n <Typography\n variant=\"b3\"\n color=\"secondary-tint-2\"\n >\n Drag or load file:\n </Typography>\n <input\n type=\"file\"\n accept=\"application/pkix-cert,application/x-x509-ca-cert,application/x-x509-user-cert,application/pkcs10,application/pkix-crl,.csr,.req,.crl,.pub\"\n value=\"\"\n onChange={this.handleChangeInputFile}\n />\n </div>\n {this.certificateExamples?.length && (\n <div class=\"control_row\">\n <Typography\n variant=\"b3\"\n color=\"secondary-tint-2\"\n >\n Load examples:\n </Typography>\n <select onChange={this.handleChangeExample}>\n <option value=\"\">None</option>\n {this.certificateExamples.map((example) => (\n <option value={example.value}>\n {example.title}\n </option>\n ))}\n </select>\n </div>\n )}\n <div class=\"control_row\">\n <Button\n onClick={this.handleClickDecode}\n >\n Decode\n </Button>\n <Button\n onClick={this.handleClickClear}\n >\n Clear\n </Button>\n </div>\n </div>\n {this.renderCertificate()}\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|