From 374e65c6798cc1f619773d4ef842a0afee686fae Mon Sep 17 00:00:00 2001 From: Johannes Grumboeck Date: Sun, 23 Oct 2022 22:14:17 +0200 Subject: [PATCH] feat: own function for certificate expiration Signed-off-by: Johannes Grumboeck --- .../src/service/lib/hostFactory.ts | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/packages/backend-common/src/service/lib/hostFactory.ts b/packages/backend-common/src/service/lib/hostFactory.ts index ecd214814d..b725b5e648 100644 --- a/packages/backend-common/src/service/lib/hostFactory.ts +++ b/packages/backend-common/src/service/lib/hostFactory.ts @@ -83,6 +83,17 @@ export async function createHttpsServer( return https.createServer(credentials, app) as http.Server; } +function getCertificateExpiration(cert: string, logger?: Logger) { + try { + const crt = forge.pki.certificateFromPem(cert); + const crtTimestamp = Date.parse(crt.validity.notAfter.toString()); + return crtTimestamp - Date.now(); + } catch (error) { + logger?.warn(`Unable to parse self-signed certificate. ${error}`); + return 0; + } +} + async function getGeneratedCertificate(hostname: string, logger?: Logger) { const hasModules = await fs.pathExists('node_modules'); let certPath; @@ -95,25 +106,14 @@ async function getGeneratedCertificate(hostname: string, logger?: Logger) { certPath = resolvePath('.dev-cert.pem'); } - let cert = undefined; + let cert = undefined let remainingMs = 0; if (await fs.pathExists(certPath)) { cert = await fs.readFile(certPath); - try { - const crt = forge.pki.certificateFromPem(cert.toString()); - const crtTimestamp = Date.parse(crt.validity.notAfter.toString()); - remainingMs = crtTimestamp - Date.now(); - } catch (error) { - logger?.warn(`Unable to parse self-signed certificate. ${error}`); - remainingMs = 0; - } - if (remainingMs < FIVE_DAYS_IN_MS) { - // Reset certificate if expiration is nearly over - cert = undefined; - } + remainingMs = getCertificateExpiration(cert.toString(), logger); } - if (cert) { + if (cert && remainingMs > FIVE_DAYS_IN_MS) { logger?.info('Using existing self-signed certificate'); return { key: cert,