mm_os 2.8.8 → 2.8.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/core/base/index.js +28 -28
- package/core/base/mqtt/index.js +314 -314
- package/core/base/mqtt/lib.js +39 -39
- package/core/base/web/index.js +109 -109
- package/core/com/mqtt/index.js +2 -6
- package/demo/index.js +28 -0
- package/middleware/cors/index.js +84 -84
- package/middleware/cors/middleware.json +6 -6
- package/middleware/log/index.js +20 -20
- package/middleware/log/middleware.json +8 -8
- package/middleware/mqtt_base/index.js +10 -10
- package/middleware/mqtt_base/middleware.json +7 -7
- package/middleware/waf/index.js +64 -64
- package/middleware/waf/middleware.json +8 -8
- package/middleware/waf_ip/index.js +115 -115
- package/middleware/waf_ip/middleware.json +9 -9
- package/middleware/web_base/index.js +65 -65
- package/middleware/web_base/middleware.json +8 -8
- package/middleware/web_event/index.js +412 -412
- package/middleware/web_event/middleware.json +9 -9
- package/middleware/web_proxy/index.js +23 -23
- package/middleware/web_proxy/middleware.json +8 -8
- package/middleware/web_router/index.js +33 -33
- package/middleware/web_router/middleware.json +9 -9
- package/middleware/web_socket/index.js +21 -21
- package/middleware/web_socket/middleware.json +8 -8
- package/middleware/web_static/index.js +25 -25
- package/middleware/web_static/middleware.json +8 -8
- package/package.json +3 -3
- package/static/file/image/user/42/2025_01_02_10_58_15.png +0 -0
package/middleware/waf/index.js
CHANGED
|
@@ -1,64 +1,64 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 使用正则表达式,检测字符串是否含有攻击特征,检测到攻击特征返回true,没检测到返回false
|
|
3
|
-
* @param {String} url 网址
|
|
4
|
-
*/
|
|
5
|
-
function waf_check(url) {
|
|
6
|
-
// 基本防御
|
|
7
|
-
var rule = [
|
|
8
|
-
/select.+(from|limit)/i,
|
|
9
|
-
/(?:(union(.*?)select))/i,
|
|
10
|
-
/sleep\((\s*)(\d*)(\s*)\)/i,
|
|
11
|
-
/group\s+by.+\(/i,
|
|
12
|
-
/(?:from\W+information_schema\W)/i,
|
|
13
|
-
/(?:(?:current_)user|database|schema|connection_id)\s*\(/i,
|
|
14
|
-
/\s*or\s+.*=.*/i,
|
|
15
|
-
/order\s+by\s+.*--$/i,
|
|
16
|
-
/benchmark\((.*)\,(.*)\)/i,
|
|
17
|
-
/base64_decode\(/i,
|
|
18
|
-
/(?:(?:current_)user|database|version|schema|connection_id)\s*\(/i,
|
|
19
|
-
/(?:etc\/\W*passwd)/i,
|
|
20
|
-
/into(\s+)+(?:dump|out)file\s*/i,
|
|
21
|
-
/xwork.MethodAccessor/i,
|
|
22
|
-
/(?:define|eval|file_get_contents|include|require|require_once|shell_exec|phpinfo|system|passthru|preg_\w+|execute|echo|print|print_r|var_dump|(fp)open|alert|showmodaldialog)\(/i,
|
|
23
|
-
/\<(iframe|script|body|img|layer|div|meta|style|base|object|input)/i,
|
|
24
|
-
/(onmouseover|onmousemove|onerror|onload)\=/i,
|
|
25
|
-
/javascript:/i,
|
|
26
|
-
/\.\.\/\.\.\//i,
|
|
27
|
-
/\|\|.*(?:ls|pwd|whoami|ll|ifconfog|ipconfig|&&|chmod|cd|mkdir|rmdir|cp|mv)/i,
|
|
28
|
-
/(?:ls|pwd|whoami|ll|ifconfog|ipconfig|&&|chmod|cd|mkdir|rmdir|cp|mv).*\|\|/i,
|
|
29
|
-
/(gopher|doc|php|glob|file|phar|zlib|ftp|ldap|dict|ogg|data)\:\//i
|
|
30
|
-
];
|
|
31
|
-
for (var i = 0; i < rule.length; i++) {
|
|
32
|
-
if (rule[i].test(url) == true) {
|
|
33
|
-
return rule[i];
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
return null;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
function getClientIP(req) {
|
|
40
|
-
return req.headers['x-forwarded-for'] || req.headers['X-Forwarded-For'] ||
|
|
41
|
-
req.connection.remoteAddress ||
|
|
42
|
-
req.socket.remoteAddress ||
|
|
43
|
-
req.connection.socket.remoteAddress;
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* 应用
|
|
48
|
-
* @param {Object} server 服务
|
|
49
|
-
* @param {Object} config 配置参数
|
|
50
|
-
*/
|
|
51
|
-
module.exports = function(server, config) {
|
|
52
|
-
/* WAF(web防火墙) */
|
|
53
|
-
server.use(async (ctx, next) => {
|
|
54
|
-
var url = ctx.url;
|
|
55
|
-
var danger = waf_check(url);
|
|
56
|
-
if (danger) {
|
|
57
|
-
var ip = getClientIP(ctx.req);
|
|
58
|
-
$.log.warn(`检测到来自IP ${ip} 的攻击`, "规则:", danger.toString());
|
|
59
|
-
} else {
|
|
60
|
-
await next();
|
|
61
|
-
}
|
|
62
|
-
});
|
|
63
|
-
return server;
|
|
64
|
-
};
|
|
1
|
+
/**
|
|
2
|
+
* 使用正则表达式,检测字符串是否含有攻击特征,检测到攻击特征返回true,没检测到返回false
|
|
3
|
+
* @param {String} url 网址
|
|
4
|
+
*/
|
|
5
|
+
function waf_check(url) {
|
|
6
|
+
// 基本防御
|
|
7
|
+
var rule = [
|
|
8
|
+
/select.+(from|limit)/i,
|
|
9
|
+
/(?:(union(.*?)select))/i,
|
|
10
|
+
/sleep\((\s*)(\d*)(\s*)\)/i,
|
|
11
|
+
/group\s+by.+\(/i,
|
|
12
|
+
/(?:from\W+information_schema\W)/i,
|
|
13
|
+
/(?:(?:current_)user|database|schema|connection_id)\s*\(/i,
|
|
14
|
+
/\s*or\s+.*=.*/i,
|
|
15
|
+
/order\s+by\s+.*--$/i,
|
|
16
|
+
/benchmark\((.*)\,(.*)\)/i,
|
|
17
|
+
/base64_decode\(/i,
|
|
18
|
+
/(?:(?:current_)user|database|version|schema|connection_id)\s*\(/i,
|
|
19
|
+
/(?:etc\/\W*passwd)/i,
|
|
20
|
+
/into(\s+)+(?:dump|out)file\s*/i,
|
|
21
|
+
/xwork.MethodAccessor/i,
|
|
22
|
+
/(?:define|eval|file_get_contents|include|require|require_once|shell_exec|phpinfo|system|passthru|preg_\w+|execute|echo|print|print_r|var_dump|(fp)open|alert|showmodaldialog)\(/i,
|
|
23
|
+
/\<(iframe|script|body|img|layer|div|meta|style|base|object|input)/i,
|
|
24
|
+
/(onmouseover|onmousemove|onerror|onload)\=/i,
|
|
25
|
+
/javascript:/i,
|
|
26
|
+
/\.\.\/\.\.\//i,
|
|
27
|
+
/\|\|.*(?:ls|pwd|whoami|ll|ifconfog|ipconfig|&&|chmod|cd|mkdir|rmdir|cp|mv)/i,
|
|
28
|
+
/(?:ls|pwd|whoami|ll|ifconfog|ipconfig|&&|chmod|cd|mkdir|rmdir|cp|mv).*\|\|/i,
|
|
29
|
+
/(gopher|doc|php|glob|file|phar|zlib|ftp|ldap|dict|ogg|data)\:\//i
|
|
30
|
+
];
|
|
31
|
+
for (var i = 0; i < rule.length; i++) {
|
|
32
|
+
if (rule[i].test(url) == true) {
|
|
33
|
+
return rule[i];
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function getClientIP(req) {
|
|
40
|
+
return req.headers['x-forwarded-for'] || req.headers['X-Forwarded-For'] ||
|
|
41
|
+
req.connection.remoteAddress ||
|
|
42
|
+
req.socket.remoteAddress ||
|
|
43
|
+
req.connection.socket.remoteAddress;
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* 应用
|
|
48
|
+
* @param {Object} server 服务
|
|
49
|
+
* @param {Object} config 配置参数
|
|
50
|
+
*/
|
|
51
|
+
module.exports = function(server, config) {
|
|
52
|
+
/* WAF(web防火墙) */
|
|
53
|
+
server.use(async (ctx, next) => {
|
|
54
|
+
var url = ctx.url;
|
|
55
|
+
var danger = waf_check(url);
|
|
56
|
+
if (danger) {
|
|
57
|
+
var ip = getClientIP(ctx.req);
|
|
58
|
+
$.log.warn(`检测到来自IP ${ip} 的攻击`, "规则:", danger.toString());
|
|
59
|
+
} else {
|
|
60
|
+
await next();
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
return server;
|
|
64
|
+
};
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "web_waf",
|
|
3
|
-
"title": "web防火墙",
|
|
4
|
-
"description": "用于防止sql注入、脚本注入等",
|
|
5
|
-
"version": "1.0",
|
|
6
|
-
"type": "web",
|
|
7
|
-
"process_type": "common_before",
|
|
8
|
-
"sort": 3
|
|
1
|
+
{
|
|
2
|
+
"name": "web_waf",
|
|
3
|
+
"title": "web防火墙",
|
|
4
|
+
"description": "用于防止sql注入、脚本注入等",
|
|
5
|
+
"version": "1.0",
|
|
6
|
+
"type": "web",
|
|
7
|
+
"process_type": "common_before",
|
|
8
|
+
"sort": 3
|
|
9
9
|
}
|
|
@@ -1,116 +1,116 @@
|
|
|
1
|
-
const os = require('os');
|
|
2
|
-
const {
|
|
3
|
-
exec
|
|
4
|
-
} = require('child_process');
|
|
5
|
-
const platform = os.platform();
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* 获取客户端IP
|
|
9
|
-
* @param {Object} req 请求对象
|
|
10
|
-
* @returns {String} 返回真实IP
|
|
11
|
-
*/
|
|
12
|
-
function getClientIP(req) {
|
|
13
|
-
var ip = req.headers['x-forwarded-for'] || req.headers['X-Forwarded-For'] || req.headers['x-real-ip'] ||
|
|
14
|
-
req.connection.remoteAddress ||
|
|
15
|
-
req.socket.remoteAddress ||
|
|
16
|
-
req.connection.socket.remoteAddress;
|
|
17
|
-
if (ip && ip.split(',').length > 0) {
|
|
18
|
-
ip = ip.split(',')[0]; // 取第一个IP地址
|
|
19
|
-
}
|
|
20
|
-
return ip;
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* 设置黑名单
|
|
25
|
-
* @param {String} ip IP地址
|
|
26
|
-
*/
|
|
27
|
-
function setting_blacklist(ip) {
|
|
28
|
-
var cmd;
|
|
29
|
-
if (platform == "win32") {
|
|
30
|
-
// window 系统
|
|
31
|
-
cmd =
|
|
32
|
-
`netsh advfirewall firewall add rule name="Blacklist ${ip}" dir=in action=block remoteip="${ip}" protocol=any`
|
|
33
|
-
} else {
|
|
34
|
-
// linux 系统
|
|
35
|
-
cmd = `sudo iptables -A INPUT -s ${ip} -j DROP`;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
exec(cmd, (error, stdout, stderr) => {
|
|
39
|
-
if (error) {
|
|
40
|
-
console.error(`执行的错误: ${error}`);
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
$.log.info(`加入黑名单: ${ip}`);
|
|
44
|
-
if (stderr) {
|
|
45
|
-
console.error(`标准错误输出: ${stderr}`);
|
|
46
|
-
}
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* 应用
|
|
52
|
-
* @param {Object} server 服务
|
|
53
|
-
* @param {Object} config 配置参数
|
|
54
|
-
*/
|
|
55
|
-
module.exports = function(server, config) {
|
|
56
|
-
var limit = config.request_limit || 0;
|
|
57
|
-
var duration = config.request_duration || 0;
|
|
58
|
-
var block = config.request_block || false;
|
|
59
|
-
|
|
60
|
-
if (limit && duration) {
|
|
61
|
-
/* WAF(web防火墙) */
|
|
62
|
-
server.use(async (ctx, next) => {
|
|
63
|
-
var pass = true;
|
|
64
|
-
// 获取IP
|
|
65
|
-
var ip = getClientIP(ctx.req);
|
|
66
|
-
var num = 1;
|
|
67
|
-
var now = new Date();
|
|
68
|
-
var date = now.toStr('yyyy-MM-dd');
|
|
69
|
-
var time;
|
|
70
|
-
var str = await $.cache.get("ip_" + ip);
|
|
71
|
-
var json;
|
|
72
|
-
if (str) {
|
|
73
|
-
if (typeof(str) === "string") {
|
|
74
|
-
json = JSON.parse(str);
|
|
75
|
-
} else {
|
|
76
|
-
json = str;
|
|
77
|
-
}
|
|
78
|
-
if (json.date !== date) {
|
|
79
|
-
num = 1;
|
|
80
|
-
} else {
|
|
81
|
-
// 判断时间间隔是否在范围外
|
|
82
|
-
if (json.time.toTime().interval(now) > duration) {
|
|
83
|
-
num = 1;
|
|
84
|
-
} else {
|
|
85
|
-
// 如果是在周期内,访问次数+1,并判断是否超出上限
|
|
86
|
-
num = json.num + 1;
|
|
87
|
-
if (num > limit) {
|
|
88
|
-
// 超出上限禁止访问,并加入黑名单
|
|
89
|
-
pass = false;
|
|
90
|
-
if (block) {
|
|
91
|
-
setting_blacklist(ip);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
if (!time) {
|
|
98
|
-
time = now.toStr('yyyy-MM-dd hh:mm:ss');
|
|
99
|
-
}
|
|
100
|
-
if (pass) {
|
|
101
|
-
await $.cache.set("ip_" + ip, JSON.stringify({
|
|
102
|
-
date,
|
|
103
|
-
time,
|
|
104
|
-
num
|
|
105
|
-
}), duration);
|
|
106
|
-
ctx.request.ip = ip;
|
|
107
|
-
ctx.ip = ip;
|
|
108
|
-
await next();
|
|
109
|
-
} else {
|
|
110
|
-
ctx.status = 429;
|
|
111
|
-
ctx.body = '请求频率过高,请稍后再试。';
|
|
112
|
-
}
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
return server;
|
|
1
|
+
const os = require('os');
|
|
2
|
+
const {
|
|
3
|
+
exec
|
|
4
|
+
} = require('child_process');
|
|
5
|
+
const platform = os.platform();
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* 获取客户端IP
|
|
9
|
+
* @param {Object} req 请求对象
|
|
10
|
+
* @returns {String} 返回真实IP
|
|
11
|
+
*/
|
|
12
|
+
function getClientIP(req) {
|
|
13
|
+
var ip = req.headers['x-forwarded-for'] || req.headers['X-Forwarded-For'] || req.headers['x-real-ip'] ||
|
|
14
|
+
req.connection.remoteAddress ||
|
|
15
|
+
req.socket.remoteAddress ||
|
|
16
|
+
req.connection.socket.remoteAddress;
|
|
17
|
+
if (ip && ip.split(',').length > 0) {
|
|
18
|
+
ip = ip.split(',')[0]; // 取第一个IP地址
|
|
19
|
+
}
|
|
20
|
+
return ip;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* 设置黑名单
|
|
25
|
+
* @param {String} ip IP地址
|
|
26
|
+
*/
|
|
27
|
+
function setting_blacklist(ip) {
|
|
28
|
+
var cmd;
|
|
29
|
+
if (platform == "win32") {
|
|
30
|
+
// window 系统
|
|
31
|
+
cmd =
|
|
32
|
+
`netsh advfirewall firewall add rule name="Blacklist ${ip}" dir=in action=block remoteip="${ip}" protocol=any`
|
|
33
|
+
} else {
|
|
34
|
+
// linux 系统
|
|
35
|
+
cmd = `sudo iptables -A INPUT -s ${ip} -j DROP`;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
exec(cmd, (error, stdout, stderr) => {
|
|
39
|
+
if (error) {
|
|
40
|
+
console.error(`执行的错误: ${error}`);
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
$.log.info(`加入黑名单: ${ip}`);
|
|
44
|
+
if (stderr) {
|
|
45
|
+
console.error(`标准错误输出: ${stderr}`);
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* 应用
|
|
52
|
+
* @param {Object} server 服务
|
|
53
|
+
* @param {Object} config 配置参数
|
|
54
|
+
*/
|
|
55
|
+
module.exports = function(server, config) {
|
|
56
|
+
var limit = config.request_limit || 0;
|
|
57
|
+
var duration = config.request_duration || 0;
|
|
58
|
+
var block = config.request_block || false;
|
|
59
|
+
|
|
60
|
+
if (limit && duration) {
|
|
61
|
+
/* WAF(web防火墙) */
|
|
62
|
+
server.use(async (ctx, next) => {
|
|
63
|
+
var pass = true;
|
|
64
|
+
// 获取IP
|
|
65
|
+
var ip = getClientIP(ctx.req);
|
|
66
|
+
var num = 1;
|
|
67
|
+
var now = new Date();
|
|
68
|
+
var date = now.toStr('yyyy-MM-dd');
|
|
69
|
+
var time;
|
|
70
|
+
var str = await $.cache.get("ip_" + ip);
|
|
71
|
+
var json;
|
|
72
|
+
if (str) {
|
|
73
|
+
if (typeof(str) === "string") {
|
|
74
|
+
json = JSON.parse(str);
|
|
75
|
+
} else {
|
|
76
|
+
json = str;
|
|
77
|
+
}
|
|
78
|
+
if (json.date !== date) {
|
|
79
|
+
num = 1;
|
|
80
|
+
} else {
|
|
81
|
+
// 判断时间间隔是否在范围外
|
|
82
|
+
if (json.time.toTime().interval(now) > duration) {
|
|
83
|
+
num = 1;
|
|
84
|
+
} else {
|
|
85
|
+
// 如果是在周期内,访问次数+1,并判断是否超出上限
|
|
86
|
+
num = json.num + 1;
|
|
87
|
+
if (num > limit) {
|
|
88
|
+
// 超出上限禁止访问,并加入黑名单
|
|
89
|
+
pass = false;
|
|
90
|
+
if (block) {
|
|
91
|
+
setting_blacklist(ip);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
if (!time) {
|
|
98
|
+
time = now.toStr('yyyy-MM-dd hh:mm:ss');
|
|
99
|
+
}
|
|
100
|
+
if (pass) {
|
|
101
|
+
await $.cache.set("ip_" + ip, JSON.stringify({
|
|
102
|
+
date,
|
|
103
|
+
time,
|
|
104
|
+
num
|
|
105
|
+
}), duration);
|
|
106
|
+
ctx.request.ip = ip;
|
|
107
|
+
ctx.ip = ip;
|
|
108
|
+
await next();
|
|
109
|
+
} else {
|
|
110
|
+
ctx.status = 429;
|
|
111
|
+
ctx.body = '请求频率过高,请稍后再试。';
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
return server;
|
|
116
116
|
};
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "web_waf_ip",
|
|
3
|
-
"title": "IP防火墙",
|
|
4
|
-
"description": "用于防止DOS攻击",
|
|
5
|
-
"version": "1.0",
|
|
6
|
-
"type": "web",
|
|
7
|
-
"process_type": "common_before",
|
|
8
|
-
"sort": 1,
|
|
9
|
-
"state": 0
|
|
1
|
+
{
|
|
2
|
+
"name": "web_waf_ip",
|
|
3
|
+
"title": "IP防火墙",
|
|
4
|
+
"description": "用于防止DOS攻击",
|
|
5
|
+
"version": "1.0",
|
|
6
|
+
"type": "web",
|
|
7
|
+
"process_type": "common_before",
|
|
8
|
+
"sort": 1,
|
|
9
|
+
"state": 0
|
|
10
10
|
}
|
|
@@ -1,66 +1,66 @@
|
|
|
1
|
-
const xmlParser = require("mm_xml");
|
|
2
|
-
const session = require('mm_session');
|
|
3
|
-
const compress = require('koa-compress');
|
|
4
|
-
const { koaBody } = require('koa-body');
|
|
5
|
-
const send = require('koa-send');
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* 应用
|
|
9
|
-
* @param {Object} server 服务
|
|
10
|
-
* @param {Object} config 配置参数
|
|
11
|
-
*/
|
|
12
|
-
module.exports = function(server, config) {
|
|
13
|
-
/**
|
|
14
|
-
* 发送文件
|
|
15
|
-
*/
|
|
16
|
-
server.use(async (ctx, next) => {
|
|
17
|
-
ctx.send = async function(src) {
|
|
18
|
-
await send(ctx, src);
|
|
19
|
-
}
|
|
20
|
-
await next();
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
// 设置session 保存时长2小时
|
|
24
|
-
server.use(session({
|
|
25
|
-
maxAge: $.login_period || config.maxAge || 7200
|
|
26
|
-
}));
|
|
27
|
-
|
|
28
|
-
// 使用压缩
|
|
29
|
-
if (config.compress) {
|
|
30
|
-
server.use(
|
|
31
|
-
compress({
|
|
32
|
-
filter: function(content_type) {
|
|
33
|
-
// 只有在请求的content-type中有gzip类型,我们才会考虑压缩,因为zlib是压缩成gzip类型的
|
|
34
|
-
return /text/i.test(content_type);
|
|
35
|
-
},
|
|
36
|
-
// 阀值,当数据超过1kb的时候,可以压缩
|
|
37
|
-
threshold: 1024,
|
|
38
|
-
// zlib是node的压缩模块
|
|
39
|
-
flush: require('zlib').Z_SYNC_FLUSH
|
|
40
|
-
})
|
|
41
|
-
);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
// 解析 text/xml
|
|
45
|
-
server.use(xmlParser());
|
|
46
|
-
|
|
47
|
-
var func = koaBody({
|
|
48
|
-
jsonLimit: config.jsonLimit || '20mb',
|
|
49
|
-
multipart: true,
|
|
50
|
-
formidable: {
|
|
51
|
-
// 设置上传文件大小最大限制,默认20M
|
|
52
|
-
maxFileSize: 2000 * 1024 * 1024
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
// 解析 application/json、application/x-www-form-urlencoded、text/plain
|
|
57
|
-
// 接收主体
|
|
58
|
-
server.use(async (ctx, next) => {
|
|
59
|
-
if (!ctx.request.body) {
|
|
60
|
-
await func(ctx, next);
|
|
61
|
-
} else {
|
|
62
|
-
await next();
|
|
63
|
-
}
|
|
64
|
-
});
|
|
65
|
-
return server;
|
|
1
|
+
const xmlParser = require("mm_xml");
|
|
2
|
+
const session = require('mm_session');
|
|
3
|
+
const compress = require('koa-compress');
|
|
4
|
+
const { koaBody } = require('koa-body');
|
|
5
|
+
const send = require('koa-send');
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* 应用
|
|
9
|
+
* @param {Object} server 服务
|
|
10
|
+
* @param {Object} config 配置参数
|
|
11
|
+
*/
|
|
12
|
+
module.exports = function(server, config) {
|
|
13
|
+
/**
|
|
14
|
+
* 发送文件
|
|
15
|
+
*/
|
|
16
|
+
server.use(async (ctx, next) => {
|
|
17
|
+
ctx.send = async function(src) {
|
|
18
|
+
await send(ctx, src);
|
|
19
|
+
}
|
|
20
|
+
await next();
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
// 设置session 保存时长2小时
|
|
24
|
+
server.use(session({
|
|
25
|
+
maxAge: $.login_period || config.maxAge || 7200
|
|
26
|
+
}));
|
|
27
|
+
|
|
28
|
+
// 使用压缩
|
|
29
|
+
if (config.compress) {
|
|
30
|
+
server.use(
|
|
31
|
+
compress({
|
|
32
|
+
filter: function(content_type) {
|
|
33
|
+
// 只有在请求的content-type中有gzip类型,我们才会考虑压缩,因为zlib是压缩成gzip类型的
|
|
34
|
+
return /text/i.test(content_type);
|
|
35
|
+
},
|
|
36
|
+
// 阀值,当数据超过1kb的时候,可以压缩
|
|
37
|
+
threshold: 1024,
|
|
38
|
+
// zlib是node的压缩模块
|
|
39
|
+
flush: require('zlib').Z_SYNC_FLUSH
|
|
40
|
+
})
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// 解析 text/xml
|
|
45
|
+
server.use(xmlParser());
|
|
46
|
+
|
|
47
|
+
var func = koaBody({
|
|
48
|
+
jsonLimit: config.jsonLimit || '20mb',
|
|
49
|
+
multipart: true,
|
|
50
|
+
formidable: {
|
|
51
|
+
// 设置上传文件大小最大限制,默认20M
|
|
52
|
+
maxFileSize: 2000 * 1024 * 1024
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
// 解析 application/json、application/x-www-form-urlencoded、text/plain
|
|
57
|
+
// 接收主体
|
|
58
|
+
server.use(async (ctx, next) => {
|
|
59
|
+
if (!ctx.request.body) {
|
|
60
|
+
await func(ctx, next);
|
|
61
|
+
} else {
|
|
62
|
+
await next();
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
return server;
|
|
66
66
|
};
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "web_base",
|
|
3
|
-
"title": "web基本功能",
|
|
4
|
-
"description": "用于网站常规功能",
|
|
5
|
-
"version": "1.0",
|
|
6
|
-
"type": "web",
|
|
7
|
-
"process_type": "common_before",
|
|
8
|
-
"sort": 12
|
|
1
|
+
{
|
|
2
|
+
"name": "web_base",
|
|
3
|
+
"title": "web基本功能",
|
|
4
|
+
"description": "用于网站常规功能",
|
|
5
|
+
"version": "1.0",
|
|
6
|
+
"type": "web",
|
|
7
|
+
"process_type": "common_before",
|
|
8
|
+
"sort": 12
|
|
9
9
|
}
|