mirror of
https://github.com/Dokploy/dokploy
synced 2025-06-26 18:27:59 +00:00
172 lines
5.4 KiB
TypeScript
172 lines
5.4 KiB
TypeScript
import { createTRPCRouter, protectedProcedure } from "@/server/api/trpc";
|
|
import {
|
|
apiCreateDomain,
|
|
apiFindCompose,
|
|
apiFindDomain,
|
|
apiFindOneApplication,
|
|
apiUpdateDomain,
|
|
} from "@/server/db/schema";
|
|
import {
|
|
createDomain,
|
|
findApplicationById,
|
|
findComposeById,
|
|
findDomainById,
|
|
findDomainsByApplicationId,
|
|
findDomainsByComposeId,
|
|
generateTraefikMeDomain,
|
|
manageDomain,
|
|
removeDomain,
|
|
removeDomainById,
|
|
updateDomainById,
|
|
} from "@dokploy/server";
|
|
import { TRPCError } from "@trpc/server";
|
|
import { z } from "zod";
|
|
|
|
export const domainRouter = createTRPCRouter({
|
|
create: protectedProcedure
|
|
.input(apiCreateDomain)
|
|
.mutation(async ({ input, ctx }) => {
|
|
try {
|
|
if (input.domainType === "compose" && input.composeId) {
|
|
const compose = await findComposeById(input.composeId);
|
|
if (compose.project.adminId !== ctx.user.adminId) {
|
|
throw new TRPCError({
|
|
code: "UNAUTHORIZED",
|
|
message: "You are not authorized to access this compose",
|
|
});
|
|
}
|
|
} else if (input.domainType === "application" && input.applicationId) {
|
|
const application = await findApplicationById(input.applicationId);
|
|
if (application.project.adminId !== ctx.user.adminId) {
|
|
throw new TRPCError({
|
|
code: "UNAUTHORIZED",
|
|
message: "You are not authorized to access this application",
|
|
});
|
|
}
|
|
}
|
|
return await createDomain(input);
|
|
} catch (error) {
|
|
throw new TRPCError({
|
|
code: "BAD_REQUEST",
|
|
message: "Error to create the domain",
|
|
cause: error,
|
|
});
|
|
}
|
|
}),
|
|
byApplicationId: protectedProcedure
|
|
.input(apiFindOneApplication)
|
|
.query(async ({ input, ctx }) => {
|
|
const application = await findApplicationById(input.applicationId);
|
|
if (application.project.adminId !== ctx.user.adminId) {
|
|
throw new TRPCError({
|
|
code: "UNAUTHORIZED",
|
|
message: "You are not authorized to access this application",
|
|
});
|
|
}
|
|
return await findDomainsByApplicationId(input.applicationId);
|
|
}),
|
|
byComposeId: protectedProcedure
|
|
.input(apiFindCompose)
|
|
.query(async ({ input, ctx }) => {
|
|
const compose = await findComposeById(input.composeId);
|
|
if (compose.project.adminId !== ctx.user.adminId) {
|
|
throw new TRPCError({
|
|
code: "UNAUTHORIZED",
|
|
message: "You are not authorized to access this compose",
|
|
});
|
|
}
|
|
return await findDomainsByComposeId(input.composeId);
|
|
}),
|
|
generateDomain: protectedProcedure
|
|
.input(z.object({ appName: z.string(), serverId: z.string().optional() }))
|
|
.mutation(async ({ input, ctx }) => {
|
|
return generateTraefikMeDomain(
|
|
input.appName,
|
|
ctx.user.adminId,
|
|
input.serverId,
|
|
);
|
|
}),
|
|
|
|
update: protectedProcedure
|
|
.input(apiUpdateDomain)
|
|
.mutation(async ({ input, ctx }) => {
|
|
const currentDomain = await findDomainById(input.domainId);
|
|
|
|
if (currentDomain.applicationId) {
|
|
const newApp = await findApplicationById(currentDomain.applicationId);
|
|
if (newApp.project.adminId !== ctx.user.adminId) {
|
|
throw new TRPCError({
|
|
code: "UNAUTHORIZED",
|
|
message: "You are not authorized to access this application",
|
|
});
|
|
}
|
|
} else if (currentDomain.composeId) {
|
|
const newCompose = await findComposeById(currentDomain.composeId);
|
|
if (newCompose.project.adminId !== ctx.user.adminId) {
|
|
throw new TRPCError({
|
|
code: "UNAUTHORIZED",
|
|
message: "You are not authorized to access this compose",
|
|
});
|
|
}
|
|
}
|
|
const result = await updateDomainById(input.domainId, input);
|
|
const domain = await findDomainById(input.domainId);
|
|
if (domain.applicationId) {
|
|
const application = await findApplicationById(domain.applicationId);
|
|
await manageDomain(application, domain);
|
|
}
|
|
return result;
|
|
}),
|
|
one: protectedProcedure.input(apiFindDomain).query(async ({ input, ctx }) => {
|
|
const domain = await findDomainById(input.domainId);
|
|
if (domain.applicationId) {
|
|
const application = await findApplicationById(domain.applicationId);
|
|
if (application.project.adminId !== ctx.user.adminId) {
|
|
throw new TRPCError({
|
|
code: "UNAUTHORIZED",
|
|
message: "You are not authorized to access this application",
|
|
});
|
|
}
|
|
} else if (domain.composeId) {
|
|
const compose = await findComposeById(domain.composeId);
|
|
if (compose.project.adminId !== ctx.user.adminId) {
|
|
throw new TRPCError({
|
|
code: "UNAUTHORIZED",
|
|
message: "You are not authorized to access this compose",
|
|
});
|
|
}
|
|
}
|
|
return await findDomainById(input.domainId);
|
|
}),
|
|
delete: protectedProcedure
|
|
.input(apiFindDomain)
|
|
.mutation(async ({ input, ctx }) => {
|
|
const domain = await findDomainById(input.domainId);
|
|
if (domain.applicationId) {
|
|
const application = await findApplicationById(domain.applicationId);
|
|
if (application.project.adminId !== ctx.user.adminId) {
|
|
throw new TRPCError({
|
|
code: "UNAUTHORIZED",
|
|
message: "You are not authorized to access this application",
|
|
});
|
|
}
|
|
} else if (domain.composeId) {
|
|
const compose = await findComposeById(domain.composeId);
|
|
if (compose.project.adminId !== ctx.user.adminId) {
|
|
throw new TRPCError({
|
|
code: "UNAUTHORIZED",
|
|
message: "You are not authorized to access this compose",
|
|
});
|
|
}
|
|
}
|
|
const result = await removeDomainById(input.domainId);
|
|
|
|
if (domain.applicationId) {
|
|
const application = await findApplicationById(domain.applicationId);
|
|
await removeDomain(application, domain.uniqueConfigKey);
|
|
}
|
|
|
|
return result;
|
|
}),
|
|
});
|