Skip to content

Commit d3463a3

Browse files
committed
add keycloak js
1 parent 105a015 commit d3463a3

File tree

4 files changed

+82
-5
lines changed

4 files changed

+82
-5
lines changed

package-lock.json

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
"express": "^4.17.1",
4242
"graphql": "^15.5.2",
4343
"isnumber": "^1.0.0",
44+
"keycloak-js": "^26.1.0",
4445
"qs": "^6.10.1",
4546
"react-apexcharts": "^1.4.0",
4647
"react-collapse": "^5.1.0",

src/index.js

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import { selectors } from 'reducers';
1414
import GlobalThemes from './styles/themes/GlobalThemes';
1515
import Root from './Routes';
1616
import store from './store';
17+
import KeycloakServices from './keycloak/keycloakServices';
1718
import _ from 'lodash';
1819

1920
const ConfigProviderApp = () => {
@@ -81,17 +82,22 @@ const ConfigProviderApp = () => {
8182
) : null;
8283
};
8384

84-
const App = () => {
85-
return (
85+
const container = document.getElementById('root');
86+
const root = createRoot(container);
87+
88+
const renderApp = () => {
89+
root.render(
8690
<Provider store={store}>
8791
<ConfigProviderApp />
8892
</Provider>
8993
);
9094
};
9195

92-
const container = document.getElementById('root');
93-
const root = createRoot(container);
94-
root.render(<App />);
96+
const renderErrorPreRenderApp = () => {
97+
root.render(<>error</>);
98+
};
99+
100+
KeycloakServices.initKeycloak(renderApp, renderErrorPreRenderApp);
95101
// root.unmount();
96102

97103
// webpack Hot Module Replacement API

src/keycloak/keycloakServices.js

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
/* eslint-disable import/no-unresolved */
2+
import Keycloak from 'keycloak-js';
3+
4+
const KeycloakConfig = {
5+
clientId: 'simulator-ui-app',
6+
realm: 'Hkube',
7+
url: 'https://cicd.hkube.org/hkube/keycloak/auth',
8+
// resource: 'simulator-ui-app',
9+
enableCors: true,
10+
allowedOrigins: '*',
11+
clientUId: '23c95f69-17a2-4b9d-9001-39a5cb8f05fb',
12+
checkLoginIframe: true,
13+
checkLoginIframeInterval: 30,
14+
};
15+
16+
const _kc = new Keycloak(KeycloakConfig);
17+
18+
const initKeycloak = (appToRender, renderError) => {
19+
_kc
20+
.init({
21+
onLoad: 'login-required',
22+
})
23+
.then(authenticated => {
24+
if (!authenticated) {
25+
console.log('user is not authenticated..!');
26+
}
27+
28+
appToRender();
29+
})
30+
.catch(authenticatedError => {
31+
console.error(authenticatedError);
32+
return renderError(authenticatedError);
33+
});
34+
};
35+
36+
const doLogin = _kc.login.bind(_kc);
37+
const doLogout = _kc.logout.bind(_kc);
38+
39+
const getToken = () => _kc.token;
40+
41+
const isLoggedIn = () => !!_kc.token;
42+
43+
const updateToken = (minSecValidity, successCallback) =>
44+
_kc.updateToken(minSecValidity).then(successCallback).catch(doLogin);
45+
46+
const getUsername = () => _kc.tokenParsed?.preferred_username;
47+
48+
const hasRole = roles => roles.some(role => _kc.hasRealmRole(role));
49+
50+
const isTokenExpired = minSecValidity => _kc.isTokenExpired(minSecValidity);
51+
52+
const KeycloakServices = {
53+
initKeycloak,
54+
doLogin,
55+
doLogout,
56+
isLoggedIn,
57+
getToken,
58+
updateToken,
59+
isTokenExpired,
60+
getUsername,
61+
hasRole,
62+
};
63+
64+
export default KeycloakServices;

0 commit comments

Comments
 (0)