Skip to content

Commit

Permalink
logout , updatetoken
Browse files Browse the repository at this point in the history
  • Loading branch information
zivglik committed Feb 2, 2025
1 parent ab6e3fc commit 4456a82
Show file tree
Hide file tree
Showing 8 changed files with 102 additions and 71 deletions.
2 changes: 2 additions & 0 deletions server/server.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ const {
grafanaUrl,
grafanaDashboardUrl,
dataSourceIsEnable,
keycloakEnable,
indexHtml,
baseUrl,
} = require('./setupConfig');
Expand All @@ -35,6 +36,7 @@ app.get('*/dashboard-config.json', (req, res) => {
grafanaUrl,
grafanaDashboardUrl,
dataSourceIsEnable,
keycloakEnable,
baseUrl,
monitorBackend,
board,
Expand Down
2 changes: 2 additions & 0 deletions server/setupConfig.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ const grafanaUrl = process.env.GRAFANA_URL;
const grafanaDashboardUrl = process.env.GRAFANA_URL;

const dataSourceIsEnable = process.env.DATA_SOURCE_IS_ENABLE === 'true';
const keycloakEnable = process.env.KEYCLOAK_ENABLE === 'true';

const baseUrl = process.env.HKUBE_BASE_URL
? process.env.HKUBE_BASE_URL.replace(/^\//, '')
Expand Down Expand Up @@ -54,6 +55,7 @@ module.exports = {
grafanaUrl,
grafanaDashboardUrl,
dataSourceIsEnable,
keycloakEnable,
baseUrl,
board,
BOARD_HOST,
Expand Down
9 changes: 8 additions & 1 deletion src/Routes/Base/Header/Settings/Settings.react.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import React, { useCallback } from 'react';
import KeycloakServices from 'keycloak/keycloakServices';
import { FlexBox, Icons } from 'components/common';
import { useNavigate } from 'react-router-dom';
import {
Expand Down Expand Up @@ -36,6 +37,7 @@ const Settings = () => {
const { triggerUserGuide } = useActions();
const { hkubeSystemVersion } = useSelector(selectors.connection);
const { grafanaUrl } = useSelector(selectors.connection);
const { keycloakEnable } = useSelector(selectors.connection);

const onGuideClick = useCallback(() => {
triggerUserGuide();
Expand All @@ -44,6 +46,8 @@ const Settings = () => {

const openUrl = url => () => window.open(url);

const logout = () => KeycloakServices.doLogout();

const DarkText = styled.div`
cursor: pointer;
font-size: 14px;
Expand Down Expand Up @@ -143,7 +147,10 @@ const Settings = () => {
type={<QuestionCircleOutlined title="Help" />}
onClick={onGuideClick}
/>
<TextLink onClick={onGuideClick}>Help</TextLink>
<TextLink onClick={onGuideClick}>
Help {keycloakEnable.toString()}
</TextLink>
{keycloakEnable && <TextLink onClick={logout}>logout</TextLink>}*
</FlexBox.Auto>

<DarkText as="span">{hkubeSystemVersion}</DarkText>
Expand Down
2 changes: 2 additions & 0 deletions src/actions/connection.action.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ export const connectionSetup = ({
grafanaUrl,
grafanaDashboardUrl,
dataSourceIsEnable,
keycloakEnable,
}) => ({
type: actions.CONNECTION_SETUP,
payload: {
Expand All @@ -41,6 +42,7 @@ export const connectionSetup = ({
grafanaUrl,
grafanaDashboardUrl,
dataSourceIsEnable,
keycloakEnable,
},
});

Expand Down
10 changes: 10 additions & 0 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,16 @@ const ConfigProviderApp = () => {
const dispatch = useDispatch();
useEffect(() => {
dispatch(init());

// Start a periodic token refresh
const tokenRefreshInterval = setInterval(() => {
KeycloakServices.updateToken(30, () => {
console.log('Token refreshed successfully!');
});
}, 60000);

// Cleanup on unmount
return () => clearInterval(tokenRefreshInterval);
}, [dispatch]);

const { hasConfig } = useSelector(selectors.config);
Expand Down
145 changes: 75 additions & 70 deletions src/middleware/rest.middleware.js
Original file line number Diff line number Diff line change
Expand Up @@ -83,82 +83,87 @@ let SOCKET_URL = null;
let SOCKET_DATASOURCES_URL = null;
let BOARD_URL = null;

const restMiddleware = ({ dispatch }) => next => action => {
if (action.type === `${AT.SOCKET_GET_CONFIG}_SUCCESS`) {
const {
monitorBackend,
board,
hkubeSystemVersion,
kibanaUrl,
structuredPrefix,
grafanaUrl,
grafanaDashboardUrl,
dataSourceIsEnable,
} = action.payload.config;
SOCKET_URL = setMonitorPath(monitorBackend);
SOCKET_DATASOURCES_URL = setDatasourcesPath(monitorBackend);
BOARD_URL = setBoardPath(board);
dispatch(
actions.connectionSetup({
socketUrl: SOCKET_URL,
socketDatasourcesUrl: SOCKET_DATASOURCES_URL,
boardUrl: BOARD_URL,
const restMiddleware =
({ dispatch }) =>
next =>
action => {
if (action.type === `${AT.SOCKET_GET_CONFIG}_SUCCESS`) {
const {
monitorBackend,
board,
hkubeSystemVersion,
kibanaUrl,
structuredPrefix,
grafanaUrl,
grafanaDashboardUrl,
dataSourceIsEnable,
})
);
client.defaults.baseURL = SOCKET_URL;
keycloakEnable,
} = action.payload.config;
SOCKET_URL = setMonitorPath(monitorBackend);
SOCKET_DATASOURCES_URL = setDatasourcesPath(monitorBackend);
BOARD_URL = setBoardPath(board);
dispatch(
actions.connectionSetup({
socketUrl: SOCKET_URL,
socketDatasourcesUrl: SOCKET_DATASOURCES_URL,
boardUrl: BOARD_URL,
hkubeSystemVersion,
kibanaUrl,
structuredPrefix,
grafanaUrl,
grafanaDashboardUrl,
dataSourceIsEnable,
keycloakEnable,
})
);
client.defaults.baseURL = SOCKET_URL;
return next(action);
}
if (
![
AT.REST_REQ_GET,
AT.REST_REQ_POST,
AT.REST_REQ_POST_FORM,
AT.REST_REQ_PUT,
AT.REST_REQ_DELETE,
].includes(action.type)
) {
return next(action);
}

if (!SOCKET_URL) return next(action);
pending(dispatch, 'pending', action);
if (action.type === AT.REST_REQ_GET) {
client
.get(action.payload.url)
.then(res => success(dispatch, res.data, action))
.catch(err => {
const response =
err.response && err.response.data && err.response.data.error;
reject(dispatch, response, action);
});
} else if (action.type === AT.REST_REQ_POST) {
client
.post(action.payload.url, action.payload.body)
.then(res => success(dispatch, res.data, action))
.catch(err => reject(dispatch, err.response.data.error, action));
} else if (action.type === AT.REST_REQ_POST_FORM) {
client
.post(action.payload.url, action.payload.formData)
.then(res => success(dispatch, res.data, action))
.catch(err => reject(dispatch, err.response.data.error, action));
} else if (action.type === AT.REST_REQ_PUT) {
client
.put(action.payload.url, action.payload.body)
.then(res => success(dispatch, res.data, action))
.catch(err => reject(dispatch, err.response.data.error, action));
} else if (action.type === AT.REST_REQ_DELETE) {
client
.delete(action.payload.url, { data: action.payload.body })
.then(res => success(dispatch, res.data, action))
.catch(err => reject(dispatch, err?.response?.data?.error, action));
}
return next(action);
}
if (
![
AT.REST_REQ_GET,
AT.REST_REQ_POST,
AT.REST_REQ_POST_FORM,
AT.REST_REQ_PUT,
AT.REST_REQ_DELETE,
].includes(action.type)
) {
return next(action);
}

if (!SOCKET_URL) return next(action);
pending(dispatch, 'pending', action);
if (action.type === AT.REST_REQ_GET) {
client
.get(action.payload.url)
.then(res => success(dispatch, res.data, action))
.catch(err => {
const response =
err.response && err.response.data && err.response.data.error;
reject(dispatch, response, action);
});
} else if (action.type === AT.REST_REQ_POST) {
client
.post(action.payload.url, action.payload.body)
.then(res => success(dispatch, res.data, action))
.catch(err => reject(dispatch, err.response.data.error, action));
} else if (action.type === AT.REST_REQ_POST_FORM) {
client
.post(action.payload.url, action.payload.formData)
.then(res => success(dispatch, res.data, action))
.catch(err => reject(dispatch, err.response.data.error, action));
} else if (action.type === AT.REST_REQ_PUT) {
client
.put(action.payload.url, action.payload.body)
.then(res => success(dispatch, res.data, action))
.catch(err => reject(dispatch, err.response.data.error, action));
} else if (action.type === AT.REST_REQ_DELETE) {
client
.delete(action.payload.url, { data: action.payload.body })
.then(res => success(dispatch, res.data, action))
.catch(err => reject(dispatch, err?.response?.data?.error, action));
}
return next(action);
};
};

export default restMiddleware;
2 changes: 2 additions & 0 deletions src/reducers/connection.reducer.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ const initialState = {
grafanaUrl: null,
grafanaDashboardUrl: null,
dataSourceIsEnable: null,
keycloakEnable: null,
hasData: false,
isSocketConnected: false,
};
Expand All @@ -38,6 +39,7 @@ const connection = createSlice({
* grafanaUrl?: string;
* grafanaDashboardUrl: string;
* dataSourceIsEnable?: boolean;
* keycloakEnable?: boolean;
* };
* }} action
*/
Expand Down
1 change: 1 addition & 0 deletions src/setupProxy.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ module.exports = app => {
grafanaUrl: process.env.GRAFANA_URL,
grafanaDashboardUrl: process.env.GRAFANA_URL,
dataSourceIsEnable: process.env.DATA_SOURCE_IS_ENABLE === 'true',
keycloakEnable: process.env.KEYCLOAK_ENABLE === 'true',
baseUrl: packageJSON.homepage,
monitorBackend: {
host: process.env.API_SERVER_BACKEND_HOST || 'localhost',
Expand Down

0 comments on commit 4456a82

Please sign in to comment.