UNPKG

@lskjs/auth

Version:

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

551 lines (550 loc) 23.6 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _typeof = require("@babel/runtime/helpers/typeof"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = exports.AuthClientModule = void 0; var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties")); var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); 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 _get3 = _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 _env = require("@lskjs/env"); var _module = _interopRequireDefault(require("@lskjs/module")); var _jsCookie = _interopRequireDefault(require("js-cookie")); var _get4 = _interopRequireDefault(require("lodash/get")); var _LocalStorage = _interopRequireDefault(require("./Storage/LocalStorage")); var _MemoryStorage = _interopRequireDefault(require("./Storage/MemoryStorage")); var _stores = _interopRequireDefault(require("./stores")); var _excluded = ["name"]; function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } 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; } 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; } } /* global window */ // import Err from '@lskjs/err'; // const DEBUG = __DEV__ && __STAGE__ === 'isuvorov'; // const DEBUG = false; var AuthClientModule = /*#__PURE__*/function (_Module) { (0, _inherits2["default"])(AuthClientModule, _Module); var _super = _createSuper(AuthClientModule); function AuthClientModule() { var _this; (0, _classCallCheck2["default"])(this, AuthClientModule); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); _this.storages = { MemoryStorage: _MemoryStorage["default"], LocalStorage: _LocalStorage["default"] }; return _this; } (0, _createClass2["default"])(AuthClientModule, [{ key: "init", value: function () { var _init = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() { var _this$storages, _this$storages2; var AuthStore; return _regenerator["default"].wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: _context.next = 2; return (0, _get3["default"])((0, _getPrototypeOf2["default"])(AuthClientModule.prototype), "init", this).call(this); case 2: _context.next = 4; return this.module('stores.AuthStore'); case 4: AuthStore = _context.sent; this.store = new AuthStore(); if (!(_env.isClient && (_this$storages = this.storages) !== null && _this$storages !== void 0 && _this$storages.LocalStorage)) { _context.next = 10; break; } this.localStorage = new this.storages.LocalStorage({ // memoryState: this.app.rootState, config: (0, _get4["default"])(this, 'app.config.storage', {}) }); _context.next = 10; return this.localStorage.init(); case 10: if (!((_this$storages2 = this.storages) !== null && _this$storages2 !== void 0 && _this$storages2.MemoryStorage)) { _context.next = 14; break; } this.memoryStorage = new this.storages.MemoryStorage({ state: this.app.rootState, config: (0, _get4["default"])(this, 'app.config.storage', {}) }); _context.next = 14; return this.memoryStorage.init(); case 14: case "end": return _context.stop(); } }, _callee, this); })); function init() { return _init.apply(this, arguments); } return init; }() }, { key: "getModules", value: function () { var _getModules = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() { return _regenerator["default"].wrap(function _callee2$(_context2) { while (1) switch (_context2.prev = _context2.next) { case 0: _context2.t0 = _objectSpread; _context2.t1 = _objectSpread; _context2.t2 = {}; _context2.next = 5; return (0, _get3["default"])((0, _getPrototypeOf2["default"])(AuthClientModule.prototype), "getModules", this).call(this); case 5: _context2.t3 = _context2.sent; _context2.t4 = (0, _context2.t1)(_context2.t2, _context2.t3); _context2.t5 = {}; _context2.t6 = { stores: [function () { return Promise.resolve().then(function () { return _interopRequireWildcard(require('@lskjs/mobx/mobxStores')); }); }, { stores: _stores["default"] }] }; return _context2.abrupt("return", (0, _context2.t0)(_context2.t4, _context2.t5, _context2.t6)); case 10: case "end": return _context2.stop(); } }, _callee2, this); })); function getModules() { return _getModules.apply(this, arguments); } return getModules; }() }, { key: "run", value: function () { var _run = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3() { var _this2 = this; return _regenerator["default"].wrap(function _callee3$(_context3) { while (1) switch (_context3.prev = _context3.next) { case 0: _context3.next = 2; return (0, _get3["default"])((0, _getPrototypeOf2["default"])(AuthClientModule.prototype), "run", this).call(this); case 2: _context3.next = 4; return this.loadStore(); case 4: if (_env.isClient && this.store.isAuth()) { setTimeout(function () { _this2.updateSession(); }, _env.isDev ? 10000 : 1000); } case 5: case "end": return _context3.stop(); } }, _callee3, this); })); function run() { return _run.apply(this, arguments); } return run; }() }, { key: "setToken", value: function () { var _setToken = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4(token) { var expires, cookies, api, _get2, _get2$name, name, options, _args4 = arguments; return _regenerator["default"].wrap(function _callee4$(_context4) { while (1) switch (_context4.prev = _context4.next) { case 0: expires = _args4.length > 1 && _args4[1] !== undefined ? _args4[1] : 365; cookies = _args4.length > 2 && _args4[2] !== undefined ? _args4[2] : true; if (this.debug) this.log.trace('AuthClientModule.setToken', token); if (!this.app.hasModule('api')) { _context4.next = 9; break; } _context4.next = 6; return this.app.module('api'); case 6: api = _context4.sent; _context4.next = 9; return api.setToken(token); case 9: if (this.app.api) this.app.api.setAuthToken(token); if (this.app.apiq) this.app.apiq.setToken(token); if (this.memoryStorage) this.memoryStorage.set('req.token', token); _get2 = (0, _get4["default"])(this.app, 'config.jwt.cookie', {}), _get2$name = _get2.name, name = _get2$name === void 0 ? 'token' : _get2$name, options = (0, _objectWithoutProperties2["default"])(_get2, _excluded); if (this.debug) this.log.trace('AuthClientModule.setToken cookie', { name: name, options: options, token: token }, _env.isClient && cookies, _env.isClient, cookies); if (_env.isClient && cookies) { if (token == null) { if (this.debug) this.log.trace('cookie.remove(name, options)', name, options); _jsCookie["default"].remove(name, options); } else { if (this.debug) this.log.trace('cookie.set(name, token, { expires, ...options })', name, token, _objectSpread({ expires: expires }, options)); _jsCookie["default"].set(name, token, _objectSpread({ expires: expires }, options)); } } case 15: case "end": return _context4.stop(); } }, _callee4, this); })); function setToken(_x) { return _setToken.apply(this, arguments); } return setToken; }() }, { key: "loadStore", value: function () { var _loadStore = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5() { var state, _session2, _yield$this$store$con, _session, session; return _regenerator["default"].wrap(function _callee5$(_context5) { while (1) switch (_context5.prev = _context5.next) { case 0: state = {}; if (this.memoryStorage) { state = _objectSpread(_objectSpread({}, state), this.memoryStorage.get('auth')); } if (this.localStorage) { state = _objectSpread(_objectSpread({}, state), this.localStorage.get('auth')); } if (!(!state.session && this.memoryStorage.get('req.user'))) { _context5.next = 18; break; } _session2 = { _id: this.memoryStorage.get('req.user._id'), user: this.memoryStorage.get('req.user'), token: this.memoryStorage.get('req.token') }; state = _objectSpread(_objectSpread({}, state), {}, { session: _session2, sessions: [_session2] }); if (!_env.isServer) { _context5.next = 18; break; } _context5.prev = 7; _context5.next = 10; return this.store.constructor.api.session({ __init: true, session: _session2 }); case 10: _yield$this$store$con = _context5.sent; _session = _yield$this$store$con.data; if (_session && Object.keys(_session).length > 0 && _session2._id === _session._id) { state.session = _session; state.sessions = [_session]; } _context5.next = 18; break; case 15: _context5.prev = 15; _context5.t0 = _context5["catch"](7); this.log.error('loadStore session', _context5.t0); case 18: if (this.debug) this.log.trace('loadStore', state); this.store.setState(state); session = this.store.session; _context5.next = 23; return this.setToken(session ? session.token : null); case 23: case "end": return _context5.stop(); } }, _callee5, this, [[7, 15]]); })); function loadStore() { return _loadStore.apply(this, arguments); } return loadStore; }() }, { key: "saveStore", value: function () { var _saveStore = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee6() { var state, token; return _regenerator["default"].wrap(function _callee6$(_context6) { while (1) switch (_context6.prev = _context6.next) { case 0: state = this.store.getState(); if (this.debug) this.log.trace('saveStore', state); if (this.localStorage) this.localStorage.set('auth', state); if (this.memoryStorage) this.memoryStorage.set('auth', state); token = state.session ? state.session.token : null; _context6.next = 7; return this.setToken(token); case 7: case "end": return _context6.stop(); } }, _callee6, this); })); function saveStore() { return _saveStore.apply(this, arguments); } return saveStore; }() }, { key: "isAuth", value: function isAuth() { return this.store.isAuth(); } }, { key: "getSession", value: function getSession() { return this.store.getSession(); } }, { key: "getUserId", value: function getUserId() { return this.store.getUserId(); } }, { key: "logout", value: function () { var _logout = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee7() { var redirect, _args7 = arguments; return _regenerator["default"].wrap(function _callee7$(_context7) { while (1) switch (_context7.prev = _context7.next) { case 0: redirect = _args7.length > 0 && _args7[0] !== undefined ? _args7[0] : true; _context7.next = 3; return this.store.logout(); case 3: _context7.next = 5; return this.saveStore(); case 5: if (redirect) this.app.redirect('/'); case 6: case "end": return _context7.stop(); } }, _callee7, this); })); function logout() { return _logout.apply(this, arguments); } return logout; }() }, { key: "signup", value: function () { var _signup = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee8() { var _this$store; var res, _args8 = arguments; return _regenerator["default"].wrap(function _callee8$(_context8) { while (1) switch (_context8.prev = _context8.next) { case 0: _context8.next = 2; return (_this$store = this.store).signup.apply(_this$store, _args8); case 2: res = _context8.sent; _context8.next = 5; return this.saveStore(); case 5: return _context8.abrupt("return", res); case 6: case "end": return _context8.stop(); } }, _callee8, this); })); function signup() { return _signup.apply(this, arguments); } return signup; }() }, { key: "login", value: function () { var _login = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee9() { var _this$log, _this$store2; var _len2, args, _key2, res, _args9 = arguments; return _regenerator["default"].wrap(function _callee9$(_context9) { while (1) switch (_context9.prev = _context9.next) { case 0: for (_len2 = _args9.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { args[_key2] = _args9[_key2]; } (_this$log = this.log).debug.apply(_this$log, ['login'].concat(args)); _context9.next = 4; return (_this$store2 = this.store).login.apply(_this$store2, args); case 4: res = _context9.sent; this.log.trace('login res', res); _context9.next = 8; return this.saveStore(); case 8: return _context9.abrupt("return", res); case 9: case "end": return _context9.stop(); } }, _callee9, this); })); function login() { return _login.apply(this, arguments); } return login; }() }, { key: "updateSession", value: function () { var _updateSession = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee10() { var _this$store3, res, _args10 = arguments; return _regenerator["default"].wrap(function _callee10$(_context10) { while (1) switch (_context10.prev = _context10.next) { case 0: _context10.prev = 0; _context10.next = 3; return (_this$store3 = this.store).updateSession.apply(_this$store3, _args10); case 3: res = _context10.sent; _context10.next = 6; return this.saveStore(); case 6: return _context10.abrupt("return", res); case 9: _context10.prev = 9; _context10.t0 = _context10["catch"](0); if (!(_context10.t0.code === 'auth.userNotFound')) { _context10.next = 14; break; } _context10.next = 14; return this.logout(); case 14: throw _context10.t0; case 15: case "end": return _context10.stop(); } }, _callee10, this, [[0, 9]]); })); function updateSession() { return _updateSession.apply(this, arguments); } return updateSession; }() }, { key: "confirm", value: function confirm(values) { return this.app.api.fetch('/api/auth/permit/confirm', { method: 'POST', data: values }); } }, { key: "restorePassword", value: function restorePassword(_ref) { var email = _ref.email; return this.app.api.fetch('/api/auth/restorePassword', { method: 'POST', data: { email: email } }); } }, { key: "setPassword", value: function setPassword(_ref2) { var permitId = _ref2.permitId, code = _ref2.code, password = _ref2.password; return this.app.api.fetch('/api/auth/setPassword', { method: 'POST', data: { permitId: permitId, code: code, password: password } }); } }, { key: "confirmEmail", value: function confirmEmail(_ref3) { var permitId = _ref3.permitId, code = _ref3.code; return this.app.api.fetch('/api/auth/confirmEmail', { method: 'POST', data: { permitId: permitId, code: code } }); } }, { key: "setData", value: function setData() { var _this$store4; return (_this$store4 = this.store).setData.apply(_this$store4, arguments); } }, { key: "loginPassport", value: function loginPassport(data) { return this.applyPromiseAndFetchProfile(this.app.api.authLoginPassport(data)); } }, { key: "authPassport", value: function authPassport(provider) { if (typeof window !== 'undefined') window.location = "/api/module/auth/".concat(provider); } }]); return AuthClientModule; }(_module["default"]); // export default ctx => ({ // init() { // // this.components = require('./uapp/components').default(ctx); // // this.socials = require('./uapp/socials').default;// (ctx); // // this.models = require('./uapp/models').default(ctx); // this.stores = require('./uapp/stores').default(ctx); // // this.router = require('./uapp/router').default; // }, // // getStores // }); exports.AuthClientModule = AuthClientModule; var _default = AuthClientModule; exports["default"] = _default; //# sourceMappingURL=AuthClientModule.js.map