diff --git a/packages/backend/src/api/controllers/api-key.controller.ts b/packages/backend/src/api/controllers/api-key.controller.ts index a1dcf93..97b2b95 100644 --- a/packages/backend/src/api/controllers/api-key.controller.ts +++ b/packages/backend/src/api/controllers/api-key.controller.ts @@ -1,7 +1,6 @@ import { Request, Response } from 'express'; import { ApiKeyService } from '../../services/ApiKeyService'; import { z } from 'zod'; -import { config } from '../../config'; import { UserService } from '../../services/UserService'; const generateApiKeySchema = z.object({ @@ -18,9 +17,6 @@ const generateApiKeySchema = z.object({ export class ApiKeyController { private userService = new UserService(); public async generateApiKey(req: Request, res: Response) { - if (config.app.isDemo) { - return res.status(403).json({ message: req.t('errors.demoMode') }); - } try { const { name, expiresInDays } = generateApiKeySchema.parse(req.body); if (!req.user || !req.user.sub) { @@ -62,9 +58,6 @@ export class ApiKeyController { } public async deleteApiKey(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/archived-email.controller.ts b/packages/backend/src/api/controllers/archived-email.controller.ts index e04b551..2b3a25e 100644 --- a/packages/backend/src/api/controllers/archived-email.controller.ts +++ b/packages/backend/src/api/controllers/archived-email.controller.ts @@ -1,6 +1,5 @@ import { Request, Response } from 'express'; import { ArchivedEmailService } from '../../services/ArchivedEmailService'; -import { config } from '../../config'; import { UserService } from '../../services/UserService'; import { checkDeletionEnabled } from '../../helpers/deletionGuard'; @@ -60,9 +59,6 @@ export class ArchivedEmailController { }; public deleteArchivedEmail = async (req: Request, res: Response): Promise => { - if (config.app.isDemo) { - return res.status(403).json({ message: req.t('errors.demoMode') }); - } try { checkDeletionEnabled(); const { id } = req.params; diff --git a/packages/backend/src/api/controllers/iam.controller.ts b/packages/backend/src/api/controllers/iam.controller.ts index 713e908..4e6fed3 100644 --- a/packages/backend/src/api/controllers/iam.controller.ts +++ b/packages/backend/src/api/controllers/iam.controller.ts @@ -3,7 +3,6 @@ import { IamService } from '../../services/IamService'; import { PolicyValidator } from '../../iam-policy/policy-validator'; import type { CaslPolicy } from '@open-archiver/types'; import { logger } from '../../config/logger'; -import { config } from '../../config'; export class IamController { #iamService: IamService; @@ -42,9 +41,6 @@ export class IamController { }; public createRole = async (req: Request, res: Response) => { - if (config.app.isDemo) { - return res.status(403).json({ message: req.t('errors.demoMode') }); - } const { name, policies } = req.body; if (!name || !policies) { @@ -69,9 +65,6 @@ export class IamController { }; public deleteRole = async (req: Request, res: Response) => { - if (config.app.isDemo) { - return res.status(403).json({ message: req.t('errors.demoMode') }); - } const { id } = req.params; try { @@ -83,9 +76,6 @@ export class IamController { }; public updateRole = async (req: Request, res: Response) => { - if (config.app.isDemo) { - return res.status(403).json({ message: req.t('errors.demoMode') }); - } const { id } = req.params; const { name, policies } = req.body; diff --git a/packages/backend/src/api/controllers/ingestion.controller.ts b/packages/backend/src/api/controllers/ingestion.controller.ts index 1ed0501..b4c9b93 100644 --- a/packages/backend/src/api/controllers/ingestion.controller.ts +++ b/packages/backend/src/api/controllers/ingestion.controller.ts @@ -7,7 +7,6 @@ import { SafeIngestionSource, } from '@open-archiver/types'; import { logger } from '../../config/logger'; -import { config } from '../../config'; import { UserService } from '../../services/UserService'; import { checkDeletionEnabled } from '../../helpers/deletionGuard'; @@ -25,9 +24,7 @@ export class IngestionController { } public create = async (req: Request, res: Response): Promise => { - if (config.app.isDemo) { - return res.status(403).json({ message: req.t('errors.demoMode') }); - } + try { const dto: CreateIngestionSourceDto = req.body; const userId = req.user?.sub; @@ -81,9 +78,7 @@ export class IngestionController { }; public update = async (req: Request, res: Response): Promise => { - if (config.app.isDemo) { - return res.status(403).json({ message: req.t('errors.demoMode') }); - } + try { const { id } = req.params; const dto: UpdateIngestionSourceDto = req.body; @@ -108,9 +103,7 @@ export class IngestionController { }; public delete = async (req: Request, res: Response): Promise => { - if (config.app.isDemo) { - return res.status(403).json({ message: req.t('errors.demoMode') }); - } + try { checkDeletionEnabled(); const { id } = req.params; @@ -136,9 +129,7 @@ export class IngestionController { }; public triggerInitialImport = async (req: Request, res: Response): Promise => { - if (config.app.isDemo) { - return res.status(403).json({ message: req.t('errors.demoMode') }); - } + try { const { id } = req.params; await IngestionService.triggerInitialImport(id); @@ -153,9 +144,7 @@ export class IngestionController { }; public pause = async (req: Request, res: Response): Promise => { - if (config.app.isDemo) { - return res.status(403).json({ message: req.t('errors.demoMode') }); - } + try { const { id } = req.params; const userId = req.user?.sub; @@ -184,9 +173,7 @@ export class IngestionController { }; public triggerForceSync = async (req: Request, res: Response): Promise => { - if (config.app.isDemo) { - return res.status(403).json({ message: req.t('errors.demoMode') }); - } + try { const { id } = req.params; const userId = req.user?.sub; diff --git a/packages/backend/src/api/controllers/settings.controller.ts b/packages/backend/src/api/controllers/settings.controller.ts index 78ea66a..5ffa180 100644 --- a/packages/backend/src/api/controllers/settings.controller.ts +++ b/packages/backend/src/api/controllers/settings.controller.ts @@ -1,6 +1,5 @@ import type { Request, Response } from 'express'; import { SettingsService } from '../../services/SettingsService'; -import { config } from '../../config'; import { UserService } from '../../services/UserService'; const settingsService = new SettingsService(); @@ -19,9 +18,6 @@ export const getSystemSettings = async (req: Request, res: Response) => { export const updateSystemSettings = async (req: Request, res: Response) => { try { // Basic validation can be performed here if necessary - if (config.app.isDemo) { - return res.status(403).json({ message: req.t('errors.demoMode') }); - } 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 230dfcf..6c67b0b 100644 --- a/packages/backend/src/api/controllers/user.controller.ts +++ b/packages/backend/src/api/controllers/user.controller.ts @@ -3,7 +3,6 @@ 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(); @@ -22,9 +21,6 @@ export const getUser = async (req: Request, res: Response) => { }; export const createUser = 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, password, roleId } = req.body; if (!req.user || !req.user.sub) { return res.status(401).json({ message: 'Unauthorized' }); @@ -44,9 +40,6 @@ export const createUser = async (req: Request, res: Response) => { }; export const updateUser = 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, roleId } = req.body; if (!req.user || !req.user.sub) { return res.status(401).json({ message: 'Unauthorized' }); @@ -69,9 +62,6 @@ export const updateUser = async (req: Request, res: Response) => { }; export const deleteUser = async (req: Request, res: Response) => { - if (config.app.isDemo) { - return res.status(403).json({ message: req.t('errors.demoMode') }); - } const userCountResult = await db.select({ count: sql`count(*)` }).from(schema.users); const isOnlyUser = Number(userCountResult[0].count) === 1; diff --git a/packages/backend/src/config/app.ts b/packages/backend/src/config/app.ts index df58659..4e579b0 100644 --- a/packages/backend/src/config/app.ts +++ b/packages/backend/src/config/app.ts @@ -4,7 +4,6 @@ export const app = { nodeEnv: process.env.NODE_ENV || 'development', port: process.env.PORT_BACKEND ? parseInt(process.env.PORT_BACKEND, 10) : 4000, encryptionKey: process.env.ENCRYPTION_KEY, - isDemo: process.env.IS_DEMO === 'true', syncFrequency: process.env.SYNC_FREQUENCY || '* * * * *', //default to 1 minute enableDeletion: process.env.ENABLE_DELETION === 'true', allInclusiveArchive: process.env.ALL_INCLUSIVE_ARCHIVE === 'true', diff --git a/packages/frontend/src/routes/+layout.server.ts b/packages/frontend/src/routes/+layout.server.ts index 88a7d44..4ed4db6 100644 --- a/packages/frontend/src/routes/+layout.server.ts +++ b/packages/frontend/src/routes/+layout.server.ts @@ -64,7 +64,6 @@ export const load: LayoutServerLoad = async (event) => { user: locals.user, accessToken: locals.accessToken, enterpriseMode: locals.enterpriseMode, - isDemo: process.env.IS_DEMO === 'true', systemSettings, currentVersion: version, newVersionInfo: newVersionInfo, diff --git a/packages/frontend/src/routes/dashboard/ingestions/+page.svelte b/packages/frontend/src/routes/dashboard/ingestions/+page.svelte index 5d25099..746fbfb 100644 --- a/packages/frontend/src/routes/dashboard/ingestions/+page.svelte +++ b/packages/frontend/src/routes/dashboard/ingestions/+page.svelte @@ -31,16 +31,6 @@ }; const openEditDialog = (source: IngestionSource) => { - if (data.isDemo) { - setAlert({ - type: 'warning', - title: 'Demo mode', - message: 'Editing is not allowed in demo mode.', - duration: 5000, - show: true, - }); - return; - } selectedSource = source; isDialogOpen = true; }; @@ -100,9 +90,6 @@ try { const isPaused = source.status === 'paused'; const newStatus = isPaused ? 'active' : 'paused'; - if (data.isDemo) { - throw Error('This operation is not allowed in demo mode.'); - } if (newStatus === 'paused') { const response = await api(`/ingestion-sources/${source.id}/pause`, { method: 'POST', @@ -299,9 +286,7 @@ {/if} - +