Browse Source

infer wild card cert if prefer flag is on

Milo Schwartz 9 months ago
parent
commit
e279d93570
2 changed files with 26 additions and 4 deletions
  1. 1 0
      server/config.ts
  2. 25 4
      server/routers/traefik/getTraefikConfig.ts

+ 1 - 0
server/config.ts

@@ -29,6 +29,7 @@ const environmentSchema = z.object({
         http_entrypoint: z.string(),
         https_entrypoint: z.string().optional(),
         cert_resolver: z.string().optional(),
+        prefer_wildcard_cert: z.boolean().optional(),
     }),
     gerbil: z.object({
         start_port: portSchema,

+ 25 - 4
server/routers/traefik/getTraefikConfig.ts

@@ -34,10 +34,6 @@ export async function traefikConfigProvider(
 
         // const baseDomain = new URL(config.app.base_url).hostname;
 
-        const tls = {
-            certResolver: config.traefik.cert_resolver,
-        };
-
         const http: any = {
             routers: {},
             services: {},
@@ -68,6 +64,31 @@ export async function traefikConfigProvider(
             const routerName = `${target.targetId}-router`;
             const serviceName = `${target.targetId}-service`;
 
+            if (!resource.fullDomain) {
+                continue;
+            }
+
+            const domainParts = resource.fullDomain.split(".");
+            let wildCard;
+            if (domainParts.length <= 2) {
+                wildCard = `*.${domainParts.join(".")}`;
+            } else {
+                wildCard = `*.${domainParts.slice(1).join(".")}`;
+            }
+
+            const tls = {
+                certResolver: config.traefik.cert_resolver,
+                ...(config.traefik.prefer_wildcard_cert
+                    ? {
+                          domains: [
+                              {
+                                  main: wildCard
+                              },
+                          ],
+                      }
+                    : {}),
+            };
+
             http.routers![routerName] = {
                 entryPoints: [
                     target.ssl