mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-09-22 13:39:35 +00:00
feat(infisical-pg): completed saml integration
This commit is contained in:
10
backend-pg/package-lock.json
generated
10
backend-pg/package-lock.json
generated
@@ -13,6 +13,7 @@
|
|||||||
"@casl/ability": "^6.5.0",
|
"@casl/ability": "^6.5.0",
|
||||||
"@fastify/cookie": "^9.2.0",
|
"@fastify/cookie": "^9.2.0",
|
||||||
"@fastify/cors": "^8.4.1",
|
"@fastify/cors": "^8.4.1",
|
||||||
|
"@fastify/formbody": "^7.4.0",
|
||||||
"@fastify/helmet": "^11.1.1",
|
"@fastify/helmet": "^11.1.1",
|
||||||
"@fastify/passport": "^2.4.0",
|
"@fastify/passport": "^2.4.0",
|
||||||
"@fastify/rate-limit": "^9.0.0",
|
"@fastify/rate-limit": "^9.0.0",
|
||||||
@@ -1205,6 +1206,15 @@
|
|||||||
"fastify-plugin": "^4.0.0"
|
"fastify-plugin": "^4.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@fastify/formbody": {
|
||||||
|
"version": "7.4.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@fastify/formbody/-/formbody-7.4.0.tgz",
|
||||||
|
"integrity": "sha512-H3C6h1GN56/SMrZS8N2vCT2cZr7mIHzBHzOBa5OPpjfB/D6FzP9mMpE02ZzrFX0ANeh0BAJdoXKOF2e7IbV+Og==",
|
||||||
|
"dependencies": {
|
||||||
|
"fast-querystring": "^1.0.0",
|
||||||
|
"fastify-plugin": "^4.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@fastify/helmet": {
|
"node_modules/@fastify/helmet": {
|
||||||
"version": "11.1.1",
|
"version": "11.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/@fastify/helmet/-/helmet-11.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/@fastify/helmet/-/helmet-11.1.1.tgz",
|
||||||
|
|||||||
@@ -69,6 +69,7 @@
|
|||||||
"@casl/ability": "^6.5.0",
|
"@casl/ability": "^6.5.0",
|
||||||
"@fastify/cookie": "^9.2.0",
|
"@fastify/cookie": "^9.2.0",
|
||||||
"@fastify/cors": "^8.4.1",
|
"@fastify/cors": "^8.4.1",
|
||||||
|
"@fastify/formbody": "^7.4.0",
|
||||||
"@fastify/helmet": "^11.1.1",
|
"@fastify/helmet": "^11.1.1",
|
||||||
"@fastify/passport": "^2.4.0",
|
"@fastify/passport": "^2.4.0",
|
||||||
"@fastify/rate-limit": "^9.0.0",
|
"@fastify/rate-limit": "^9.0.0",
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ export async function up(knex: Knex): Promise<void> {
|
|||||||
t.string("encryptedIssuer");
|
t.string("encryptedIssuer");
|
||||||
t.string("issuerTag");
|
t.string("issuerTag");
|
||||||
t.string("issuerIV");
|
t.string("issuerIV");
|
||||||
t.string("encryptedCert");
|
t.text("encryptedCert");
|
||||||
t.string("certIV");
|
t.string("certIV");
|
||||||
t.string("certTag");
|
t.string("certTag");
|
||||||
t.timestamps(true, true, true);
|
t.timestamps(true, true, true);
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import { Authenticator } from "@fastify/passport";
|
import { Authenticator } from "@fastify/passport";
|
||||||
import fastifySession from "@fastify/session";
|
import fastifySession from "@fastify/session";
|
||||||
import { MultiSamlStrategy } from "@node-saml/passport-saml";
|
import { MultiSamlStrategy } from "@node-saml/passport-saml";
|
||||||
|
import { FastifyRequest } from "fastify";
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
|
|
||||||
import { SamlConfigsSchema } from "@app/db/schemas";
|
import { SamlConfigsSchema } from "@app/db/schemas";
|
||||||
@@ -55,13 +56,11 @@ export const registerSamlRouter = async (server: FastifyZodProvider) => {
|
|||||||
samlConfig.audience = `spn:${ssoConfig.issuer}`;
|
samlConfig.audience = `spn:${ssoConfig.issuer}`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
req.ssoConfig = ssoConfig;
|
(req as unknown as FastifyRequest).ssoConfig = ssoConfig;
|
||||||
done(null, samlConfig);
|
done(null, samlConfig);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
async (req, profile, cb) => {
|
async (req, profile, cb) => {
|
||||||
console.log(req.ssoConfig);
|
|
||||||
console.log(profile);
|
|
||||||
try {
|
try {
|
||||||
const serverCfg = server.services.superAdmin.getServerCfg();
|
const serverCfg = server.services.superAdmin.getServerCfg();
|
||||||
if (!profile) throw new BadRequestError({ message: "Missing profile" });
|
if (!profile) throw new BadRequestError({ message: "Missing profile" });
|
||||||
@@ -75,8 +74,8 @@ export const registerSamlRouter = async (server: FastifyZodProvider) => {
|
|||||||
lastName: profile.lastName as string,
|
lastName: profile.lastName as string,
|
||||||
isSignupAllowed: Boolean(serverCfg.allowSignUp),
|
isSignupAllowed: Boolean(serverCfg.allowSignUp),
|
||||||
relayState: (req.body as { RelayState?: string }).RelayState,
|
relayState: (req.body as { RelayState?: string }).RelayState,
|
||||||
authProvider: req.ssoConfig.authProvider,
|
authProvider: (req as unknown as FastifyRequest).ssoConfig?.authProvider as string,
|
||||||
orgId: req.ssoConfig.orgId
|
orgId: (req as unknown as FastifyRequest).ssoConfig?.orgId as string
|
||||||
});
|
});
|
||||||
cb(null, { isUserCompleted, providerAuthToken });
|
cb(null, { isUserCompleted, providerAuthToken });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@@ -115,7 +114,7 @@ export const registerSamlRouter = async (server: FastifyZodProvider) => {
|
|||||||
|
|
||||||
server.route({
|
server.route({
|
||||||
url: "/saml2/:ssoIdentifier",
|
url: "/saml2/:ssoIdentifier",
|
||||||
method: "GET",
|
method: "POST",
|
||||||
schema: {
|
schema: {
|
||||||
params: z.object({
|
params: z.object({
|
||||||
ssoIdentifier: z.string().trim()
|
ssoIdentifier: z.string().trim()
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import type { FastifyCookieOptions } from "@fastify/cookie";
|
|||||||
import cookie from "@fastify/cookie";
|
import cookie from "@fastify/cookie";
|
||||||
import type { FastifyCorsOptions } from "@fastify/cors";
|
import type { FastifyCorsOptions } from "@fastify/cors";
|
||||||
import cors from "@fastify/cors";
|
import cors from "@fastify/cors";
|
||||||
|
import fastifyFormBody from "@fastify/formbody";
|
||||||
import helmet from "@fastify/helmet";
|
import helmet from "@fastify/helmet";
|
||||||
import type { FastifyRateLimitOptions } from "@fastify/rate-limit";
|
import type { FastifyRateLimitOptions } from "@fastify/rate-limit";
|
||||||
import ratelimiter from "@fastify/rate-limit";
|
import ratelimiter from "@fastify/rate-limit";
|
||||||
@@ -51,6 +52,7 @@ export const main = async ({ db, smtp, logger, queue }: TMain) => {
|
|||||||
await server.register(fastifyIp);
|
await server.register(fastifyIp);
|
||||||
|
|
||||||
await server.register(fastifySwagger);
|
await server.register(fastifySwagger);
|
||||||
|
await server.register(fastifyFormBody);
|
||||||
|
|
||||||
// Rate limiters and security headers
|
// Rate limiters and security headers
|
||||||
await server.register<FastifyRateLimitOptions>(ratelimiter, globalRateLimiterCfg);
|
await server.register<FastifyRateLimitOptions>(ratelimiter, globalRateLimiterCfg);
|
||||||
|
|||||||
@@ -113,7 +113,6 @@ export const secretQueueFactory = ({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
console.log(secrets.filter(({ type }) => type === "personal"));
|
|
||||||
secrets.forEach((secret) => {
|
secrets.forEach((secret) => {
|
||||||
const secretKey = decryptSymmetric128BitHexKeyUTF8({
|
const secretKey = decryptSymmetric128BitHexKeyUTF8({
|
||||||
ciphertext: secret.secretKeyCiphertext,
|
ciphertext: secret.secretKeyCiphertext,
|
||||||
|
|||||||
Reference in New Issue
Block a user