├── README.md
├── UI_Srever
├── README.md
├── app.js
├── bin
│ ├── parsing.js
│ ├── wsClient.js
│ └── www.js
├── package-lock.json
├── package.json
├── public
│ └── stylesheets
│ │ └── style.css
├── routes
│ ├── index.js
│ ├── iptables.js
│ └── users.js
└── views
│ ├── error.jade
│ ├── index.jade
│ └── layout.jade
└── iptables
├── Makefile
├── README.md
├── package-lock.json
├── package.json
├── postcss.config.js
├── src
├── App.vue
├── assets
│ └── logo.png
├── index.html
├── main.js
└── vendor.js
├── webpack.config.js
└── yarn.lock
/README.md:
--------------------------------------------------------------------------------
1 | # iptables
2 |
3 | 代码比较乱,而且并没有完整。
4 | 说明:
5 | https://blog.csdn.net/lixuhui2468/article/details/108185748
6 |
7 |
--------------------------------------------------------------------------------
/UI_Srever/README.md:
--------------------------------------------------------------------------------
1 | 运行:
2 | node ./bin/www.js
--------------------------------------------------------------------------------
/UI_Srever/app.js:
--------------------------------------------------------------------------------
1 | var createError = require('http-errors');
2 | var express = require('express');
3 | var path = require('path');
4 | var cookieParser = require('cookie-parser');
5 | var logger = require('morgan');
6 |
7 | var indexRouter = require('./routes/index');
8 | var usersRouter = require('./routes/users');
9 |
10 | var app = express();
11 |
12 | // view engine setup
13 | app.set('views', path.join(__dirname, 'views'));
14 | app.set('view engine', 'jade');
15 |
16 | app.use(logger('dev'));
17 | app.use(express.json());
18 | app.use(express.urlencoded({ extended: false }));
19 | app.use(cookieParser());
20 | app.use(express.static(path.join(__dirname, 'public')));
21 |
22 | app.use('/', indexRouter);
23 | app.use('/users', usersRouter);
24 |
25 | // catch 404 and forward to error handler
26 | app.use(function(req, res, next) {
27 | next(createError(404));
28 | });
29 |
30 | // error handler
31 | app.use(function(err, req, res, next) {
32 | // set locals, only providing error in development
33 | res.locals.message = err.message;
34 | res.locals.error = req.app.get('env') === 'development' ? err : {};
35 |
36 | // render the error page
37 | res.status(err.status || 500);
38 | res.render('error');
39 | });
40 |
41 | module.exports = app;
42 |
--------------------------------------------------------------------------------
/UI_Srever/bin/parsing.js:
--------------------------------------------------------------------------------
1 | var exec = require("child_process").exec;
2 |
3 | function TextSlice(value, Text) {
4 | return value.slice(Text.length, value.length).trim();
5 | }
6 | function builtInJudge(policy, index) {
7 | if (index == 0) {
8 | return ["PREROUTING", "INPUT", "FORWARD", "OUTPUT", "POSTROUTIONG"].indexOf(policy) != -1;
9 | } else {
10 | return ['ACCEPT', 'REJECT', 'REDIRECT', 'DROP', 'MASQUERADE', 'LOG', 'SNAT', 'DNAT', 'MIRROR', 'QUEUE', 'RETURN', 'MARK', 'TCPMSS'].indexOf(policy) != -1;
11 | }
12 | }
13 |
14 |
15 |
16 | // 格式化表
17 | function ForDeal(tableName, text) {
18 | var table = {
19 | type: tableName,
20 | Built: [],
21 | Custom: []
22 | };
23 |
24 | var index = 0, Chain = { "chain": [], disabled: false, visible: Array(3).fill(false) }, name = "";
25 |
26 | text.split("\n").forEach((value) => {
27 | if (index == 0) {
28 | var patt = /Chain\s(.*?)\s+\(policy\s+(.*?)\s+(\d+[a-zA-z]?)\s+packets,?\s+(\d+[a-zA-z]?)\s+bytes/g;
29 | if (patt.exec(value)) {
30 | name = "Built";
31 | Chain.name = RegExp.$1;
32 | Chain.policy = RegExp.$2;
33 | Chain.packets = RegExp.$3;
34 | Chain.bytes = RegExp.$4;
35 |
36 | } else {
37 | patt = /Chain\s+(.*?)\s+\((\d+)\s+references\)/g;
38 | if (patt.exec(value)) {
39 | name = "Custom";
40 | Chain.name = RegExp.$1;
41 | Chain.reference = RegExp.$2;
42 | }
43 | }
44 | } else if (index >= 2 && value != "") {
45 | var patt = /(\d+|\w+|.*?)\s+/g,
46 | mat = value.match(patt).slice(0, 10),
47 | action = TextSlice(value, mat.join(""));
48 |
49 | mat = mat.map((data) => {
50 | return data.trim();
51 | });
52 | Chain.chain.push({
53 | num: mat[0],
54 | pkts: mat[1],
55 | bytes: mat[2],
56 | target: mat[3],
57 | prot: mat[4],
58 | opt: mat[5],
59 | in: mat[6],
60 | out: mat[7],
61 | source: mat[8],
62 | destination: mat[9],
63 | action: action,
64 | disabled: false,
65 | builtIn: builtInJudge(mat[3], 1)
66 | })
67 |
68 | } else {
69 | if (value == "") {
70 | if (name != "") {
71 | table[name].push(Chain);
72 | } else {
73 | console.log("name为空")
74 | }
75 | Chain = { "chain": [], disabled: false, visible: Array(3).fill(false) };
76 | return (index = 0)
77 | };
78 | }
79 | index++;
80 |
81 | });
82 | return table;
83 | }
84 |
85 | function getTable(name) {
86 | return new Promise((resolve, reject) => {
87 | try {
88 | exec("/sbin/iptables -t " + name + " -L -n --line-numbers -v", function (err, stdout, stderr) {
89 | if (!err) {
90 | resolve(ForDeal(name, stdout));
91 | } else {
92 | reject(stderr)
93 | }
94 | });
95 | } catch (error) {
96 | console.log("cuowu:", error);
97 | reject(error);
98 | }
99 | })
100 | }
101 |
102 | function perform(Command) {
103 | return new Promise((resolve, reject) => {
104 | exec("/sbin/" + Command, function (err, stdout, stderr) {
105 | if (!err) {
106 | resolve(stdout);
107 | } else {
108 | reject(stderr);
109 | }
110 | });
111 | })
112 | }
113 |
114 | /** 刷新指定表 */
115 | function refresh(data) {
116 | var self = this;
117 | if (data.table) {
118 | perform(`iptables -t ${data.table} -L ${data.chain} -n --line-numbers -v`).then(res => {
119 | res = ForDeal(data.table, res);
120 | var rules, type;
121 | if (builtInJudge(data.chain, 0)) {
122 | type = "Built"
123 | rules = res.Built[0]
124 | } else {
125 | type = "Custom"
126 | rules = res.Custom[0]
127 | }
128 |
129 |
130 | self.sendJSON({
131 | code: 200,
132 | type: "refresh",
133 | data: {
134 | rules,
135 | type,
136 | table: data.table,
137 | chain: data.chain
138 | }
139 | });
140 | }).catch(err => {
141 |
142 | })
143 | }
144 |
145 |
146 | }
147 | /** 插入命令或者添加 */
148 | function AddCommand(data) {
149 | var self = this;
150 | if (data.data.table) {
151 | perform(data.data.rules).then(res => {
152 | self.sendJSON({
153 | code: 200,
154 | type: data.type
155 | });
156 |
157 | refresh.call(self,data.data);
158 | }).catch(err => {
159 | self.sendJSON({
160 | code: 200,
161 | type: data.type,
162 | data: err
163 | });
164 | })
165 | }
166 |
167 | }
168 | /** 删除指定表指定链 */
169 | function Empty(data){
170 | var self = this;
171 | if (data.table) {
172 | perform(`iptables -t ${data.table} -F ${data.chain} `).then(res => {
173 | self.sendJSON({
174 | code: 200,
175 | type: "Empty"
176 | });
177 |
178 | refresh.call(self,data);
179 | }).catch(err => {
180 | self.sendJSON({
181 | code: 200,
182 | type: data.type,
183 | data: err
184 | });
185 | })
186 | }
187 |
188 | }
189 |
190 | function sendList() {
191 | var self = this;
192 |
193 | ['raw', 'mangle', 'nat', 'filter'].forEach((name) => {
194 | getTable(name).then(res => {
195 | self.send(JSON.stringify(Object.assign({ code: 200 }, res)));
196 | }).catch(err => {
197 | console.log("iptables执行失败");
198 | })
199 | })
200 | }
201 |
202 | module.exports = {
203 | sendList,
204 | perform,
205 | refresh,
206 | AddCommand,
207 | Empty
208 | };
209 |
210 |
211 | // new Promise((resolve, reject) => {
212 | // exec("/sbin/iptables -t " + name + " -L -n --line-numbers -v", function (err, stdout, stderr) {
213 | // if (!err) {
214 | // resolve(stdout);
215 | // } else {
216 | // reject(stderr)
217 | // }
218 | // });
219 | // }).then(res => {
220 | // ForDeal(res)
221 | // }).catch(err => {
222 | // console.log(err)
223 | // })
--------------------------------------------------------------------------------
/UI_Srever/bin/wsClient.js:
--------------------------------------------------------------------------------
1 | const { promises } = require("fs");
2 |
3 | var Parsing = require("./parsing.js");
4 |
5 |
6 |
7 |
8 | function message(message){
9 | //打印客户端监听的消息
10 | console.log(message);
11 | try {
12 | var Data = JSON.parse(message);
13 | if(Data){
14 | switch (Data.type) {
15 | case "list":
16 | Parsing.sendList.call(this);
17 | break;
18 | case "perform":
19 | Parsing.perform.call(this,Data.Command);
20 | break;
21 | case "refresh":
22 | Parsing.refresh.call(this,Data.data);
23 | break;
24 | case "AddCommand":
25 | case "InsertCommand":
26 | Parsing.AddCommand.call(this,Data);
27 | break;
28 | case "Empty":
29 | Parsing.Empty.call(this,Data.data);
30 | break;
31 | default:
32 | break;
33 | }
34 | }
35 | } catch (error) {
36 |
37 | }
38 |
39 |
40 |
41 | }
42 | function close(err){
43 | console.log("close",err)
44 |
45 | }
46 | function err(err){
47 | console.log("err",err)
48 |
49 | }
50 |
51 |
52 | function createCallback(ws){
53 | ws.on("message",message);
54 | ws.on("err",err);
55 | ws.on("close",close);
56 | ws.sendJSON = function(data){
57 | this.send(JSON.stringify(data));
58 | };
59 |
60 | ws.send(JSON.stringify({code:200,data:""}));
61 | }
62 |
63 | module.exports = createCallback;
--------------------------------------------------------------------------------
/UI_Srever/bin/www.js:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | /**
4 | * Module dependencies.
5 | */
6 |
7 | var app = require('../app');
8 | var debug = require('debug')('ipwebui:server');
9 | var http = require('http');
10 | var WebSocket = require('ws');
11 | var wsClient = require('./wsClient');
12 |
13 | /**
14 | * Get port from environment and store in Express.
15 | */
16 |
17 | var port = normalizePort(process.env.PORT || '80');
18 | app.set('port', port);
19 |
20 | /**
21 | * Create HTTP server.
22 | */
23 |
24 | var server = http.createServer(app);
25 | var wss = new WebSocket.Server({server});
26 |
27 | wss.on('connection', function (ws) {
28 | console.log('服务端:客户端已连接');
29 | wsClient(ws);
30 | })
31 |
32 | /**
33 | * Listen on provided port, on all network interfaces.
34 | */
35 |
36 | server.listen(port);
37 | server.on('error', onError);
38 | server.on('listening', onListening);
39 |
40 | /**
41 | * Normalize a port into a number, string, or false.
42 | */
43 |
44 | function normalizePort(val) {
45 | var port = parseInt(val, 10);
46 |
47 | if (isNaN(port)) {
48 | // named pipe
49 | return val;
50 | }
51 |
52 | if (port >= 0) {
53 | // port number
54 | return port;
55 | }
56 |
57 | return false;
58 | }
59 |
60 | /**
61 | * Event listener for HTTP server "error" event.
62 | */
63 |
64 | function onError(error) {
65 | if (error.syscall !== 'listen') {
66 | throw error;
67 | }
68 |
69 | var bind = typeof port === 'string'
70 | ? 'Pipe ' + port
71 | : 'Port ' + port;
72 |
73 | // handle specific listen errors with friendly messages
74 | switch (error.code) {
75 | case 'EACCES':
76 | console.error(bind + ' requires elevated privileges');
77 | process.exit(1);
78 | break;
79 | case 'EADDRINUSE':
80 | console.error(bind + ' is already in use');
81 | process.exit(1);
82 | break;
83 | default:
84 | throw error;
85 | }
86 | }
87 |
88 | /**
89 | * Event listener for HTTP server "listening" event.
90 | */
91 |
92 | function onListening() {
93 | console.log("服务器创建成功!!")
94 | var addr = server.address();
95 | var bind = typeof addr === 'string'
96 | ? 'pipe ' + addr
97 | : 'port ' + addr.port;
98 | debug('Listening on ' + bind);
99 | }
100 |
--------------------------------------------------------------------------------
/UI_Srever/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "ipwebui",
3 | "version": "0.0.0",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "accepts": {
8 | "version": "1.3.7",
9 | "resolved": "https://registry.npm.taobao.org/accepts/download/accepts-1.3.7.tgz",
10 | "integrity": "sha1-UxvHJlF6OytB+FACHGzBXqq1B80=",
11 | "requires": {
12 | "mime-types": "~2.1.24",
13 | "negotiator": "0.6.2"
14 | }
15 | },
16 | "acorn": {
17 | "version": "2.7.0",
18 | "resolved": "https://registry.npm.taobao.org/acorn/download/acorn-2.7.0.tgz?cache=0&sync_timestamp=1597235774928&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn%2Fdownload%2Facorn-2.7.0.tgz",
19 | "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc="
20 | },
21 | "acorn-globals": {
22 | "version": "1.0.9",
23 | "resolved": "https://registry.npm.taobao.org/acorn-globals/download/acorn-globals-1.0.9.tgz",
24 | "integrity": "sha1-VbtemGkVB7dFedBRNBMhfDgMVM8=",
25 | "requires": {
26 | "acorn": "^2.1.0"
27 | }
28 | },
29 | "align-text": {
30 | "version": "0.1.4",
31 | "resolved": "https://registry.npm.taobao.org/align-text/download/align-text-0.1.4.tgz",
32 | "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
33 | "requires": {
34 | "kind-of": "^3.0.2",
35 | "longest": "^1.0.1",
36 | "repeat-string": "^1.5.2"
37 | }
38 | },
39 | "amdefine": {
40 | "version": "1.0.1",
41 | "resolved": "https://registry.npm.taobao.org/amdefine/download/amdefine-1.0.1.tgz",
42 | "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU="
43 | },
44 | "array-flatten": {
45 | "version": "1.1.1",
46 | "resolved": "https://registry.npm.taobao.org/array-flatten/download/array-flatten-1.1.1.tgz",
47 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
48 | },
49 | "asap": {
50 | "version": "1.0.0",
51 | "resolved": "https://registry.npm.taobao.org/asap/download/asap-1.0.0.tgz",
52 | "integrity": "sha1-sqRdpf36ILBJb8N2jMJ8EvqRan0="
53 | },
54 | "basic-auth": {
55 | "version": "2.0.1",
56 | "resolved": "https://registry.npm.taobao.org/basic-auth/download/basic-auth-2.0.1.tgz",
57 | "integrity": "sha1-uZgnm/R844NEtPPPkW1Gebv1Hjo=",
58 | "requires": {
59 | "safe-buffer": "5.1.2"
60 | }
61 | },
62 | "body-parser": {
63 | "version": "1.18.3",
64 | "resolved": "https://registry.npm.taobao.org/body-parser/download/body-parser-1.18.3.tgz",
65 | "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=",
66 | "requires": {
67 | "bytes": "3.0.0",
68 | "content-type": "~1.0.4",
69 | "debug": "2.6.9",
70 | "depd": "~1.1.2",
71 | "http-errors": "~1.6.3",
72 | "iconv-lite": "0.4.23",
73 | "on-finished": "~2.3.0",
74 | "qs": "6.5.2",
75 | "raw-body": "2.3.3",
76 | "type-is": "~1.6.16"
77 | }
78 | },
79 | "bytes": {
80 | "version": "3.0.0",
81 | "resolved": "https://registry.npm.taobao.org/bytes/download/bytes-3.0.0.tgz",
82 | "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
83 | },
84 | "camelcase": {
85 | "version": "1.2.1",
86 | "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-1.2.1.tgz",
87 | "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk="
88 | },
89 | "center-align": {
90 | "version": "0.1.3",
91 | "resolved": "https://registry.npm.taobao.org/center-align/download/center-align-0.1.3.tgz",
92 | "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
93 | "requires": {
94 | "align-text": "^0.1.3",
95 | "lazy-cache": "^1.0.3"
96 | }
97 | },
98 | "character-parser": {
99 | "version": "1.2.1",
100 | "resolved": "https://registry.npm.taobao.org/character-parser/download/character-parser-1.2.1.tgz",
101 | "integrity": "sha1-wN3kqxgnE7kZuXCVmhI+zBow/NY="
102 | },
103 | "clean-css": {
104 | "version": "3.4.28",
105 | "resolved": "https://registry.npm.taobao.org/clean-css/download/clean-css-3.4.28.tgz",
106 | "integrity": "sha1-vxlF6C/ICPVWlebd6uwBQA79A/8=",
107 | "requires": {
108 | "commander": "2.8.x",
109 | "source-map": "0.4.x"
110 | },
111 | "dependencies": {
112 | "commander": {
113 | "version": "2.8.1",
114 | "resolved": "https://registry.npm.taobao.org/commander/download/commander-2.8.1.tgz?cache=0&sync_timestamp=1595168236910&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-2.8.1.tgz",
115 | "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=",
116 | "requires": {
117 | "graceful-readlink": ">= 1.0.0"
118 | }
119 | }
120 | }
121 | },
122 | "cliui": {
123 | "version": "2.1.0",
124 | "resolved": "https://registry.npm.taobao.org/cliui/download/cliui-2.1.0.tgz?cache=0&sync_timestamp=1597607904134&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcliui%2Fdownload%2Fcliui-2.1.0.tgz",
125 | "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
126 | "requires": {
127 | "center-align": "^0.1.1",
128 | "right-align": "^0.1.1",
129 | "wordwrap": "0.0.2"
130 | },
131 | "dependencies": {
132 | "wordwrap": {
133 | "version": "0.0.2",
134 | "resolved": "https://registry.npm.taobao.org/wordwrap/download/wordwrap-0.0.2.tgz",
135 | "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8="
136 | }
137 | }
138 | },
139 | "commander": {
140 | "version": "2.6.0",
141 | "resolved": "https://registry.npm.taobao.org/commander/download/commander-2.6.0.tgz?cache=0&sync_timestamp=1595168236910&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-2.6.0.tgz",
142 | "integrity": "sha1-nfflL7Kgyw+4kFjugMMQQiXzfh0="
143 | },
144 | "constantinople": {
145 | "version": "3.0.2",
146 | "resolved": "https://registry.npm.taobao.org/constantinople/download/constantinople-3.0.2.tgz",
147 | "integrity": "sha1-S5RdmTeQe82Y7ldRIsOBdRZUQUE=",
148 | "requires": {
149 | "acorn": "^2.1.0"
150 | }
151 | },
152 | "content-disposition": {
153 | "version": "0.5.2",
154 | "resolved": "https://registry.npm.taobao.org/content-disposition/download/content-disposition-0.5.2.tgz",
155 | "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ="
156 | },
157 | "content-type": {
158 | "version": "1.0.4",
159 | "resolved": "https://registry.npm.taobao.org/content-type/download/content-type-1.0.4.tgz",
160 | "integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js="
161 | },
162 | "cookie": {
163 | "version": "0.4.0",
164 | "resolved": "https://registry.npm.taobao.org/cookie/download/cookie-0.4.0.tgz",
165 | "integrity": "sha1-vrQ35wIrO21JAZ0IhmUwPr6cFLo="
166 | },
167 | "cookie-parser": {
168 | "version": "1.4.5",
169 | "resolved": "https://registry.npm.taobao.org/cookie-parser/download/cookie-parser-1.4.5.tgz",
170 | "integrity": "sha1-PlctS3wMgPnGHa9gTkM2gxtdHUk=",
171 | "requires": {
172 | "cookie": "0.4.0",
173 | "cookie-signature": "1.0.6"
174 | }
175 | },
176 | "cookie-signature": {
177 | "version": "1.0.6",
178 | "resolved": "https://registry.npm.taobao.org/cookie-signature/download/cookie-signature-1.0.6.tgz",
179 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
180 | },
181 | "css": {
182 | "version": "1.0.8",
183 | "resolved": "https://registry.npm.taobao.org/css/download/css-1.0.8.tgz?cache=0&sync_timestamp=1593663869717&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss%2Fdownload%2Fcss-1.0.8.tgz",
184 | "integrity": "sha1-k4aBHKgrzMnuf7WnMrHioxfIo+c=",
185 | "requires": {
186 | "css-parse": "1.0.4",
187 | "css-stringify": "1.0.5"
188 | }
189 | },
190 | "css-parse": {
191 | "version": "1.0.4",
192 | "resolved": "https://registry.npm.taobao.org/css-parse/download/css-parse-1.0.4.tgz",
193 | "integrity": "sha1-OLBQP7+dqfVOnB29pg4UXHcRe90="
194 | },
195 | "css-stringify": {
196 | "version": "1.0.5",
197 | "resolved": "https://registry.npm.taobao.org/css-stringify/download/css-stringify-1.0.5.tgz",
198 | "integrity": "sha1-sNBClG2ylTu50pKQCmy19tASIDE="
199 | },
200 | "debug": {
201 | "version": "2.6.9",
202 | "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1591174870850&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz",
203 | "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
204 | "requires": {
205 | "ms": "2.0.0"
206 | }
207 | },
208 | "decamelize": {
209 | "version": "1.2.0",
210 | "resolved": "https://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz",
211 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
212 | },
213 | "depd": {
214 | "version": "1.1.2",
215 | "resolved": "https://registry.npm.taobao.org/depd/download/depd-1.1.2.tgz",
216 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
217 | },
218 | "destroy": {
219 | "version": "1.0.4",
220 | "resolved": "https://registry.npm.taobao.org/destroy/download/destroy-1.0.4.tgz",
221 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
222 | },
223 | "ee-first": {
224 | "version": "1.1.1",
225 | "resolved": "https://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz",
226 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
227 | },
228 | "encodeurl": {
229 | "version": "1.0.2",
230 | "resolved": "https://registry.npm.taobao.org/encodeurl/download/encodeurl-1.0.2.tgz",
231 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
232 | },
233 | "escape-html": {
234 | "version": "1.0.3",
235 | "resolved": "https://registry.npm.taobao.org/escape-html/download/escape-html-1.0.3.tgz",
236 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
237 | },
238 | "etag": {
239 | "version": "1.8.1",
240 | "resolved": "https://registry.npm.taobao.org/etag/download/etag-1.8.1.tgz",
241 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
242 | },
243 | "express": {
244 | "version": "4.16.4",
245 | "resolved": "https://registry.npm.taobao.org/express/download/express-4.16.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexpress%2Fdownload%2Fexpress-4.16.4.tgz",
246 | "integrity": "sha1-/d72GSYQniTFFeqX/S8b2/Yt8S4=",
247 | "requires": {
248 | "accepts": "~1.3.5",
249 | "array-flatten": "1.1.1",
250 | "body-parser": "1.18.3",
251 | "content-disposition": "0.5.2",
252 | "content-type": "~1.0.4",
253 | "cookie": "0.3.1",
254 | "cookie-signature": "1.0.6",
255 | "debug": "2.6.9",
256 | "depd": "~1.1.2",
257 | "encodeurl": "~1.0.2",
258 | "escape-html": "~1.0.3",
259 | "etag": "~1.8.1",
260 | "finalhandler": "1.1.1",
261 | "fresh": "0.5.2",
262 | "merge-descriptors": "1.0.1",
263 | "methods": "~1.1.2",
264 | "on-finished": "~2.3.0",
265 | "parseurl": "~1.3.2",
266 | "path-to-regexp": "0.1.7",
267 | "proxy-addr": "~2.0.4",
268 | "qs": "6.5.2",
269 | "range-parser": "~1.2.0",
270 | "safe-buffer": "5.1.2",
271 | "send": "0.16.2",
272 | "serve-static": "1.13.2",
273 | "setprototypeof": "1.1.0",
274 | "statuses": "~1.4.0",
275 | "type-is": "~1.6.16",
276 | "utils-merge": "1.0.1",
277 | "vary": "~1.1.2"
278 | },
279 | "dependencies": {
280 | "cookie": {
281 | "version": "0.3.1",
282 | "resolved": "https://registry.npm.taobao.org/cookie/download/cookie-0.3.1.tgz",
283 | "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s="
284 | }
285 | }
286 | },
287 | "finalhandler": {
288 | "version": "1.1.1",
289 | "resolved": "https://registry.npm.taobao.org/finalhandler/download/finalhandler-1.1.1.tgz",
290 | "integrity": "sha1-7r9O2EAHnIP0JJA4ydcDAIMBsQU=",
291 | "requires": {
292 | "debug": "2.6.9",
293 | "encodeurl": "~1.0.2",
294 | "escape-html": "~1.0.3",
295 | "on-finished": "~2.3.0",
296 | "parseurl": "~1.3.2",
297 | "statuses": "~1.4.0",
298 | "unpipe": "~1.0.0"
299 | }
300 | },
301 | "forwarded": {
302 | "version": "0.1.2",
303 | "resolved": "https://registry.npm.taobao.org/forwarded/download/forwarded-0.1.2.tgz",
304 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
305 | },
306 | "fresh": {
307 | "version": "0.5.2",
308 | "resolved": "https://registry.npm.taobao.org/fresh/download/fresh-0.5.2.tgz",
309 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
310 | },
311 | "graceful-readlink": {
312 | "version": "1.0.1",
313 | "resolved": "https://registry.npm.taobao.org/graceful-readlink/download/graceful-readlink-1.0.1.tgz",
314 | "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU="
315 | },
316 | "http-errors": {
317 | "version": "1.6.3",
318 | "resolved": "https://registry.npm.taobao.org/http-errors/download/http-errors-1.6.3.tgz?cache=0&sync_timestamp=1593407647372&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-errors%2Fdownload%2Fhttp-errors-1.6.3.tgz",
319 | "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
320 | "requires": {
321 | "depd": "~1.1.2",
322 | "inherits": "2.0.3",
323 | "setprototypeof": "1.1.0",
324 | "statuses": ">= 1.4.0 < 2"
325 | }
326 | },
327 | "iconv-lite": {
328 | "version": "0.4.23",
329 | "resolved": "https://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.23.tgz?cache=0&sync_timestamp=1594184250387&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ficonv-lite%2Fdownload%2Ficonv-lite-0.4.23.tgz",
330 | "integrity": "sha1-KXhx9jvlB63Pv8pxXQzQ7thOmmM=",
331 | "requires": {
332 | "safer-buffer": ">= 2.1.2 < 3"
333 | }
334 | },
335 | "inherits": {
336 | "version": "2.0.3",
337 | "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz",
338 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
339 | },
340 | "ipaddr.js": {
341 | "version": "1.9.1",
342 | "resolved": "https://registry.npm.taobao.org/ipaddr.js/download/ipaddr.js-1.9.1.tgz",
343 | "integrity": "sha1-v/OFQ+64mEglB5/zoqjmy9RngbM="
344 | },
345 | "is-buffer": {
346 | "version": "1.1.6",
347 | "resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz",
348 | "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4="
349 | },
350 | "is-promise": {
351 | "version": "2.2.2",
352 | "resolved": "https://registry.npm.taobao.org/is-promise/download/is-promise-2.2.2.tgz",
353 | "integrity": "sha1-OauVnMv5p3TPB597QMeib3YxNfE="
354 | },
355 | "jade": {
356 | "version": "1.11.0",
357 | "resolved": "https://registry.npm.taobao.org/jade/download/jade-1.11.0.tgz",
358 | "integrity": "sha1-nIDlOMEtP7lcjZu5VZ+gzAQEBf0=",
359 | "requires": {
360 | "character-parser": "1.2.1",
361 | "clean-css": "^3.1.9",
362 | "commander": "~2.6.0",
363 | "constantinople": "~3.0.1",
364 | "jstransformer": "0.0.2",
365 | "mkdirp": "~0.5.0",
366 | "transformers": "2.1.0",
367 | "uglify-js": "^2.4.19",
368 | "void-elements": "~2.0.1",
369 | "with": "~4.0.0"
370 | }
371 | },
372 | "jstransformer": {
373 | "version": "0.0.2",
374 | "resolved": "https://registry.npm.taobao.org/jstransformer/download/jstransformer-0.0.2.tgz",
375 | "integrity": "sha1-eq4pqQPRls+glz2IXT5HlH7Ndqs=",
376 | "requires": {
377 | "is-promise": "^2.0.0",
378 | "promise": "^6.0.1"
379 | }
380 | },
381 | "kind-of": {
382 | "version": "3.2.2",
383 | "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz",
384 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
385 | "requires": {
386 | "is-buffer": "^1.1.5"
387 | }
388 | },
389 | "lazy-cache": {
390 | "version": "1.0.4",
391 | "resolved": "https://registry.npm.taobao.org/lazy-cache/download/lazy-cache-1.0.4.tgz",
392 | "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4="
393 | },
394 | "longest": {
395 | "version": "1.0.1",
396 | "resolved": "https://registry.npm.taobao.org/longest/download/longest-1.0.1.tgz",
397 | "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc="
398 | },
399 | "media-typer": {
400 | "version": "0.3.0",
401 | "resolved": "https://registry.npm.taobao.org/media-typer/download/media-typer-0.3.0.tgz",
402 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
403 | },
404 | "merge-descriptors": {
405 | "version": "1.0.1",
406 | "resolved": "https://registry.npm.taobao.org/merge-descriptors/download/merge-descriptors-1.0.1.tgz",
407 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
408 | },
409 | "methods": {
410 | "version": "1.1.2",
411 | "resolved": "https://registry.npm.taobao.org/methods/download/methods-1.1.2.tgz",
412 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
413 | },
414 | "mime": {
415 | "version": "1.4.1",
416 | "resolved": "https://registry.npm.taobao.org/mime/download/mime-1.4.1.tgz",
417 | "integrity": "sha1-Eh+evEnjdm8xGnbh+hyAA8SwOqY="
418 | },
419 | "mime-db": {
420 | "version": "1.44.0",
421 | "resolved": "https://registry.npm.taobao.org/mime-db/download/mime-db-1.44.0.tgz",
422 | "integrity": "sha1-+hHF6wrKEzS0Izy01S8QxaYnL5I="
423 | },
424 | "mime-types": {
425 | "version": "2.1.27",
426 | "resolved": "https://registry.npm.taobao.org/mime-types/download/mime-types-2.1.27.tgz",
427 | "integrity": "sha1-R5SfmOJ56lMRn1ci4PNOUpvsAJ8=",
428 | "requires": {
429 | "mime-db": "1.44.0"
430 | }
431 | },
432 | "minimist": {
433 | "version": "1.2.5",
434 | "resolved": "https://registry.npm.taobao.org/minimist/download/minimist-1.2.5.tgz",
435 | "integrity": "sha1-Z9ZgFLZqaoqqDAg8X9WN9OTpdgI="
436 | },
437 | "mkdirp": {
438 | "version": "0.5.5",
439 | "resolved": "https://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.5.tgz",
440 | "integrity": "sha1-2Rzv1i0UNsoPQWIOJRKI1CAJne8=",
441 | "requires": {
442 | "minimist": "^1.2.5"
443 | }
444 | },
445 | "morgan": {
446 | "version": "1.9.1",
447 | "resolved": "https://registry.npm.taobao.org/morgan/download/morgan-1.9.1.tgz",
448 | "integrity": "sha1-Co0Wc0odmvvIJLmd+H5zjlji2lk=",
449 | "requires": {
450 | "basic-auth": "~2.0.0",
451 | "debug": "2.6.9",
452 | "depd": "~1.1.2",
453 | "on-finished": "~2.3.0",
454 | "on-headers": "~1.0.1"
455 | }
456 | },
457 | "ms": {
458 | "version": "2.0.0",
459 | "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz",
460 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
461 | },
462 | "negotiator": {
463 | "version": "0.6.2",
464 | "resolved": "https://registry.npm.taobao.org/negotiator/download/negotiator-0.6.2.tgz",
465 | "integrity": "sha1-/qz3zPUlp3rpY0Q2pkiD/+yjRvs="
466 | },
467 | "on-finished": {
468 | "version": "2.3.0",
469 | "resolved": "https://registry.npm.taobao.org/on-finished/download/on-finished-2.3.0.tgz",
470 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
471 | "requires": {
472 | "ee-first": "1.1.1"
473 | }
474 | },
475 | "on-headers": {
476 | "version": "1.0.2",
477 | "resolved": "https://registry.npm.taobao.org/on-headers/download/on-headers-1.0.2.tgz",
478 | "integrity": "sha1-dysK5qqlJcOZ5Imt+tkMQD6zwo8="
479 | },
480 | "optimist": {
481 | "version": "0.3.7",
482 | "resolved": "https://registry.npm.taobao.org/optimist/download/optimist-0.3.7.tgz",
483 | "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=",
484 | "requires": {
485 | "wordwrap": "~0.0.2"
486 | }
487 | },
488 | "parseurl": {
489 | "version": "1.3.3",
490 | "resolved": "https://registry.npm.taobao.org/parseurl/download/parseurl-1.3.3.tgz",
491 | "integrity": "sha1-naGee+6NEt/wUT7Vt2lXeTvC6NQ="
492 | },
493 | "path-to-regexp": {
494 | "version": "0.1.7",
495 | "resolved": "https://registry.npm.taobao.org/path-to-regexp/download/path-to-regexp-0.1.7.tgz",
496 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
497 | },
498 | "promise": {
499 | "version": "6.1.0",
500 | "resolved": "https://registry.npm.taobao.org/promise/download/promise-6.1.0.tgz",
501 | "integrity": "sha1-LOcp9rlLRcJoka0GAsXJDgTG7vY=",
502 | "requires": {
503 | "asap": "~1.0.0"
504 | }
505 | },
506 | "proxy-addr": {
507 | "version": "2.0.6",
508 | "resolved": "https://registry.npm.taobao.org/proxy-addr/download/proxy-addr-2.0.6.tgz",
509 | "integrity": "sha1-/cIzZQVEfT8vLGOO0nLK9hS7sr8=",
510 | "requires": {
511 | "forwarded": "~0.1.2",
512 | "ipaddr.js": "1.9.1"
513 | }
514 | },
515 | "qs": {
516 | "version": "6.5.2",
517 | "resolved": "https://registry.npm.taobao.org/qs/download/qs-6.5.2.tgz",
518 | "integrity": "sha1-yzroBuh0BERYTvFUzo7pjUA/PjY="
519 | },
520 | "range-parser": {
521 | "version": "1.2.1",
522 | "resolved": "https://registry.npm.taobao.org/range-parser/download/range-parser-1.2.1.tgz",
523 | "integrity": "sha1-PPNwI9GZ4cJNGlW4SADC8+ZGgDE="
524 | },
525 | "raw-body": {
526 | "version": "2.3.3",
527 | "resolved": "https://registry.npm.taobao.org/raw-body/download/raw-body-2.3.3.tgz",
528 | "integrity": "sha1-GzJOzmtXBuFThVvBFIxlu39uoMM=",
529 | "requires": {
530 | "bytes": "3.0.0",
531 | "http-errors": "1.6.3",
532 | "iconv-lite": "0.4.23",
533 | "unpipe": "1.0.0"
534 | }
535 | },
536 | "repeat-string": {
537 | "version": "1.6.1",
538 | "resolved": "https://registry.npm.taobao.org/repeat-string/download/repeat-string-1.6.1.tgz",
539 | "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
540 | },
541 | "right-align": {
542 | "version": "0.1.3",
543 | "resolved": "https://registry.npm.taobao.org/right-align/download/right-align-0.1.3.tgz",
544 | "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
545 | "requires": {
546 | "align-text": "^0.1.1"
547 | }
548 | },
549 | "safe-buffer": {
550 | "version": "5.1.2",
551 | "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz",
552 | "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0="
553 | },
554 | "safer-buffer": {
555 | "version": "2.1.2",
556 | "resolved": "https://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz",
557 | "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo="
558 | },
559 | "send": {
560 | "version": "0.16.2",
561 | "resolved": "https://registry.npm.taobao.org/send/download/send-0.16.2.tgz",
562 | "integrity": "sha1-bsyh4PjBVtFBWXVZhI32RzCmu8E=",
563 | "requires": {
564 | "debug": "2.6.9",
565 | "depd": "~1.1.2",
566 | "destroy": "~1.0.4",
567 | "encodeurl": "~1.0.2",
568 | "escape-html": "~1.0.3",
569 | "etag": "~1.8.1",
570 | "fresh": "0.5.2",
571 | "http-errors": "~1.6.2",
572 | "mime": "1.4.1",
573 | "ms": "2.0.0",
574 | "on-finished": "~2.3.0",
575 | "range-parser": "~1.2.0",
576 | "statuses": "~1.4.0"
577 | }
578 | },
579 | "serve-static": {
580 | "version": "1.13.2",
581 | "resolved": "https://registry.npm.taobao.org/serve-static/download/serve-static-1.13.2.tgz",
582 | "integrity": "sha1-CV6Ecv1bRiN9tQzkhqQ/S4bGzsE=",
583 | "requires": {
584 | "encodeurl": "~1.0.2",
585 | "escape-html": "~1.0.3",
586 | "parseurl": "~1.3.2",
587 | "send": "0.16.2"
588 | }
589 | },
590 | "setprototypeof": {
591 | "version": "1.1.0",
592 | "resolved": "https://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.0.tgz",
593 | "integrity": "sha1-0L2FU2iHtv58DYGMuWLZ2RxU5lY="
594 | },
595 | "source-map": {
596 | "version": "0.4.4",
597 | "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.4.4.tgz",
598 | "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
599 | "requires": {
600 | "amdefine": ">=0.0.4"
601 | }
602 | },
603 | "statuses": {
604 | "version": "1.4.0",
605 | "resolved": "https://registry.npm.taobao.org/statuses/download/statuses-1.4.0.tgz",
606 | "integrity": "sha1-u3PURtonlhBu/MG2AaJT1sRr0Ic="
607 | },
608 | "transformers": {
609 | "version": "2.1.0",
610 | "resolved": "https://registry.npm.taobao.org/transformers/download/transformers-2.1.0.tgz",
611 | "integrity": "sha1-XSPLNVYd2F3Gf7hIIwm0fVPM6ac=",
612 | "requires": {
613 | "css": "~1.0.8",
614 | "promise": "~2.0",
615 | "uglify-js": "~2.2.5"
616 | },
617 | "dependencies": {
618 | "is-promise": {
619 | "version": "1.0.1",
620 | "resolved": "https://registry.npm.taobao.org/is-promise/download/is-promise-1.0.1.tgz",
621 | "integrity": "sha1-MVc3YcBX4zwukaq56W2gjO++duU="
622 | },
623 | "promise": {
624 | "version": "2.0.0",
625 | "resolved": "https://registry.npm.taobao.org/promise/download/promise-2.0.0.tgz",
626 | "integrity": "sha1-RmSKqdYFr10ucMMCS/WUNtoCuA4=",
627 | "requires": {
628 | "is-promise": "~1"
629 | }
630 | },
631 | "source-map": {
632 | "version": "0.1.43",
633 | "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.1.43.tgz",
634 | "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
635 | "requires": {
636 | "amdefine": ">=0.0.4"
637 | }
638 | },
639 | "uglify-js": {
640 | "version": "2.2.5",
641 | "resolved": "https://registry.npm.taobao.org/uglify-js/download/uglify-js-2.2.5.tgz?cache=0&sync_timestamp=1596387375557&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuglify-js%2Fdownload%2Fuglify-js-2.2.5.tgz",
642 | "integrity": "sha1-puAqcNg5eSuXgEiLe4sYTAlcmcc=",
643 | "requires": {
644 | "optimist": "~0.3.5",
645 | "source-map": "~0.1.7"
646 | }
647 | }
648 | }
649 | },
650 | "type-is": {
651 | "version": "1.6.18",
652 | "resolved": "https://registry.npm.taobao.org/type-is/download/type-is-1.6.18.tgz",
653 | "integrity": "sha1-TlUs0F3wlGfcvE73Od6J8s83wTE=",
654 | "requires": {
655 | "media-typer": "0.3.0",
656 | "mime-types": "~2.1.24"
657 | }
658 | },
659 | "uglify-js": {
660 | "version": "2.8.29",
661 | "resolved": "https://registry.npm.taobao.org/uglify-js/download/uglify-js-2.8.29.tgz?cache=0&sync_timestamp=1596387375557&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuglify-js%2Fdownload%2Fuglify-js-2.8.29.tgz",
662 | "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
663 | "requires": {
664 | "source-map": "~0.5.1",
665 | "uglify-to-browserify": "~1.0.0",
666 | "yargs": "~3.10.0"
667 | },
668 | "dependencies": {
669 | "source-map": {
670 | "version": "0.5.7",
671 | "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
672 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
673 | }
674 | }
675 | },
676 | "uglify-to-browserify": {
677 | "version": "1.0.2",
678 | "resolved": "https://registry.npm.taobao.org/uglify-to-browserify/download/uglify-to-browserify-1.0.2.tgz",
679 | "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
680 | "optional": true
681 | },
682 | "unpipe": {
683 | "version": "1.0.0",
684 | "resolved": "https://registry.npm.taobao.org/unpipe/download/unpipe-1.0.0.tgz",
685 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
686 | },
687 | "utils-merge": {
688 | "version": "1.0.1",
689 | "resolved": "https://registry.npm.taobao.org/utils-merge/download/utils-merge-1.0.1.tgz",
690 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
691 | },
692 | "vary": {
693 | "version": "1.1.2",
694 | "resolved": "https://registry.npm.taobao.org/vary/download/vary-1.1.2.tgz",
695 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
696 | },
697 | "void-elements": {
698 | "version": "2.0.1",
699 | "resolved": "https://registry.npm.taobao.org/void-elements/download/void-elements-2.0.1.tgz",
700 | "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w="
701 | },
702 | "window-size": {
703 | "version": "0.1.0",
704 | "resolved": "https://registry.npm.taobao.org/window-size/download/window-size-0.1.0.tgz",
705 | "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0="
706 | },
707 | "with": {
708 | "version": "4.0.3",
709 | "resolved": "https://registry.npm.taobao.org/with/download/with-4.0.3.tgz",
710 | "integrity": "sha1-7v0VTp550sjTQXtkeo8U2f7M4U4=",
711 | "requires": {
712 | "acorn": "^1.0.1",
713 | "acorn-globals": "^1.0.3"
714 | },
715 | "dependencies": {
716 | "acorn": {
717 | "version": "1.2.2",
718 | "resolved": "https://registry.npm.taobao.org/acorn/download/acorn-1.2.2.tgz?cache=0&sync_timestamp=1597235774928&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn%2Fdownload%2Facorn-1.2.2.tgz",
719 | "integrity": "sha1-yM4n3grMdtiW0rH6099YjZ6C8BQ="
720 | }
721 | }
722 | },
723 | "wordwrap": {
724 | "version": "0.0.3",
725 | "resolved": "https://registry.npm.taobao.org/wordwrap/download/wordwrap-0.0.3.tgz",
726 | "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc="
727 | },
728 | "ws": {
729 | "version": "7.3.1",
730 | "resolved": "https://registry.npm.taobao.org/ws/download/ws-7.3.1.tgz?cache=0&sync_timestamp=1593925439808&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fws%2Fdownload%2Fws-7.3.1.tgz",
731 | "integrity": "sha1-0FR79n985PEqct/jEmLGjX3FUcg="
732 | },
733 | "yargs": {
734 | "version": "3.10.0",
735 | "resolved": "https://registry.npm.taobao.org/yargs/download/yargs-3.10.0.tgz?cache=0&sync_timestamp=1597809611661&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-3.10.0.tgz",
736 | "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
737 | "requires": {
738 | "camelcase": "^1.0.2",
739 | "cliui": "^2.1.0",
740 | "decamelize": "^1.0.0",
741 | "window-size": "0.1.0"
742 | }
743 | }
744 | }
745 | }
746 |
--------------------------------------------------------------------------------
/UI_Srever/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "ipwebui",
3 | "version": "0.0.0",
4 | "private": true,
5 | "scripts": {
6 | "start": "node ./bin/www"
7 | },
8 | "dependencies": {
9 | "cookie-parser": "~1.4.4",
10 | "debug": "~2.6.9",
11 | "express": "~4.16.1",
12 | "http-errors": "~1.6.3",
13 | "jade": "~1.11.0",
14 | "morgan": "~1.9.1",
15 | "ws": "^7.3.1"
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/UI_Srever/public/stylesheets/style.css:
--------------------------------------------------------------------------------
1 | body {
2 | padding: 50px;
3 | font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;
4 | }
5 |
6 | a {
7 | color: #00B7FF;
8 | }
9 |
--------------------------------------------------------------------------------
/UI_Srever/routes/index.js:
--------------------------------------------------------------------------------
1 | var express = require('express');
2 | var router = express.Router();
3 | var exec = require("child_process").exec;
4 |
5 | /* GET home page. */
6 | router.get('/', function (req, res, next) {
7 | exec("/sbin/iptables -t nat -L -n --line-numbers -v", function (err, stdout, stderr) {
8 | res.json({code:(err?0:200),data:stdout}).end()
9 | });
10 | });
11 |
12 | module.exports = router;
13 |
--------------------------------------------------------------------------------
/UI_Srever/routes/iptables.js:
--------------------------------------------------------------------------------
1 | var exec = require("child_process").exec;
2 |
--------------------------------------------------------------------------------
/UI_Srever/routes/users.js:
--------------------------------------------------------------------------------
1 | var express = require('express');
2 | var router = express.Router();
3 |
4 | /* GET users listing. */
5 | router.get('/', function(req, res, next) {
6 | res.send('respond with a resource');
7 | });
8 | router.get('/app', function(req, res, next) {
9 | res.send('respond with a app');
10 | });
11 |
12 |
13 | module.exports = router;
14 |
--------------------------------------------------------------------------------
/UI_Srever/views/error.jade:
--------------------------------------------------------------------------------
1 | extends layout
2 |
3 | block content
4 | h1= message
5 | h2= error.status
6 | pre #{error.stack}
7 |
--------------------------------------------------------------------------------
/UI_Srever/views/index.jade:
--------------------------------------------------------------------------------
1 | extends layout
2 |
3 | block content
4 | h1= title
5 | p Welcome to #{title}
6 |
--------------------------------------------------------------------------------
/UI_Srever/views/layout.jade:
--------------------------------------------------------------------------------
1 | doctype html
2 | html
3 | head
4 | title= title
5 | link(rel='stylesheet', href='/stylesheets/style.css')
6 | body
7 | block content
8 |
--------------------------------------------------------------------------------
/iptables/Makefile:
--------------------------------------------------------------------------------
1 | .PHONY: dist build
2 | install:
3 | @npm install
4 |
5 | dev: install
6 | @npm run dev
7 |
8 | build:
9 | @npm run build
10 |
--------------------------------------------------------------------------------
/iptables/README.md:
--------------------------------------------------------------------------------
1 | # element-starter
2 |
3 | > A starter kit for Element UI generated by vue-cli
4 |
5 | *If you are familiar with [cooking](https://github.com/elemefe/cooking), [here](https://github.com/ElementUI/element-cooking-starter) is a starter generated with it*
6 |
7 | ## Environment
8 |
9 | `Node >= 6`
10 |
11 | ## Start
12 |
13 | - Clone or download this repository
14 | - Enter your local directory, and install dependencies:
15 |
16 | ``` bash
17 | yarn
18 | ```
19 |
20 | ## Develop
21 |
22 | ``` bash
23 | # serve with hot reload at localhost:8010
24 | npm run dev
25 | ```
26 |
27 | ## Build
28 |
29 | ``` bash
30 | # build for production with minification
31 | npm run build
32 | ```
33 |
--------------------------------------------------------------------------------
/iptables/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "element-starter",
3 | "description": "A Vue.js project",
4 | "author": "yi.shyang@ele.me",
5 | "private": true,
6 | "scripts": {
7 | "dev": "webpack-dev-server --inline --hot --env.dev",
8 | "build": "rimraf dist && webpack -p --progress --hide-modules"
9 | },
10 | "dependencies": {
11 | "axios": "^0.19.2",
12 | "element-ui": "^2.3.4",
13 | "vue": "^2.5.16"
14 | },
15 | "engines": {
16 | "node": ">=6"
17 | },
18 | "devDependencies": {
19 | "autoprefixer": "^6.6.0",
20 | "babel-core": "^6.24.1",
21 | "babel-loader": "^6.4.0",
22 | "babel-preset-vue-app": "^1.2.0",
23 | "css-loader": "^0.27.0",
24 | "file-loader": "^0.10.1",
25 | "html-webpack-plugin": "^2.24.1",
26 | "postcss-loader": "^1.3.3",
27 | "rimraf": "^2.5.4",
28 | "style-loader": "^0.13.2",
29 | "url-loader": "^0.5.8",
30 | "vue-loader": "^13.3.0",
31 | "vue-template-compiler": "^2.5.16",
32 | "webpack": "^2.4.1",
33 | "webpack-dev-server": "^2.4.2"
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/iptables/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: [
3 | require('autoprefixer')()
4 | ]
5 | }
6 |
--------------------------------------------------------------------------------
/iptables/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
97 |
189 |
111 |
145 |
146 |
147 |
112 |
114 |
115 |
117 |
118 |
120 |
121 |
123 |
124 |
126 |
127 |
129 |
130 |
132 |
133 |
135 |
136 |
138 |
139 |
141 |
142 |
144 |
148 |
186 |
187 |
188 |
149 |
151 |
152 |
154 |
155 |
157 |
158 |
164 |
165 |
167 |
168 |
170 |
171 |
173 |
174 |
176 |
177 |
179 |
180 |
182 |
183 |
185 |