@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
JavaScript
;
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