mirror of
https://github.com/Dokploy/dokploy.git
synced 2026-10-19 07:01:35 +00:00
feat(log-management): add organization validation for log providers and servers
This commit is contained in:
@@ -1,9 +1,10 @@
|
||||
import {
|
||||
assertLogProvidersBelongToOrg,
|
||||
assertServerBelongsToOrg,
|
||||
claimWebServerLogManagement,
|
||||
createLogProvider,
|
||||
findLogProviderById,
|
||||
findLogProvidersByOrganization,
|
||||
findServerById,
|
||||
getLogManagementServerStatus,
|
||||
logProviderAdapters,
|
||||
removeLogProvider,
|
||||
@@ -26,44 +27,6 @@ import {
|
||||
} from "@/server/db/schema";
|
||||
import { createTRPCRouter, protectedProcedure, withPermission } from "../trpc";
|
||||
|
||||
const assertServerBelongsToOrg = async (
|
||||
serverId: string | undefined,
|
||||
organizationId: string,
|
||||
) => {
|
||||
if (!serverId) return;
|
||||
const server = await findServerById(serverId);
|
||||
if (server.organizationId !== organizationId) {
|
||||
throw new TRPCError({
|
||||
code: "UNAUTHORIZED",
|
||||
message: "You are not authorized to access this server",
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
const assertLogProvidersBelongToOrg = async (
|
||||
logProviderIds: string[],
|
||||
organizationId: string,
|
||||
) => {
|
||||
const providers = await findLogProvidersByOrganization(organizationId);
|
||||
const byId = new Map(providers.map((p) => [p.logProviderId, p]));
|
||||
for (const id of logProviderIds) {
|
||||
if (!byId.has(id)) {
|
||||
throw new TRPCError({
|
||||
code: "UNAUTHORIZED",
|
||||
message:
|
||||
"One of the selected log providers is not in this organization",
|
||||
});
|
||||
}
|
||||
}
|
||||
if (!logProviderIds.some((id) => byId.get(id)?.enabled)) {
|
||||
throw new TRPCError({
|
||||
code: "BAD_REQUEST",
|
||||
message:
|
||||
"Select at least one enabled log provider — a disabled one ships nothing.",
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
export const logProviderRouter = createTRPCRouter({
|
||||
create: withPermission("logProvider", "create")
|
||||
.input(apiCreateLogProvider)
|
||||
|
||||
@@ -3,6 +3,7 @@ import {
|
||||
type apiCreateLogProvider,
|
||||
logProvider,
|
||||
} from "@dokploy/server/db/schema";
|
||||
import { findServerById } from "@dokploy/server/services/server";
|
||||
import { TRPCError } from "@trpc/server";
|
||||
import { and, eq } from "drizzle-orm";
|
||||
import type { z } from "zod";
|
||||
@@ -267,3 +268,41 @@ export const sanitizeLogProvider = <
|
||||
const { endpoint, apiKey, apiSecret, ...rest } = provider;
|
||||
return rest;
|
||||
};
|
||||
|
||||
export const assertServerBelongsToOrg = async (
|
||||
serverId: string | undefined,
|
||||
organizationId: string,
|
||||
) => {
|
||||
if (!serverId) return;
|
||||
const server = await findServerById(serverId);
|
||||
if (server.organizationId !== organizationId) {
|
||||
throw new TRPCError({
|
||||
code: "UNAUTHORIZED",
|
||||
message: "You are not authorized to access this server",
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
export const assertLogProvidersBelongToOrg = async (
|
||||
logProviderIds: string[],
|
||||
organizationId: string,
|
||||
) => {
|
||||
const providers = await findLogProvidersByOrganization(organizationId);
|
||||
const byId = new Map(providers.map((p) => [p.logProviderId, p]));
|
||||
for (const id of logProviderIds) {
|
||||
if (!byId.has(id)) {
|
||||
throw new TRPCError({
|
||||
code: "UNAUTHORIZED",
|
||||
message:
|
||||
"One of the selected log providers is not in this organization",
|
||||
});
|
||||
}
|
||||
}
|
||||
if (!logProviderIds.some((id) => byId.get(id)?.enabled)) {
|
||||
throw new TRPCError({
|
||||
code: "BAD_REQUEST",
|
||||
message:
|
||||
"Select at least one enabled log provider — a disabled one ships nothing.",
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user