UNPKG

8.95 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
5Object.defineProperty(exports, "__esModule", {
6 value: true
7});
8exports["default"] = exports.PassportModel = void 0;
9
10var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
11
12var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
13
14var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
15
16var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
17
18var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
19
20var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
21
22var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
23
24var _Model2 = _interopRequireDefault(require("@lskjs/db/Model"));
25
26var _err = _interopRequireDefault(require("@lskjs/err"));
27
28var _canonizeUsername = _interopRequireDefault(require("@lskjs/utils/canonizeUsername"));
29
30var _jsonwebtoken = _interopRequireDefault(require("jsonwebtoken"));
31
32var _pick = _interopRequireDefault(require("lodash/pick"));
33
34function _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); }; }
35
36function _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; } }
37
38var PassportModel = /*#__PURE__*/function (_Model) {
39 (0, _inherits2["default"])(PassportModel, _Model);
40
41 var _super = _createSuper(PassportModel);
42
43 function PassportModel() {
44 (0, _classCallCheck2["default"])(this, PassportModel);
45 return _super.apply(this, arguments);
46 }
47
48 (0, _createClass2["default"])(PassportModel, [{
49 key: "generateUsername",
50 value: function () {
51 var _generateUsername = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(collection) {
52 var username, prefixusername;
53 return _regenerator["default"].wrap(function _callee$(_context) {
54 while (1) {
55 switch (_context.prev = _context.next) {
56 case 0:
57 // const { User: UserModel } = ctx.models;
58 username = "".concat(this.providerId, "_").concat(this.provider);
59 username = (0, _canonizeUsername["default"])(username.toLowerCase());
60
61 if (collection) {
62 _context.next = 4;
63 break;
64 }
65
66 return _context.abrupt("return", username);
67
68 case 4:
69 _context.next = 6;
70 return collection.count({
71 username: username
72 });
73
74 case 6:
75 if (_context.sent) {
76 _context.next = 8;
77 break;
78 }
79
80 return _context.abrupt("return", username);
81
82 case 8:
83 prefixusername = "".concat(username, "_"); // TODO!!!!!! убрать хуев китайский стайл цикл
84
85 username = prefixusername + Math.random() % 100;
86 _context.next = 12;
87 return collection.count({
88 username: username
89 });
90
91 case 12:
92 if (_context.sent) {
93 _context.next = 14;
94 break;
95 }
96
97 return _context.abrupt("return", username);
98
99 case 14:
100 username = prefixusername + Math.random() % 100;
101 _context.next = 17;
102 return collection.count({
103 username: username
104 });
105
106 case 17:
107 if (_context.sent) {
108 _context.next = 19;
109 break;
110 }
111
112 return _context.abrupt("return", username);
113
114 case 19:
115 throw new _err["default"]('cant generate unique username');
116
117 case 20:
118 case "end":
119 return _context.stop();
120 }
121 }
122 }, _callee, this);
123 }));
124
125 function generateUsername(_x) {
126 return _generateUsername.apply(this, arguments);
127 }
128
129 return generateUsername;
130 }()
131 }, {
132 key: "getUser",
133 value: function () {
134 var _getUser = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
135 var UserModel;
136 return _regenerator["default"].wrap(function _callee2$(_context2) {
137 while (1) {
138 switch (_context2.prev = _context2.next) {
139 case 0:
140 _context2.next = 2;
141 return this.constructor.module('models.UserModel');
142
143 case 2:
144 UserModel = _context2.sent;
145 return _context2.abrupt("return", UserModel.findById(this.userId));
146
147 case 4:
148 case "end":
149 return _context2.stop();
150 }
151 }
152 }, _callee2, this);
153 }));
154
155 function getUser() {
156 return _getUser.apply(this, arguments);
157 }
158
159 return getUser;
160 }()
161 }, {
162 key: "getIdentity",
163 value: function getIdentity() {
164 var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
165 var object = (0, _pick["default"])(this.toObject(), ['_id']);
166 return Object.assign(object, params);
167 }
168 }, {
169 key: "generateToken",
170 value: function generateToken(params) {
171 return _jsonwebtoken["default"].sign(this.getIdentity(params), ctx.config.jwt.secret);
172 }
173 }], [{
174 key: "decodeToken",
175 value: function decodeToken(token) {
176 return _jsonwebtoken["default"].verify(token, ctx.config.jwt.secret);
177 }
178 }, {
179 key: "getByToken",
180 value: function () {
181 var _getByToken = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(token) {
182 var _this$decodeToken, _id;
183
184 return _regenerator["default"].wrap(function _callee3$(_context3) {
185 while (1) {
186 switch (_context3.prev = _context3.next) {
187 case 0:
188 _this$decodeToken = this.decodeToken(token), _id = _this$decodeToken._id;
189 return _context3.abrupt("return", this.findById(_id));
190
191 case 2:
192 case "end":
193 return _context3.stop();
194 }
195 }
196 }, _callee3, this);
197 }));
198
199 function getByToken(_x2) {
200 return _getByToken.apply(this, arguments);
201 }
202
203 return getByToken;
204 }()
205 }]);
206 return PassportModel;
207}(_Model2["default"]);
208
209exports.PassportModel = PassportModel;
210PassportModel.schema = {
211 userId: {
212 type: _Model2["default"].Types.ObjectId // ref: 'User',
213
214 },
215 // Сырые данные которые пришли из соц сети
216 raw: {
217 type: Object,
218 "default": {}
219 },
220 // Обработанные данные из соцсети
221 profile: {
222 type: Object,
223 // по идее тут должна быть структура данных
224 "default": {}
225 },
226 meta: {
227 type: Object
228 },
229 // Дата последнего обновления данных
230 fetchedAt: {
231 type: Date,
232 "default": null
233 },
234 // тип провадера
235 type: {
236 type: String
237 },
238 // название соцсети из passport
239 provider: {
240 type: String,
241 required: true
242 },
243 // ID из соцсети
244 providerId: {
245 // link to social network
246 type: String,
247 required: true
248 },
249 // token из соцсети
250 token: {
251 type: String
252 },
253 refreshToken: {
254 type: String
255 },
256 lastError: {
257 type: Object
258 },
259 lastErrorAt: {
260 type: Date
261 },
262 // статус пасспорта: валиден или нет
263 // пока не используется
264 status: {
265 type: String,
266 "enum": [null, 'valid', 'invalid', 'removed', 'expired', 'unauthorized'],
267 "default": null
268 }
269};
270PassportModel.options = {
271 model: 'PassportModel',
272 collection: 'passport' // timestamps: true,
273 // toJSON: { virtuals: true },
274 // toObject: { virtuals: true },
275
276};
277var _default = PassportModel;
278exports["default"] = _default;
279//# sourceMappingURL=PassportModel.js.map
\No newline at end of file