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.
Files changed (70) hide show
  1. package/.babelrc.js +12 -0
  2. package/.eslintignore +3 -0
  3. package/.eslintrc.js +50 -0
  4. package/lib/cacher/index.js +98 -0
  5. package/lib/cacher/verify.js +32 -0
  6. package/lib/config/defaults.js +204 -0
  7. package/lib/config/index.js +14 -0
  8. package/lib/db/conn.js +15 -0
  9. package/lib/emailer/index.js +62 -0
  10. package/lib/emailer/verify.js +13 -0
  11. package/lib/index.js +59 -0
  12. package/lib/logger/index.js +98 -0
  13. package/lib/logger/logger_mail.js +59 -0
  14. package/lib/logger/verify.js +25 -0
  15. package/lib/server/engines/cron/index.js +16 -0
  16. package/lib/server/engines/cron/syscheck.js +50 -0
  17. package/lib/server/engines/socket/index.js +48 -0
  18. package/lib/server/index.js +126 -0
  19. package/lib/server/middleware/_cors.js +130 -0
  20. package/lib/server/middleware/auth/basic.js +72 -0
  21. package/lib/server/middleware/auth/passport.js +119 -0
  22. package/lib/server/middleware/body.js +48 -0
  23. package/lib/server/middleware/catcher.js +54 -0
  24. package/lib/server/middleware/request.js +56 -0
  25. package/lib/server/middleware/session/index.js +24 -0
  26. package/lib/server/middleware/session/store.js +5 -0
  27. package/lib/server/middleware/static.js +34 -0
  28. package/lib/server/routes/catch_js_error.js +42 -0
  29. package/lib/server/routes/crud.js +32 -0
  30. package/lib/server/routes/fallback_index.html +24 -0
  31. package/lib/server/routes/html_render.js +48 -0
  32. package/lib/server/routes/queries.js +45 -0
  33. package/lib/server/routes/robots.js +37 -0
  34. package/lib/server/static/img/favicon.ico +0 -0
  35. package/lib/server/static/robots.txt +2 -0
  36. package/package.json +49 -0
  37. package/src/cacher/index.js +61 -0
  38. package/src/cacher/verify.js +20 -0
  39. package/src/config/defaults.js +204 -0
  40. package/src/config/index.js +11 -0
  41. package/src/db/conn.js +10 -0
  42. package/src/emailer/index.js +64 -0
  43. package/src/emailer/verify.js +8 -0
  44. package/src/index.js +16 -0
  45. package/src/logger/index.js +95 -0
  46. package/src/logger/logger_mail.js +70 -0
  47. package/src/logger/verify.js +22 -0
  48. package/src/server/engines/cron/index.js +18 -0
  49. package/src/server/engines/cron/syscheck.js +50 -0
  50. package/src/server/engines/socket/index.js +38 -0
  51. package/src/server/index.js +95 -0
  52. package/src/server/middleware/_cors.js +130 -0
  53. package/src/server/middleware/auth/basic.js +57 -0
  54. package/src/server/middleware/auth/passport.js +111 -0
  55. package/src/server/middleware/body.js +45 -0
  56. package/src/server/middleware/catcher.js +44 -0
  57. package/src/server/middleware/request.js +46 -0
  58. package/src/server/middleware/session/index.js +16 -0
  59. package/src/server/middleware/session/store.js +3 -0
  60. package/src/server/middleware/static.js +19 -0
  61. package/src/server/routes/catch_js_error.js +28 -0
  62. package/src/server/routes/crud.js +14 -0
  63. package/src/server/routes/fallback_index.html +24 -0
  64. package/src/server/routes/html_render.js +33 -0
  65. package/src/server/routes/queries.js +26 -0
  66. package/src/server/routes/robots.js +20 -0
  67. package/src/server/static/img/favicon.ico +0 -0
  68. package/src/server/static/robots.txt +2 -0
  69. package/start.sh +3 -0
  70. 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;