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