UNPKG

@lskjs/auth

Version:

LSK.js – auth – module for authorization by login and password and singup through social networks

280 lines (277 loc) 12.4 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = exports.AuthServerModule = void 0; var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties")); var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _err = _interopRequireDefault(require("@lskjs/err")); var _module = _interopRequireDefault(require("@lskjs/module")); var _asyncMapValues = _interopRequireDefault(require("@lskjs/utils/asyncMapValues")); var _importFn = _interopRequireDefault(require("@lskjs/utils/importFn")); var _forEach = _interopRequireDefault(require("lodash/forEach")); var _get3 = _interopRequireDefault(require("lodash/get")); var _passport = require("passport"); var _strategies = _interopRequireDefault(require("./strategies")); var _createHelpers = _interopRequireDefault(require("./utils/createHelpers")); var _excluded = ["provider", "type"]; function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var AuthServerModule = /*#__PURE__*/function (_Module) { (0, _inherits2["default"])(AuthServerModule, _Module); var _super = _createSuper(AuthServerModule); function AuthServerModule() { (0, _classCallCheck2["default"])(this, AuthServerModule); return _super.apply(this, arguments); } (0, _createClass2["default"])(AuthServerModule, [{ key: "getStrategies", value: function getStrategies() { return _strategies["default"]; } }, { key: "getPassportStrategy", value: function getPassportStrategy(passport) { var strategy = this.strategies[passport.provider]; if (!strategy) { this.log.error('AuthModule !strategy'); } return strategy; } }, { key: "updatePassportTokens", value: function () { var _updatePassportTokens = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(passport) { var strategy, _len, args, _key, _args = arguments; return _regenerator["default"].wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: strategy = this.getPassportStrategy(passport); for (_len = _args.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { args[_key - 1] = _args[_key]; } _context.next = 4; return strategy.updateTokens.apply(strategy, [passport].concat(args)); case 4: case "end": return _context.stop(); } }, _callee, this); })); function updatePassportTokens(_x) { return _updatePassportTokens.apply(this, arguments); } return updatePassportTokens; }() }, { key: "updatePassportData", value: function () { var _updatePassportData = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(passport) { var strategy; return _regenerator["default"].wrap(function _callee2$(_context2) { while (1) switch (_context2.prev = _context2.next) { case 0: strategy = this.getPassportStrategy(passport); if (strategy) { _context2.next = 3; break; } return _context2.abrupt("return"); case 3: _context2.next = 5; return strategy.updateTokens(passport); case 5: _context2.next = 7; return strategy.updatePassport({ passport: passport }); case 7: case "end": return _context2.stop(); } }, _callee2, this); })); function updatePassportData(_x2) { return _updatePassportData.apply(this, arguments); } return updatePassportData; }() }, { key: "init", value: function () { var _init = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4() { var _this = this; var providers; return _regenerator["default"].wrap(function _callee4$(_context4) { while (1) switch (_context4.prev = _context4.next) { case 0: _context4.next = 2; return (0, _get2["default"])((0, _getPrototypeOf2["default"])(AuthServerModule.prototype), "init", this).call(this); case 2: if (!this.config.socials) this.config.socials = {}; // this.models = this.getModels(); this.helpers = (0, _createHelpers["default"])({ app: this.app }); // TODO: потом надо будет по другому кидать app, а еще лучше вообще не кидать this.strategyProviders = this.getStrategies(); this.strategies = {}; this.passportService = new _passport.Passport(); providers = (0, _get3["default"])(this, 'config.providers', {}); // console.log({ providers }); _context4.next = 10; return (0, _asyncMapValues["default"])(providers, /*#__PURE__*/function () { var _ref = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(config) { var provider, type, strategyConfig, StrategyProvider, strategy; return _regenerator["default"].wrap(function _callee3$(_context3) { while (1) switch (_context3.prev = _context3.next) { case 0: provider = config.provider, type = config.type, strategyConfig = (0, _objectWithoutProperties2["default"])(config, _excluded); _context3.next = 3; return (0, _importFn["default"])(_this.strategyProviders[type]); case 3: StrategyProvider = _context3.sent; if (StrategyProvider) { _context3.next = 6; break; } return _context3.abrupt("return"); case 6: strategy = new StrategyProvider({ __parent: _this, app: _this.app, provider: provider, type: type, config: strategyConfig }); // console.log({strategy}); if (strategy) { _context3.next = 9; break; } return _context3.abrupt("return"); case 9: _this.strategies[provider] = strategy; case 10: case "end": return _context3.stop(); } }, _callee3); })); return function (_x3) { return _ref.apply(this, arguments); }; }()); case 10: case "end": return _context4.stop(); } }, _callee4, this); })); function init() { return _init.apply(this, arguments); } return init; }() }, { key: "getAuthSession", value: function () { var _getAuthSession = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5(req) { var _req$data, _req$data2, _req$data2$session; var userId, UserModel, user, token; return _regenerator["default"].wrap(function _callee5$(_context5) { while (1) switch (_context5.prev = _context5.next) { case 0: if ((_req$data = req.data) !== null && _req$data !== void 0 && _req$data.__init && (_req$data2 = req.data) !== null && _req$data2 !== void 0 && (_req$data2$session = _req$data2.session) !== null && _req$data2$session !== void 0 && _req$data2$session.user) { req.user = req.data.session.user; } userId = req.user && req.user._id; if (userId) { _context5.next = 4; break; } return _context5.abrupt("return", {}); case 4: _context5.next = 6; return this.app.module('models.UserModel'); case 6: UserModel = _context5.sent; _context5.next = 9; return UserModel.findOne({ _id: userId }); case 9: user = _context5.sent; if (user) { _context5.next = 12; break; } throw new _err["default"]('auth.userNotFound', { status: 404 }); case 12: token = this.helpers.generateAuthToken(user); _context5.t0 = userId; _context5.t1 = token; _context5.next = 17; return UserModel.prepare(user, { req: req, view: 'extended' }); case 17: _context5.t2 = _context5.sent; return _context5.abrupt("return", { _id: _context5.t0, token: _context5.t1, user: _context5.t2 }); case 19: case "end": return _context5.stop(); } }, _callee5, this); })); function getAuthSession(_x4) { return _getAuthSession.apply(this, arguments); } return getAuthSession; }() }, { key: "run", value: function () { var _run = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee6() { var _this2 = this; return _regenerator["default"].wrap(function _callee6$(_context6) { while (1) switch (_context6.prev = _context6.next) { case 0: this.log.debug('strategies', Object.keys(this.strategies)); (0, _forEach["default"])(this.strategies || [], function (strategy) { _this2.passportService.use(strategy.getPassportStrategy()); }); case 2: case "end": return _context6.stop(); } }, _callee6, this); })); function run() { return _run.apply(this, arguments); } return run; }() }]); return AuthServerModule; }(_module["default"]); exports.AuthServerModule = AuthServerModule; var _default = AuthServerModule; exports["default"] = _default; //# sourceMappingURL=AuthServerModule.js.map