UNPKG

@lskjs/auth

Version:

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

186 lines (185 loc) 9.88 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _get2 = _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 _isomorphicFetch = _interopRequireDefault(require("isomorphic-fetch")); var _get3 = _interopRequireDefault(require("lodash/get")); var _passportYoutubeV = _interopRequireDefault(require("passport-youtube-v3")); var _qs = require("qs"); var _BaseStrategy2 = _interopRequireDefault(require("./BaseStrategy")); 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; } } var YoutubeStrategy = /*#__PURE__*/function (_BaseStrategy) { (0, _inherits2["default"])(YoutubeStrategy, _BaseStrategy); var _super = _createSuper(YoutubeStrategy); function YoutubeStrategy() { var _this; (0, _classCallCheck2["default"])(this, YoutubeStrategy); 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.Strategy = _passportYoutubeV["default"].Strategy; _this.type = 'youtube'; return _this; } (0, _createClass2["default"])(YoutubeStrategy, [{ key: "getPassportStrategyConfig", value: function getPassportStrategyConfig() { var config = (0, _get2["default"])((0, _getPrototypeOf2["default"])(YoutubeStrategy.prototype), "getPassportStrategyConfig", this).call(this); return _objectSpread(_objectSpread({}, config), {}, { scope: config.scope && config.scope.length ? config.scope : ['https://www.googleapis.com/auth/youtube.readonly'] }); } }, { key: "getInfo", value: function getInfo() { return _objectSpread(_objectSpread({}, (0, _get2["default"])((0, _getPrototypeOf2["default"])(YoutubeStrategy.prototype), "getInfo", this).call(this)), {}, { settings: "https://console.developers.google.com/apis/credentials/oauthclient/".concat(this.config.clientId, "?project=").concat(this.config.project) }); } }, { key: "updateTokens", value: function () { var _updateTokens = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(passport, creds2) { var ytConfig, creds, res, data, ret; return _regenerator["default"].wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: /* eslint-disable no-param-reassign */ ytConfig = this.config; creds = {}; if (creds2 && (creds2.clientId || creds2.clientID) && creds2.clientSecret) { creds.clientId = creds2.clientId || creds2.clientID; creds.clientSecret = creds2.clientSecret; } else { creds.clientId = ytConfig.clientId || ytConfig.clientID; creds.clientSecret = ytConfig.clientSecret; } _context.next = 5; return (0, _isomorphicFetch["default"])('https://www.googleapis.com/oauth2/v4/token', { method: 'post', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, body: (0, _qs.stringify)({ refresh_token: passport.refreshToken, client_id: creds.clientId, client_secret: creds.clientSecret, grant_type: 'refresh_token' }) }); case 5: res = _context.sent; _context.next = 8; return res.json(); case 8: data = _context.sent; ret = {}; if (!data.error) { _context.next = 15; break; } if (data.error_description === 'Account has been deleted') { passport.status = 'removed'; } else if (data.error_description === 'Token has been expired or revoked') { passport.status = 'expired'; } else if (data.error === 'invalid_grant') { passport.status = 'invalid'; } else if (data.error === 'unauthorized_client') { passport.status = 'unauthorized'; } else { this.app.log.error('Passport update unknown error', data); passport.status = 'invalid'; } passport.lastError = data; passport.lastErrorAt = new Date(); throw { code: data.error, message: data.error_description, error: data }; case 15: if (data.access_token) { passport.status = 'valid'; passport.token = data.access_token; ret.accessToken = data.access_token; } // TODO: сначала протестить if (data.refresh_token) { // passport.refreshToken = data.refresh_token; // __DEV__ && console.log('TODO: сначала протестить', passport.refreshToken, data.refresh_token); ret.refreshToken = data.refresh_token; } return _context.abrupt("return", ret); case 18: case "end": return _context.stop(); } }, _callee, this); })); function updateTokens(_x, _x2) { return _updateTokens.apply(this, arguments); } return updateTokens; }() }, { key: "getProfile", value: function () { var _getProfile = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(passport) { var response, json, profile, names; return _regenerator["default"].wrap(function _callee2$(_context2) { while (1) switch (_context2.prev = _context2.next) { case 0: _context2.next = 2; return (0, _isomorphicFetch["default"])("https://www.googleapis.com/youtube/v3/channels?part=snippet&id=".concat(passport.providerId), { method: 'GET', headers: { Authorization: "Bearer ".concat(passport.token) } }); case 2: response = _context2.sent; _context2.next = 5; return response.json(); case 5: json = _context2.sent; profile = { avatar: (0, _get3["default"])(json, 'items[0].snippet.thumbnails.high.url'), title: (0, _get3["default"])(json, 'items[0].snippet.title') }; if (profile.title) { names = profile.title.split(' '); profile.firstName = names[0]; // eslint-disable-line profile.lastName = names.slice(1).join(' '); } return _context2.abrupt("return", profile); case 9: case "end": return _context2.stop(); } }, _callee2); })); function getProfile(_x3) { return _getProfile.apply(this, arguments); } return getProfile; }() }]); return YoutubeStrategy; }(_BaseStrategy2["default"]); exports["default"] = YoutubeStrategy; //# sourceMappingURL=YoutubeStrategy.js.map