Browse Source

build traefik config for newt correctly

Milo Schwartz 8 months ago
parent
commit
658a6ca7bb
1 changed files with 27 additions and 9 deletions
  1. 27 9
      server/routers/traefik/getTraefikConfig.ts

+ 27 - 9
server/routers/traefik/getTraefikConfig.ts

@@ -22,6 +22,10 @@ export async function traefikConfigProvider(
                 schema.orgs,
                 schema.orgs,
                 eq(schema.resources.orgId, schema.orgs.orgId),
                 eq(schema.resources.orgId, schema.orgs.orgId),
             )
             )
+            .innerJoin(
+                schema.sites,
+                eq(schema.sites.siteId, schema.resources.siteId),
+            )
             .where(
             .where(
                 and(
                 and(
                     eq(schema.targets.enabled, true),
                     eq(schema.targets.enabled, true),
@@ -70,6 +74,7 @@ export async function traefikConfigProvider(
         for (const item of all) {
         for (const item of all) {
             const target = item.targets;
             const target = item.targets;
             const resource = item.resources;
             const resource = item.resources;
+            const site = item.sites;
             const org = item.orgs;
             const org = item.orgs;
 
 
             const routerName = `${target.targetId}-router`;
             const routerName = `${target.targetId}-router`;
@@ -128,15 +133,28 @@ export async function traefikConfigProvider(
                 };
                 };
             }
             }
 
 
-            http.services![serviceName] = {
-                loadBalancer: {
-                    servers: [
-                        {
-                            url: `${target.method}://${target.ip}:${target.port}`,
-                        },
-                    ],
-                },
-            };
+            if (site.type === "newt") {
+                const ip = site.subnet.split("/")[0];
+                http.services![serviceName] = {
+                    loadBalancer: {
+                        servers: [
+                            {
+                                url: `${target.method}://${ip}:${target.internalPort}`,
+                            },
+                        ],
+                    },
+                };
+            } else if (site.type === "wireguard") {
+                http.services![serviceName] = {
+                    loadBalancer: {
+                        servers: [
+                            {
+                                url: `${target.method}://${target.ip}:${target.port}`,
+                            },
+                        ],
+                    },
+                };
+            }
         }
         }
 
 
         return res.status(HttpCode.OK).json({ http });
         return res.status(HttpCode.OK).json({ http });