admin/home: report certificate renewing errors
Massimo Melina committed
Oct 6, 2024 at 11:02 UTC
9cdbd4b3f011580eab7a77a091fd3b7b950a3100
3 files changed
+6
-1
admin/src/HomePage.ts
+1
@@ -60,6 +60,7 @@ export default function HomePage() {
60
_.map(serverErrors, (v,k) => k + " " + (v ? "is in error" : "is off")).join(', '),
61
!errors.length && [ SOLUTION_SEP, cfgLink("switch http or https on") ]
62
),
63
+ with_(status.acmeRenewError, x => x && entry('warning', x)),
64
plugins.find(x => x.badApi) && entry('warning', "Some plugins may be incompatible"),
65
!cfg.data?.split_uploads && (Date.now() - Number(status.cloudflareDetected || 0)) < DAY
66
&& entry('', wikiLink('Reverse-proxy#cloudflare', "Cloudflare detected, read our guide")),
src/acme.ts
+3
-1
@@ -106,8 +106,10 @@ export const makeCert = debounceAsync(async (domain: string, email?: string, alt
106
await fs.writeFile(KEY_FILE, res.key)
107
cert.set(CERT_FILE) // update config
108
privateKey.set(KEY_FILE)
109
+ acmeRenewError = ''
110
})
111
112
+export let acmeRenewError = ''
113
const acmeDomain = defineConfig('acme_domain', '')
114
const acmeEmail = defineConfig('acme_email', '')
115
const acmeRenew = defineConfig('acme_renew', false) // handle config changes
@@ -125,6 +127,6 @@ const renewCert = debounceAsync(async () => {
127
if (now > new Date(cert.validFrom) && now < validTo && validTo.getTime() - now.getTime() >= 30 * DAY)
128
return console.log("certificate still good")
129
await makeCert(domain, acmeEmail.get(), altNames)
128
- .catch(e => console.log(`error renewing certificate, expiring ${validTo.toLocaleDateString()}:`, String(e.message || e)))
130
+ .catch(e => console.log(acmeRenewError = `Error renewing certificate, expiring ${validTo.toLocaleDateString()}: ${String(e.message || e)}`))
131
}, { retain: DAY, retainFailure: HOUR })
132
src/adminApis.ts
+2
@@ -38,6 +38,7 @@ import { SendListReadable } from './SendList'
38
import { get_dynamic_dns_error } from './ddns'
39
import { addBlock, BlockingRule } from './block'
40
import { alerts, getProjectInfo } from './github'
41
+import { acmeRenewError } from './acme'
42
43
export const adminApis = {
44
@@ -130,6 +131,7 @@ export const adminApis = {
131
proxyDetected: getProxyDetected(),
132
cloudflareDetected,
133
ram: process.memoryUsage.rss(),
134
+ acmeRenewError,
135
frpDetected: localhostAdmin.get() && !getProxyDetected()
136
&& getConnections().every(isLocalHost)
137
&& await frpDebounced(),