-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserver.js
More file actions
113 lines (96 loc) · 2.91 KB
/
server.js
File metadata and controls
113 lines (96 loc) · 2.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
// server.js
// but feel free to use whatever libraries or frameworks you'd like through `package.json`.
const express = require("express");
const app = express();
const puppeteer = require('puppeteer');
const bodyParser = require('body-parser');
const log = require('./logger.js').log;
var low = require('lowdb');
var FileSync = require('lowdb/adapters/FileSync');
var adapter = new FileSync('.data/db.json');
var db = low(adapter);
const scrap = require('./scrap-tests.js');
//
var browser;
puppeteer.launch({
args: [
'--no-sandbox',
'--disable-setuid-sandbox',
'--disable-dev-shm-usage',
'--disable-accelerated-2d-canvas',
'--no-first-run',
'--no-zygote',
'--single-process', // <- this one doesn't works in Windows
'--disable-gpu'
],
headless: true
}).then(r=>browser=r);
//API ROUTER
var apiRouter = express.Router();
apiRouter.get("/ping/", (req, res)=>{
res.sendStatus(200);
});
apiRouter.post("/scoretask/", (req, res)=>{
let testId = req.body.testId || false;
let taskId = req.body.taskId || false;
let answer = req.body.answer || false;
if (testId && taskId && answer){
let dbAns = db.get(`answers.task${taskId}`).value();
if (dbAns && typeof(dbAns)!="string" && typeof(dbAns)!="object"){
let isEqual = false;
log(0, `typeof task ${taskId} is available for comparison, comparing`);
let dbAns_ = String(dbAns).toLowerCase().replace(/[-_]/g, ' ');
let answer_ = String(answer).toLowerCase().replace(/[-_]/g, ' ');
dbAns_==answer_?isEqual=true:isEqual=false;
if(isEqual){
res.sendStatus(202);
} else {
res.sendStatus(204);
}
} else {
let ans = scrap.checkScore(browser, testId, taskId, answer);
ans.then((r)=>{
if (r==0){
db.set(`answers.task${taskId}`, answer).write();
res.sendStatus(202);
} else if (r==1){
res.sendStatus(500);
} else if (r==2){
res.sendStatus(204);
}
})
}
} else{
res.sendStatus(400);
}
});
apiRouter.post("/gettest/", (req, res)=>{
let testId = req.body.testId || false;
if (testId){
let ans = scrap.getTest(browser, testId);
ans.then((r)=>{
res.send(JSON.stringify(r));
})
} else {
res.sendStatus(400);
}
});
///Main
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
// https://expressjs.com/en/starter/static-files.html
app.use(express.static("public"));
// https://expressjs.com/en/starter/basic-routing.html
app.get("/", (request, response) => {
response.sendFile(__dirname + "/views/index.html");
});
// send test.html
app.get("/test/", (request, response) => {
response.sendFile(__dirname + "/views/test.html");
});
// api router
app.use("/api/", apiRouter);
// listen for requests :)
const listener = app.listen(process.env.PORT, () => {
console.log("Your app is listening on port " + listener.address().port);
});