RocketChat/Rocket.Chat

View on GitHub
apps/meteor/app/integrations/server/lib/validateScriptEngine.ts

Summary

Maintainability
A
0 mins
Test Coverage
import type { IntegrationScriptEngine } from '@rocket.chat/core-typings';
import { wrapExceptions } from '@rocket.chat/tools';

const FREEZE_INTEGRATION_SCRIPTS_VALUE = String(process.env.FREEZE_INTEGRATION_SCRIPTS).toLowerCase();
const FREEZE_INTEGRATION_SCRIPTS = ['yes', 'true'].includes(FREEZE_INTEGRATION_SCRIPTS_VALUE);

export const validateScriptEngine = (engine?: IntegrationScriptEngine) => {
    if (FREEZE_INTEGRATION_SCRIPTS) {
        throw new Error('integration-scripts-disabled');
    }

    const engineCode = engine === 'isolated-vm' ? 'ivm' : 'vm2';

    if (engineCode === FREEZE_INTEGRATION_SCRIPTS_VALUE) {
        if (engineCode === 'ivm') {
            throw new Error('integration-scripts-isolated-vm-disabled');
        }

        throw new Error('integration-scripts-vm2-disabled');
    }

    return true;
};

export const isScriptEngineFrozen = (engine?: IntegrationScriptEngine) =>
    wrapExceptions(() => !validateScriptEngine(engine)).catch(() => true);