Skip to content

Commit ade8d5d

Browse files
committed
2 parents 1d507dd + 0175332 commit ade8d5d

File tree

2 files changed

+61
-60
lines changed

2 files changed

+61
-60
lines changed

rce-server/server/api/services/code.service.js

Lines changed: 44 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
1-
import fs from "fs";
2-
import path from "path";
3-
import util from "util";
4-
import { execFile, spawn, exec } from "child_process";
5-
import ValidationService from "./validation.service";
1+
import fs from 'fs';
2+
import path from 'path';
3+
import util from 'util';
4+
import { execFile, spawn, exec } from 'child_process';
5+
import ValidationService from './validation.service';
66
const ROOT_DIR = `${process.cwd()}`;
7-
const SOURCE_DIR = path.join(ROOT_DIR, "executor");
7+
const SOURCE_DIR = path.join(ROOT_DIR, 'executor');
88
const TARGET_DIR = `/app/codes`;
9-
const IMAGE_NAME = "executor:1.0";
10-
const VOL_NAME = `my_vol`;
11-
// const VOL_NAME = SOURCE_DIR;
9+
const IMAGE_NAME = 'executor:1.0';
10+
//const VOL_NAME = `my_vol`;
11+
const VOL_NAME = SOURCE_DIR;
1212

1313
class CodeService {
1414
async execute(code, input, lang, id) {
1515
//console.log('code', code);
1616
try {
17-
!input ? (input = "") : null;
17+
!input ? (input = '') : null;
1818

1919
// validating code
2020
// await this.validateCode(code, input, lang, id);
@@ -26,7 +26,7 @@ class CodeService {
2626
);
2727
if (!isValid) {
2828
throw {
29-
message,
29+
message
3030
};
3131
}
3232

@@ -52,7 +52,7 @@ class CodeService {
5252
);
5353

5454
if (OUTPUT) {
55-
console.log("output", OUTPUT.toString());
55+
console.log('output', OUTPUT.toString());
5656
return OUTPUT.toString();
5757
}
5858
} catch (error) {
@@ -63,28 +63,28 @@ class CodeService {
6363
async writeFile(code, lang, input, id) {
6464
let fileName = `${id}code`;
6565
switch (lang) {
66-
case "javascript": {
67-
fileName += ".js";
66+
case 'javascript': {
67+
fileName += '.js';
6868
break;
6969
}
70-
case "cpp": {
71-
fileName += ".cpp";
70+
case 'cpp': {
71+
fileName += '.cpp';
7272
break;
7373
}
74-
case "python": {
75-
fileName += ".py";
74+
case 'python': {
75+
fileName += '.py';
7676
break;
7777
}
78-
case "java": {
79-
fileName += ".java";
78+
case 'java': {
79+
fileName += '.java';
8080
break;
8181
}
82-
case "c": {
83-
fileName += ".c";
82+
case 'c': {
83+
fileName += '.c';
8484
break;
8585
}
8686
default: {
87-
throw { message: "Invalid language" };
87+
throw { message: 'Invalid language' };
8888
}
8989
}
9090
const write = util.promisify(fs.writeFile);
@@ -94,38 +94,38 @@ class CodeService {
9494
await write(path.join(SOURCE_DIR, `${id}input.txt`), input);
9595
return {
9696
file: fileName,
97-
inputFile: `${id}input.txt`,
97+
inputFile: `${id}input.txt`
9898
};
9999
} catch (error) {
100100
throw { message: error };
101101
}
102102
}
103103

104104
async writeCommand(lang, file, input, id) {
105-
let command = "";
105+
let command = '';
106106
switch (lang) {
107-
case "javascript": {
107+
case 'javascript': {
108108
command = `cd ${TARGET_DIR} && node ${file} < ${input}`;
109109
break;
110110
}
111-
case "cpp": {
111+
case 'cpp': {
112112
command = `cd ${TARGET_DIR} && g++ -o ${id} ${file} && ./${id} < ${input}`;
113113
break;
114114
}
115-
case "python": {
115+
case 'python': {
116116
command = `cd ${TARGET_DIR} && python ${file} < ${input}`;
117117
break;
118118
}
119-
case "java": {
119+
case 'java': {
120120
command = `cd ${TARGET_DIR} && javac ${file} && java Input < ${input}`;
121121
break;
122122
}
123-
case "c": {
123+
case 'c': {
124124
command = `cd ${TARGET_DIR} && gcc -o ${id} ${file} && ./${id} < ${input}`;
125125
break;
126126
}
127127
default: {
128-
throw { message: "Invalid language" };
128+
throw { message: 'Invalid language' };
129129
}
130130
}
131131

@@ -141,10 +141,10 @@ class CodeService {
141141
async execChild(runCode, runContainer, id, file, inputFile, lang) {
142142
return new Promise((resolve, reject) => {
143143
const execCont = exec(`${runContainer}`);
144-
execCont.on("error", (err) => {
145-
throw { status: "404", message: err };
144+
execCont.on('error', err => {
145+
throw { status: '404', message: err };
146146
});
147-
execCont.stdout.on("data", () => {
147+
execCont.stdout.on('data', () => {
148148
exec(`${runCode}`, async (error, stdout, stderr) => {
149149
await this.endContainer(id);
150150
await this.deleteFiles(file, inputFile, lang, id);
@@ -159,24 +159,25 @@ class CodeService {
159159
}
160160

161161
async deleteFiles(fileName, inputName, lang, id) {
162-
fs.unlinkSync(path.join(SOURCE_DIR, fileName), (err) => {
162+
fs.unlinkSync(path.join(SOURCE_DIR, fileName), err => {
163163
if (err) throw { message: err };
164164
});
165165
if (inputName) {
166-
fs.unlinkSync(path.join(SOURCE_DIR, inputName), (err) => {
166+
fs.unlinkSync(path.join(SOURCE_DIR, inputName), err => {
167167
if (err) throw { message: err };
168168
});
169169
}
170-
if (lang == "cpp" || lang == "c") {
170+
if (lang == 'cpp' || lang == 'c') {
171171
if (fs.existsSync(path.join(SOURCE_DIR, id)))
172-
fs.unlinkSync(path.join(SOURCE_DIR, id), (err) => {
172+
fs.unlinkSync(path.join(SOURCE_DIR, id), err => {
173173
if (err) throw err;
174174
});
175175
}
176-
if (lang == "java") {
177-
fs.unlinkSync(path.join(SOURCE_DIR, "Input.class"), (err) => {
178-
if (err) throw err;
179-
});
176+
if (lang == 'java') {
177+
if (fs.existsSync(path.join(SOURCE_DIR, 'Input.class')))
178+
fs.unlinkSync(path.join(SOURCE_DIR, 'Input.class'), err => {
179+
if (err) throw err;
180+
});
180181
}
181182
}
182183

@@ -186,7 +187,7 @@ class CodeService {
186187
exec(`${exit}`, (error, stdout, stderr) => {
187188
if (error) {
188189
console.log(error);
189-
} else console.log("Container stoped and deleted");
190+
} else console.log('Container stoped and deleted');
190191
});
191192
}
192193
}

rce-server/server/api/services/validation.service.js

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,59 +2,59 @@ class ValidationService {
22
async execute(code, input, lang, id) {
33
// console.log("validating");
44
switch (lang) {
5-
case "javascript": {
6-
let words = ["require(", "exports.", "module.exports"];
5+
case 'javascript': {
6+
let words = ['require(', 'exports.', 'module.exports'];
77
// prevent imports
8-
var valid = !words.some((el) => {
8+
var valid = !words.some(el => {
99
return code.includes(el);
1010
});
1111
return {
1212
isValid: valid,
13-
message: "You have unacceptable libs imported",
13+
message: 'You have unacceptable libs imported'
1414
};
1515
}
16-
case "python": {
16+
case 'python': {
1717
let reg1 = RegExp(
1818
/\bimport\W+(?:\w+\W+){0,}(?:os|subprocess|importlib)\b/g
1919
);
20-
let words = ["open("];
20+
let words = ['open('];
2121

2222
if (code.match(reg1)) {
2323
return {
2424
isValid: false,
25-
message: "You have unacceptable libs imported",
25+
message: 'You have unacceptable libs imported'
2626
};
2727
} else if (
28-
words.every((el) => code.toLowerCase().includes(el.toLowerCase()))
28+
words.every(el => code.toLowerCase().includes(el.toLowerCase()))
2929
) {
3030
return {
3131
isValid: false,
32-
message: "You have unacceptable libs imported",
32+
message: 'You have unacceptable libs imported'
3333
};
3434
}
3535
return {
36-
isValid: true,
36+
isValid: true
3737
};
3838
}
39-
case "java": {
39+
case 'java': {
4040
return {
41-
isValid: true,
41+
isValid: true
4242
};
4343
}
44-
case "cpp": {
44+
case 'cpp': {
4545
return {
46-
isValid: true,
46+
isValid: true
4747
};
4848
}
49-
case "c": {
49+
case 'c': {
5050
return {
51-
isValid: true,
51+
isValid: true
5252
};
5353
}
5454
default: {
5555
return {
5656
isValid: false,
57-
message: "Please select a valid language",
57+
message: 'Please select a valid language'
5858
};
5959
}
6060
}

0 commit comments

Comments
 (0)