From b6c29ccf0543d9713dd8a2f543da0e45a0c30799 Mon Sep 17 00:00:00 2001 From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> Date: Fri, 14 Feb 2025 02:40:11 -0600 Subject: [PATCH] refactor: update --- apps/dokploy/server/api/routers/admin.ts | 57 ++++++------ .../dokploy/server/api/routers/application.ts | 16 +--- apps/dokploy/server/api/routers/auth.ts | 21 +++-- apps/dokploy/server/api/routers/compose.ts | 15 +-- apps/dokploy/server/api/routers/mariadb.ts | 8 +- apps/dokploy/server/api/routers/mongo.ts | 8 +- apps/dokploy/server/api/routers/mysql.ts | 8 +- apps/dokploy/server/api/routers/postgres.ts | 8 +- apps/dokploy/server/api/routers/project.ts | 18 ++-- apps/dokploy/server/api/routers/redis.ts | 8 +- apps/dokploy/server/api/routers/stripe.ts | 3 +- packages/server/src/db/schema/account.ts | 2 +- packages/server/src/db/schema/user.ts | 13 ++- packages/server/src/services/admin.ts | 3 + packages/server/src/services/auth.ts | 7 +- packages/server/src/services/server.ts | 1 + packages/server/src/services/user.ts | 91 +++++++++---------- packages/server/src/setup/monitoring-setup.ts | 14 +-- 18 files changed, 154 insertions(+), 147 deletions(-) diff --git a/apps/dokploy/server/api/routers/admin.ts b/apps/dokploy/server/api/routers/admin.ts index 0b232f6d..e8467283 100644 --- a/apps/dokploy/server/api/routers/admin.ts +++ b/apps/dokploy/server/api/routers/admin.ts @@ -16,6 +16,7 @@ import { removeUserById, setupWebMonitoring, updateAdminById, + updateUser, } from "@dokploy/server"; import { TRPCError } from "@trpc/server"; import { eq } from "drizzle-orm"; @@ -101,6 +102,9 @@ export const adminRouter = createTRPCRouter({ message: "You are not allowed to assign permissions", }); } + await updateUser(user.id, { + ...input, + }); // await db // .update(users) // .set({ @@ -130,32 +134,33 @@ export const adminRouter = createTRPCRouter({ }); } - // await updateAdminById(admin.adminId, { - // metricsConfig: { - // server: { - // type: "Dokploy", - // refreshRate: input.metricsConfig.server.refreshRate, - // port: input.metricsConfig.server.port, - // token: input.metricsConfig.server.token, - // cronJob: input.metricsConfig.server.cronJob, - // urlCallback: input.metricsConfig.server.urlCallback, - // retentionDays: input.metricsConfig.server.retentionDays, - // thresholds: { - // cpu: input.metricsConfig.server.thresholds.cpu, - // memory: input.metricsConfig.server.thresholds.memory, - // }, - // }, - // containers: { - // refreshRate: input.metricsConfig.containers.refreshRate, - // services: { - // include: input.metricsConfig.containers.services.include || [], - // exclude: input.metricsConfig.containers.services.exclude || [], - // }, - // }, - // }, - // }); - // const currentServer = await setupWebMonitoring(admin.adminId); - // return currentServer; + await updateUser(user.id, { + metricsConfig: { + server: { + type: "Dokploy", + refreshRate: input.metricsConfig.server.refreshRate, + port: input.metricsConfig.server.port, + token: input.metricsConfig.server.token, + cronJob: input.metricsConfig.server.cronJob, + urlCallback: input.metricsConfig.server.urlCallback, + retentionDays: input.metricsConfig.server.retentionDays, + thresholds: { + cpu: input.metricsConfig.server.thresholds.cpu, + memory: input.metricsConfig.server.thresholds.memory, + }, + }, + containers: { + refreshRate: input.metricsConfig.containers.refreshRate, + services: { + include: input.metricsConfig.containers.services.include || [], + exclude: input.metricsConfig.containers.services.exclude || [], + }, + }, + }, + }); + + const currentServer = await setupWebMonitoring(user.id); + return currentServer; } catch (error) { throw error; } diff --git a/apps/dokploy/server/api/routers/application.ts b/apps/dokploy/server/api/routers/application.ts index d07caa43..0f7c1eb6 100644 --- a/apps/dokploy/server/api/routers/application.ts +++ b/apps/dokploy/server/api/routers/application.ts @@ -61,7 +61,7 @@ export const applicationRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { try { if (ctx.user.rol === "user") { - await checkServiceAccess(ctx.user.authId, input.projectId, "create"); + await checkServiceAccess(ctx.user.id, input.projectId, "create"); } if (IS_CLOUD && !input.serverId) { @@ -81,7 +81,7 @@ export const applicationRouter = createTRPCRouter({ const newApplication = await createApplication(input); if (ctx.user.rol === "user") { - await addNewService(ctx.user.authId, newApplication.applicationId); + await addNewService(ctx.user.id, newApplication.applicationId); } return newApplication; } catch (error: unknown) { @@ -99,11 +99,7 @@ export const applicationRouter = createTRPCRouter({ .input(apiFindOneApplication) .query(async ({ input, ctx }) => { if (ctx.user.rol === "user") { - await checkServiceAccess( - ctx.user.authId, - input.applicationId, - "access", - ); + await checkServiceAccess(ctx.user.id, input.applicationId, "access"); } const application = await findApplicationById(input.applicationId); if (application.project.userId !== ctx.user.ownerId) { @@ -145,11 +141,7 @@ export const applicationRouter = createTRPCRouter({ .input(apiFindOneApplication) .mutation(async ({ input, ctx }) => { if (ctx.user.rol === "user") { - await checkServiceAccess( - ctx.user.authId, - input.applicationId, - "delete", - ); + await checkServiceAccess(ctx.user.id, input.applicationId, "delete"); } const application = await findApplicationById(input.applicationId); diff --git a/apps/dokploy/server/api/routers/auth.ts b/apps/dokploy/server/api/routers/auth.ts index cc88f2c3..7f1382b4 100644 --- a/apps/dokploy/server/api/routers/auth.ts +++ b/apps/dokploy/server/api/routers/auth.ts @@ -16,6 +16,7 @@ import { createUser, findAuthByEmail, findAuthById, + findUserById, generate2FASecret, getUserByToken, lucia, @@ -24,6 +25,7 @@ import { sendDiscordNotification, sendEmailNotification, updateAuthById, + updateUser, validateRequest, verify2FA, } from "@dokploy/server"; @@ -252,19 +254,18 @@ export const authRouter = createTRPCRouter({ }), generateToken: protectedProcedure.mutation(async ({ ctx, input }) => { - const auth = await findAuthById(ctx.user.authId); + const auth = await findUserById(ctx.user.id); + console.log(auth); if (auth.token) { await luciaToken.invalidateSession(auth.token); } - const session = await luciaToken.createSession(auth?.id || "", { - expiresIn: 60 * 60 * 24 * 30, - }); - - await updateAuthById(auth.id, { - token: session.id, - }); - + // const session = await luciaToken.createSession(auth?.id || "", { + // expiresIn: 60 * 60 * 24 * 30, + // }); + // await updateUser(auth.id, { + // token: session.id, + // }); return auth; }), verifyToken: protectedProcedure.mutation(async () => { @@ -276,7 +277,7 @@ export const authRouter = createTRPCRouter({ }), generate2FASecret: protectedProcedure.query(async ({ ctx }) => { - return await generate2FASecret(ctx.user.authId); + return await generate2FASecret(ctx.user.id); }), verify2FASetup: protectedProcedure .input(apiVerify2FA) diff --git a/apps/dokploy/server/api/routers/compose.ts b/apps/dokploy/server/api/routers/compose.ts index 5d5c1173..b3fbae93 100644 --- a/apps/dokploy/server/api/routers/compose.ts +++ b/apps/dokploy/server/api/routers/compose.ts @@ -44,6 +44,7 @@ import { findDomainsByComposeId, findProjectById, findServerById, + findUserById, loadServices, randomizeComposeFile, randomizeIsolatedDeploymentComposeFile, @@ -61,7 +62,7 @@ export const composeRouter = createTRPCRouter({ .mutation(async ({ ctx, input }) => { try { if (ctx.user.rol === "user") { - await checkServiceAccess(ctx.user.authId, input.projectId, "create"); + await checkServiceAccess(ctx.user.id, input.projectId, "create"); } if (IS_CLOUD && !input.serverId) { @@ -80,7 +81,7 @@ export const composeRouter = createTRPCRouter({ const newService = await createCompose(input); if (ctx.user.rol === "user") { - await addNewService(ctx.user.authId, newService.composeId); + await addNewService(ctx.user.id, newService.composeId); } return newService; @@ -93,7 +94,7 @@ export const composeRouter = createTRPCRouter({ .input(apiFindCompose) .query(async ({ input, ctx }) => { if (ctx.user.rol === "user") { - await checkServiceAccess(ctx.user.authId, input.composeId, "access"); + await checkServiceAccess(ctx.user.id, input.composeId, "access"); } const compose = await findComposeById(input.composeId); @@ -122,7 +123,7 @@ export const composeRouter = createTRPCRouter({ .input(apiDeleteCompose) .mutation(async ({ input, ctx }) => { if (ctx.user.rol === "user") { - await checkServiceAccess(ctx.user.authId, input.composeId, "delete"); + await checkServiceAccess(ctx.user.id, input.composeId, "delete"); } const composeResult = await findComposeById(input.composeId); @@ -376,7 +377,7 @@ export const composeRouter = createTRPCRouter({ .input(apiCreateComposeByTemplate) .mutation(async ({ ctx, input }) => { if (ctx.user.rol === "user") { - await checkServiceAccess(ctx.user.authId, input.projectId, "create"); + await checkServiceAccess(ctx.user.id, input.projectId, "create"); } if (IS_CLOUD && !input.serverId) { @@ -390,7 +391,7 @@ export const composeRouter = createTRPCRouter({ const generate = await loadTemplateModule(input.id as TemplatesKeys); - const admin = await findAdminById(ctx.user.adminId); + const admin = await findUserById(ctx.user.ownerId); let serverIp = admin.serverIp || "127.0.0.1"; const project = await findProjectById(input.projectId); @@ -419,7 +420,7 @@ export const composeRouter = createTRPCRouter({ }); if (ctx.user.rol === "user") { - await addNewService(ctx.user.authId, compose.composeId); + await addNewService(ctx.user.id, compose.composeId); } if (mounts && mounts?.length > 0) { diff --git a/apps/dokploy/server/api/routers/mariadb.ts b/apps/dokploy/server/api/routers/mariadb.ts index 283455fa..9305395d 100644 --- a/apps/dokploy/server/api/routers/mariadb.ts +++ b/apps/dokploy/server/api/routers/mariadb.ts @@ -38,7 +38,7 @@ export const mariadbRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { try { if (ctx.user.rol === "user") { - await checkServiceAccess(ctx.user.authId, input.projectId, "create"); + await checkServiceAccess(ctx.user.id, input.projectId, "create"); } if (IS_CLOUD && !input.serverId) { @@ -57,7 +57,7 @@ export const mariadbRouter = createTRPCRouter({ } const newMariadb = await createMariadb(input); if (ctx.user.rol === "user") { - await addNewService(ctx.user.authId, newMariadb.mariadbId); + await addNewService(ctx.user.id, newMariadb.mariadbId); } await createMount({ @@ -80,7 +80,7 @@ export const mariadbRouter = createTRPCRouter({ .input(apiFindOneMariaDB) .query(async ({ input, ctx }) => { if (ctx.user.rol === "user") { - await checkServiceAccess(ctx.user.authId, input.mariadbId, "access"); + await checkServiceAccess(ctx.user.id, input.mariadbId, "access"); } const mariadb = await findMariadbById(input.mariadbId); if (mariadb.project.userId !== ctx.user.ownerId) { @@ -202,7 +202,7 @@ export const mariadbRouter = createTRPCRouter({ .input(apiFindOneMariaDB) .mutation(async ({ input, ctx }) => { if (ctx.user.rol === "user") { - await checkServiceAccess(ctx.user.authId, input.mariadbId, "delete"); + await checkServiceAccess(ctx.user.id, input.mariadbId, "delete"); } const mongo = await findMariadbById(input.mariadbId); diff --git a/apps/dokploy/server/api/routers/mongo.ts b/apps/dokploy/server/api/routers/mongo.ts index 94a01272..aed7b4c5 100644 --- a/apps/dokploy/server/api/routers/mongo.ts +++ b/apps/dokploy/server/api/routers/mongo.ts @@ -37,7 +37,7 @@ export const mongoRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { try { if (ctx.user.rol === "user") { - await checkServiceAccess(ctx.user.authId, input.projectId, "create"); + await checkServiceAccess(ctx.user.id, input.projectId, "create"); } if (IS_CLOUD && !input.serverId) { @@ -56,7 +56,7 @@ export const mongoRouter = createTRPCRouter({ } const newMongo = await createMongo(input); if (ctx.user.rol === "user") { - await addNewService(ctx.user.authId, newMongo.mongoId); + await addNewService(ctx.user.id, newMongo.mongoId); } await createMount({ @@ -83,7 +83,7 @@ export const mongoRouter = createTRPCRouter({ .input(apiFindOneMongo) .query(async ({ input, ctx }) => { if (ctx.user.rol === "user") { - await checkServiceAccess(ctx.user.authId, input.mongoId, "access"); + await checkServiceAccess(ctx.user.id, input.mongoId, "access"); } const mongo = await findMongoById(input.mongoId); @@ -243,7 +243,7 @@ export const mongoRouter = createTRPCRouter({ .input(apiFindOneMongo) .mutation(async ({ input, ctx }) => { if (ctx.user.rol === "user") { - await checkServiceAccess(ctx.user.authId, input.mongoId, "delete"); + await checkServiceAccess(ctx.user.id, input.mongoId, "delete"); } const mongo = await findMongoById(input.mongoId); diff --git a/apps/dokploy/server/api/routers/mysql.ts b/apps/dokploy/server/api/routers/mysql.ts index efea7207..e66c3094 100644 --- a/apps/dokploy/server/api/routers/mysql.ts +++ b/apps/dokploy/server/api/routers/mysql.ts @@ -39,7 +39,7 @@ export const mysqlRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { try { if (ctx.user.rol === "user") { - await checkServiceAccess(ctx.user.authId, input.projectId, "create"); + await checkServiceAccess(ctx.user.id, input.projectId, "create"); } if (IS_CLOUD && !input.serverId) { @@ -59,7 +59,7 @@ export const mysqlRouter = createTRPCRouter({ const newMysql = await createMysql(input); if (ctx.user.rol === "user") { - await addNewService(ctx.user.authId, newMysql.mysqlId); + await addNewService(ctx.user.id, newMysql.mysqlId); } await createMount({ @@ -86,7 +86,7 @@ export const mysqlRouter = createTRPCRouter({ .input(apiFindOneMySql) .query(async ({ input, ctx }) => { if (ctx.user.rol === "user") { - await checkServiceAccess(ctx.user.authId, input.mysqlId, "access"); + await checkServiceAccess(ctx.user.id, input.mysqlId, "access"); } const mysql = await findMySqlById(input.mysqlId); if (mysql.project.userId !== ctx.user.ownerId) { @@ -241,7 +241,7 @@ export const mysqlRouter = createTRPCRouter({ .input(apiFindOneMySql) .mutation(async ({ input, ctx }) => { if (ctx.user.rol === "user") { - await checkServiceAccess(ctx.user.authId, input.mysqlId, "delete"); + await checkServiceAccess(ctx.user.id, input.mysqlId, "delete"); } const mongo = await findMySqlById(input.mysqlId); if (mongo.project.userId !== ctx.user.ownerId) { diff --git a/apps/dokploy/server/api/routers/postgres.ts b/apps/dokploy/server/api/routers/postgres.ts index a7d0de39..0aab4dc6 100644 --- a/apps/dokploy/server/api/routers/postgres.ts +++ b/apps/dokploy/server/api/routers/postgres.ts @@ -45,7 +45,7 @@ export const postgresRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { try { if (ctx.user.rol === "user") { - await checkServiceAccess(ctx.user.authId, input.projectId, "create"); + await checkServiceAccess(ctx.user.id, input.projectId, "create"); } if (IS_CLOUD && !input.serverId) { @@ -64,7 +64,7 @@ export const postgresRouter = createTRPCRouter({ } const newPostgres = await createPostgres(input); if (ctx.user.rol === "user") { - await addNewService(ctx.user.authId, newPostgres.postgresId); + await addNewService(ctx.user.id, newPostgres.postgresId); } await createMount({ @@ -91,7 +91,7 @@ export const postgresRouter = createTRPCRouter({ .input(apiFindOnePostgres) .query(async ({ input, ctx }) => { if (ctx.user.rol === "user") { - await checkServiceAccess(ctx.user.authId, input.postgresId, "access"); + await checkServiceAccess(ctx.user.id, input.postgresId, "access"); } const postgres = await findPostgresById(input.postgresId); @@ -222,7 +222,7 @@ export const postgresRouter = createTRPCRouter({ .input(apiFindOnePostgres) .mutation(async ({ input, ctx }) => { if (ctx.user.rol === "user") { - await checkServiceAccess(ctx.user.authId, input.postgresId, "delete"); + await checkServiceAccess(ctx.user.id, input.postgresId, "delete"); } const postgres = await findPostgresById(input.postgresId); diff --git a/apps/dokploy/server/api/routers/project.ts b/apps/dokploy/server/api/routers/project.ts index 1d2d2036..d4a30580 100644 --- a/apps/dokploy/server/api/routers/project.ts +++ b/apps/dokploy/server/api/routers/project.ts @@ -25,9 +25,9 @@ import { checkProjectAccess, createProject, deleteProject, - findAdminById, findProjectById, findUserByAuthId, + findUserById, updateProjectById, } from "@dokploy/server"; @@ -37,10 +37,10 @@ export const projectRouter = createTRPCRouter({ .mutation(async ({ ctx, input }) => { try { if (ctx.user.rol === "user") { - await checkProjectAccess(ctx.user.authId, "create"); + await checkProjectAccess(ctx.user.id, "create"); } - const admin = await findAdminById(ctx.user.adminId); + const admin = await findUserById(ctx.user.ownerId); if (admin.serversQuantity === 0 && IS_CLOUD) { throw new TRPCError({ @@ -49,9 +49,9 @@ export const projectRouter = createTRPCRouter({ }); } - const project = await createProject(input, ctx.user.adminId); + const project = await createProject(input, ctx.user.ownerId); if (ctx.user.rol === "user") { - await addNewProject(ctx.user.authId, project.projectId); + await addNewProject(ctx.user.id, project.projectId); } return project; @@ -68,9 +68,9 @@ export const projectRouter = createTRPCRouter({ .input(apiFindOneProject) .query(async ({ input, ctx }) => { if (ctx.user.rol === "user") { - const { accessedServices } = await findUserByAuthId(ctx.user.authId); + const { accessedServices } = await findUserByAuthId(ctx.user.id); - await checkProjectAccess(ctx.user.authId, "access", input.projectId); + await checkProjectAccess(ctx.user.id, "access", input.projectId); const project = await db.query.projects.findFirst({ where: and( @@ -126,7 +126,7 @@ export const projectRouter = createTRPCRouter({ all: protectedProcedure.query(async ({ ctx }) => { // console.log(ctx.user); if (ctx.user.rol === "user") { - const { accessedProjects, accessedServices } = await findUserByAuthId( + const { accessedProjects, accessedServices } = await findUserById( ctx.user.id, ); @@ -204,7 +204,7 @@ export const projectRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { try { if (ctx.user.rol === "user") { - await checkProjectAccess(ctx.user.authId, "delete"); + await checkProjectAccess(ctx.user.id, "delete"); } const currentProject = await findProjectById(input.projectId); if (currentProject.userId !== ctx.user.ownerId) { diff --git a/apps/dokploy/server/api/routers/redis.ts b/apps/dokploy/server/api/routers/redis.ts index af1d4234..46586e5e 100644 --- a/apps/dokploy/server/api/routers/redis.ts +++ b/apps/dokploy/server/api/routers/redis.ts @@ -37,7 +37,7 @@ export const redisRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { try { if (ctx.user.rol === "user") { - await checkServiceAccess(ctx.user.authId, input.projectId, "create"); + await checkServiceAccess(ctx.user.id, input.projectId, "create"); } if (IS_CLOUD && !input.serverId) { @@ -56,7 +56,7 @@ export const redisRouter = createTRPCRouter({ } const newRedis = await createRedis(input); if (ctx.user.rol === "user") { - await addNewService(ctx.user.authId, newRedis.redisId); + await addNewService(ctx.user.id, newRedis.redisId); } await createMount({ @@ -76,7 +76,7 @@ export const redisRouter = createTRPCRouter({ .input(apiFindOneRedis) .query(async ({ input, ctx }) => { if (ctx.user.rol === "user") { - await checkServiceAccess(ctx.user.authId, input.redisId, "access"); + await checkServiceAccess(ctx.user.id, input.redisId, "access"); } const redis = await findRedisById(input.redisId); @@ -233,7 +233,7 @@ export const redisRouter = createTRPCRouter({ .input(apiFindOneRedis) .mutation(async ({ input, ctx }) => { if (ctx.user.rol === "user") { - await checkServiceAccess(ctx.user.authId, input.redisId, "delete"); + await checkServiceAccess(ctx.user.id, input.redisId, "delete"); } const redis = await findRedisById(input.redisId); diff --git a/apps/dokploy/server/api/routers/stripe.ts b/apps/dokploy/server/api/routers/stripe.ts index 91fa44fd..540820f2 100644 --- a/apps/dokploy/server/api/routers/stripe.ts +++ b/apps/dokploy/server/api/routers/stripe.ts @@ -120,8 +120,7 @@ export const stripeRouter = createTRPCRouter({ canCreateMoreServers: adminProcedure.query(async ({ ctx }) => { const user = await findUserById(ctx.user.ownerId); - console.log(user); - // const servers = await findServersByUserId(user.id); + const servers = await findServersByUserId(user.id); if (!IS_CLOUD) { return true; diff --git a/packages/server/src/db/schema/account.ts b/packages/server/src/db/schema/account.ts index e7a263fa..432753fd 100644 --- a/packages/server/src/db/schema/account.ts +++ b/packages/server/src/db/schema/account.ts @@ -1,7 +1,7 @@ +import { relations } from "drizzle-orm"; import { boolean, pgTable, text, timestamp } from "drizzle-orm/pg-core"; import { nanoid } from "nanoid"; import { users_temp } from "./user"; -import { relations } from "drizzle-orm"; export const account = pgTable("account", { id: text("id") diff --git a/packages/server/src/db/schema/user.ts b/packages/server/src/db/schema/user.ts index 0a353513..bf47967c 100644 --- a/packages/server/src/db/schema/user.ts +++ b/packages/server/src/db/schema/user.ts @@ -13,6 +13,7 @@ import { z } from "zod"; import { admins } from "./admin"; import { auth } from "./auth"; import { certificateType } from "./shared"; +import { account } from "./account"; /** * This is an example of how to use the multi-project schema feature of Drizzle ORM. Use the same * database instance for multiple projects. @@ -185,10 +186,14 @@ export const users_temp = pgTable("user_temp", { serversQuantity: integer("serversQuantity").notNull().default(0), }); -export const usersRelations = relations(users, ({ one }) => ({ - auth: one(auth, { - fields: [users.authId], - references: [auth.id], +export const usersRelations = relations(users_temp, ({ one }) => ({ + // auth: one(auth, { + // fields: [users.authId], + // references: [auth.id], + // }), + account: one(account, { + fields: [users_temp.id], + references: [account.userId], }), // admin: one(admins, { // fields: [users.adminId], diff --git a/packages/server/src/services/admin.ts b/packages/server/src/services/admin.ts index c4b7650b..ea87e456 100644 --- a/packages/server/src/services/admin.ts +++ b/packages/server/src/services/admin.ts @@ -51,6 +51,9 @@ export const createInvitation = async ( export const findUserById = async (userId: string) => { const user = await db.query.users_temp.findFirst({ where: eq(users_temp.id, userId), + // with: { + // account: true, + // }, }); if (!user) { throw new TRPCError({ diff --git a/packages/server/src/services/auth.ts b/packages/server/src/services/auth.ts index 8781f4f1..74cd0419 100644 --- a/packages/server/src/services/auth.ts +++ b/packages/server/src/services/auth.ts @@ -15,6 +15,7 @@ import encode from "hi-base32"; import { TOTP } from "otpauth"; import QRCode from "qrcode"; import { IS_CLOUD } from "../constants"; +import { findUserById } from "./admin"; export type Auth = typeof auth.$inferSelect; @@ -131,14 +132,14 @@ export const updateAuthById = async ( return result[0]; }; -export const generate2FASecret = async (authId: string) => { - const auth = await findAuthById(authId); +export const generate2FASecret = async (userId: string) => { + const user = await findUserById(userId); const base32_secret = generateBase32Secret(); const totp = new TOTP({ issuer: "Dokploy", - label: `${auth?.email}`, + label: `${user?.email}`, algorithm: "SHA1", digits: 6, secret: base32_secret, diff --git a/packages/server/src/services/server.ts b/packages/server/src/services/server.ts index 6aaa8bec..7702c90d 100644 --- a/packages/server/src/services/server.ts +++ b/packages/server/src/services/server.ts @@ -14,6 +14,7 @@ export const createServer = async ( .values({ ...input, userId: userId, + createdAt: new Date().toISOString(), }) .returning() .then((value) => value[0]); diff --git a/packages/server/src/services/user.ts b/packages/server/src/services/user.ts index 5a9898cd..c32ceef2 100644 --- a/packages/server/src/services/user.ts +++ b/packages/server/src/services/user.ts @@ -2,21 +2,22 @@ import { db } from "@dokploy/server/db"; import type { users_temp } from "@dokploy/server/db/schema"; import { TRPCError } from "@trpc/server"; import { eq } from "drizzle-orm"; +import { findUserById } from "./admin"; export type User = typeof users_temp.$inferSelect; -export const findUserById = async (userId: string) => { - const userR = await db.query.user.findFirst({ - where: eq(user.userId, userId), - }); - if (!userR) { - throw new TRPCError({ - code: "NOT_FOUND", - message: "User not found", - }); - } - return user; -}; +// export const findUserById = async (userId: string) => { +// // const userR = await db.query.user.findFirst({ +// // where: eq(user.userId, userId), +// // }); +// // if (!userR) { +// // throw new TRPCError({ +// // code: "NOT_FOUND", +// // message: "User not found", +// // }); +// // } +// // return user; +// }; export const findUserByAuthId = async (authId: string) => { const userR = await db.query.user.findFirst({ @@ -46,33 +47,32 @@ export const findUsers = async (adminId: string) => { return currentUsers; }; -export const addNewProject = async (authId: string, projectId: string) => { - const userR = await findUserByAuthId(authId); +export const addNewProject = async (userId: string, projectId: string) => { + const userR = await findUserById(userId); - await db - .update(user) - .set({ - accessedProjects: [...userR.accessedProjects, projectId], - }) - .where(eq(user.authId, authId)); + // await db + // .update(user) + // .set({ + // accessedProjects: [...userR.accessedProjects, projectId], + // }) + // .where(eq(user.authId, authId)); }; -export const addNewService = async (authId: string, serviceId: string) => { - const userR = await findUserByAuthId(authId); - await db - .update(user) - .set({ - accessedServices: [...userR.accessedServices, serviceId], - }) - .where(eq(user.authId, authId)); +export const addNewService = async (userId: string, serviceId: string) => { + const userR = await findUserById(userId); + // await db + // .update(user) + // .set({ + // accessedServices: [...userR.accessedServices, serviceId], + // }) + // .where(eq(user.userId, userId)); }; export const canPerformCreationService = async ( userId: string, projectId: string, ) => { - const { accessedProjects, canCreateServices } = - await findUserByAuthId(userId); + const { accessedProjects, canCreateServices } = await findUserById(userId); const haveAccessToProject = accessedProjects.includes(projectId); if (canCreateServices && haveAccessToProject) { @@ -86,7 +86,7 @@ export const canPerformAccessService = async ( userId: string, serviceId: string, ) => { - const { accessedServices } = await findUserByAuthId(userId); + const { accessedServices } = await findUserById(userId); const haveAccessToService = accessedServices.includes(serviceId); if (haveAccessToService) { @@ -97,11 +97,10 @@ export const canPerformAccessService = async ( }; export const canPeformDeleteService = async ( - authId: string, + userId: string, serviceId: string, ) => { - const { accessedServices, canDeleteServices } = - await findUserByAuthId(authId); + const { accessedServices, canDeleteServices } = await findUserById(userId); const haveAccessToService = accessedServices.includes(serviceId); if (canDeleteServices && haveAccessToService) { @@ -111,8 +110,8 @@ export const canPeformDeleteService = async ( return false; }; -export const canPerformCreationProject = async (authId: string) => { - const { canCreateProjects } = await findUserByAuthId(authId); +export const canPerformCreationProject = async (userId: string) => { + const { canCreateProjects } = await findUserById(userId); if (canCreateProjects) { return true; @@ -121,8 +120,8 @@ export const canPerformCreationProject = async (authId: string) => { return false; }; -export const canPerformDeleteProject = async (authId: string) => { - const { canDeleteProjects } = await findUserByAuthId(authId); +export const canPerformDeleteProject = async (userId: string) => { + const { canDeleteProjects } = await findUserById(userId); if (canDeleteProjects) { return true; @@ -132,10 +131,10 @@ export const canPerformDeleteProject = async (authId: string) => { }; export const canPerformAccessProject = async ( - authId: string, + userId: string, projectId: string, ) => { - const { accessedProjects } = await findUserByAuthId(authId); + const { accessedProjects } = await findUserById(userId); const haveAccessToProject = accessedProjects.includes(projectId); @@ -145,26 +144,26 @@ export const canPerformAccessProject = async ( return false; }; -export const canAccessToTraefikFiles = async (authId: string) => { - const { canAccessToTraefikFiles } = await findUserByAuthId(authId); +export const canAccessToTraefikFiles = async (userId: string) => { + const { canAccessToTraefikFiles } = await findUserById(userId); return canAccessToTraefikFiles; }; export const checkServiceAccess = async ( - authId: string, + userId: string, serviceId: string, action = "access" as "access" | "create" | "delete", ) => { let hasPermission = false; switch (action) { case "create": - hasPermission = await canPerformCreationService(authId, serviceId); + hasPermission = await canPerformCreationService(userId, serviceId); break; case "access": - hasPermission = await canPerformAccessService(authId, serviceId); + hasPermission = await canPerformAccessService(userId, serviceId); break; case "delete": - hasPermission = await canPeformDeleteService(authId, serviceId); + hasPermission = await canPeformDeleteService(userId, serviceId); break; default: hasPermission = false; diff --git a/packages/server/src/setup/monitoring-setup.ts b/packages/server/src/setup/monitoring-setup.ts index f72b2244..ea6c768b 100644 --- a/packages/server/src/setup/monitoring-setup.ts +++ b/packages/server/src/setup/monitoring-setup.ts @@ -1,7 +1,7 @@ import { findServerById } from "@dokploy/server/services/server"; import type { ContainerCreateOptions } from "dockerode"; import { IS_CLOUD } from "../constants"; -import { findAdminById } from "../services/admin"; +import { findAdminById, findUserById } from "../services/admin"; import { getDokployImageTag } from "../services/settings"; import { pullImage, pullRemoteImage } from "../utils/docker/utils"; import { execAsync, execAsyncRemote } from "../utils/process/execAsync"; @@ -80,8 +80,8 @@ export const setupMonitoring = async (serverId: string) => { } }; -export const setupWebMonitoring = async (adminId: string) => { - const admin = await findAdminById(adminId); +export const setupWebMonitoring = async (userId: string) => { + const user = await findUserById(userId); const containerName = "dokploy-monitoring"; let imageName = "dokploy/monitoring:latest"; @@ -96,7 +96,7 @@ export const setupWebMonitoring = async (adminId: string) => { const settings: ContainerCreateOptions = { name: containerName, - Env: [`METRICS_CONFIG=${JSON.stringify(admin?.metricsConfig)}`], + Env: [`METRICS_CONFIG=${JSON.stringify(user?.metricsConfig)}`], Image: imageName, HostConfig: { // Memory: 100 * 1024 * 1024, // 100MB en bytes @@ -104,9 +104,9 @@ export const setupWebMonitoring = async (adminId: string) => { // CapAdd: ["NET_ADMIN", "SYS_ADMIN"], // Privileged: true, PortBindings: { - [`${admin.metricsConfig.server.port}/tcp`]: [ + [`${user?.metricsConfig?.server?.port}/tcp`]: [ { - HostPort: admin.metricsConfig.server.port.toString(), + HostPort: user?.metricsConfig?.server?.port.toString(), }, ], }, @@ -120,7 +120,7 @@ export const setupWebMonitoring = async (adminId: string) => { // NetworkMode: "host", }, ExposedPorts: { - [`${admin.metricsConfig.server.port}/tcp`]: {}, + [`${user?.metricsConfig?.server?.port}/tcp`]: {}, }, }; const docker = await getRemoteDocker();