diff --git a/packages/backend/src/api/controllers/api-key.controller.ts b/packages/backend/src/api/controllers/api-key.controller.ts index 7f27025..537bcc4 100644 --- a/packages/backend/src/api/controllers/api-key.controller.ts +++ b/packages/backend/src/api/controllers/api-key.controller.ts @@ -2,6 +2,7 @@ import { Request, Response } from 'express'; import { ApiKeyService } from '../../services/ApiKeyService'; import { z } from 'zod'; import { UserService } from '../../services/UserService'; +import { config } from '../../config'; const generateApiKeySchema = z.object({ name: z @@ -18,6 +19,9 @@ export class ApiKeyController { private userService = new UserService(); public generateApiKey = async (req: Request, res: Response) => { try { + if (config.app.isDemo) { + return res.status(403).json({ message: req.t('errors.demoMode') }); + } const { name, expiresInDays } = generateApiKeySchema.parse(req.body); if (!req.user || !req.user.sub) { return res.status(401).json({ message: 'Unauthorized' }); @@ -58,6 +62,9 @@ export class ApiKeyController { }; public deleteApiKey = async (req: Request, res: Response) => { + if (config.app.isDemo) { + return res.status(403).json({ message: req.t('errors.demoMode') }); + } const { id } = req.params; if (!req.user || !req.user.sub) { return res.status(401).json({ message: 'Unauthorized' }); diff --git a/packages/backend/src/api/controllers/user.controller.ts b/packages/backend/src/api/controllers/user.controller.ts index f1df9cb..90f64a9 100644 --- a/packages/backend/src/api/controllers/user.controller.ts +++ b/packages/backend/src/api/controllers/user.controller.ts @@ -3,6 +3,7 @@ import { UserService } from '../../services/UserService'; import * as schema from '../../database/schema'; import { sql } from 'drizzle-orm'; import { db } from '../../database'; +import { config } from '../../config'; const userService = new UserService(); @@ -92,6 +93,9 @@ export const getProfile = async (req: Request, res: Response) => { }; export const updateProfile = async (req: Request, res: Response) => { + if (config.app.isDemo) { + return res.status(403).json({ message: req.t('errors.demoMode') }); + } const { email, first_name, last_name } = req.body; if (!req.user || !req.user.sub) { return res.status(401).json({ message: 'Unauthorized' }); @@ -111,6 +115,9 @@ export const updateProfile = async (req: Request, res: Response) => { }; export const updatePassword = async (req: Request, res: Response) => { + if (config.app.isDemo) { + return res.status(403).json({ message: req.t('errors.demoMode') }); + } const { currentPassword, newPassword } = req.body; if (!req.user || !req.user.sub) { return res.status(401).json({ message: 'Unauthorized' }); diff --git a/packages/backend/src/config/app.ts b/packages/backend/src/config/app.ts index 4e579b0..61e6747 100644 --- a/packages/backend/src/config/app.ts +++ b/packages/backend/src/config/app.ts @@ -7,4 +7,5 @@ export const app = { syncFrequency: process.env.SYNC_FREQUENCY || '* * * * *', //default to 1 minute enableDeletion: process.env.ENABLE_DELETION === 'true', allInclusiveArchive: process.env.ALL_INCLUSIVE_ARCHIVE === 'true', + isDemo: process.env.IS_DEMO === 'true', }; diff --git a/packages/frontend/src/routes/dashboard/admin/jobs/[queueName]/+page.svelte b/packages/frontend/src/routes/dashboard/admin/jobs/[queueName]/+page.svelte index 0f750aa..ef5e792 100644 --- a/packages/frontend/src/routes/dashboard/admin/jobs/[queueName]/+page.svelte +++ b/packages/frontend/src/routes/dashboard/admin/jobs/[queueName]/+page.svelte @@ -133,7 +133,7 @@ {/if}