@samitouri / QOSami-HFS / commits / 0bf18660

acme: support case with non-80 internal and 80 external

Massimo Melina committed Sep 18, 2023 at 10:24 UTC 0bf1866063db5e34c89049efbe813b45c2c8c428
1 file changed +8 -6
src/api.net.ts
+8 -6
@@ -115,16 +115,18 @@ async function checkDomain(domain: string) {
115 async function generateSSLCert(domain: string, email?: string) {
116 await checkDomain(domain)
117 // will answer challenge through our koa app (if on port 80) or must we spawn a dedicated server?
118 + const { upnp, externalPort } = await getNatInfo()
119 const { http } = await getServerStatus()
119 - const tempSrv = http.listening && http.port === 80 ? undefined : createServer(acmeListener)
120 + const tempSrv = externalPort === 80 || http.listening && http.port === 80 ? undefined : createServer(acmeListener)
121 if (tempSrv)
121 - await new Promise<void>((resolve, reject) =>
122 - tempSrv.listen(80, resolve).on('error', (e: any) => reject(e.code || e)) )
123 - else
124 - acmeMiddlewareEnabled = true
122 + await new Promise<void>((resolve) =>
123 + tempSrv.listen(80, resolve).on('error', (e: any) => {
124 + console.debug("cannot listen on 80", e.code || e)
125 + resolve() // go on anyway
126 + }) )
127 + acmeMiddlewareEnabled = true
128 console.debug('acme challenge server ready')
129 try {
127 - const { upnp, externalPort } = await getNatInfo() // do this before stopping the server
130 let check = await checkPort(domain, 80) // some check services may not consider the domain, but we already verified that
131 if (check && !check.success && upnp && externalPort !== 80) { // consider a short-lived mapping
132 // @ts-ignore