UNPKG

@lskjs/auth

Version:

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

294 lines (293 loc) 11.8 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = exports.BaseStrategy = void 0; var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _toArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toArray")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _pick = _interopRequireDefault(require("lodash/pick")); function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } var BaseStrategy = /*#__PURE__*/function () { function BaseStrategy(params) { (0, _classCallCheck2["default"])(this, BaseStrategy); this.config = {}; this.Strategy = null; this.type = null; this.Strategy = null; Object.assign(this, params); } (0, _createClass2["default"])(BaseStrategy, [{ key: "url", value: function url(path) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var origin = options.origin; if (origin) { return origin + path; } return this.app.url(path); } }, { key: "getInfo", value: function getInfo() { return _objectSpread({ type: this.type }, (0, _pick["default"])(this.config, ['clientId', 'clientID'])); } }, { key: "getProviderId", value: function getProviderId() { var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, id = _ref.id; return id; } }, { key: "getCallbackUrl", value: function getCallbackUrl() { var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, origin = _ref2.origin; return this.config.callbackURL || this.config.callbackUrl || this.url("/api/auth/".concat(this.provider, "/callback"), { origin: origin }); } }, { key: "getPassportAuthenticateParams", value: function getPassportAuthenticateParams() { var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, _ref3$method = _ref3.method, method = _ref3$method === void 0 ? 'auth' : _ref3$method, origin = _ref3.origin; console.log('getPassportAuthenticateParams callbackURL', this.getCallbackUrl({ origin: origin })); if (method === 'auth') { return { callbackURL: this.getCallbackUrl({ origin: origin }) }; } return {}; } }, { key: "getPassportStrategyConfig", value: function getPassportStrategyConfig() { return _objectSpread(_objectSpread({}, this.config), {}, { scope: this.config.scope || [], callbackURL: this.getCallbackUrl() }); } }, { key: "passportStrategyCallback", value: function () { var _passportStrategyCallback = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() { var _len, args, _key, accessToken, refreshToken, profile, PassportModel, providerId, passport, params, _args = arguments; return _regenerator["default"].wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: for (_len = _args.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = _args[_key]; } accessToken = args[0], refreshToken = args[1], profile = args[2]; PassportModel = this.app.models.PassportModel; providerId = this.getProviderId(profile); _context.next = 6; return PassportModel.findOne({ provider: this.provider, providerId: providerId }); case 6: passport = _context.sent; params = { accessToken: accessToken, refreshToken: refreshToken, profile: profile, providerId: providerId }; if (passport) { _context.next = 13; break; } _context.next = 11; return this.createPassport(params); case 11: passport = _context.sent; params.isNew = true; case 13: params.passport = passport; _context.next = 16; return this.updatePassport(params); case 16: _context.next = 18; return passport.save(); case 18: params.redirect = this.getSuccessRedirect(params); return _context.abrupt("return", params); case 20: case "end": return _context.stop(); } }, _callee, this); })); function passportStrategyCallback() { return _passportStrategyCallback.apply(this, arguments); } return passportStrategyCallback; }() // Using: // passport.use(strategy.getPassportStrategy()); }, { key: "getPassportStrategy", value: function getPassportStrategy() { var _this = this; var config = this.getPassportStrategyConfig(); var conf = _objectSpread(_objectSpread({}, config), {}, { clientID: config.clientID || config.clientId }); var strategy = new this.Strategy(conf, function () { for (var _len2 = arguments.length, args1 = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { args1[_key2] = arguments[_key2]; } var _args1$reverse = args1.reverse(), _args1$reverse2 = (0, _toArray2["default"])(_args1$reverse), done = _args1$reverse2[0], args2 = _args1$reverse2.slice(1); var args = args2.reverse(); _this.passportStrategyCallback.apply(_this, (0, _toConsumableArray2["default"])(args)).then(function (data) { return done(null, data); })["catch"](function (err) { return done(err); }); }); strategy.name = this.provider; return strategy; } }, { key: "createPassport", value: function () { var _createPassport = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(_ref4) { var token, accessToken, refreshToken, providerId, PassportModel; return _regenerator["default"].wrap(function _callee2$(_context2) { while (1) switch (_context2.prev = _context2.next) { case 0: token = _ref4.token, accessToken = _ref4.accessToken, refreshToken = _ref4.refreshToken, providerId = _ref4.providerId; PassportModel = this.app.models.PassportModel; return _context2.abrupt("return", new PassportModel({ type: this.type, provider: this.provider, providerId: providerId, token: token || accessToken, refreshToken: refreshToken })); case 3: case "end": return _context2.stop(); } }, _callee2, this); })); function createPassport(_x) { return _createPassport.apply(this, arguments); } return createPassport; }() }, { key: "updatePassport", value: function () { var _updatePassport = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(_ref5) { var accessToken, refreshToken, passport; return _regenerator["default"].wrap(function _callee3$(_context3) { while (1) switch (_context3.prev = _context3.next) { case 0: accessToken = _ref5.accessToken, refreshToken = _ref5.refreshToken, passport = _ref5.passport; /* eslint-disable no-param-reassign */ if (accessToken) passport.token = accessToken; if (refreshToken) passport.refreshToken = refreshToken; _context3.prev = 3; _context3.next = 6; return this.getProfile(passport); case 6: passport.profile = _context3.sent; _context3.next = 12; break; case 9: _context3.prev = 9; _context3.t0 = _context3["catch"](3); this.app.log.warn('NOT OVERRIDED: Strategy.getProfile err', _context3.t0); case 12: case "end": return _context3.stop(); } }, _callee3, this, [[3, 9]]); })); function updatePassport(_x2) { return _updatePassport.apply(this, arguments); } return updatePassport; }() }, { key: "updateTokens", value: function () { var _updateTokens = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4() { return _regenerator["default"].wrap(function _callee4$(_context4) { while (1) switch (_context4.prev = _context4.next) { case 0: // passport this.app.log.warn('NOT OVERRIDED: Strategy.updateTokens'); // return passport; case 1: case "end": return _context4.stop(); } }, _callee4, this); })); function updateTokens() { return _updateTokens.apply(this, arguments); } return updateTokens; }() }, { key: "getProfile", value: function () { var _getProfile = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5() { return _regenerator["default"].wrap(function _callee5$(_context5) { while (1) switch (_context5.prev = _context5.next) { case 0: return _context5.abrupt("return", {}); case 1: case "end": return _context5.stop(); } }, _callee5); })); function getProfile() { return _getProfile.apply(this, arguments); } return getProfile; }() }, { key: "getSuccessRedirect", value: function getSuccessRedirect(passport) { return this.url("/auth/passport?p=".concat(passport.generateToken())); } }]); return BaseStrategy; }(); exports.BaseStrategy = BaseStrategy; var _default = BaseStrategy; exports["default"] = _default; //# sourceMappingURL=BaseStrategy.js.map