UNPKG

@coko/client

Version:

Client side common code for coko apps

88 lines (85 loc) 5.08 kB
"use strict"; function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _react = _interopRequireWildcard(require("react")); var _reactRouterDom = require("react-router-dom"); var _propTypes = _interopRequireDefault(require("prop-types")); var _client = require("@apollo/client"); var _get = _interopRequireDefault(require("lodash/get")); var _currentUserContext = require("../helpers/currentUserContext"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } var requiredFields = ['id', 'displayName', 'username', 'defaultIdentity.id', 'defaultIdentity.isVerified']; var checkForRequiredFields = function checkForRequiredFields(user) { var fieldsMissing = requiredFields.some(function (k) { return typeof (0, _get["default"])(user, k) === 'undefined'; }); return !fieldsMissing; }; var RequireAuth = function RequireAuth(props) { var notAuthenticatedRedirectTo = props.notAuthenticatedRedirectTo, cleanUp = props.cleanUp, children = props.children, requireIdentityVerification = props.requireIdentityVerification, notVerifiedRedirectTo = props.notVerifiedRedirectTo; var client = (0, _client.useApolloClient)(); var location = (0, _reactRouterDom.useLocation)(); var _useCurrentUser = (0, _currentUserContext.useCurrentUser)(), currentUser = _useCurrentUser.currentUser, setCurrentUser = _useCurrentUser.setCurrentUser; (0, _react.useEffect)(function () { if (currentUser) { var requiredFieldsExist = checkForRequiredFields(currentUser); if (!requiredFieldsExist) { throw new Error("Your current user query is missing some required fields! Make sure that the query requests the following fields: ".concat(requiredFields.join(', '))); } } }, [currentUser]); if (!localStorage.getItem('token')) { client.cache.reset(); cleanUp(); var redirectUrl = "".concat(notAuthenticatedRedirectTo, "?next=").concat(location.pathname); return /*#__PURE__*/_react["default"].createElement(_reactRouterDom.Redirect, { to: redirectUrl }); } // if currentUser is undefined the context hasn't been set yet if (currentUser === undefined) { return null; } // if currentUser is null it was set as a result of a failed authentication attempt (invalid token) if (currentUser === null) { setCurrentUser(null); client.cache.reset(); localStorage.removeItem('token'); return /*#__PURE__*/_react["default"].createElement(_reactRouterDom.Redirect, { to: "".concat(notAuthenticatedRedirectTo, "?next=").concat(location.pathname) }); } if (requireIdentityVerification) { var _currentUser$defaultI; var verified = currentUser === null || currentUser === void 0 ? void 0 : (_currentUser$defaultI = currentUser.defaultIdentity) === null || _currentUser$defaultI === void 0 ? void 0 : _currentUser$defaultI.isVerified; if (!verified) return /*#__PURE__*/_react["default"].createElement(_reactRouterDom.Redirect, { to: notVerifiedRedirectTo }); } return children; }; RequireAuth.propTypes = { cleanUp: _propTypes["default"].func, requireIdentityVerification: _propTypes["default"].bool, notVerifiedRedirectTo: _propTypes["default"].string, notAuthenticatedRedirectTo: _propTypes["default"].string }; RequireAuth.defaultProps = { cleanUp: function cleanUp() {}, requireIdentityVerification: true, notVerifiedRedirectTo: '/ensure-verified-login', notAuthenticatedRedirectTo: '/login' }; var _default = RequireAuth; exports["default"] = _default;