Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 46545d6

Browse files
author
Bhanu Teja P
committed
Initial Commit
0 parents  commit 46545d6

File tree

8 files changed

+133
-0
lines changed

8 files changed

+133
-0
lines changed

.babelrc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"presets": [
3+
"@babel/preset-env"
4+
]
5+
}

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
temp.*

package.json

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
{
2+
"name": "openrank-execution",
3+
"version": "1.0.0",
4+
"description": "server/instance for execution of user submitted code on openrank platform",
5+
"main": "src/index.js",
6+
"scripts": {
7+
"start": "nodemon --exec babel-node src/index.js",
8+
"test": "echo \"Error: no test specified\" && exit 1"
9+
},
10+
"repository": {
11+
"type": "git",
12+
"url": "git+https://github.com/coderplex/OpenRank.git"
13+
},
14+
"keywords": [
15+
"openrank",
16+
"execution",
17+
"code",
18+
"submission"
19+
],
20+
"author": "Coderplex",
21+
"license": "ISC",
22+
"dependencies": {
23+
"cors": "^2.8.5",
24+
"express": "^4.17.1",
25+
"node-cmd": "^3.0.0"
26+
},
27+
"devDependencies": {
28+
"@babel/core": "^7.5.5",
29+
"@babel/node": "^7.5.5",
30+
"@babel/preset-env": "^7.5.5",
31+
"nodemon": "^1.19.1"
32+
}
33+
}

src/index.js

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
import express from "express";
2+
import cors from "cors";
3+
// import routes from './routes'
4+
5+
const fs = require("fs");
6+
const { exec } = require("child_process");
7+
8+
console.log("Starting OpenRank Execution Server");
9+
10+
const app = express();
11+
app.use(cors());
12+
app.use(express.urlencoded({ extended: true }));
13+
app.use(express.json());
14+
15+
//Add handlers for routes here
16+
17+
//Lang specific meta, we have to configure this manually for now
18+
const langMeta = {
19+
python3: {
20+
extension: "py",
21+
command: "py",
22+
interpreted: true
23+
},
24+
python2: {
25+
extension: "py",
26+
command: "python",
27+
interpreted: true
28+
},
29+
c: {
30+
extension: "c",
31+
defaultExecName: "a",
32+
execExtension: "exe",
33+
command: "",
34+
interpreted: false,
35+
compile: "gcc"
36+
},
37+
java: {
38+
extension: "java",
39+
defaultExecName: "",
40+
execExtension: "",
41+
command: "java",
42+
interpreted: false,
43+
compile: "javac"
44+
}
45+
};
46+
47+
app.post("/", (req, res) => {
48+
//NOTE: Experimentation code
49+
/*
50+
This route takes the language and code from request and executes
51+
it by spawning a child process based on the meta-data
52+
available for a given language
53+
*/
54+
const { lang, code, filename } = req.body;
55+
fs.writeFile(`${filename}.${langMeta[lang].extension}`, code, err => {
56+
if (err) console.log(err);
57+
else console.log("Successfully Written to File.");
58+
});
59+
if (langMeta[lang].interpreted) {
60+
exec(
61+
`${langMeta[lang].command} ${filename}.${langMeta[lang].extension}`,
62+
{ timeout: 1000 },
63+
(err, stdout, stderr) => res.send({ err, stderr, stdout })
64+
);
65+
} else {
66+
console.log("compiled lang");
67+
exec(
68+
`${langMeta[lang].compile} ${filename}.${langMeta[lang].extension}`,
69+
(err, stdout, stderr) => {
70+
if (!stderr && !err) {
71+
const { execExtension, defaultExecName } = langMeta[lang];
72+
const execFilename =
73+
(defaultExecName || filename) +
74+
(execExtension ? `.${execExtension}` : ``);
75+
console.log(
76+
`command for execution: ${langMeta[lang].command} ${execFilename}`
77+
);
78+
exec(
79+
`${langMeta[lang].command} ${execFilename}`,
80+
{ timeout: 1000 },
81+
(err, stdout, stderr) => res.send({ err, stderr, stdout })
82+
);
83+
} else {
84+
res.send({ err, stderr, stdout });
85+
}
86+
}
87+
);
88+
}
89+
//TODO: Add logic to compare output with testcases saved in db before sending the response.
90+
});
91+
92+
app.listen(9000, () => {
93+
console.log("Example app listening on port 9000!");
94+
});
163 KB
Loading
165 KB
Loading
163 KB
Loading
163 KB
Loading

0 commit comments

Comments
 (0)