-
Notifications
You must be signed in to change notification settings - Fork 0
/
AUTHPlugin.js
56 lines (44 loc) · 1.71 KB
/
AUTHPlugin.js
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
const fs = require("fs");
const path = require("path");
const helper = require('./helper');
module.exports = function (message, env) {
if (message.response.status) {
return message;
}
const authData = helper.readHeader(message.request.headers, 'Authorization');
// username = admin, password = 123456
// Basic base64(user:pass)
if (authData) {
const parsedAuthData = authData.match(/basic\s*(\w+)/i);
if (parsedAuthData[1]) {
const authPair = Buffer.from(parsedAuthData[1], 'base64').toString().split(':');
if (authPair[0] === 'admin' && authPair[1] === '123456') {
// make session , set cookie
const sessionID = 'session_' + new Date().getTime();
const sessionPath = path.resolve(env.session, sessionID);
fs.writeFileSync(sessionPath, authPair[0]);
helper.setHeader(message.response.headers, 'Set-Cookie', 'sessionid=' + sessionID + ';max-age=3600');
return message;
} else {
message.response.status = 401;
helper.setHeader(message.response.headers, 'WWW-Authenticate', 'Basic realm="login"');
return message;
}
}
}
const cookieData = helper.readHeader(message.request.headers, 'Cookie');
if (cookieData) {
const parsedCookieData = cookieData.match(/sessionid=(session_\d+)/);
if (parsedCookieData && parsedCookieData[1]) {
const sessionPath = path.resolve(env.session, parsedCookieData[1]);
if (fs.existsSync(sessionPath)) {
if (fs.readFileSync(sessionPath).toString() === 'admin') {
return message;
}
}
}
}
message.response.status = 401;
helper.setHeader(message.response.headers, 'WWW-Authenticate', 'Basic realm="login"');
return message;
}