add create idp wizard for oidc

This commit is contained in:
miloschwartz
2025-04-16 22:39:24 -04:00
parent 334fc55dd0
commit 189b739997
9 changed files with 834 additions and 36 deletions

View File

@@ -4,7 +4,9 @@ const ALGORITHM = "aes-256-gcm";
export function encrypt(value: string, key: string): string {
const iv = crypto.randomBytes(12);
const cipher = crypto.createCipheriv(ALGORITHM, key, iv);
const keyBuffer = Buffer.from(key, "base64"); // assuming base64 input
const cipher = crypto.createCipheriv(ALGORITHM, keyBuffer, iv);
const encrypted = Buffer.concat([
cipher.update(value, "utf8"),
@@ -25,8 +27,9 @@ export function decrypt(encryptedValue: string, key: string): string {
const iv = Buffer.from(ivB64, "base64");
const encrypted = Buffer.from(encryptedB64, "base64");
const authTag = Buffer.from(authTagB64, "base64");
const keyBuffer = Buffer.from(key, "base64");
const decipher = crypto.createDecipheriv(ALGORITHM, key, iv);
const decipher = crypto.createDecipheriv(ALGORITHM, keyBuffer, iv);
decipher.setAuthTag(authTag);
const decrypted = Buffer.concat([

View File

@@ -1,7 +1,7 @@
import { Request, Response, NextFunction } from "express";
import { z } from "zod";
import { db } from "@server/db";
import { domains, idp, orgDomains, users } from "@server/db/schemas";
import { domains, idp, orgDomains, users, idpOrg } from "@server/db/schemas";
import response from "@server/lib/response";
import HttpCode from "@server/types/HttpCode";
import createHttpError from "http-errors";
@@ -28,13 +28,33 @@ const querySchema = z
.strict();
async function query(limit: number, offset: number) {
const res = await db.select().from(orgDomains).limit(limit).offset(offset);
const res = await db
.select({
idpId: idp.idpId,
name: idp.name,
type: idp.type,
orgCount: sql<number>`count(${idpOrg.orgId})`
})
.from(idp)
.leftJoin(idpOrg, sql`${idp.idpId} = ${idpOrg.idpId}`)
.groupBy(idp.idpId)
.limit(limit)
.offset(offset);
return res;
}
export type ListIdpResponse = {
idps: NonNullable<Awaited<ReturnType<typeof query>>>;
pagination: { total: number; limit: number; offset: number };
export type ListIdpsResponse = {
idps: Array<{
idpId: number;
name: string;
type: string;
orgCount: number;
}>;
pagination: {
total: number;
limit: number;
offset: number;
};
};
registry.registerPath({
@@ -71,7 +91,7 @@ export async function listIdps(
.select({ count: sql<number>`count(*)` })
.from(idp);
return response<ListIdpResponse>(res, {
return response<ListIdpsResponse>(res, {
data: {
idps: list,
pagination: {
@@ -82,7 +102,7 @@ export async function listIdps(
},
success: true,
error: false,
message: "Users retrieved successfully",
message: "Idps retrieved successfully",
status: HttpCode.OK
});
} catch (error) {