Louis Lam
3 years ago
committed by
GitHub
7 changed files with 256 additions and 104 deletions
@ -0,0 +1,52 @@ |
|||
<template> |
|||
<div> |
|||
<h4>{{ $t("Certificate Info") }}</h4> |
|||
{{ $t("Certificate Chain") }}: |
|||
<div |
|||
v-if="valid" |
|||
class="rounded d-inline-flex ms-2 text-white tag-valid" |
|||
> |
|||
{{ $t("Valid") }} |
|||
</div> |
|||
<div |
|||
v-if="!valid" |
|||
class="rounded d-inline-flex ms-2 text-white tag-invalid" |
|||
> |
|||
{{ $t("Invalid") }} |
|||
</div> |
|||
<certificate-info-row :cert="certInfo" /> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import CertificateInfoRow from "./CertificateInfoRow.vue"; |
|||
export default { |
|||
components: { |
|||
CertificateInfoRow, |
|||
}, |
|||
props: { |
|||
certInfo: { |
|||
type: Object, |
|||
required: true, |
|||
}, |
|||
valid: { |
|||
type: Boolean, |
|||
required: true, |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
@import "../assets/vars.scss"; |
|||
|
|||
.tag-valid { |
|||
padding: 2px 25px; |
|||
background-color: $primary; |
|||
} |
|||
|
|||
.tag-invalid { |
|||
padding: 2px 25px; |
|||
background-color: $danger; |
|||
} |
|||
</style> |
@ -0,0 +1,122 @@ |
|||
<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">Subject:</td> |
|||
<td>{{ formatSubject(cert.subject) }}</td> |
|||
</tr> |
|||
<tr class="my-3"> |
|||
<td class="px-3">Valid To:</td> |
|||
<td><Datetime :value="cert.validTo" /></td> |
|||
</tr> |
|||
<tr class="my-3"> |
|||
<td class="px-3">Days Remaining:</td> |
|||
<td>{{ cert.daysRemaining }}</td> |
|||
</tr> |
|||
<tr class="my-3"> |
|||
<td class="px-3">Issuer:</td> |
|||
<td>{{ formatSubject(cert.issuer) }}</td> |
|||
</tr> |
|||
<tr class="my-3"> |
|||
<td class="px-3">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: { |
|||
cert: { |
|||
type: Object, |
|||
required: true, |
|||
}, |
|||
}, |
|||
methods: { |
|||
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> |
Loading…
Reference in new issue