diff --git a/packages/server/src/services/security.ts b/packages/server/src/services/security.ts index d6947b8876..398cf8227b 100644 --- a/packages/server/src/services/security.ts +++ b/packages/server/src/services/security.ts @@ -1,8 +1,8 @@ import { db } from "@dokploy/server/db"; import { type apiCreateSecurity, security } from "@dokploy/server/db/schema"; import { - createSecurityMiddleware, removeSecurityMiddleware, + updateSecurityMiddleware, } from "@dokploy/server/utils/traefik/security"; import { TRPCError } from "@trpc/server"; import { eq } from "drizzle-orm"; @@ -44,7 +44,7 @@ export const createSecurity = async ( message: "Error creating the security", }); } - await createSecurityMiddleware(application, securityResponse); + await updateSecurityMiddleware(application, securityResponse); return true; }); } catch (error) { @@ -90,15 +90,29 @@ export const updateSecurityById = async ( data: Partial, ) => { try { - const response = await db - .update(security) - .set({ - ...data, - }) - .where(eq(security.securityId, securityId)) - .returning(); + await db.transaction(async (tx) => { + const result = await tx + .update(security) + .set({ + ...data, + }) + .where(eq(security.securityId, securityId)) + .returning() + .then((res) => res[0]); - return response[0]; + if (!result) { + throw new TRPCError({ + code: "NOT_FOUND", + message: "Security not found", + }); + } + + const application = await findApplicationById(result.applicationId); + + await updateSecurityMiddleware(application, result); + + return result; + }); } catch (error) { const message = error instanceof Error ? error.message : "Error updating this security"; diff --git a/packages/server/src/utils/traefik/security.ts b/packages/server/src/utils/traefik/security.ts index 2ded82356d..5f78c80bef 100644 --- a/packages/server/src/utils/traefik/security.ts +++ b/packages/server/src/utils/traefik/security.ts @@ -20,7 +20,7 @@ import { writeMiddleware, } from "./middleware"; -export const createSecurityMiddleware = async ( +export const updateSecurityMiddleware = async ( application: ApplicationNested, data: Security, ) => { @@ -39,10 +39,12 @@ export const createSecurityMiddleware = async ( if (config.http?.middlewares) { const currentMiddleware = config.http.middlewares[middlewareName]; if (isBasicAuthMiddleware(currentMiddleware)) { - currentMiddleware.basicAuth.users = [ - ...(currentMiddleware.basicAuth.users || []), - user, - ]; + const users = currentMiddleware.basicAuth.users; + const filteredUsers = users?.filter((user) => { + const [username] = user.split(":"); + return username !== data.username; + }); + currentMiddleware.basicAuth.users = [...(filteredUsers || []), user]; } else { config.http.middlewares[middlewareName] = { basicAuth: {