UNPKG

12.2 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.BaseStrategy = void 0;
9
10var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
11
12var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
13
14var _toArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toArray"));
15
16var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
17
18var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
19
20var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
21
22var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
23
24var _pick = _interopRequireDefault(require("lodash/pick"));
25
26function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
27
28function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
29
30var BaseStrategy = /*#__PURE__*/function () {
31 function BaseStrategy(params) {
32 (0, _classCallCheck2["default"])(this, BaseStrategy);
33 this.config = {};
34 this.Strategy = null;
35 this.type = null;
36 this.Strategy = null;
37 Object.assign(this, params);
38 }
39
40 (0, _createClass2["default"])(BaseStrategy, [{
41 key: "url",
42 value: function url(path) {
43 var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
44 var origin = options.origin;
45
46 if (origin) {
47 return origin + path;
48 }
49
50 return this.app.url(path);
51 }
52 }, {
53 key: "getInfo",
54 value: function getInfo() {
55 return _objectSpread({
56 type: this.type
57 }, (0, _pick["default"])(this.config, ['clientId', 'clientID']));
58 }
59 }, {
60 key: "getProviderId",
61 value: function getProviderId() {
62 var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
63 id = _ref.id;
64
65 return id;
66 }
67 }, {
68 key: "getCallbackUrl",
69 value: function getCallbackUrl() {
70 var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
71 origin = _ref2.origin;
72
73 return this.config.callbackURL || this.config.callbackUrl || this.url("/api/auth/".concat(this.provider, "/callback"), {
74 origin: origin
75 });
76 }
77 }, {
78 key: "getPassportAuthenticateParams",
79 value: function getPassportAuthenticateParams() {
80 var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
81 _ref3$method = _ref3.method,
82 method = _ref3$method === void 0 ? 'auth' : _ref3$method,
83 origin = _ref3.origin;
84
85 console.log('getPassportAuthenticateParams callbackURL', this.getCallbackUrl({
86 origin: origin
87 }));
88
89 if (method === 'auth') {
90 return {
91 callbackURL: this.getCallbackUrl({
92 origin: origin
93 })
94 };
95 }
96
97 return {};
98 }
99 }, {
100 key: "getPassportStrategyConfig",
101 value: function getPassportStrategyConfig() {
102 return _objectSpread(_objectSpread({}, this.config), {}, {
103 scope: this.config.scope || [],
104 callbackURL: this.getCallbackUrl()
105 });
106 }
107 }, {
108 key: "passportStrategyCallback",
109 value: function () {
110 var _passportStrategyCallback = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
111 var _len,
112 args,
113 _key,
114 accessToken,
115 refreshToken,
116 profile,
117 PassportModel,
118 providerId,
119 passport,
120 params,
121 _args = arguments;
122
123 return _regenerator["default"].wrap(function _callee$(_context) {
124 while (1) {
125 switch (_context.prev = _context.next) {
126 case 0:
127 for (_len = _args.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
128 args[_key] = _args[_key];
129 }
130
131 accessToken = args[0], refreshToken = args[1], profile = args[2];
132 PassportModel = this.app.models.PassportModel;
133 providerId = this.getProviderId(profile);
134 _context.next = 6;
135 return PassportModel.findOne({
136 provider: this.provider,
137 providerId: providerId
138 });
139
140 case 6:
141 passport = _context.sent;
142 params = {
143 accessToken: accessToken,
144 refreshToken: refreshToken,
145 profile: profile,
146 providerId: providerId
147 };
148
149 if (passport) {
150 _context.next = 13;
151 break;
152 }
153
154 _context.next = 11;
155 return this.createPassport(params);
156
157 case 11:
158 passport = _context.sent;
159 params.isNew = true;
160
161 case 13:
162 params.passport = passport;
163 _context.next = 16;
164 return this.updatePassport(params);
165
166 case 16:
167 _context.next = 18;
168 return passport.save();
169
170 case 18:
171 params.redirect = this.getSuccessRedirect(params);
172 return _context.abrupt("return", params);
173
174 case 20:
175 case "end":
176 return _context.stop();
177 }
178 }
179 }, _callee, this);
180 }));
181
182 function passportStrategyCallback() {
183 return _passportStrategyCallback.apply(this, arguments);
184 }
185
186 return passportStrategyCallback;
187 }() // Using:
188 // passport.use(strategy.getPassportStrategy());
189
190 }, {
191 key: "getPassportStrategy",
192 value: function getPassportStrategy() {
193 var _this = this;
194
195 var config = this.getPassportStrategyConfig();
196
197 var conf = _objectSpread(_objectSpread({}, config), {}, {
198 clientID: config.clientID || config.clientId
199 });
200
201 var strategy = new this.Strategy(conf, function () {
202 for (var _len2 = arguments.length, args1 = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
203 args1[_key2] = arguments[_key2];
204 }
205
206 var _args1$reverse = args1.reverse(),
207 _args1$reverse2 = (0, _toArray2["default"])(_args1$reverse),
208 done = _args1$reverse2[0],
209 args2 = _args1$reverse2.slice(1);
210
211 var args = args2.reverse();
212
213 _this.passportStrategyCallback.apply(_this, (0, _toConsumableArray2["default"])(args)).then(function (data) {
214 return done(null, data);
215 })["catch"](function (err) {
216 return done(err);
217 });
218 });
219 strategy.name = this.provider;
220 return strategy;
221 }
222 }, {
223 key: "createPassport",
224 value: function () {
225 var _createPassport = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(_ref4) {
226 var token, accessToken, refreshToken, providerId, PassportModel;
227 return _regenerator["default"].wrap(function _callee2$(_context2) {
228 while (1) {
229 switch (_context2.prev = _context2.next) {
230 case 0:
231 token = _ref4.token, accessToken = _ref4.accessToken, refreshToken = _ref4.refreshToken, providerId = _ref4.providerId;
232 PassportModel = this.app.models.PassportModel;
233 return _context2.abrupt("return", new PassportModel({
234 type: this.type,
235 provider: this.provider,
236 providerId: providerId,
237 token: token || accessToken,
238 refreshToken: refreshToken
239 }));
240
241 case 3:
242 case "end":
243 return _context2.stop();
244 }
245 }
246 }, _callee2, this);
247 }));
248
249 function createPassport(_x) {
250 return _createPassport.apply(this, arguments);
251 }
252
253 return createPassport;
254 }()
255 }, {
256 key: "updatePassport",
257 value: function () {
258 var _updatePassport = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(_ref5) {
259 var accessToken, refreshToken, passport;
260 return _regenerator["default"].wrap(function _callee3$(_context3) {
261 while (1) {
262 switch (_context3.prev = _context3.next) {
263 case 0:
264 accessToken = _ref5.accessToken, refreshToken = _ref5.refreshToken, passport = _ref5.passport;
265
266 /* eslint-disable no-param-reassign */
267 if (accessToken) passport.token = accessToken;
268 if (refreshToken) passport.refreshToken = refreshToken;
269 _context3.prev = 3;
270 _context3.next = 6;
271 return this.getProfile(passport);
272
273 case 6:
274 passport.profile = _context3.sent;
275 _context3.next = 12;
276 break;
277
278 case 9:
279 _context3.prev = 9;
280 _context3.t0 = _context3["catch"](3);
281 this.app.log.warn('NOT OVERRIDED: Strategy.getProfile err', _context3.t0);
282
283 case 12:
284 case "end":
285 return _context3.stop();
286 }
287 }
288 }, _callee3, this, [[3, 9]]);
289 }));
290
291 function updatePassport(_x2) {
292 return _updatePassport.apply(this, arguments);
293 }
294
295 return updatePassport;
296 }()
297 }, {
298 key: "updateTokens",
299 value: function () {
300 var _updateTokens = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4() {
301 return _regenerator["default"].wrap(function _callee4$(_context4) {
302 while (1) {
303 switch (_context4.prev = _context4.next) {
304 case 0:
305 // passport
306 this.app.log.warn('NOT OVERRIDED: Strategy.updateTokens'); // return passport;
307
308 case 1:
309 case "end":
310 return _context4.stop();
311 }
312 }
313 }, _callee4, this);
314 }));
315
316 function updateTokens() {
317 return _updateTokens.apply(this, arguments);
318 }
319
320 return updateTokens;
321 }()
322 }, {
323 key: "getProfile",
324 value: function () {
325 var _getProfile = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5() {
326 return _regenerator["default"].wrap(function _callee5$(_context5) {
327 while (1) {
328 switch (_context5.prev = _context5.next) {
329 case 0:
330 return _context5.abrupt("return", {});
331
332 case 1:
333 case "end":
334 return _context5.stop();
335 }
336 }
337 }, _callee5);
338 }));
339
340 function getProfile() {
341 return _getProfile.apply(this, arguments);
342 }
343
344 return getProfile;
345 }()
346 }, {
347 key: "getSuccessRedirect",
348 value: function getSuccessRedirect(passport) {
349 return this.url("/auth/passport?p=".concat(passport.generateToken()));
350 }
351 }]);
352 return BaseStrategy;
353}();
354
355exports.BaseStrategy = BaseStrategy;
356var _default = BaseStrategy;
357exports["default"] = _default;
358//# sourceMappingURL=BaseStrategy.js.map
\No newline at end of file