react-routing-oidc
Version:
OIDC Client with React Routing
311 lines (258 loc) • 10.7 kB
JavaScript
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