Remove demoMode logic

This commit is contained in:
Wayne
2025-10-23 16:23:18 +02:00
parent e0e7f4cab1
commit b7799f749d
9 changed files with 7 additions and 72 deletions

View File

@@ -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' });

View File

@@ -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<Response> => {
if (config.app.isDemo) {
return res.status(403).json({ message: req.t('errors.demoMode') });
}
try {
checkDeletionEnabled();
const { id } = req.params;

View File

@@ -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;

View File

@@ -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<Response> => {
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<Response> => {
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<Response> => {
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<Response> => {
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<Response> => {
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<Response> => {
if (config.app.isDemo) {
return res.status(403).json({ message: req.t('errors.demoMode') });
}
try {
const { id } = req.params;
const userId = req.user?.sub;

View File

@@ -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' });
}

View File

@@ -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<number>`count(*)` }).from(schema.users);
const isOnlyUser = Number(userCountResult[0].count) === 1;

View File

@@ -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',

View File

@@ -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,

View File

@@ -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 @@
</DropdownMenu.Root>
{/if}
</div>
<Button onclick={openCreateDialog} disabled={data.isDemo}
>{$t('app.ingestions.create_new')}</Button
>
<Button onclick={openCreateDialog}>{$t('app.ingestions.create_new')}</Button>
</div>
<div class="rounded-md border">