diff --git a/api/src/app.ts b/api/src/app.ts index 33a1e27..e423b4f 100644 --- a/api/src/app.ts +++ b/api/src/app.ts @@ -30,9 +30,7 @@ dotenv.config() instantiateLogger() -if (verifyEnvVariables()) { - process.exit(ReturnCode.InvalidEnv) -} +if (verifyEnvVariables()) process.exit(ReturnCode.InvalidEnv) const app = express() @@ -85,7 +83,7 @@ app.use( /*********************************** * Enabling CORS * ***********************************/ -if (MODE === ModeType.Server || CORS === CorsType.ENABLED) { +if (CORS === CorsType.ENABLED) { const whiteList: string[] = [] WHITELIST?.split(' ') ?.filter((url) => !!url) @@ -125,6 +123,7 @@ if (MODE === ModeType.Server) { }) ) } + app.use(express.json({ limit: '100mb' })) app.use(express.static(path.join(__dirname, '../public'))) diff --git a/api/src/controllers/code.ts b/api/src/controllers/code.ts index d4b18fd..a102330 100644 --- a/api/src/controllers/code.ts +++ b/api/src/controllers/code.ts @@ -2,7 +2,13 @@ import express from 'express' import { Request, Security, Route, Tags, Post, Body } from 'tsoa' import { ExecuteReturnJson, ExecutionController } from './internal' import { ExecuteReturnJsonResponse } from '.' -import { getPreProgramVariables, parseLogToArray } from '../utils' +import { + getDesktopUserAutoExecPath, + getPreProgramVariables, + ModeType, + parseLogToArray +} from '../utils' +import { readFile } from '@sasjs/utils' interface ExecuteSASCodePayload { /** @@ -34,13 +40,18 @@ const executeSASCode = async ( { code }: ExecuteSASCodePayload ) => { const { user } = req + const userAutoExec = + process.env.MODE === ModeType.Server + ? user?.autoExec + : await readFile(getDesktopUserAutoExecPath()) + try { const { webout, log, httpHeaders } = (await new ExecutionController().executeProgram( code, getPreProgramVariables(req), { ...req.query, _debug: 131 }, - { userAutoExec: user?.autoExec }, + { userAutoExec }, true )) as ExecuteReturnJson diff --git a/api/src/utils/file.ts b/api/src/utils/file.ts index 007ad6f..7df3d9d 100644 --- a/api/src/utils/file.ts +++ b/api/src/utils/file.ts @@ -1,4 +1,5 @@ import path from 'path' +import { homedir } from 'os' export const apiRoot = path.join(__dirname, '..', '..') export const codebaseRoot = path.join(apiRoot, '..') @@ -13,6 +14,11 @@ export const sasJSCoreMacrosInfo = path.join(sasJSCoreMacros, '.macrolist') export const getWebBuildFolder = () => path.join(codebaseRoot, 'web', 'build') +export const getSasjsHomeFolder = () => path.join(homedir(), '.sasjs-server') + +export const getDesktopUserAutoExecPath = () => + path.join(getSasjsHomeFolder(), 'user-autoexec.sas') + export const getSasjsRootFolder = () => process.driveLoc export const getAppStreamConfigPath = () => diff --git a/api/src/utils/setupFolders.ts b/api/src/utils/setupFolders.ts index 2b71f63..4d66455 100644 --- a/api/src/utils/setupFolders.ts +++ b/api/src/utils/setupFolders.ts @@ -1,7 +1,14 @@ -import { createFolder } from '@sasjs/utils' -import { getFilesFolder } from './file' +import { createFile, createFolder, fileExists } from '@sasjs/utils' +import { getDesktopUserAutoExecPath, getFilesFolder } from './file' +import { ModeType } from './verifyEnvVariables' export const setupFolders = async () => { const drivePath = getFilesFolder() await createFolder(drivePath) + + if (process.env.MODE === ModeType.Desktop) { + if (!(await fileExists(getDesktopUserAutoExecPath()))) { + await createFile(getDesktopUserAutoExecPath(), '') + } + } }