diff --git a/apps/docs/src/app/(home)/page.tsx b/apps/docs/src/app/(home)/page.tsx index 45623de..3ad2869 100644 --- a/apps/docs/src/app/(home)/page.tsx +++ b/apps/docs/src/app/(home)/page.tsx @@ -12,7 +12,6 @@ import { LayoutIcon, LockIcon, MousePointer, - RadioIcon, RocketIcon, SearchIcon, TimerIcon, @@ -82,23 +81,6 @@ function Hero() { Documentation - { - const demoId = `${Math.random().toString(36).substr(2, 9)}`; - const token = `${Math.random().toString(36).substr(2, 12)}`; - - sessionStorage.setItem("demo_token", token); - sessionStorage.setItem("demo_id", demoId); - sessionStorage.setItem("demo_expires", (Date.now() + 5 * 60 * 1000).toString()); - - window.location.href = `/demo?id=${demoId}&token=${token}`; - }} - > -
- - Live Demo -
-
(null); - const [isLoading, setIsLoading] = useState(true); - const [error, setError] = useState(null); - - useEffect(() => { - const validateAccess = () => { - const storedToken = sessionStorage.getItem("demo_token"); - const storedId = sessionStorage.getItem("demo_id"); - const expiresAt = sessionStorage.getItem("demo_expires"); - - if (!demoId || !token || !storedToken || !storedId || !expiresAt) { - return false; - } - - if (token !== storedToken || demoId !== storedId || Date.now() > parseInt(expiresAt)) { - return false; - } - - return true; - }; - - if (!validateAccess()) { - setError("Unauthorized access. Please use the Live Demo button to access this page."); - setIsLoading(false); - return; - } - - const createDemo = async () => { - try { - const response = await fetch("https://palmr-demo-manager.kyantech.com.br/create-demo", { - method: "POST", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify({ - palmr_demo_instance_id: demoId, - }), - }); - - if (!response.ok) { - throw new Error("Failed to create demo"); - } - - const data: CreateDemoResponse = await response.json(); - console.log("Demo creation response:", data); - } catch (err) { - console.error("Error creating demo:", err); - setError("Failed to create demo. Please try again."); - setIsLoading(false); - } - }; - - const checkStatus = async () => { - try { - const response = await fetch(`https://palmr-demo-manager.kyantech.com.br/status/${demoId}`); - - if (!response.ok) { - throw new Error("Failed to check demo status"); - } - - const data: DemoStatus = await response.json(); - setStatus(data); - - if (data.status === "ready" && data.url) { - setIsLoading(false); - } - } catch (err) { - console.error("Error checking status:", err); - setError("Failed to check demo status. Please try again."); - setIsLoading(false); - } - }; - - createDemo(); - - const interval = setInterval(checkStatus, 5000); // Check every 5 seconds - - checkStatus(); - - return () => { - clearInterval(interval); - sessionStorage.removeItem("demo_token"); - sessionStorage.removeItem("demo_id"); - sessionStorage.removeItem("demo_expires"); - }; - }, [demoId, token]); - - const handleGoToDemo = () => { - if (status?.url) { - window.open(status.url, "_blank"); - } - window.location.href = "/"; - }; - - if (error) { - return ( -
- -
-
-

Error

-

{error}

- -
-
-
- ); - } - - if (isLoading) { - return ( -
- -
-
-

Your demo is being generated, please wait...

-

- This demo will be available for 30 minutes for testing. After that, all data will be permanently deleted - and become inaccessible. You can test Palmr. with a 200MB storage limit. -

-
-
-
- ); - } - - return ( -
- -
- -
- -
-
- - Your demo is ready! - - - Click the button below to test - -
-
-
- - - - - -
-
-
-
- ); -} - -export default function DemoClient() { - return ; -} diff --git a/apps/docs/src/app/demo/page.tsx b/apps/docs/src/app/demo/page.tsx deleted file mode 100644 index 56c06c5..0000000 --- a/apps/docs/src/app/demo/page.tsx +++ /dev/null @@ -1,13 +0,0 @@ -"use client"; - -import { Suspense } from "react"; - -import DemoClient from "./components/demo-client"; - -export default function DemoPage() { - return ( - - - - ); -} diff --git a/apps/server/src/env.ts b/apps/server/src/env.ts index 0d6f3bc..3899a1c 100644 --- a/apps/server/src/env.ts +++ b/apps/server/src/env.ts @@ -14,7 +14,6 @@ const envSchema = z.object({ S3_FORCE_PATH_STYLE: z.union([z.literal("true"), z.literal("false")]).default("false"), SECURE_SITE: z.union([z.literal("true"), z.literal("false")]).default("false"), DATABASE_URL: z.string().optional().default("file:/app/server/prisma/palmr.db"), - DEMO_MODE: z.union([z.literal("true"), z.literal("false")]).default("false"), }); export const env = envSchema.parse(process.env); diff --git a/apps/server/src/modules/file/controller.ts b/apps/server/src/modules/file/controller.ts index aa1feca..e767810 100644 --- a/apps/server/src/modules/file/controller.ts +++ b/apps/server/src/modules/file/controller.ts @@ -56,17 +56,7 @@ export class FileController { }); } - // Check if DEMO_MODE is enabled - const isDemoMode = env.DEMO_MODE === "true"; - - let maxTotalStorage: bigint; - if (isDemoMode) { - // In demo mode, limit all users to 200MB - maxTotalStorage = BigInt(200 * 1024 * 1024); // 200MB in bytes - } else { - // Normal behavior - use maxTotalStoragePerUser configuration - maxTotalStorage = BigInt(await this.configService.getValue("maxTotalStoragePerUser")); - } + const maxTotalStorage = BigInt(await this.configService.getValue("maxTotalStoragePerUser")); const userFiles = await prisma.file.findMany({ where: { userId }, @@ -138,17 +128,7 @@ export class FileController { }); } - // Check if DEMO_MODE is enabled - const isDemoMode = env.DEMO_MODE === "true"; - - let maxTotalStorage: bigint; - if (isDemoMode) { - // In demo mode, limit all users to 200MB - maxTotalStorage = BigInt(200 * 1024 * 1024); // 200MB in bytes - } else { - // Normal behavior - use maxTotalStoragePerUser configuration - maxTotalStorage = BigInt(await this.configService.getValue("maxTotalStoragePerUser")); - } + const maxTotalStorage = BigInt(await this.configService.getValue("maxTotalStoragePerUser")); const userFiles = await prisma.file.findMany({ where: { userId }, diff --git a/apps/server/src/modules/reverse-share/service.ts b/apps/server/src/modules/reverse-share/service.ts index dfaa398..20827b2 100644 --- a/apps/server/src/modules/reverse-share/service.ts +++ b/apps/server/src/modules/reverse-share/service.ts @@ -533,17 +533,7 @@ export class ReverseShareService { throw new Error(`File size exceeds the maximum allowed size of ${maxSizeMB}MB`); } - // Check if DEMO_MODE is enabled - const isDemoMode = env.DEMO_MODE === "true"; - - let maxTotalStorage: bigint; - if (isDemoMode) { - // In demo mode, limit all users to 200MB - maxTotalStorage = BigInt(200 * 1024 * 1024); // 200MB in bytes - } else { - // Normal behavior - use maxTotalStoragePerUser configuration - maxTotalStorage = BigInt(await configService.getValue("maxTotalStoragePerUser")); - } + const maxTotalStorage = BigInt(await configService.getValue("maxTotalStoragePerUser")); const userFiles = await prisma.file.findMany({ where: { userId: creatorId }, diff --git a/apps/server/src/modules/storage/service.ts b/apps/server/src/modules/storage/service.ts index 0f67001..e75b43f 100644 --- a/apps/server/src/modules/storage/service.ts +++ b/apps/server/src/modules/storage/service.ts @@ -324,89 +324,45 @@ export class StorageService { uploadAllowed: boolean; }> { try { - const isDemoMode = env.DEMO_MODE === "true"; - if (isAdmin) { - if (isDemoMode) { - const demoMaxStorage = 200 * 1024 * 1024; - const demoMaxStorageGB = this._ensureNumber(demoMaxStorage / (1024 * 1024 * 1024), 0); + const diskInfo = await this._getDiskSpaceMultiplePaths(); - const userFiles = await prisma.file.findMany({ - where: { userId }, - select: { size: true }, - }); - - const totalUsedStorage = userFiles.reduce((acc, file) => acc + file.size, BigInt(0)); - const usedStorageGB = this._ensureNumber(Number(totalUsedStorage) / (1024 * 1024 * 1024), 0); - const availableStorageGB = this._ensureNumber(demoMaxStorageGB - usedStorageGB, 0); - - return { - diskSizeGB: Number(demoMaxStorageGB.toFixed(2)), - diskUsedGB: Number(usedStorageGB.toFixed(2)), - diskAvailableGB: Number(availableStorageGB.toFixed(2)), - uploadAllowed: availableStorageGB > 0, - }; - } else { - const diskInfo = await this._getDiskSpaceMultiplePaths(); - - if (!diskInfo) { - throw new Error("Unable to determine actual disk space - system configuration issue"); - } - - const { total, available } = diskInfo; - const used = total - available; - - const diskSizeGB = this._ensureNumber(total / (1024 * 1024 * 1024), 0); - const diskUsedGB = this._ensureNumber(used / (1024 * 1024 * 1024), 0); - const diskAvailableGB = this._ensureNumber(available / (1024 * 1024 * 1024), 0); - - return { - diskSizeGB: Number(diskSizeGB.toFixed(2)), - diskUsedGB: Number(diskUsedGB.toFixed(2)), - diskAvailableGB: Number(diskAvailableGB.toFixed(2)), - uploadAllowed: diskAvailableGB > 0.1, - }; + if (!diskInfo) { + throw new Error("Unable to determine actual disk space - system configuration issue"); } + + const { total, available } = diskInfo; + const used = total - available; + + const diskSizeGB = this._ensureNumber(total / (1024 * 1024 * 1024), 0); + const diskUsedGB = this._ensureNumber(used / (1024 * 1024 * 1024), 0); + const diskAvailableGB = this._ensureNumber(available / (1024 * 1024 * 1024), 0); + + return { + diskSizeGB: Number(diskSizeGB.toFixed(2)), + diskUsedGB: Number(diskUsedGB.toFixed(2)), + diskAvailableGB: Number(diskAvailableGB.toFixed(2)), + uploadAllowed: diskAvailableGB > 0.1, + }; } else if (userId) { - if (isDemoMode) { - const demoMaxStorage = 200 * 1024 * 1024; - const demoMaxStorageGB = this._ensureNumber(demoMaxStorage / (1024 * 1024 * 1024), 0); + const maxTotalStorage = BigInt(await this.configService.getValue("maxTotalStoragePerUser")); + const maxStorageGB = this._ensureNumber(Number(maxTotalStorage) / (1024 * 1024 * 1024), 10); - const userFiles = await prisma.file.findMany({ - where: { userId }, - select: { size: true }, - }); + const userFiles = await prisma.file.findMany({ + where: { userId }, + select: { size: true }, + }); - const totalUsedStorage = userFiles.reduce((acc, file) => acc + file.size, BigInt(0)); - const usedStorageGB = this._ensureNumber(Number(totalUsedStorage) / (1024 * 1024 * 1024), 0); - const availableStorageGB = this._ensureNumber(demoMaxStorageGB - usedStorageGB, 0); + const totalUsedStorage = userFiles.reduce((acc, file) => acc + file.size, BigInt(0)); + const usedStorageGB = this._ensureNumber(Number(totalUsedStorage) / (1024 * 1024 * 1024), 0); + const availableStorageGB = this._ensureNumber(maxStorageGB - usedStorageGB, 0); - return { - diskSizeGB: Number(demoMaxStorageGB.toFixed(2)), - diskUsedGB: Number(usedStorageGB.toFixed(2)), - diskAvailableGB: Number(availableStorageGB.toFixed(2)), - uploadAllowed: availableStorageGB > 0, - }; - } else { - const maxTotalStorage = BigInt(await this.configService.getValue("maxTotalStoragePerUser")); - const maxStorageGB = this._ensureNumber(Number(maxTotalStorage) / (1024 * 1024 * 1024), 10); - - const userFiles = await prisma.file.findMany({ - where: { userId }, - select: { size: true }, - }); - - const totalUsedStorage = userFiles.reduce((acc, file) => acc + file.size, BigInt(0)); - const usedStorageGB = this._ensureNumber(Number(totalUsedStorage) / (1024 * 1024 * 1024), 0); - const availableStorageGB = this._ensureNumber(maxStorageGB - usedStorageGB, 0); - - return { - diskSizeGB: Number(maxStorageGB.toFixed(2)), - diskUsedGB: Number(usedStorageGB.toFixed(2)), - diskAvailableGB: Number(availableStorageGB.toFixed(2)), - uploadAllowed: availableStorageGB > 0, - }; - } + return { + diskSizeGB: Number(maxStorageGB.toFixed(2)), + diskUsedGB: Number(usedStorageGB.toFixed(2)), + diskAvailableGB: Number(availableStorageGB.toFixed(2)), + uploadAllowed: availableStorageGB > 0, + }; } throw new Error("User ID is required for non-admin users");