diff options
Diffstat (limited to 'src/components/CertificateInfoRow.vue')
-rw-r--r-- | src/components/CertificateInfoRow.vue | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/src/components/CertificateInfoRow.vue b/src/components/CertificateInfoRow.vue new file mode 100644 index 0000000..8a4a875 --- /dev/null +++ b/src/components/CertificateInfoRow.vue @@ -0,0 +1,129 @@ +<template> + <div> + <div class="d-flex flex-row align-items-center p-1 overflow-hidden"> + <div class="m-3 ps-3"> + <div class="cert-icon"> + <font-awesome-icon icon="file" /> + <font-awesome-icon class="award-icon" icon="award" /> + </div> + </div> + <div class="m-3"> + <table class="text-start"> + <tbody> + <tr class="my-3"> + <td class="px-3">{{ $t("Subject:") }}</td> + <td>{{ formatSubject(cert.subject) }}</td> + </tr> + <tr class="my-3"> + <td class="px-3">{{ $t("Valid To:") }}</td> + <td><Datetime :value="cert.validTo" /></td> + </tr> + <tr class="my-3"> + <td class="px-3">{{ $t("Days Remaining:") }}</td> + <td>{{ cert.daysRemaining }}</td> + </tr> + <tr class="my-3"> + <td class="px-3">{{ $t("Issuer:") }}</td> + <td>{{ formatSubject(cert.issuer) }}</td> + </tr> + <tr class="my-3"> + <td class="px-3">{{ $t("Fingerprint:") }}</td> + <td>{{ cert.fingerprint }}</td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="d-flex"> + <font-awesome-icon + v-if="cert.issuerCertificate" + class="m-2 ps-6 link-icon" + icon="link" + /> + </div> + <certificate-info-row + v-if="cert.issuerCertificate" + :cert="cert.issuerCertificate" + /> + </div> +</template> + +<script> +import Datetime from "../components/Datetime.vue"; +export default { + name: "CertificateInfoRow", + components: { + Datetime, + }, + props: { + /** Object representing certificate */ + cert: { + type: Object, + required: true, + }, + }, + methods: { + /** + * Format the subject of the certificate + * @param {object} subject Object representing the certificates + * subject + * @returns {string} Certificate subject + */ + formatSubject(subject) { + if (subject.O && subject.CN && subject.C) { + return `${subject.CN} - ${subject.O} (${subject.C})`; + } else if (subject.O && subject.CN) { + return `${subject.CN} - ${subject.O}`; + } else if (subject.CN) { + return subject.CN; + } else { + return "no info"; + } + }, + }, +}; +</script> + +<style lang="scss" scoped> +@import "../assets/vars.scss"; + +table { + overflow: hidden; +} + +.cert-icon { + position: relative; + font-size: 70px; + color: $link-color; + opacity: 0.5; + + .dark & { + color: $dark-font-color; + opacity: 0.3; + } +} + +.award-icon { + position: absolute; + font-size: 0.5em; + bottom: 20%; + left: 12%; + color: white; + + .dark & { + color: $dark-bg; + } +} + +.link-icon { + font-size: 20px; + margin-left: 50px !important; + color: $link-color; + opacity: 0.5; + + .dark & { + color: $dark-font-color; + opacity: 0.3; + } +} +</style> |