mirror of
https://github.com/fosrl/pangolin.git
synced 2026-08-13 07:50:22 +02:00
Split out the token header into a common middleware for efficiency
This commit is contained in:
@@ -752,6 +752,21 @@ export async function getTraefikConfig(
|
||||
aiGatewayHost = undefined;
|
||||
}
|
||||
|
||||
// The trust header is the same for every inference route on this
|
||||
// exit node, so it's defined once here and attached to each router
|
||||
// below instead of being duplicated into a per-resource middleware.
|
||||
const aiGatewayTrustMiddlewareName = "ai-gateway-trust-headers";
|
||||
if (!config_output.http.middlewares) {
|
||||
config_output.http.middlewares = {};
|
||||
}
|
||||
config_output.http.middlewares[aiGatewayTrustMiddlewareName] = {
|
||||
headers: {
|
||||
customRequestHeaders: {
|
||||
[AI_GATEWAY_TRUST_HEADER]: getAiGatewayTrustToken()
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// Public inference resources: same TLS/cert-resolver handling as
|
||||
// plain http-mode resources, but the service points at the AI
|
||||
// gateway instead of any real backend targets.
|
||||
@@ -812,8 +827,7 @@ export async function getTraefikConfig(
|
||||
headers: {
|
||||
customRequestHeaders: {
|
||||
...(aiGatewayHost ? { Host: aiGatewayHost } : {}),
|
||||
"p-host": fullDomain,
|
||||
[AI_GATEWAY_TRUST_HEADER]: getAiGatewayTrustToken()
|
||||
"p-host": fullDomain
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -822,6 +836,7 @@ export async function getTraefikConfig(
|
||||
config.getRawConfig().traefik.additional_middlewares || [];
|
||||
const routerMiddlewares = [
|
||||
badgerMiddlewareName,
|
||||
aiGatewayTrustMiddlewareName,
|
||||
irHeadersMiddlewareName,
|
||||
...additionalMiddlewares
|
||||
];
|
||||
@@ -916,8 +931,7 @@ export async function getTraefikConfig(
|
||||
headers: {
|
||||
customRequestHeaders: {
|
||||
...(aiGatewayHost ? { Host: aiGatewayHost } : {}),
|
||||
"p-host": fullDomain,
|
||||
[AI_GATEWAY_TRUST_HEADER]: getAiGatewayTrustToken()
|
||||
"p-host": fullDomain
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -925,6 +939,7 @@ export async function getTraefikConfig(
|
||||
const additionalMiddlewares =
|
||||
config.getRawConfig().traefik.additional_middlewares || [];
|
||||
const routerMiddlewares = [
|
||||
aiGatewayTrustMiddlewareName,
|
||||
srHeadersMiddlewareName,
|
||||
...additionalMiddlewares
|
||||
];
|
||||
|
||||
@@ -1569,6 +1569,18 @@ export async function getTraefikConfig(
|
||||
const aiGatewayOverride =
|
||||
config.getRawConfig().server.ai_gateway_override;
|
||||
|
||||
// The trust header is the same for every inference route on this
|
||||
// exit node, so it's defined once here and attached to each router
|
||||
// below instead of being duplicated into a per-resource middleware.
|
||||
const aiGatewayTrustMiddlewareName = "ai-gateway-trust-headers";
|
||||
config_output.http.middlewares[aiGatewayTrustMiddlewareName] = {
|
||||
headers: {
|
||||
customRequestHeaders: {
|
||||
[AI_GATEWAY_TRUST_HEADER]: getAiGatewayTrustToken()
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// Public inference resources: same TLS/cert-resolver handling as
|
||||
// plain http-mode resources, but the service points at the AI
|
||||
// gateway instead of any real backend targets.
|
||||
@@ -1636,21 +1648,23 @@ export async function getTraefikConfig(
|
||||
|
||||
const additionalMiddlewares =
|
||||
config.getRawConfig().traefik.additional_middlewares || [];
|
||||
const routerMiddlewares = [badgerMiddlewareName];
|
||||
const routerMiddlewares = [
|
||||
badgerMiddlewareName,
|
||||
aiGatewayTrustMiddlewareName
|
||||
];
|
||||
|
||||
const irHeadersMiddlewareName = `${irKey}-headers-middleware`;
|
||||
config_output.http.middlewares[irHeadersMiddlewareName] = {
|
||||
headers: {
|
||||
customRequestHeaders: {
|
||||
...(aiGatewayOverride && aiGatewayHost
|
||||
? { Host: aiGatewayHost }
|
||||
: {}),
|
||||
...(aiGatewayOverride ? { "p-host": fullDomain } : {}),
|
||||
[AI_GATEWAY_TRUST_HEADER]: getAiGatewayTrustToken()
|
||||
if (aiGatewayOverride) {
|
||||
const irHeadersMiddlewareName = `${irKey}-headers-middleware`;
|
||||
config_output.http.middlewares[irHeadersMiddlewareName] = {
|
||||
headers: {
|
||||
customRequestHeaders: {
|
||||
...(aiGatewayHost ? { Host: aiGatewayHost } : {}),
|
||||
"p-host": fullDomain
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
routerMiddlewares.push(irHeadersMiddlewareName);
|
||||
};
|
||||
routerMiddlewares.push(irHeadersMiddlewareName);
|
||||
}
|
||||
|
||||
routerMiddlewares.push(...additionalMiddlewares);
|
||||
|
||||
@@ -1736,21 +1750,20 @@ export async function getTraefikConfig(
|
||||
|
||||
const additionalMiddlewares =
|
||||
config.getRawConfig().traefik.additional_middlewares || [];
|
||||
const routerMiddlewares: string[] = [];
|
||||
const routerMiddlewares: string[] = [aiGatewayTrustMiddlewareName];
|
||||
|
||||
const srHeadersMiddlewareName = `${srKey}-headers-middleware`;
|
||||
config_output.http.middlewares[srHeadersMiddlewareName] = {
|
||||
headers: {
|
||||
customRequestHeaders: {
|
||||
...(aiGatewayOverride && aiGatewayHost
|
||||
? { Host: aiGatewayHost }
|
||||
: {}),
|
||||
...(aiGatewayOverride ? { "p-host": fullDomain } : {}),
|
||||
[AI_GATEWAY_TRUST_HEADER]: getAiGatewayTrustToken()
|
||||
if (aiGatewayOverride) {
|
||||
const srHeadersMiddlewareName = `${srKey}-headers-middleware`;
|
||||
config_output.http.middlewares[srHeadersMiddlewareName] = {
|
||||
headers: {
|
||||
customRequestHeaders: {
|
||||
...(aiGatewayHost ? { Host: aiGatewayHost } : {}),
|
||||
"p-host": fullDomain
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
routerMiddlewares.push(srHeadersMiddlewareName);
|
||||
};
|
||||
routerMiddlewares.push(srHeadersMiddlewareName);
|
||||
}
|
||||
|
||||
routerMiddlewares.push(...additionalMiddlewares);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user