UNPKG

calcite-react

Version:
697 lines (589 loc) 21.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getUserThumbnail = exports.getOrgThumbnail = exports.getPortal = exports.refreshOAuth2 = exports.refresh = exports.logoutOAuth2 = exports.logout = exports.completeOAuth2 = exports.completeLogin = exports.loginOAuth2 = exports.beginLogin = void 0; var _arcgisRestAuth = require("@esri/arcgis-rest-auth"); var _arcgisRestPortal = require("@esri/arcgis-rest-portal"); var _arcgisRestRequest = require("@esri/arcgis-rest-request"); var _accountManagerStorageUtils = require("./accountManagerStorageUtils"); function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } //** Login Workflow*/ //** ============= */ //** Login */ var beginLogin = /*#__PURE__*/ function () { var _ref = _asyncToGenerator( /*#__PURE__*/ regeneratorRuntime.mark(function _callee(managerName, options, setAccountManagerState) { var type, _args = arguments; return regeneratorRuntime.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: type = _args.length > 3 && _args[3] !== undefined ? _args[3] : 'OAuth2'; if (type === 'OAuth2') { loginOAuth2(managerName, options, setAccountManagerState); } case 2: case "end": return _context.stop(); } } }, _callee, this); })); return function beginLogin(_x, _x2, _x3) { return _ref.apply(this, arguments); }; }(); //** Login: Begin OAuth */ exports.beginLogin = beginLogin; var loginOAuth2 = /*#__PURE__*/ function () { var _ref3 = _asyncToGenerator( /*#__PURE__*/ regeneratorRuntime.mark(function _callee2(managerName, _ref2, setAccountManagerState) { var clientId, redirectUri, portalUrl, popup, params, portal, url, resource, format, dSession, account, accountManager; return regeneratorRuntime.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: clientId = _ref2.clientId, redirectUri = _ref2.redirectUri, portalUrl = _ref2.portalUrl, popup = _ref2.popup, params = _ref2.params; // params is an undocumented IOAuth2Option: // https://github.com/Esri/arcgis-rest-js/blob/master/packages/arcgis-rest-auth/src/UserSession.ts#L303 // https://github.com/Esri/arcgis-rest-js/blob/master/packages/arcgis-rest-request/src/utils/encode-query-string.ts#L28 portal = portalUrl ? portalUrl : 'https://www.arcgis.com/sharing'; url = new URL(portal); if (!url.pathname) { resource = new URL('https://developers.arcgis.com/rest/users-groups-and-items/root.htm'); format = 'https://<webadaptorhost>.<domain>.com/<webadaptorname>/sharing/rest'; console.warn("No URL path given may cause 400 error. If using Enterprise portal verify url format: ".concat(format, ". View resource for formatting url: ").concat(resource)); } if (!popup) { _context2.next = 22; break; } _context2.prev = 5; _context2.next = 8; return _arcgisRestAuth.UserSession.beginOAuth2({ // register an app of your own to create a unique clientId clientId: clientId, redirectUri: redirectUri, portal: portal, popup: popup, params: params }); case 8: dSession = _context2.sent; _context2.next = 11; return createAccountObject({ dSession: dSession, portal: portal, clientId: clientId }); case 11: account = _context2.sent; (0, _accountManagerStorageUtils.addAccountStorage)(managerName, account); accountManager = (0, _accountManagerStorageUtils.getAccountManagerStorage)(managerName); setAccountManagerState(accountManager); _context2.next = 20; break; case 17: _context2.prev = 17; _context2.t0 = _context2["catch"](5); console.error("Error getting User Session (loginOAuth2). ".concat(_context2.t0)); case 20: _context2.next = 23; break; case 22: try { _arcgisRestAuth.UserSession.beginOAuth2({ // register an app of your own to create a unique clientId clientId: clientId, redirectUri: redirectUri, portal: portal, popup: popup, params: params }); } catch (e) { console.error("Error getting User Session (loginOAuth2). ".concat(e)); } case 23: case "end": return _context2.stop(); } } }, _callee2, this, [[5, 17]]); })); return function loginOAuth2(_x4, _x5, _x6) { return _ref3.apply(this, arguments); }; }(); /** Complete auth and return account with serialized portal and session */ exports.loginOAuth2 = loginOAuth2; var completeLogin = /*#__PURE__*/ function () { var _ref4 = _asyncToGenerator( /*#__PURE__*/ regeneratorRuntime.mark(function _callee3(options) { var type, account, _args3 = arguments; return regeneratorRuntime.wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: type = _args3.length > 1 && _args3[1] !== undefined ? _args3[1] : 'OAuth2'; if (!(type === 'OAuth2')) { _context3.next = 6; break; } _context3.next = 4; return completeOAuth2(options); case 4: account = _context3.sent; return _context3.abrupt("return", account); case 6: case "end": return _context3.stop(); } } }, _callee3, this); })); return function completeLogin(_x7) { return _ref4.apply(this, arguments); }; }(); /** Login: Complete OAuth2 */ exports.completeLogin = completeLogin; var completeOAuth2 = /*#__PURE__*/ function () { var _ref6 = _asyncToGenerator( /*#__PURE__*/ regeneratorRuntime.mark(function _callee4(_ref5) { var clientId, portalUrl, redirectUri, popup, portal, dSession, account; return regeneratorRuntime.wrap(function _callee4$(_context4) { while (1) { switch (_context4.prev = _context4.next) { case 0: clientId = _ref5.clientId, portalUrl = _ref5.portalUrl, redirectUri = _ref5.redirectUri, popup = _ref5.popup; _context4.prev = 1; portal = portalUrl ? portalUrl : 'https://www.arcgis.com/sharing'; dSession = _arcgisRestAuth.UserSession.completeOAuth2({ clientId: clientId, portal: portal, redirectUri: redirectUri, popup: popup }); _context4.next = 6; return createAccountObject({ dSession: dSession, portal: portal, clientId: clientId }); case 6: account = _context4.sent; // Clear hash token from URL // Refactored by Alex Ela to use window.history.replaceState() instead of window.history.pushState() if (window.history.replaceState) { window.history.replaceState({}, '', window.location.pathname); } else { window.location.hash = ''; } return _context4.abrupt("return", account); case 11: _context4.prev = 11; _context4.t0 = _context4["catch"](1); console.error("Error getting User Session (completeOAuth). Error reading property may result from app redirecting before operation can read token hash in url. ".concat(_context4.t0)); return _context4.abrupt("return", null); case 15: case "end": return _context4.stop(); } } }, _callee4, this, [[1, 11]]); })); return function completeOAuth2(_x8) { return _ref6.apply(this, arguments); }; }(); //** Logout Workflow*/ //** ============= */ //** Logout */ exports.completeOAuth2 = completeOAuth2; var logout = /*#__PURE__*/ function () { var _ref7 = _asyncToGenerator( /*#__PURE__*/ regeneratorRuntime.mark(function _callee5(account) { var type, response, _args5 = arguments; return regeneratorRuntime.wrap(function _callee5$(_context5) { while (1) { switch (_context5.prev = _context5.next) { case 0: type = _args5.length > 1 && _args5[1] !== undefined ? _args5[1] : 'OAuth2'; if (!(type === 'OAuth2')) { _context5.next = 6; break; } _context5.next = 4; return logoutOAuth2(account); case 4: response = _context5.sent; return _context5.abrupt("return", response); case 6: case "end": return _context5.stop(); } } }, _callee5, this); })); return function logout(_x9) { return _ref7.apply(this, arguments); }; }(); //** Logout: OAuth2 */ exports.logout = logout; var logoutOAuth2 = /*#__PURE__*/ function () { var _ref9 = _asyncToGenerator( /*#__PURE__*/ regeneratorRuntime.mark(function _callee6(_ref8) { var session, token, url, clientId, revokeTokenEndpoint, data, res, success; return regeneratorRuntime.wrap(function _callee6$(_context6) { while (1) { switch (_context6.prev = _context6.next) { case 0: session = _ref8.session, token = _ref8.token; url = session ? session.portal : null; clientId = session ? session.clientId : null; //** Formal Logout requires esri_auth cookie */ //AGO //return `${portalUrl.origin}/home/pages/Account/manage_accounts.html#redirect_uri=${encodedRedirectUrl}&client_id=${params.clientId}&signout=true` //Enterprise //return `${portalUrl}/oauth2/signout?client_id=${params.clientId}&redirect_uri=${encodedRedirectUrl}`; //** Revoke Token (OAuth2): https://developers.arcgis.com/rest/users-groups-and-items/revoke-token.htm */ //Build logout request if (!(!clientId || !token)) { _context6.next = 5; break; } return _context6.abrupt("return", { success: false, error: 'Empty client_id / token' }); case 5: revokeTokenEndpoint = "".concat(url, "/oauth2/revokeToken"); data = { client_id: clientId, auth_token: token }; _context6.prev = 7; _context6.next = 10; return (0, _arcgisRestRequest.request)(revokeTokenEndpoint, { params: data, httpMethod: 'POST' }); case 10: res = _context6.sent; success = res ? res.success : undefined; return _context6.abrupt("return", { success: success }); case 15: _context6.prev = 15; _context6.t0 = _context6["catch"](7); return _context6.abrupt("return", { success: false, error: _context6.t0 }); case 18: case "end": return _context6.stop(); } } }, _callee6, this, [[7, 15]]); })); return function logoutOAuth2(_x10) { return _ref9.apply(this, arguments); }; }(); //** Refresh Workflow*/ exports.logoutOAuth2 = logoutOAuth2; var refresh = /*#__PURE__*/ function () { var _ref10 = _asyncToGenerator( /*#__PURE__*/ regeneratorRuntime.mark(function _callee7(account) { var type, response, _args7 = arguments; return regeneratorRuntime.wrap(function _callee7$(_context7) { while (1) { switch (_context7.prev = _context7.next) { case 0: type = _args7.length > 1 && _args7[1] !== undefined ? _args7[1] : 'OAuth2'; if (!(type === 'OAuth2')) { _context7.next = 6; break; } _context7.next = 4; return refreshOAuth2(account); case 4: response = _context7.sent; return _context7.abrupt("return", response); case 6: case "end": return _context7.stop(); } } }, _callee7, this); })); return function refresh(_x11) { return _ref10.apply(this, arguments); }; }(); exports.refresh = refresh; var refreshOAuth2 = /*#__PURE__*/ function () { var _ref11 = _asyncToGenerator( /*#__PURE__*/ regeneratorRuntime.mark(function _callee8() { var _ref12, session, key, _refresh, sSession, _args8 = arguments; return regeneratorRuntime.wrap(function _callee8$(_context8) { while (1) { switch (_context8.prev = _context8.next) { case 0: _ref12 = _args8.length > 0 && _args8[0] !== undefined ? _args8[0] : {}, session = _ref12.session, key = _ref12.key; if (key) { _context8.next = 3; break; } return _context8.abrupt("return", { success: false, error: 'Empty account key.' }); case 3: if (!(session && session.refreshToken)) { _context8.next = 15; break; } _context8.prev = 4; _context8.next = 7; return session.refreshSession(); case 7: _refresh = _context8.sent; sSession = _refresh ? _refresh.serialize() : undefined; return _context8.abrupt("return", { success: true, session: sSession }); case 12: _context8.prev = 12; _context8.t0 = _context8["catch"](4); return _context8.abrupt("return", { success: false, error: "Session.refreshSession failed for account ".concat(key, ". ").concat(_context8.t0) }); case 15: return _context8.abrupt("return", { success: false, error: "Cannot refresh account session for account ".concat(key, ". Missing session/sessionToken.") }); case 16: case "end": return _context8.stop(); } } }, _callee8, this, [[4, 12]]); })); return function refreshOAuth2() { return _ref11.apply(this, arguments); }; }(); //** Helpers */ //** ======= */ //** Get portal object */ exports.refreshOAuth2 = refreshOAuth2; var getPortal = /*#__PURE__*/ function () { var _ref14 = _asyncToGenerator( /*#__PURE__*/ regeneratorRuntime.mark(function _callee9(_ref13) { var portalUrl, session, portalObject; return regeneratorRuntime.wrap(function _callee9$(_context9) { while (1) { switch (_context9.prev = _context9.next) { case 0: portalUrl = _ref13.portalUrl, session = _ref13.session; _context9.prev = 1; _context9.next = 4; return (0, _arcgisRestPortal.getSelf)({ portal: portalUrl, authentication: session }); case 4: portalObject = _context9.sent; return _context9.abrupt("return", portalObject); case 8: _context9.prev = 8; _context9.t0 = _context9["catch"](1); console.error("Error retrieving portal item. ".concat(_context9.t0)); return _context9.abrupt("return", null); case 12: case "end": return _context9.stop(); } } }, _callee9, this, [[1, 8]]); })); return function getPortal(_x12) { return _ref14.apply(this, arguments); }; }(); //** Get Org Thumbnail */ exports.getPortal = getPortal; var getOrgThumbnail = function getOrgThumbnail(_ref15) { var portal = _ref15.session.portal, _ref15$portal = _ref15.portal, thumbnail = _ref15$portal.thumbnail, name = _ref15$portal.name, token = _ref15.token, orgImage = _ref15.orgImage; //org thumbnail (https://developers.arcgis.com/rest/users-groups-and-items/portal-self.htm) var orgThumbnail = { url: undefined, letters: undefined }; orgThumbnail.url = thumbnail && portal && token ? "".concat(portal, "/portals/self/resources/").concat(thumbnail, "?token=").concat(token) : undefined; orgThumbnail.letters = name ? name[0].toUpperCase() : '!'; if (orgImage) { orgThumbnail.image = orgImage; } else if (orgThumbnail.url) { try { var image = new Image(); image.src = orgThumbnail.url; orgThumbnail.image = image; } catch (e) { console.error("Error creating js Image(). ".concat(e)); } } return orgThumbnail; }; //** Get User Thumbnail */ exports.getOrgThumbnail = getOrgThumbnail; var getUserThumbnail = function getUserThumbnail(_ref16) { var _ref16$session = _ref16.session, portal = _ref16$session.portal, username = _ref16$session.username, _ref16$user = _ref16.user, thumbnail = _ref16$user.thumbnail, firstName = _ref16$user.firstName, lastName = _ref16$user.lastName, fullName = _ref16$user.fullName, token = _ref16.token, userImage = _ref16.userImage; //user thumbnail (https://developers.arcgis.com/rest/users-groups-and-items/user.htm) var userThumbnail = { url: undefined, letters: undefined }; userThumbnail.url = thumbnail && portal && username && token ? "".concat(portal, "/community/users/").concat(username, "/info/").concat(thumbnail, "?token=").concat(token) : undefined; userThumbnail.letters = firstName && lastName ? "".concat(firstName[0] + lastName[0]).toUpperCase() : fullName ? fullName[0].toUpperCase() : '!'; if (userImage) { userThumbnail.image = userImage; } else if (userThumbnail.url) { try { var image = new Image(); image.src = userThumbnail.url; userThumbnail.image = image; } catch (e) { console.error("Error creating js Image(). ".concat(e)); } } return userThumbnail; }; exports.getUserThumbnail = getUserThumbnail; var createAccountObject = /*#__PURE__*/ function () { var _ref18 = _asyncToGenerator( /*#__PURE__*/ regeneratorRuntime.mark(function _callee10(_ref17) { var dSession, portal, clientId, token, user, dPortal, key; return regeneratorRuntime.wrap(function _callee10$(_context10) { while (1) { switch (_context10.prev = _context10.next) { case 0: dSession = _ref17.dSession, portal = _ref17.portal, clientId = _ref17.clientId; _context10.prev = 1; dSession.clientId = dSession.clientId ? dSession.clientId : clientId; token = dSession.token; _context10.next = 6; return dSession.getUser(); case 6: user = _context10.sent; _context10.next = 9; return getPortal({ portalUrl: portal, session: dSession }); case 9: dPortal = _context10.sent; key = createAccountKey({ session: dSession, user: user, portal: dPortal, token: token }); return _context10.abrupt("return", { user: user, portal: JSON.stringify(dPortal), session: dSession.serialize(), token: token, key: key }); case 14: _context10.prev = 14; _context10.t0 = _context10["catch"](1); throw new Error("Could not create account object. This could be due to UserSession.getUser(). ".concat(_context10.t0)); case 17: case "end": return _context10.stop(); } } }, _callee10, this, [[1, 14]]); })); return function createAccountObject(_x13) { return _ref18.apply(this, arguments); }; }(); var createAccountKey = function createAccountKey(_ref19) { var user = _ref19.user, portal = _ref19.portal; try { var _ref20 = portal || {}, customBaseUrl = _ref20.customBaseUrl, portalHostname = _ref20.portalHostname, urlKey = _ref20.urlKey, isPortal = _ref20.isPortal; var type = isPortal ? 'enterprise' : 'online'; var name = isPortal ? portalHostname : urlKey; var _ref21 = user || {}, username = _ref21.username; var key = "".concat(type, "-").concat(customBaseUrl, "-").concat(name, "-").concat(username); return key; } catch (e) { throw new Error("Error creating account key. ".concat(e)); } };