calcite-react
Version:
Calcite components for React
697 lines (589 loc) • 21.7 kB
JavaScript
"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));
}
};