diff --git a/src/database.ts b/src/database.ts index caa5b2f..c8b3d48 100644 --- a/src/database.ts +++ b/src/database.ts @@ -1,5 +1,5 @@ -import sqlite3 from "sqlite3"; import fs from "fs"; +import sqlite3 from "sqlite3"; const dbDirectory = "./src/db"; const dbFilePath = `${dbDirectory}/database.db`; diff --git a/src/runner.ts b/src/runner.ts index 8062a1b..2dc383b 100644 --- a/src/runner.ts +++ b/src/runner.ts @@ -1,5 +1,8 @@ -export const IMAGES = { - moshell: 'ghcr.io/moshell-lang/moshell:master', +export const RUNNERS = ['bash', 'moshell', 'bun', 'typescript'] as const; +const ALLOWED_LANGUAGES = new Set(RUNNERS); +const aliases: Record = { + 'JavaScript': 'bun', + 'TypeScript': 'typescript', }; /** @@ -20,3 +23,11 @@ export function allocateBuffer(jobId: string, code: string, image: string): Buff buffer.write(code, cur); return buffer; } + +export function getRunner(language: string): typeof RUNNERS[number] | null { + language = aliases[language] || language; + if (ALLOWED_LANGUAGES.has(language)) { + return language as typeof RUNNERS[number]; + } + return null; +} diff --git a/src/server.ts b/src/server.ts index 088851e..f7462b9 100644 --- a/src/server.ts +++ b/src/server.ts @@ -22,42 +22,6 @@ await fastify.register(cors, { origin: process.env.ALLOW_ORIGIN || "*", }); -/* Code runner in a container */ - -/* POST /run : Run code in a container */ - -fastify.post( - "/run", - { - schema: { - body: Type.Object({ - code: Type.String(), - language: Type.String(), - }), - }, - }, - (req, reply) => { - const { code, language } = req.body; - const jobId = generateId(); - const buffer = allocateBuffer(jobId, code, IMAGES.moshell); - reply.raw.writeHead(200, { - "Content-Type": "text/event-stream", - Connection: "keep-alive", - "Cache-Control": "no-cache", - "Access-Control-Allow-Origin": process.env.ALLOW_ORIGIN || "*", - }); - reply.raw.on("close", () => { - delete clients[jobId]; - }); - sender.send(buffer).then(() => { - reply.raw.write("event: connected\n"); - reply.raw.write(`data: ${jobId}\n`); - reply.raw.write("id: 0\n\n"); - }); - clients[jobId] = reply; - } -); - /* Database */ /* Création du répertoire de la base de données s'il n'existe pas */