mirror of
https://github.com/andwati/dokploy.git
synced 2026-11-15 00:15:17 +00:00
refactor: optimize trusted origins retrieval and caching in auth and admin services
This commit is contained in:
@@ -73,23 +73,25 @@ const { handler, api } = betterAuth({
|
|||||||
disabled: process.env.NODE_ENV === "production",
|
disabled: process.env.NODE_ENV === "production",
|
||||||
},
|
},
|
||||||
async trustedOrigins() {
|
async trustedOrigins() {
|
||||||
const trustedOrigins = await getTrustedOrigins();
|
|
||||||
if (IS_CLOUD) {
|
if (IS_CLOUD) {
|
||||||
return trustedOrigins;
|
return getTrustedOrigins();
|
||||||
}
|
}
|
||||||
const settings = await getWebServerSettings();
|
const [trustedOrigins, settings] = await Promise.all([
|
||||||
if (!settings) {
|
getTrustedOrigins(),
|
||||||
return [];
|
getWebServerSettings(),
|
||||||
}
|
]);
|
||||||
return [
|
if (!settings) return [];
|
||||||
...(settings?.serverIp ? [`http://${settings?.serverIp}:3000`] : []),
|
const devOrigins =
|
||||||
...(settings?.host ? [`https://${settings?.host}`] : []),
|
process.env.NODE_ENV === "development"
|
||||||
...(process.env.NODE_ENV === "development"
|
|
||||||
? [
|
? [
|
||||||
"http://localhost:3000",
|
"http://localhost:3000",
|
||||||
"https://absolutely-handy-falcon.ngrok-free.app",
|
"https://absolutely-handy-falcon.ngrok-free.app",
|
||||||
]
|
]
|
||||||
: []),
|
: [];
|
||||||
|
return [
|
||||||
|
...(settings?.serverIp ? [`http://${settings?.serverIp}:3000`] : []),
|
||||||
|
...(settings?.host ? [`https://${settings?.host}`] : []),
|
||||||
|
...devOrigins,
|
||||||
...trustedOrigins,
|
...trustedOrigins,
|
||||||
];
|
];
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -117,23 +117,34 @@ export const getDokployUrl = async () => {
|
|||||||
return `http://${settings?.serverIp}:${process.env.PORT}`;
|
return `http://${settings?.serverIp}:${process.env.PORT}`;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getTrustedOrigins = async () => {
|
const TRUSTED_ORIGINS_CACHE_TTL_MS = 60_000;
|
||||||
const members = await db.query.member.findMany({
|
let trustedOriginsCache: { data: string[]; expiresAt: number } | null = null;
|
||||||
where: eq(member.role, "owner"),
|
|
||||||
with: {
|
|
||||||
user: true,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
if (members.length === 0) {
|
export const getTrustedOrigins = async () => {
|
||||||
return [];
|
const runQuery = async () => {
|
||||||
|
const rows = await db
|
||||||
|
.select({ trustedOrigins: user.trustedOrigins })
|
||||||
|
.from(member)
|
||||||
|
.innerJoin(user, eq(member.userId, user.id))
|
||||||
|
.where(eq(member.role, "owner"));
|
||||||
|
return Array.from(new Set(rows.flatMap((r) => r.trustedOrigins ?? [])));
|
||||||
|
};
|
||||||
|
|
||||||
|
if (IS_CLOUD) {
|
||||||
|
const now = Date.now();
|
||||||
|
console.log("trustedOriginsCache", trustedOriginsCache?.data.length);
|
||||||
|
if (trustedOriginsCache && now < trustedOriginsCache.expiresAt) {
|
||||||
|
return trustedOriginsCache.data;
|
||||||
|
}
|
||||||
|
const trustedOrigins = await runQuery();
|
||||||
|
trustedOriginsCache = {
|
||||||
|
data: trustedOrigins,
|
||||||
|
expiresAt: now + TRUSTED_ORIGINS_CACHE_TTL_MS,
|
||||||
|
};
|
||||||
|
return trustedOrigins;
|
||||||
}
|
}
|
||||||
|
|
||||||
const trustedOrigins = members.flatMap(
|
return runQuery();
|
||||||
(member) => member.user.trustedOrigins || [],
|
|
||||||
);
|
|
||||||
|
|
||||||
return Array.from(new Set(trustedOrigins));
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getTrustedProviders = async () => {
|
export const getTrustedProviders = async () => {
|
||||||
|
|||||||
Reference in New Issue
Block a user