forked from vitejs/vite-plugin-basic-ssl
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcertificate-expiration.ts
More file actions
42 lines (37 loc) · 1.04 KB
/
certificate-expiration.ts
File metadata and controls
42 lines (37 loc) · 1.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import { X509Certificate } from 'node:crypto'
const MONTHS = [
'Jan',
'Feb',
'Mar',
'Apr',
'May',
'Jun',
'Jul',
'Aug',
'Sep',
'Oct',
'Nov',
'Dec',
]
export function isCertificateExpired(content: string): boolean {
const cert = new X509Certificate(content)
const expirationDate = getCertificateExpirationDate(cert)
return new Date() > expirationDate
}
function getCertificateExpirationDate(cert: X509Certificate): Date {
// validToDate is not available until node 22
if (cert.validToDate) {
return cert.validToDate
}
return parseNonStandardDateString(cert.validTo)
}
// validTo is a nonstandard format: %s %2d %02d:%02d:%02d %d%s GMT
// https://github.com/nodejs/node/issues/52931
export function parseNonStandardDateString(str: string): Date {
const [month, day, time, year] = str.split(' ').filter((part) => !!part)
// convert string month to number
const monthIndex = MONTHS.indexOf(month) + 1
return new Date(
`${year}-${monthIndex.toString().padStart(2, '0')}-${day.padStart(2, '0')}T${time}Z`,
)
}