miolo 0.0.1
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/.babelrc.js +12 -0
- package/.eslintignore +3 -0
- package/.eslintrc.js +50 -0
- package/lib/cacher/index.js +98 -0
- package/lib/cacher/verify.js +32 -0
- package/lib/config/defaults.js +204 -0
- package/lib/config/index.js +14 -0
- package/lib/db/conn.js +15 -0
- package/lib/emailer/index.js +62 -0
- package/lib/emailer/verify.js +13 -0
- package/lib/index.js +59 -0
- package/lib/logger/index.js +98 -0
- package/lib/logger/logger_mail.js +59 -0
- package/lib/logger/verify.js +25 -0
- package/lib/server/engines/cron/index.js +16 -0
- package/lib/server/engines/cron/syscheck.js +50 -0
- package/lib/server/engines/socket/index.js +48 -0
- package/lib/server/index.js +126 -0
- package/lib/server/middleware/_cors.js +130 -0
- package/lib/server/middleware/auth/basic.js +72 -0
- package/lib/server/middleware/auth/passport.js +119 -0
- package/lib/server/middleware/body.js +48 -0
- package/lib/server/middleware/catcher.js +54 -0
- package/lib/server/middleware/request.js +56 -0
- package/lib/server/middleware/session/index.js +24 -0
- package/lib/server/middleware/session/store.js +5 -0
- package/lib/server/middleware/static.js +34 -0
- package/lib/server/routes/catch_js_error.js +42 -0
- package/lib/server/routes/crud.js +32 -0
- package/lib/server/routes/fallback_index.html +24 -0
- package/lib/server/routes/html_render.js +48 -0
- package/lib/server/routes/queries.js +45 -0
- package/lib/server/routes/robots.js +37 -0
- package/lib/server/static/img/favicon.ico +0 -0
- package/lib/server/static/robots.txt +2 -0
- package/package.json +49 -0
- package/src/cacher/index.js +61 -0
- package/src/cacher/verify.js +20 -0
- package/src/config/defaults.js +204 -0
- package/src/config/index.js +11 -0
- package/src/db/conn.js +10 -0
- package/src/emailer/index.js +64 -0
- package/src/emailer/verify.js +8 -0
- package/src/index.js +16 -0
- package/src/logger/index.js +95 -0
- package/src/logger/logger_mail.js +70 -0
- package/src/logger/verify.js +22 -0
- package/src/server/engines/cron/index.js +18 -0
- package/src/server/engines/cron/syscheck.js +50 -0
- package/src/server/engines/socket/index.js +38 -0
- package/src/server/index.js +95 -0
- package/src/server/middleware/_cors.js +130 -0
- package/src/server/middleware/auth/basic.js +57 -0
- package/src/server/middleware/auth/passport.js +111 -0
- package/src/server/middleware/body.js +45 -0
- package/src/server/middleware/catcher.js +44 -0
- package/src/server/middleware/request.js +46 -0
- package/src/server/middleware/session/index.js +16 -0
- package/src/server/middleware/session/store.js +3 -0
- package/src/server/middleware/static.js +19 -0
- package/src/server/routes/catch_js_error.js +28 -0
- package/src/server/routes/crud.js +14 -0
- package/src/server/routes/fallback_index.html +24 -0
- package/src/server/routes/html_render.js +33 -0
- package/src/server/routes/queries.js +26 -0
- package/src/server/routes/robots.js +20 -0
- package/src/server/static/img/favicon.ico +0 -0
- package/src/server/static/robots.txt +2 -0
- package/start.sh +3 -0
- package/stop.sh +3 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _farrapaColors = require("farrapa-colors");
|
|
4
|
+
|
|
5
|
+
var util = require("util");
|
|
6
|
+
|
|
7
|
+
var winston = require("winston");
|
|
8
|
+
|
|
9
|
+
function init_logger_to_mail(config, emailer) {
|
|
10
|
+
var MailerLogger = function MailerLogger(options) {
|
|
11
|
+
winston.Transport.call(this, options);
|
|
12
|
+
options = options || {};
|
|
13
|
+
this.silent = options.silent || false;
|
|
14
|
+
this.level = options.level || 'info';
|
|
15
|
+
this.to = options.to || config.to, this.from = config.from;
|
|
16
|
+
this.humanReadableUnhandledException = options.humanReadableUnhandledException || true;
|
|
17
|
+
this.handleExceptions = options.handleExceptions || true;
|
|
18
|
+
this.json = options.json || false;
|
|
19
|
+
this.colorize = options.colorize || false;
|
|
20
|
+
};
|
|
21
|
+
/** @extends winston.Transport */
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
util.inherits(MailerLogger, winston.Transport); //
|
|
25
|
+
// Expose the name of this Transport on the prototype
|
|
26
|
+
//
|
|
27
|
+
|
|
28
|
+
MailerLogger.prototype.name = 'MailerLogger';
|
|
29
|
+
|
|
30
|
+
MailerLogger.prototype.log = function (info, callback) {
|
|
31
|
+
var self = this;
|
|
32
|
+
if (this.silent) return callback(null, true);
|
|
33
|
+
var tit = '';
|
|
34
|
+
|
|
35
|
+
try {
|
|
36
|
+
tit = info.message.split("\n")[0];
|
|
37
|
+
} catch (e) {
|
|
38
|
+
tit = info.message.toString();
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
tit = (0, _farrapaColors.uncolor)(tit);
|
|
42
|
+
var subject = config.name + ': [' + info.level.toUpperCase() + '] ' + tit;
|
|
43
|
+
var mail = {
|
|
44
|
+
to: this.to,
|
|
45
|
+
subject: subject,
|
|
46
|
+
text: (0, _farrapaColors.uncolor)(info.message)
|
|
47
|
+
};
|
|
48
|
+
emailer.send(mail, function () {
|
|
49
|
+
self.emit("logged");
|
|
50
|
+
callback(null, true);
|
|
51
|
+
});
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
return MailerLogger;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
module.exports = {
|
|
58
|
+
init_logger_to_mail
|
|
59
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.verify_logger = verify_logger;
|
|
7
|
+
|
|
8
|
+
var _index = require("./index");
|
|
9
|
+
|
|
10
|
+
function verify_logger(config) {
|
|
11
|
+
var logger = (0, _index.make_logger)(config);
|
|
12
|
+
|
|
13
|
+
try {
|
|
14
|
+
console.info('[miolo][Verify][LOGGER] Verifying...');
|
|
15
|
+
logger.error('Error message');
|
|
16
|
+
logger.warn('Warn message');
|
|
17
|
+
logger.info('Info message');
|
|
18
|
+
logger.verbose('Verbose message');
|
|
19
|
+
logger.debug('Debug message');
|
|
20
|
+
logger.silly('Silly message');
|
|
21
|
+
} catch (e) {
|
|
22
|
+
console.error('[miolo][Verify][LOGGER] ERROR: ');
|
|
23
|
+
console.error(e);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.init_cron = init_cron;
|
|
7
|
+
|
|
8
|
+
var _syscheck = require("./syscheck");
|
|
9
|
+
|
|
10
|
+
var CronJob = require('cron').CronJob;
|
|
11
|
+
|
|
12
|
+
function init_cron(logger) {
|
|
13
|
+
var sys_check_and_log = (0, _syscheck.init_sys_check_and_log)(logger);
|
|
14
|
+
|
|
15
|
+
var _sCheck = new CronJob('30 * * * *', sys_check_and_log, null, true, 'Europe/Madrid');
|
|
16
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.init_sys_check_and_log = init_sys_check_and_log;
|
|
7
|
+
|
|
8
|
+
var _farrapaColors = require("farrapa-colors");
|
|
9
|
+
|
|
10
|
+
var os = require('os');
|
|
11
|
+
|
|
12
|
+
var diskspace = require('diskspace');
|
|
13
|
+
|
|
14
|
+
function init_sys_check_and_log(logger) {
|
|
15
|
+
function toMB(bytes) {
|
|
16
|
+
if (!bytes) return 0;
|
|
17
|
+
return bytes / 1000000;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function toGB(kbytes) {
|
|
21
|
+
if (!kbytes) return 0;
|
|
22
|
+
return kbytes / 1000000;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function sys_check_and_log() {
|
|
26
|
+
var used = Math.round(toMB(os.freemem()), 2);
|
|
27
|
+
var total = Math.round(toMB(os.totalmem()), 2);
|
|
28
|
+
var perc = Math.round(used * 100 / total, 2);
|
|
29
|
+
|
|
30
|
+
if (perc > 80) {
|
|
31
|
+
logger.error("[SERVER][".concat((0, _farrapaColors.CYAN)('SysCheck'), "] RAM ").concat((0, _farrapaColors.YELLOW)(used), " MB used of ").concat((0, _farrapaColors.GREEN)(total), " MB (").concat((0, _farrapaColors.YELLOW)(perc), " %)"));
|
|
32
|
+
} else {
|
|
33
|
+
logger.info("[SERVER][".concat((0, _farrapaColors.CYAN)('SysCheck'), "] RAM ").concat((0, _farrapaColors.YELLOW)(used), " MB used of ").concat((0, _farrapaColors.GREEN)(total), " MB (").concat((0, _farrapaColors.YELLOW)(perc), " %)"));
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
diskspace.check('/', function (err, result) {
|
|
37
|
+
var used = Math.round(toGB(result.used), 2);
|
|
38
|
+
var total = Math.round(toGB(result.total), 2);
|
|
39
|
+
var free = Math.round(toGB(result.free), 2);
|
|
40
|
+
|
|
41
|
+
if (free < 1) {
|
|
42
|
+
logger.error("[SERVER][".concat((0, _farrapaColors.CYAN)('SysCheck'), "] DISK ").concat((0, _farrapaColors.YELLOW)(used), " GB used of ").concat((0, _farrapaColors.GREEN)(total), " MB (").concat((0, _farrapaColors.YELLOW)(free), " GB free)"));
|
|
43
|
+
} else {
|
|
44
|
+
logger.info("[SERVER][".concat((0, _farrapaColors.CYAN)('SysCheck'), "] DISK ").concat((0, _farrapaColors.YELLOW)(used), " GB used of ").concat((0, _farrapaColors.GREEN)(total), " MB (").concat((0, _farrapaColors.YELLOW)(free), " GB free)"));
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return sys_check_and_log;
|
|
50
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.init_socket = init_socket;
|
|
7
|
+
|
|
8
|
+
var _koaSocket = _interopRequireDefault(require("koa-socket-2"));
|
|
9
|
+
|
|
10
|
+
var _farrapaColors = require("farrapa-colors");
|
|
11
|
+
|
|
12
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
+
|
|
14
|
+
function init_socket(logger) {
|
|
15
|
+
var getInfo = ctx => {
|
|
16
|
+
var i = {
|
|
17
|
+
id: '',
|
|
18
|
+
ip: ''
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
try {
|
|
22
|
+
i.id = ctx.socket.id;
|
|
23
|
+
} catch (e) {}
|
|
24
|
+
|
|
25
|
+
try {
|
|
26
|
+
i.ip = ctx.socket.handshake.address;
|
|
27
|
+
} catch (e) {}
|
|
28
|
+
|
|
29
|
+
return i;
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
var io = new _koaSocket.default({
|
|
33
|
+
origins: '*:*'
|
|
34
|
+
});
|
|
35
|
+
io.on('connection', function (ctx, _data) {
|
|
36
|
+
var i = getInfo(ctx);
|
|
37
|
+
logger.debug("".concat((0, _farrapaColors.BLUE)('SOCKET'), " Connection from ").concat(i.ip, " ").concat(i.id));
|
|
38
|
+
});
|
|
39
|
+
io.on('disconnect', function (ctx, data) {
|
|
40
|
+
var i = getInfo(ctx);
|
|
41
|
+
logger.debug("".concat((0, _farrapaColors.BLUE)('SOCKET'), " Disconnected ").concat(i.ip, " ").concat(i.id, " => ").concat(data));
|
|
42
|
+
});
|
|
43
|
+
io.on('error', function (ctx, data) {
|
|
44
|
+
var i = getInfo(ctx);
|
|
45
|
+
logger.error("".concat((0, _farrapaColors.BLUE)('SOCKET'), " Error on ").concat(i.ip, " ").concat(i.id, " => ").concat(data));
|
|
46
|
+
});
|
|
47
|
+
return io;
|
|
48
|
+
}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.miolo = miolo;
|
|
7
|
+
|
|
8
|
+
var _koa = _interopRequireDefault(require("koa"));
|
|
9
|
+
|
|
10
|
+
var _config = require("../config");
|
|
11
|
+
|
|
12
|
+
var _emailer = require("../emailer");
|
|
13
|
+
|
|
14
|
+
var _logger = require("../logger");
|
|
15
|
+
|
|
16
|
+
var _cron = require("./engines/cron");
|
|
17
|
+
|
|
18
|
+
var _catcher = require("./middleware/catcher");
|
|
19
|
+
|
|
20
|
+
var _static = require("./middleware/static");
|
|
21
|
+
|
|
22
|
+
var _body = require("./middleware/body");
|
|
23
|
+
|
|
24
|
+
var _conn = require("../db/conn");
|
|
25
|
+
|
|
26
|
+
var _request = require("./middleware/request");
|
|
27
|
+
|
|
28
|
+
var _session = require("./middleware/session");
|
|
29
|
+
|
|
30
|
+
var _robots = require("./routes/robots");
|
|
31
|
+
|
|
32
|
+
var _catch_js_error = require("./routes/catch_js_error");
|
|
33
|
+
|
|
34
|
+
var _html_render = require("./routes/html_render");
|
|
35
|
+
|
|
36
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
37
|
+
|
|
38
|
+
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
39
|
+
|
|
40
|
+
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
41
|
+
|
|
42
|
+
function miolo(_x, _x2) {
|
|
43
|
+
return _miolo.apply(this, arguments);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function _miolo() {
|
|
47
|
+
_miolo = _asyncToGenerator(function* (sconfig, render) {
|
|
48
|
+
var _config$http, _config$auth, _config$auth2, _config$routes, _config$routes2;
|
|
49
|
+
|
|
50
|
+
// Init some pieces
|
|
51
|
+
var config = (0, _config.init_config)(sconfig);
|
|
52
|
+
var emailer = (0, _emailer.init_emailer)(config.mail.options, config.mail.defaults);
|
|
53
|
+
var logger = (0, _logger.init_logger)(config.log, emailer);
|
|
54
|
+
var app = new _koa.default(); // Compress and body parser
|
|
55
|
+
|
|
56
|
+
(0, _body.init_body_middleware)(app); // override koa's undocumented error handler
|
|
57
|
+
|
|
58
|
+
(0, _catcher.init_catcher_middleware)(app, logger); // Serve static files
|
|
59
|
+
|
|
60
|
+
(0, _static.init_static_middleware)(app, (_config$http = config.http) === null || _config$http === void 0 ? void 0 : _config$http.static); // Feed and log request
|
|
61
|
+
|
|
62
|
+
(0, _request.init_request_middleware)(app, logger); // Create context/session
|
|
63
|
+
|
|
64
|
+
(0, _session.init_session_middleware)(app, config === null || config === void 0 ? void 0 : config.session, logger); // attach the default robots.txt
|
|
65
|
+
|
|
66
|
+
(0, _robots.init_route_robots)(app); // Middleware for caching JS errors
|
|
67
|
+
|
|
68
|
+
(0, _catch_js_error.init_route_catch_js_error)(app, '/sys/jserror', logger); // auth middleware
|
|
69
|
+
|
|
70
|
+
if (config !== null && config !== void 0 && (_config$auth = config.auth) !== null && _config$auth !== void 0 && _config$auth.basic) {
|
|
71
|
+
var {
|
|
72
|
+
init_basic_auth_middleware
|
|
73
|
+
} = require("./middleware/auth/basic");
|
|
74
|
+
|
|
75
|
+
init_basic_auth_middleware(app, config.auth.basic);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
if (config !== null && config !== void 0 && (_config$auth2 = config.auth) !== null && _config$auth2 !== void 0 && _config$auth2.passport) {
|
|
79
|
+
var {
|
|
80
|
+
init_passport_auth_middleware
|
|
81
|
+
} = require("./middleware/auth/passport");
|
|
82
|
+
|
|
83
|
+
init_passport_auth_middleware(app, config.auth.passport);
|
|
84
|
+
} // Routes to /crud
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
var conn;
|
|
88
|
+
|
|
89
|
+
if (config.database) {
|
|
90
|
+
conn = (0, _conn.init_db_connection)(config.database);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
if (config !== null && config !== void 0 && (_config$routes = config.routes) !== null && _config$routes !== void 0 && _config$routes.crud) {
|
|
94
|
+
var {
|
|
95
|
+
init_crud_router
|
|
96
|
+
} = require("./routes/crud");
|
|
97
|
+
|
|
98
|
+
yield init_crud_router(app, conn, config.routes.crud);
|
|
99
|
+
} // Queries routes
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
if (config !== null && config !== void 0 && (_config$routes2 = config.routes) !== null && _config$routes2 !== void 0 && _config$routes2.queries) {
|
|
103
|
+
var {
|
|
104
|
+
init_queries_router
|
|
105
|
+
} = require("./routes/queries");
|
|
106
|
+
|
|
107
|
+
yield init_queries_router(app, conn, config.routes.queries);
|
|
108
|
+
} // Socket.io
|
|
109
|
+
// const io= init_socket(logger)
|
|
110
|
+
// io.attach(app)
|
|
111
|
+
// Middleware for html render
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
if (render == undefined || render.html != undefined) {
|
|
115
|
+
(0, _html_render.init_route_html_render)(app, render === null || render === void 0 ? void 0 : render.html, logger);
|
|
116
|
+
} else if (render.middleware != undefined) {
|
|
117
|
+
app.use(render.middleware);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
app.listen(config.http.port, function () {
|
|
121
|
+
logger.info('miolo is listening on port ' + config.http.port);
|
|
122
|
+
(0, _cron.init_cron)(logger);
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
return _miolo.apply(this, arguments);
|
|
126
|
+
}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
/**
|
|
3
|
+
* CORS middleware
|
|
4
|
+
*
|
|
5
|
+
* @param {Object} [options]
|
|
6
|
+
* - {String|Function(ctx)} origin `Access-Control-Allow-Origin`, default is request Origin header
|
|
7
|
+
* - {String|Array} allowMethods `Access-Control-Allow-Methods`, default is 'GET,HEAD,PUT,POST,DELETE,PATCH'
|
|
8
|
+
* - {String|Array} exposeHeaders `Access-Control-Expose-Headers`
|
|
9
|
+
* - {String|Array} allowHeaders `Access-Control-Allow-Headers`
|
|
10
|
+
* - {String|Number} maxAge `Access-Control-Max-Age` in seconds
|
|
11
|
+
* - {Boolean} credentials `Access-Control-Allow-Credentials`
|
|
12
|
+
* - {Boolean} keepHeadersOnError Add set headers to `err.header` if an error is thrown
|
|
13
|
+
* @return {Function} cors middleware
|
|
14
|
+
* @api public
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
module.exports = function (options) {
|
|
18
|
+
var defaults = {
|
|
19
|
+
allowMethods: 'GET,HEAD,PUT,POST,DELETE,PATCH'
|
|
20
|
+
};
|
|
21
|
+
options = Object.assign({}, defaults, options);
|
|
22
|
+
|
|
23
|
+
if (Array.isArray(options.exposeHeaders)) {
|
|
24
|
+
options.exposeHeaders = options.exposeHeaders.join(',');
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
if (Array.isArray(options.allowMethods)) {
|
|
28
|
+
options.allowMethods = options.allowMethods.join(',');
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
if (Array.isArray(options.allowHeaders)) {
|
|
32
|
+
options.allowHeaders = options.allowHeaders.join(',');
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
if (options.maxAge) {
|
|
36
|
+
options.maxAge = String(options.maxAge);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
options.credentials = !!options.credentials;
|
|
40
|
+
options.keepHeadersOnError = options.keepHeadersOnError === undefined || !!options.keepHeadersOnError;
|
|
41
|
+
return function cors(ctx, next) {
|
|
42
|
+
// If the Origin header is not present terminate this set of steps.
|
|
43
|
+
// The request is outside the scope of this specification.
|
|
44
|
+
var requestOrigin = ctx.get('Origin'); // Always set Vary header
|
|
45
|
+
// https://github.com/rs/cors/issues/10
|
|
46
|
+
|
|
47
|
+
ctx.vary('Origin');
|
|
48
|
+
|
|
49
|
+
if (!requestOrigin) {
|
|
50
|
+
return next();
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
var origin;
|
|
54
|
+
|
|
55
|
+
if (typeof options.origin === 'function') {
|
|
56
|
+
// FIXME: origin can be promise
|
|
57
|
+
origin = options.origin(ctx);
|
|
58
|
+
|
|
59
|
+
if (!origin) {
|
|
60
|
+
return next();
|
|
61
|
+
}
|
|
62
|
+
} else {
|
|
63
|
+
origin = options.origin || requestOrigin;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
var headersSet = {};
|
|
67
|
+
|
|
68
|
+
function set(key, value) {
|
|
69
|
+
ctx.set(key, value);
|
|
70
|
+
headersSet[key] = value;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
if (ctx.method !== 'OPTIONS') {
|
|
74
|
+
// Simple Cross-Origin Request, Actual Request, and Redirects
|
|
75
|
+
set('Access-Control-Allow-Origin', origin);
|
|
76
|
+
|
|
77
|
+
if (options.credentials === true) {
|
|
78
|
+
set('Access-Control-Allow-Credentials', 'true');
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
if (options.exposeHeaders) {
|
|
82
|
+
set('Access-Control-Expose-Headers', options.exposeHeaders);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
if (!options.keepHeadersOnError) {
|
|
86
|
+
return next();
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
return next().catch(err => {
|
|
90
|
+
err.headers = Object.assign({}, err.headers, headersSet);
|
|
91
|
+
throw err;
|
|
92
|
+
});
|
|
93
|
+
} else {
|
|
94
|
+
// Preflight Request
|
|
95
|
+
// If there is no Access-Control-Request-Method header or if parsing failed,
|
|
96
|
+
// do not set any additional headers and terminate this set of steps.
|
|
97
|
+
// The request is outside the scope of this specification.
|
|
98
|
+
if (!ctx.get('Access-Control-Request-Method')) {
|
|
99
|
+
// this not preflight request, ignore it
|
|
100
|
+
return next();
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
ctx.set('Access-Control-Allow-Origin', origin);
|
|
104
|
+
|
|
105
|
+
if (options.credentials === true) {
|
|
106
|
+
ctx.set('Access-Control-Allow-Credentials', 'true');
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
if (options.maxAge) {
|
|
110
|
+
ctx.set('Access-Control-Max-Age', options.maxAge);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
if (options.allowMethods) {
|
|
114
|
+
ctx.set('Access-Control-Allow-Methods', options.allowMethods);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
var allowHeaders = options.allowHeaders;
|
|
118
|
+
|
|
119
|
+
if (!allowHeaders) {
|
|
120
|
+
allowHeaders = ctx.get('Access-Control-Request-Headers');
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
if (allowHeaders) {
|
|
124
|
+
ctx.set('Access-Control-Allow-Headers', allowHeaders);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
ctx.status = 204;
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
};
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.init_basic_auth_middleware = void 0;
|
|
7
|
+
|
|
8
|
+
var _koaMount = _interopRequireDefault(require("koa-mount"));
|
|
9
|
+
|
|
10
|
+
var _basicAuth = _interopRequireDefault(require("basic-auth"));
|
|
11
|
+
|
|
12
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
+
|
|
14
|
+
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
15
|
+
|
|
16
|
+
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
17
|
+
|
|
18
|
+
var init_basic_auth_middleware = (app, options) => {
|
|
19
|
+
var {
|
|
20
|
+
auth_user,
|
|
21
|
+
realm,
|
|
22
|
+
paths
|
|
23
|
+
} = options;
|
|
24
|
+
|
|
25
|
+
if (!realm) {
|
|
26
|
+
realm = 'Secure Area';
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function basic_auth_middleware(_x, _x2) {
|
|
30
|
+
return _basic_auth_middleware.apply(this, arguments);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function _basic_auth_middleware() {
|
|
34
|
+
_basic_auth_middleware = _asyncToGenerator(function* (ctx, next) {
|
|
35
|
+
ctx.user = null;
|
|
36
|
+
var au_user = (0, _basicAuth.default)(ctx);
|
|
37
|
+
|
|
38
|
+
var unauth_err = () => {
|
|
39
|
+
return ctx.throw(401, null, {
|
|
40
|
+
headers: {
|
|
41
|
+
'WWW-Authenticate': 'Basic realm="' + realm.replace(/"/g, '\\"') + '"'
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
if (!au_user) {
|
|
47
|
+
return unauth_err();
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
console.log('authing........');
|
|
51
|
+
var user = yield auth_user(au_user.name, au_user.pass);
|
|
52
|
+
console.log('authed authed');
|
|
53
|
+
console.log(user);
|
|
54
|
+
|
|
55
|
+
if (user === false || user == undefined) {
|
|
56
|
+
return unauth_err();
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
ctx.user = user;
|
|
60
|
+
yield next();
|
|
61
|
+
});
|
|
62
|
+
return _basic_auth_middleware.apply(this, arguments);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
if (paths == undefined || paths.length == 0) {
|
|
66
|
+
app.use(basic_auth_middleware);
|
|
67
|
+
} else {
|
|
68
|
+
paths.map(p => app.use((0, _koaMount.default)(p, basic_auth_middleware)));
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
exports.init_basic_auth_middleware = init_basic_auth_middleware;
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.init_passport_auth_middleware = void 0;
|
|
7
|
+
|
|
8
|
+
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
9
|
+
|
|
10
|
+
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
11
|
+
|
|
12
|
+
var passport = require('koa-passport');
|
|
13
|
+
|
|
14
|
+
var LocalStrategy = require('passport-local').Strategy;
|
|
15
|
+
|
|
16
|
+
var Router = require('@koa/router'); // passport: {
|
|
17
|
+
// get_user_id: (user, done) => done(null, user.id), // default
|
|
18
|
+
// find_user_by_id: (id, done) => done(null, {id: 1}), // ok=> done(null, user) err=> done(error, null)
|
|
19
|
+
// local_auth_user: (username, password, done) => done(null, {id: 1})
|
|
20
|
+
// // auth=> done(null, user) noauth=> done(null, false, {message: ''}) err=> done(error, null)
|
|
21
|
+
// }
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
var def_get_user_id = (user, done) => done(null, user.id);
|
|
25
|
+
|
|
26
|
+
var def_find_user_by_id = (id, done) => {
|
|
27
|
+
var err = Error('You need to define auth.passport.find_user_by_id');
|
|
28
|
+
done(err, null);
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
var def_local_auth_user = (username, password, done) => {
|
|
32
|
+
var err = Error('You need to define auth.passport.local_auth_user');
|
|
33
|
+
done(err, null);
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
var init_passport_auth_middleware = (app, options) => {
|
|
37
|
+
var {
|
|
38
|
+
get_user_id,
|
|
39
|
+
find_user_by_id,
|
|
40
|
+
local_auth_user
|
|
41
|
+
} = options; //const local_options = {}
|
|
42
|
+
|
|
43
|
+
var get_user_id_f = get_user_id || def_get_user_id;
|
|
44
|
+
var find_user_by_id_f = find_user_by_id || def_find_user_by_id;
|
|
45
|
+
var local_auth_user_f = local_auth_user || def_local_auth_user;
|
|
46
|
+
|
|
47
|
+
var serialize_user = (user, done) => {
|
|
48
|
+
process.nextTick(function () {
|
|
49
|
+
get_user_id_f(user, done);
|
|
50
|
+
});
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
var deserialize_user = (id, done) => {
|
|
54
|
+
process.nextTick(function () {
|
|
55
|
+
find_user_by_id_f(id, done);
|
|
56
|
+
});
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
var local_strategy = new LocalStrategy((username, password, done) => {
|
|
60
|
+
local_auth_user_f(username, password, done);
|
|
61
|
+
});
|
|
62
|
+
passport.serializeUser(serialize_user);
|
|
63
|
+
passport.deserializeUser(deserialize_user);
|
|
64
|
+
passport.use(local_strategy);
|
|
65
|
+
app.use(passport.initialize());
|
|
66
|
+
app.use(passport.session());
|
|
67
|
+
var login_router = new Router();
|
|
68
|
+
/*login_router.post('/login', passport.authenticate('local', {
|
|
69
|
+
successRedirect: '/',
|
|
70
|
+
failureRedirect: '/', // /login
|
|
71
|
+
//failureMessage: true
|
|
72
|
+
}))*/
|
|
73
|
+
|
|
74
|
+
login_router.post('/login', function (ctx, next) {
|
|
75
|
+
return passport.authenticate('local', function (err, user, info, status) {
|
|
76
|
+
// console.log('[PASS AUTH] Error', err)
|
|
77
|
+
// console.log('[PASS AUTH] User', user)
|
|
78
|
+
// console.log('[PASS AUTH] Info', info)
|
|
79
|
+
// console.log('[PASS AUTH] Status', status)
|
|
80
|
+
if (user === false) {
|
|
81
|
+
ctx.body = {
|
|
82
|
+
success: false,
|
|
83
|
+
user: undefined,
|
|
84
|
+
authenticated: false,
|
|
85
|
+
info: info,
|
|
86
|
+
error: err
|
|
87
|
+
};
|
|
88
|
+
ctx.throw(401);
|
|
89
|
+
} else {
|
|
90
|
+
ctx.body = {
|
|
91
|
+
success: true,
|
|
92
|
+
user: user,
|
|
93
|
+
authenticated: true
|
|
94
|
+
};
|
|
95
|
+
return ctx.login(user);
|
|
96
|
+
}
|
|
97
|
+
})(ctx);
|
|
98
|
+
});
|
|
99
|
+
login_router.post('/logout', /*#__PURE__*/function () {
|
|
100
|
+
var _ref = _asyncToGenerator(function* (ctx) {
|
|
101
|
+
if (ctx.isAuthenticated()) {
|
|
102
|
+
ctx.logout();
|
|
103
|
+
ctx.redirect('/');
|
|
104
|
+
} else {
|
|
105
|
+
ctx.body = {
|
|
106
|
+
success: false
|
|
107
|
+
};
|
|
108
|
+
ctx.throw(401);
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
return function (_x) {
|
|
113
|
+
return _ref.apply(this, arguments);
|
|
114
|
+
};
|
|
115
|
+
}());
|
|
116
|
+
app.use(login_router.routes());
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
exports.init_passport_auth_middleware = init_passport_auth_middleware;
|