UNPKG

@lskjs/auth

Version:

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

230 lines (228 loc) 8.7 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = exports.PassportModel = void 0; 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 _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _Model2 = _interopRequireDefault(require("@lskjs/db/Model")); var _err = _interopRequireDefault(require("@lskjs/err")); var _canonizeUsername = _interopRequireDefault(require("@lskjs/utils/canonizeUsername")); var _jsonwebtoken = _interopRequireDefault(require("jsonwebtoken")); var _pick = _interopRequireDefault(require("lodash/pick")); 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 PassportModel = /*#__PURE__*/function (_Model) { (0, _inherits2["default"])(PassportModel, _Model); var _super = _createSuper(PassportModel); function PassportModel() { (0, _classCallCheck2["default"])(this, PassportModel); return _super.apply(this, arguments); } (0, _createClass2["default"])(PassportModel, [{ key: "generateUsername", value: function () { var _generateUsername = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(collection) { var username, prefixusername; return _regenerator["default"].wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: // const { User: UserModel } = ctx.models; username = "".concat(this.providerId, "_").concat(this.provider); username = (0, _canonizeUsername["default"])(username.toLowerCase()); if (collection) { _context.next = 4; break; } return _context.abrupt("return", username); case 4: _context.next = 6; return collection.count({ username: username }); case 6: if (_context.sent) { _context.next = 8; break; } return _context.abrupt("return", username); case 8: prefixusername = "".concat(username, "_"); // TODO!!!!!! убрать хуев китайский стайл цикл username = prefixusername + Math.random() % 100; _context.next = 12; return collection.count({ username: username }); case 12: if (_context.sent) { _context.next = 14; break; } return _context.abrupt("return", username); case 14: username = prefixusername + Math.random() % 100; _context.next = 17; return collection.count({ username: username }); case 17: if (_context.sent) { _context.next = 19; break; } return _context.abrupt("return", username); case 19: throw new _err["default"]('cant generate unique username'); case 20: case "end": return _context.stop(); } }, _callee, this); })); function generateUsername(_x) { return _generateUsername.apply(this, arguments); } return generateUsername; }() }, { key: "getUser", value: function () { var _getUser = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() { var UserModel; return _regenerator["default"].wrap(function _callee2$(_context2) { while (1) switch (_context2.prev = _context2.next) { case 0: _context2.next = 2; return this.constructor.module('models.UserModel'); case 2: UserModel = _context2.sent; return _context2.abrupt("return", UserModel.findById(this.userId)); case 4: case "end": return _context2.stop(); } }, _callee2, this); })); function getUser() { return _getUser.apply(this, arguments); } return getUser; }() }, { key: "getIdentity", value: function getIdentity() { var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var object = (0, _pick["default"])(this.toObject(), ['_id']); return Object.assign(object, params); } }, { key: "generateToken", value: function generateToken(params) { return _jsonwebtoken["default"].sign(this.getIdentity(params), ctx.config.jwt.secret); } }], [{ key: "decodeToken", value: function decodeToken(token) { return _jsonwebtoken["default"].verify(token, ctx.config.jwt.secret); } }, { key: "getByToken", value: function () { var _getByToken = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(token) { var _this$decodeToken, _id; return _regenerator["default"].wrap(function _callee3$(_context3) { while (1) switch (_context3.prev = _context3.next) { case 0: _this$decodeToken = this.decodeToken(token), _id = _this$decodeToken._id; return _context3.abrupt("return", this.findById(_id)); case 2: case "end": return _context3.stop(); } }, _callee3, this); })); function getByToken(_x2) { return _getByToken.apply(this, arguments); } return getByToken; }() }]); return PassportModel; }(_Model2["default"]); exports.PassportModel = PassportModel; PassportModel.schema = { userId: { type: _Model2["default"].Types.ObjectId // ref: 'User', }, // Сырые данные которые пришли из соц сети raw: { type: Object, "default": {} }, // Обработанные данные из соцсети profile: { type: Object, // по идее тут должна быть структура данных "default": {} }, meta: { type: Object }, // Дата последнего обновления данных fetchedAt: { type: Date, "default": null }, // тип провадера type: { type: String }, // название соцсети из passport provider: { type: String, required: true }, // ID из соцсети providerId: { // link to social network type: String, required: true }, // token из соцсети token: { type: String }, refreshToken: { type: String }, lastError: { type: Object }, lastErrorAt: { type: Date }, // статус пасспорта: валиден или нет // пока не используется status: { type: String, "enum": [null, 'valid', 'invalid', 'removed', 'expired', 'unauthorized'], "default": null } }; PassportModel.options = { model: 'PassportModel', collection: 'passport' // timestamps: true, // toJSON: { virtuals: true }, // toObject: { virtuals: true }, }; var _default = PassportModel; exports["default"] = _default; //# sourceMappingURL=PassportModel.js.map