mirror of
https://github.com/andwati/dokploy.git
synced 2026-10-23 21:42:19 +00:00
* refactor: add sidebar * chore: add deps * refactor: update sidebar * refactor: another layout * refactor: update variant * refactor: change layout * refactor: change variant * refactor: enhance sidebar navigation with active state management * feat: add project button to dashboard * Merge branch 'canary' into feat/add-sidebar * refactor: add loader * refactor: update destinations and refactor * refactor: ui refactor certificates * refactor: delete unused files * refactor: remove unused files and duplicate registry * refactor: update style registry * refactor: add new design registry * refactor: enhance git providers * refactor: remove duplicate files * refactor: update * refactor: update users * refactor: delete unused files * refactor: update profile * refactor: apply changes * refactor: update UI * refactor: enhance Docker monitoring UI layout * refactor: add theme toggle and language selection to user navigation (#1083) * refactor: remove unused files * feat: add filter to services * refactor: add active items * refactor: remove tab prop * refactor: remove unused files * refactor: remove duplicated files * refactor: remove unused files * refactor: remove duplicate files * refactor: remove unused files * refactor: delete unused files * refactor: remove unsued files * refactor: delete unused files * refactor: lint * refactor: remove unused secuirty * refactor: delete unused files * refactor: delete unused files * remove imports * refactor: add update button * refactor: delete unused files * refactor: remove unused code * refactor: remove unused files * refactor: update login page * refactor: update login UI * refactor: update ui reset password * refactor: add justify end * feat: add suscriptions * feat: add sheet * feat: add logs for postgres * feat: add logs for all databases * feat: add server logs with drawer logs * refactor: remove unused files * refactor: add refetch when closing * refactor: fix linter * chore: bump node-20 * revert * refactor: fix conflicts * refactor: update * refactor: add missing deps * refactor: delete duplicate files * refactor: delete unsued files * chore: lint * refactor: remove unsued file * refactor: add refetch * refactor: remove duplicated files * refactor: delete unused files * refactor: update setup onboarding * refactor: add breadcrumb * refactor: apply updates * refactor: add faker * refactor: use 0 in validation * refactor: show correct state * refactor: update --------- Co-authored-by: vishalkadam47 <[email protected]> Co-authored-by: Vishal kadam <[email protected]>
110 lines
2.8 KiB
TypeScript
110 lines
2.8 KiB
TypeScript
import {
|
|
apiCreateRegistry,
|
|
apiFindOneRegistry,
|
|
apiRemoveRegistry,
|
|
apiTestRegistry,
|
|
apiUpdateRegistry,
|
|
} from "@/server/db/schema";
|
|
import {
|
|
IS_CLOUD,
|
|
createRegistry,
|
|
execAsync,
|
|
execAsyncRemote,
|
|
findAllRegistryByAdminId,
|
|
findRegistryById,
|
|
removeRegistry,
|
|
updateRegistry,
|
|
} from "@dokploy/server";
|
|
import { TRPCError } from "@trpc/server";
|
|
import { adminProcedure, createTRPCRouter, protectedProcedure } from "../trpc";
|
|
|
|
export const registryRouter = createTRPCRouter({
|
|
create: adminProcedure
|
|
.input(apiCreateRegistry)
|
|
.mutation(async ({ ctx, input }) => {
|
|
return await createRegistry(input, ctx.user.adminId);
|
|
}),
|
|
remove: adminProcedure
|
|
.input(apiRemoveRegistry)
|
|
.mutation(async ({ ctx, input }) => {
|
|
const registry = await findRegistryById(input.registryId);
|
|
if (registry.adminId !== ctx.user.adminId) {
|
|
throw new TRPCError({
|
|
code: "UNAUTHORIZED",
|
|
message: "You are not allowed to delete this registry",
|
|
});
|
|
}
|
|
return await removeRegistry(input.registryId);
|
|
}),
|
|
update: protectedProcedure
|
|
.input(apiUpdateRegistry)
|
|
.mutation(async ({ input, ctx }) => {
|
|
const { registryId, ...rest } = input;
|
|
const registry = await findRegistryById(registryId);
|
|
if (registry.adminId !== ctx.user.adminId) {
|
|
throw new TRPCError({
|
|
code: "UNAUTHORIZED",
|
|
message: "You are not allowed to update this registry",
|
|
});
|
|
}
|
|
const application = await updateRegistry(registryId, {
|
|
...rest,
|
|
});
|
|
|
|
if (!application) {
|
|
throw new TRPCError({
|
|
code: "BAD_REQUEST",
|
|
message: "Error updating registry",
|
|
});
|
|
}
|
|
|
|
return true;
|
|
}),
|
|
all: protectedProcedure.query(async ({ ctx }) => {
|
|
return await findAllRegistryByAdminId(ctx.user.adminId);
|
|
}),
|
|
one: adminProcedure
|
|
.input(apiFindOneRegistry)
|
|
.query(async ({ input, ctx }) => {
|
|
const registry = await findRegistryById(input.registryId);
|
|
if (registry.adminId !== ctx.user.adminId) {
|
|
throw new TRPCError({
|
|
code: "UNAUTHORIZED",
|
|
message: "You are not allowed to access this registry",
|
|
});
|
|
}
|
|
return registry;
|
|
}),
|
|
testRegistry: protectedProcedure
|
|
.input(apiTestRegistry)
|
|
.mutation(async ({ input }) => {
|
|
try {
|
|
const loginCommand = `echo ${input.password} | docker login ${input.registryUrl} --username ${input.username} --password-stdin`;
|
|
|
|
if (IS_CLOUD && !input.serverId) {
|
|
throw new TRPCError({
|
|
code: "NOT_FOUND",
|
|
message: "Select a server to test the registry",
|
|
});
|
|
}
|
|
|
|
if (input.serverId && input.serverId !== "none") {
|
|
await execAsyncRemote(input.serverId, loginCommand);
|
|
} else {
|
|
await execAsync(loginCommand);
|
|
}
|
|
|
|
return true;
|
|
} catch (error) {
|
|
throw new TRPCError({
|
|
code: "BAD_REQUEST",
|
|
message:
|
|
error instanceof Error
|
|
? error.message
|
|
: "Error testing the registry",
|
|
cause: error,
|
|
});
|
|
}
|
|
}),
|
|
});
|