mirror of
https://github.com/Dokploy/dokploy.git
synced 2026-06-18 21:55:24 +02:00
- Added a check to return an empty array if no members are found, improving the robustness of the `getTrustedOrigins` function.
138 lines
2.8 KiB
TypeScript
138 lines
2.8 KiB
TypeScript
import { db } from "@dokploy/server/db";
|
|
import {
|
|
invitation,
|
|
member,
|
|
organization,
|
|
user,
|
|
} from "@dokploy/server/db/schema";
|
|
import { TRPCError } from "@trpc/server";
|
|
import { eq } from "drizzle-orm";
|
|
import { IS_CLOUD } from "../constants";
|
|
import { getWebServerSettings } from "./web-server-settings";
|
|
|
|
export const findUserById = async (userId: string) => {
|
|
const userResult = await db.query.user.findFirst({
|
|
where: eq(user.id, userId),
|
|
// with: {
|
|
// account: true,
|
|
// },
|
|
});
|
|
if (!userResult) {
|
|
throw new TRPCError({
|
|
code: "NOT_FOUND",
|
|
message: "User not found",
|
|
});
|
|
}
|
|
return userResult;
|
|
};
|
|
|
|
export const findOrganizationById = async (organizationId: string) => {
|
|
const organizationResult = await db.query.organization.findFirst({
|
|
where: eq(organization.id, organizationId),
|
|
with: {
|
|
owner: true,
|
|
},
|
|
});
|
|
return organizationResult;
|
|
};
|
|
|
|
export const isAdminPresent = async () => {
|
|
const admin = await db.query.member.findFirst({
|
|
where: eq(member.role, "owner"),
|
|
});
|
|
|
|
if (!admin) {
|
|
return false;
|
|
}
|
|
return true;
|
|
};
|
|
|
|
export const findOwner = async () => {
|
|
const admin = await db.query.member.findFirst({
|
|
where: eq(member.role, "owner"),
|
|
with: {
|
|
user: true,
|
|
},
|
|
});
|
|
|
|
if (!admin) {
|
|
throw new TRPCError({
|
|
code: "NOT_FOUND",
|
|
message: "Admin not found",
|
|
});
|
|
}
|
|
return admin;
|
|
};
|
|
|
|
export const getUserByToken = async (token: string) => {
|
|
const userResult = await db.query.invitation.findFirst({
|
|
where: eq(invitation.id, token),
|
|
columns: {
|
|
id: true,
|
|
email: true,
|
|
status: true,
|
|
expiresAt: true,
|
|
role: true,
|
|
inviterId: true,
|
|
},
|
|
});
|
|
|
|
if (!userResult) {
|
|
throw new TRPCError({
|
|
code: "NOT_FOUND",
|
|
message: "Invitation not found",
|
|
});
|
|
}
|
|
|
|
const userAlreadyExists = await db.query.user.findFirst({
|
|
where: eq(user.email, userResult?.email || ""),
|
|
});
|
|
|
|
const { expiresAt, ...rest } = userResult;
|
|
return {
|
|
...rest,
|
|
isExpired: userResult.expiresAt < new Date(),
|
|
userAlreadyExists: !!userAlreadyExists,
|
|
};
|
|
};
|
|
|
|
export const removeUserById = async (userId: string) => {
|
|
await db
|
|
.delete(user)
|
|
.where(eq(user.id, userId))
|
|
.returning()
|
|
.then((res) => res[0]);
|
|
};
|
|
|
|
export const getDokployUrl = async () => {
|
|
if (IS_CLOUD) {
|
|
return "https://app.dokploy.com";
|
|
}
|
|
const settings = await getWebServerSettings();
|
|
|
|
if (settings?.host) {
|
|
const protocol = settings?.https ? "https" : "http";
|
|
return `${protocol}://${settings?.host}`;
|
|
}
|
|
return `http://${settings?.serverIp}:${process.env.PORT}`;
|
|
};
|
|
|
|
export const getTrustedOrigins = async () => {
|
|
const members = await db.query.member.findMany({
|
|
where: eq(member.role, "owner"),
|
|
with: {
|
|
user: true,
|
|
},
|
|
});
|
|
|
|
if (members.length === 0) {
|
|
return [];
|
|
}
|
|
|
|
const trustedOrigins = members.flatMap(
|
|
(member) => member.user.trustedOrigins || [],
|
|
);
|
|
|
|
return Array.from(new Set(trustedOrigins));
|
|
};
|