-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.js
More file actions
101 lines (86 loc) · 2.47 KB
/
app.js
File metadata and controls
101 lines (86 loc) · 2.47 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
var fs = require('fs');
var path = require('path');
var crypto = require('crypto');
var koa = require('koa');
var session = require('koa-session');
var Router = require('koa-router');
var serve = require('koa-static');
var bodyParser = require('koa-bodyparser');
var UAParser = require('ua-parser-js');
var mysql = require('mysql');
var dbConn = mysql.createConnection(require('./db.json'));
dbConn.connect();
var app = koa();
app.use(bodyParser());
// Initializing session and setting it expires in one month
app.keys = 'ASDasd123v4rfv5tgbyhiujm21ed' || [];
app.use(session(app, {
maxAge: 30 * 24 * 60 * 60 * 1000
}));
// Initializing locals to make template be able to get
app.use(function *(next) {
if (!this.state.id)
this.state.id = crypto.randomBytes(32).toString('base64');
yield next;
});
// Routes
var router = new Router();
var votePage = path.join(__dirname, 'public', 'choice.html');
var pageType = path.extname(votePage);
var pageBody = fs.readFileSync(votePage);
var startT = new Date('12/26/2015 09:00').getTime();
var endT = new Date('12/26/2015 16:00').getTime();
router.get('/', function *(next) {
var now = Date.now();
if (startT <= now && endT >= now) {
this.type = pageType;
this.body = pageBody;
} else {
yield next;
}
});
/*
router.get('/databasekk', function *() {
try {
var rows = yield function(done) {
dbConn.query('SELECT * from `votes`', done);
};
this.body = rows;
} catch(e) {}
});
*/
router.post('/vote', function *() {
var parser = new UAParser(this.request.header['user-agent']);
var ip = this.request.header['x-forwarded-for'];
var os = parser.getOS().name + ' ' + parser.getOS().version;
var internal_ip = this.request.body.internal_ip || '';
var browser = parser.getBrowser().name + ' ' + parser.getBrowser().version;
var target = this.request.body.target || 0;
var age = this.request.body.age || 0;
var sex = this.request.body.sex || 0;
// wait 3 secs for stopping robot
yield function(done) {
setTimeout(done, 3000);
;}
try {
yield function(done) {
dbConn.query('INSERT INTO `votes` SET ?', {
os: os,
ip: ip,
internal_ip: internal_ip,
browser: browser,
target: target,
age: age,
gender: sex,
user_agent: this.request.header['user-agent'] || ''
}, done);
};
} catch(e) {}
this.body = {};
});
app.use(router.middleware());
// Static file path
app.use(serve(path.join(__dirname, 'public'), { hidden: true }));
app.listen(6001, function() {
console.log('server is running at port', 6001);
});