UNPKG

react-routing-oidc

Version:
311 lines (258 loc) 10.7 kB
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } var React = require('react'); var React__default = _interopDefault(React); var oidcClient = require('oidc-client'); var reactRouterDom = require('react-router-dom'); function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; } function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; } var IDENTITY_CONFIG = { authority: process.env.REACT_APP_AUTH_URL, client_id: process.env.REACT_APP_IDENTITY_CLIENT_ID, redirect_uri: process.env.REACT_APP_REDIRECT_URL, automaticSilentRenew: false, loadUserInfo: false, silent_redirect_uri: process.env.REACT_APP_SILENT_REDIRECT_URL, post_logout_redirect_uri: process.env.REACT_APP_LOGOFF_REDIRECT_URL, response_type: 'id_token token', scope: 'openid profile' }; var METADATA_OIDC = { issuer: process.env.REACT_APP_AUTH_URL, jwks_uri: process.env.REACT_APP_AUTH_URL + '/.well-known/openid-configuration/jwks', authorization_endpoint: process.env.REACT_APP_AUTH_URL + '/connect/authorize', token_endpoint: process.env.REACT_APP_AUTH_URL + '/connect/token', userinfo_endpoint: process.env.REACT_APP_AUTH_URL + '/connect/userinfo', end_session_endpoint: process.env.REACT_APP_AUTH_URL + '/connect/endsession', check_session_iframe: process.env.REACT_APP_AUTH_URL + '/connect/checksession', revocation_endpoint: process.env.REACT_APP_AUTH_URL + '/connect/revocation', introspection_endpoint: process.env.REACT_APP_AUTH_URL + '/connect/introspect' }; var AuthService = function AuthService() { var _this2 = this; var _this = this; this.signinRedirectCallback = function (history) { var _this$UserManager; console.log(_this.UserManager); (_this$UserManager = _this.UserManager) === null || _this$UserManager === void 0 ? void 0 : _this$UserManager.signinRedirectCallback().then(function () { history.push('/'); }); }; this.getUser = function () { try { var _this2$UserManager; return Promise.resolve((_this2$UserManager = _this2.UserManager) === null || _this2$UserManager === void 0 ? void 0 : _this2$UserManager.getUser()).then(function (user) { var _exit = false; var _temp = function () { if (!user) { var _this2$UserManager2; _exit = true; return Promise.resolve((_this2$UserManager2 = _this2.UserManager) === null || _this2$UserManager2 === void 0 ? void 0 : _this2$UserManager2.signinRedirectCallback()); } }(); return _temp && _temp.then ? _temp.then(function (_result) { return _exit ? _result : user; }) : _exit ? _temp : user; }); } catch (e) { return Promise.reject(e); } }; this.parseJwt = function (token) { var base64Url = token.split('.')[1]; var base64 = base64Url.replace('-', '+').replace('_', '/'); return JSON.parse(window.atob(base64)); }; this.signinRedirect = function () { var _this$UserManager2; console.log('Why??'); localStorage.setItem('redirectUri', window.location.pathname); (_this$UserManager2 = _this.UserManager) === null || _this$UserManager2 === void 0 ? void 0 : _this$UserManager2.signinRedirect({}); }; this.navigateToScreen = function () { window.location.replace('/en/dashboard'); }; this.isAuthenticated = function () { var oidcStorage = JSON.parse(sessionStorage.getItem("oidc.user:" + process.env.REACT_APP_AUTH_URL + ":" + process.env.REACT_APP_IDENTITY_CLIENT_ID)); return !!oidcStorage && !!oidcStorage.access_token; }; this.signinSilent = function () { var _this$UserManager3; (_this$UserManager3 = _this.UserManager) === null || _this$UserManager3 === void 0 ? void 0 : _this$UserManager3.signinSilent().then(function (user) { console.log('signed in', user); })["catch"](function (err) { _this.signinRedirect(); console.log(err); }); }; this.signinSilentCallback = function () { var _this$UserManager4; (_this$UserManager4 = _this.UserManager) === null || _this$UserManager4 === void 0 ? void 0 : _this$UserManager4.signinSilentCallback(); }; this.createSigninRequest = function () { var _this$UserManager5; return (_this$UserManager5 = _this.UserManager) === null || _this$UserManager5 === void 0 ? void 0 : _this$UserManager5.createSigninRequest(); }; this.logout = function () { var _this$UserManager6, _this$UserManager7; (_this$UserManager6 = _this.UserManager) === null || _this$UserManager6 === void 0 ? void 0 : _this$UserManager6.signoutRedirect({ id_token_hint: localStorage.getItem('id_token') }); (_this$UserManager7 = _this.UserManager) === null || _this$UserManager7 === void 0 ? void 0 : _this$UserManager7.clearStaleState(); }; this.signoutRedirectCallback = function () { var _this$UserManager8, _this$UserManager9; (_this$UserManager8 = _this.UserManager) === null || _this$UserManager8 === void 0 ? void 0 : _this$UserManager8.signoutRedirectCallback().then(function () { localStorage.clear(); window.location.replace(process.env.REACT_APP_PUBLIC_URL || '/'); }); (_this$UserManager9 = _this.UserManager) === null || _this$UserManager9 === void 0 ? void 0 : _this$UserManager9.clearStaleState(); }; this.UserManager = new oidcClient.UserManager(_extends({}, IDENTITY_CONFIG, { userStore: new oidcClient.WebStorageStateStore({ store: window.sessionStorage }), metadata: _extends({}, METADATA_OIDC) })); oidcClient.Log.logger = console; oidcClient.Log.level = oidcClient.Log.NONE; this.UserManager.events.addUserLoaded(function () { if (window.location.href.indexOf('signin-oidc') !== -1) { _this.navigateToScreen && _this.navigateToScreen(); } }); this.UserManager.events.addSilentRenewError(function (e) { console.log('silent renew error', e.message); }); this.UserManager.events.addAccessTokenExpired(function () { console.log('token expired'); _this.signinSilent && _this.signinSilent(); }); }; var AuthContext = React__default.createContext(new AuthService()); var AuthConsumer = AuthContext.Consumer; var AuthProvider = /*#__PURE__*/function (_Component) { _inheritsLoose(AuthProvider, _Component); function AuthProvider(props) { var _this; _this = _Component.call(this, props) || this; _this.authService = new AuthService(); return _this; } var _proto = AuthProvider.prototype; _proto.render = function render() { return React__default.createElement(AuthContext.Provider, { value: this.authService }, this.props.children); }; return AuthProvider; }(React.Component); var Callback = function Callback() { var history = reactRouterDom.useHistory(); return React__default.createElement(AuthConsumer, null, function (_ref) { var signinRedirectCallback = _ref.signinRedirectCallback; signinRedirectCallback && signinRedirectCallback(history); return React__default.createElement("span", null, "Loading..."); }); }; var Logout = function Logout() { return React__default.createElement(AuthConsumer, null, function (_ref) { var logout = _ref.logout; logout && logout(); return React__default.createElement("span", null, "loading"); }); }; var LogoutCallback = function LogoutCallback() { return React__default.createElement(AuthConsumer, null, function (_ref) { var signoutRedirectCallback = _ref.signoutRedirectCallback; signoutRedirectCallback && signoutRedirectCallback(); return React__default.createElement("span", null, "loading"); }); }; var SilentRenew = function SilentRenew() { return React__default.createElement(AuthConsumer, null, function (_ref) { var signinSilentCallback = _ref.signinSilentCallback; signinSilentCallback && signinSilentCallback(); return React__default.createElement("span", null, "loading"); }); }; var OidRoutes = function OidRoutes(props) { console.log(props.match); return React__default.createElement(reactRouterDom.Switch, null, React__default.createElement(reactRouterDom.Route, { exact: true, path: props.match.url + "assets/signin-callback.html", component: Callback }), React__default.createElement(reactRouterDom.Route, { exact: true, path: props.match.url + "logout", component: Logout }), React__default.createElement(reactRouterDom.Route, { exact: true, path: props.match.url + "logout/callback", component: LogoutCallback }), React__default.createElement(reactRouterDom.Route, { exact: true, path: props.match.url + "assets/silent-callback.html", component: SilentRenew })); }; var PrivateRoute = function PrivateRoute(_ref) { var component = _ref.component, rest = _objectWithoutPropertiesLoose(_ref, ["component"]); var renderFn = function renderFn(Component) { return function (props) { return React__default.createElement(AuthConsumer, null, function (_ref2) { var isAuthenticated = _ref2.isAuthenticated, signinRedirect = _ref2.signinRedirect; console.log('???'); if (!!Component && isAuthenticated && isAuthenticated()) { return React__default.createElement(Component, props); } else { signinRedirect && signinRedirect(); return React__default.createElement("span", null, "loading mm"); } }); }; }; return React__default.createElement(reactRouterDom.Route, Object.assign({}, rest, { render: renderFn(component) })); }; exports.AuthConsumer = AuthConsumer; exports.AuthContext = AuthContext; exports.AuthProvider = AuthProvider; exports.Callback = Callback; exports.Logout = Logout; exports.LogoutCallback = LogoutCallback; exports.OidRoutes = OidRoutes; exports.PrivateRoute = PrivateRoute; exports.SilentRenew = SilentRenew; //# sourceMappingURL=index.js.map