From 68587c3c8b140704d4f26ed67bfd300f7b638cd5 Mon Sep 17 00:00:00 2001 From: Mauricio Siu Date: Sat, 31 Jan 2026 01:04:22 -0600 Subject: [PATCH] Add SSO Provider Integration: Introduce getSSOProviders function to fetch SSO provider details from the database. Update authentication logic to include SSO domains in the server settings, enhancing SSO functionality and user experience. --- packages/server/src/index.ts | 1 + packages/server/src/lib/auth.ts | 6 +++++- packages/server/src/services/proprietary/sso.tsx | 15 +++++++++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 packages/server/src/services/proprietary/sso.tsx diff --git a/packages/server/src/index.ts b/packages/server/src/index.ts index d5599a4eb..7bfc5553b 100644 --- a/packages/server/src/index.ts +++ b/packages/server/src/index.ts @@ -31,6 +31,7 @@ export * from "./services/port"; export * from "./services/postgres"; export * from "./services/preview-deployment"; export * from "./services/project"; +export * from "./services/proprietary/sso"; export * from "./services/redirect"; export * from "./services/redis"; export * from "./services/registry"; diff --git a/packages/server/src/lib/auth.ts b/packages/server/src/lib/auth.ts index b1e59ff2d..4db295da5 100644 --- a/packages/server/src/lib/auth.ts +++ b/packages/server/src/lib/auth.ts @@ -10,6 +10,7 @@ import { IS_CLOUD } from "../constants"; import { db } from "../db"; import * as schema from "../db/schema"; import { getUserByToken } from "../services/admin"; +import { getSSOProviders } from "../services/proprietary/sso"; import { getWebServerSettings, updateWebServerSettings, @@ -43,14 +44,17 @@ export const { handler, api } = betterAuth({ if (!settings) { return []; } + + const providers = await getSSOProviders(); + const domains = providers.map((provider) => provider.issuer); return [ ...(settings?.serverIp ? [`http://${settings?.serverIp}:3000`] : []), ...(settings?.host ? [`https://${settings?.host}`] : []), + ...domains.map((domain) => domain), ...(process.env.NODE_ENV === "development" ? [ "http://localhost:3000", "https://absolutely-handy-falcon.ngrok-free.app", - "https://keycloak.vesperfit.com", ] : []), ]; diff --git a/packages/server/src/services/proprietary/sso.tsx b/packages/server/src/services/proprietary/sso.tsx new file mode 100644 index 000000000..cc8d40394 --- /dev/null +++ b/packages/server/src/services/proprietary/sso.tsx @@ -0,0 +1,15 @@ +import { db } from "@dokploy/server/db"; + +export const getSSOProviders = async () => { + const providers = await db.query.ssoProvider.findMany({ + columns: { + id: true, + providerId: true, + issuer: true, + domain: true, + oidcConfig: true, + samlConfig: true, + }, + }); + return providers; +};