mirror of
https://github.com/Dokploy/dokploy.git
synced 2026-07-15 10:55:23 +02:00
107 lines
2.5 KiB
TypeScript
107 lines
2.5 KiB
TypeScript
import {
|
|
getWebServerSettings,
|
|
IS_CLOUD,
|
|
updateWebServerSettings,
|
|
} from "@dokploy/server";
|
|
import { TRPCError } from "@trpc/server";
|
|
import { apiUpdateWhitelabeling } from "@/server/db/schema";
|
|
import {
|
|
createTRPCRouter,
|
|
enterpriseProcedure,
|
|
protectedProcedure,
|
|
publicProcedure,
|
|
} from "../../trpc";
|
|
|
|
export const whitelabelingRouter = createTRPCRouter({
|
|
get: protectedProcedure.query(async () => {
|
|
if (IS_CLOUD) {
|
|
return null;
|
|
}
|
|
const settings = await getWebServerSettings();
|
|
return settings?.whitelabelingConfig ?? null;
|
|
}),
|
|
|
|
update: enterpriseProcedure
|
|
.input(apiUpdateWhitelabeling)
|
|
.mutation(async ({ input, ctx }) => {
|
|
if (IS_CLOUD) {
|
|
throw new TRPCError({
|
|
code: "BAD_REQUEST",
|
|
message: "Whitelabeling is not available in Cloud",
|
|
});
|
|
}
|
|
|
|
if (ctx.user.role !== "owner") {
|
|
throw new TRPCError({
|
|
code: "FORBIDDEN",
|
|
message: "Only the owner can update whitelabeling settings",
|
|
});
|
|
}
|
|
|
|
await updateWebServerSettings({
|
|
whitelabelingConfig: input.whitelabelingConfig,
|
|
});
|
|
|
|
return { success: true };
|
|
}),
|
|
|
|
reset: enterpriseProcedure.mutation(async ({ ctx }) => {
|
|
if (IS_CLOUD) {
|
|
throw new TRPCError({
|
|
code: "BAD_REQUEST",
|
|
message: "Whitelabeling is not available in Cloud",
|
|
});
|
|
}
|
|
|
|
if (ctx.user.role !== "owner") {
|
|
throw new TRPCError({
|
|
code: "FORBIDDEN",
|
|
message: "Only the owner can reset whitelabeling settings",
|
|
});
|
|
}
|
|
|
|
await updateWebServerSettings({
|
|
whitelabelingConfig: {
|
|
appName: null,
|
|
appDescription: null,
|
|
logoUrl: null,
|
|
faviconUrl: null,
|
|
customCss: null,
|
|
loginLogoUrl: null,
|
|
supportUrl: null,
|
|
docsUrl: null,
|
|
errorPageTitle: null,
|
|
errorPageDescription: null,
|
|
metaTitle: null,
|
|
footerText: null,
|
|
},
|
|
});
|
|
|
|
return { success: true };
|
|
}),
|
|
|
|
// Public endpoint only for unauthenticated pages (login, register, error)
|
|
// Returns only the fields needed for public pages
|
|
getPublic: publicProcedure.query(async () => {
|
|
if (IS_CLOUD) {
|
|
return null;
|
|
}
|
|
const settings = await getWebServerSettings();
|
|
const config = settings?.whitelabelingConfig;
|
|
if (!config) return null;
|
|
|
|
return {
|
|
appName: config.appName,
|
|
appDescription: config.appDescription,
|
|
logoUrl: config.logoUrl,
|
|
loginLogoUrl: config.loginLogoUrl,
|
|
faviconUrl: config.faviconUrl,
|
|
customCss: config.customCss,
|
|
metaTitle: config.metaTitle,
|
|
errorPageTitle: config.errorPageTitle,
|
|
errorPageDescription: config.errorPageDescription,
|
|
footerText: config.footerText,
|
|
};
|
|
}),
|
|
});
|