feat(infisical-pg): completed saml integration

This commit is contained in:
Akhil Mohan
2024-01-10 23:27:15 +05:30
parent 55f1392faf
commit bfaf87c4c2
6 changed files with 19 additions and 8 deletions

View File

@@ -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",

View File

@@ -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",

View File

@@ -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);

View File

@@ -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()

View File

@@ -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);

View File

@@ -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,