diff --git a/admin-ui/app/routes/Pages/ByeBye.js b/admin-ui/app/routes/Pages/ByeBye.js index b290dd9db..990db124a 100644 --- a/admin-ui/app/routes/Pages/ByeBye.js +++ b/admin-ui/app/routes/Pages/ByeBye.js @@ -1,33 +1,36 @@ -import React, { useEffect } from 'react' -import { useDispatch, useSelector } from 'react-redux' -import { uuidv4 } from 'Utils/Util' -import { EmptyLayout, Label } from 'Components' -import { logoutUser } from 'Redux/features/logoutSlice' -import { useTranslation } from 'react-i18next' +import React, { useEffect } from "react"; +import { useDispatch, useSelector } from "react-redux"; +import { uuidv4 } from "Utils/Util"; +import { EmptyLayout, Label } from "Components"; +import { logoutUser } from "Redux/features/logoutSlice"; +import { useTranslation } from "react-i18next"; +import { setAuthState } from "../../redux/features/authSlice"; function ByeBye() { - const config = useSelector((state) => state.authReducer.config) - const dispatch = useDispatch() - const { t } = useTranslation() + const config = useSelector((state) => state.authReducer.config); + + const dispatch = useDispatch(); + const { t } = useTranslation(); + useEffect(() => { - if (config) { - const state = uuidv4() - const sessionEndpoint = `${config.endSessionEndpoint}?state=${state}&post_logout_redirect_uri=${config.postLogoutRedirectUri}` - window.location.href = sessionEndpoint + dispatch(setAuthState(false)); + if (config && Object.keys(config).length > 0) { + const state = uuidv4(); + const sessionEndpoint = `${config.endSessionEndpoint}?state=${state}&post_logout_redirect_uri=${config.postLogoutRedirectUri}`; + dispatch(logoutUser()); + window.location.href = sessionEndpoint; } - - dispatch(logoutUser()) - }, []) + }, []); return (
-
- ) + ); } -export default ByeBye +export default ByeBye; diff --git a/admin-ui/app/routes/Pages/ProtectRoutes.js b/admin-ui/app/routes/Pages/ProtectRoutes.js new file mode 100644 index 000000000..658072e77 --- /dev/null +++ b/admin-ui/app/routes/Pages/ProtectRoutes.js @@ -0,0 +1,24 @@ +import React from "react"; +import PropTypes from "prop-types"; +import { Navigate } from "react-router-dom"; +import { useSelector } from "react-redux"; + +const ProtectedRoute = ({ children }) => { + const isAuthenticated = useSelector( + (state) => state.authReducer.isAuthenticated + ); + + if (!isAuthenticated) { + // Redirect to login if the user is not authenticated + return ; + } + + // Render the protected content + return children; +}; + +ProtectedRoute.propTypes = { + children: PropTypes.node.isRequired, // Enforce that children must be a React node +}; + +export default ProtectedRoute; diff --git a/admin-ui/app/routes/index.js b/admin-ui/app/routes/index.js index 6c1aef6a3..9001d7733 100755 --- a/admin-ui/app/routes/index.js +++ b/admin-ui/app/routes/index.js @@ -1,56 +1,82 @@ -import React, { useState, useEffect, lazy, Suspense } from 'react' -import { Route, Routes, Navigate } from 'react-router-dom' -import { useSelector } from 'react-redux' +import React, { useState, useEffect, lazy, Suspense } from "react"; +import { Route, Routes, Navigate } from "react-router-dom"; +import { useSelector } from "react-redux"; -import NavbarOnly from './Layouts/NavbarOnly' -import SidebarDefault from './Layouts/SidebarDefault' -import SidebarA from './Layouts/SidebarA' -import SidebarWithNavbar from './Layouts/SidebarWithNavbar' +import NavbarOnly from "./Layouts/NavbarOnly"; +import SidebarDefault from "./Layouts/SidebarDefault"; +import SidebarA from "./Layouts/SidebarA"; +import SidebarWithNavbar from "./Layouts/SidebarWithNavbar"; // ----------- Layout Imports --------------- -import { processRoutes } from 'Plugins/PluginMenuResolver' -import { hasPermission } from 'Utils/PermChecker' -import GluuSuspenseLoader from 'Routes/Apps/Gluu/GluuSuspenseLoader' +import { processRoutes } from "Plugins/PluginMenuResolver"; +import { hasPermission } from "Utils/PermChecker"; +import GluuSuspenseLoader from "Routes/Apps/Gluu/GluuSuspenseLoader"; -import { uuidv4 } from 'Utils/Util' +import { uuidv4 } from "Utils/Util"; +import ProtectedRoute from "./Pages/ProtectRoutes"; -const DashboardPage = lazy(() => import('./Dashboards/DashboardPage')) -const HealthPage = lazy(() => import('./Health/HealthPage')) -const LicenseDetailsPage = lazy(() => import('./License/LicenseDetailsPage')) -const ProfilePage = lazy(() => import('./Apps/Profile/ProfilePage')) -const Gluu404Error = lazy(() => import('./Apps/Gluu/Gluu404Error')) -const ByeBye = lazy(() => import('./Pages/ByeBye')) -const GluuNavBar = lazy(() => import('./Apps/Gluu/GluuNavBar')) -const DefaultSidebar = lazy(() => import('./../layout/components/DefaultSidebar')) +const DashboardPage = lazy(() => import("./Dashboards/DashboardPage")); +const HealthPage = lazy(() => import("./Health/HealthPage")); +const LicenseDetailsPage = lazy(() => import("./License/LicenseDetailsPage")); +const ProfilePage = lazy(() => import("./Apps/Profile/ProfilePage")); +const Gluu404Error = lazy(() => import("./Apps/Gluu/Gluu404Error")); +const ByeBye = lazy(() => import("./Pages/ByeBye")); +const GluuNavBar = lazy(() => import("./Apps/Gluu/GluuNavBar")); +const DefaultSidebar = lazy(() => + import("./../layout/components/DefaultSidebar") +); //------ Route Definitions -------- // eslint-disable-next-line no-unused-vars export const RoutedContent = () => { const scopes = useSelector((state) => - state.token ? state.token.scopes : state.authReducer.permissions, - ) - const [pluginMenus, setPluginMenus] = useState([]) + state.token ? state.token.scopes : state.authReducer.permissions + ); + const [pluginMenus, setPluginMenus] = useState([]); useEffect(() => { - setPluginMenus(processRoutes()) - }, []) + setPluginMenus(processRoutes()); + }, []); const { userinfo } = useSelector((state) => state.authReducer); - const config = useSelector((state) => state.authReducer.config) + const config = useSelector((state) => state.authReducer.config); useEffect(() => { if (!userinfo.jansAdminUIRole || userinfo.jansAdminUIRole.length === 0) { - const state = uuidv4() - const sessionEndpoint = `${config.endSessionEndpoint}?state=${state}&post_logout_redirect_uri=${config.postLogoutRedirectUri}` - window.location.href = sessionEndpoint + const state = uuidv4(); + const sessionEndpoint = `${config.endSessionEndpoint}?state=${state}&post_logout_redirect_uri=${config.postLogoutRedirectUri}`; + window.location.href = sessionEndpoint; } }, [userinfo]); return ( - }>} /> + + }> + + + + } + /> } /> - }>} /> - }>} /> + }> + + + } + /> + }> + + + } + /> {/* Layouts */} } /> } /> @@ -65,18 +91,42 @@ export const RoutedContent = () => { (item, key) => hasPermission(scopes, item.permission) && ( } /> - ), + ) )} {/* Pages Routes */} - }>} path="/profile" /> - }>} path="/logout" /> - }>} path="/error-404" /> + }> + + + } + path="/profile" + /> + + + }> + + + + } + /> + }> + + + } + path="/error-404" + /> {/* 404 */} } /> - ) -} + ); +}; //------ Custom Layout Parts -------- export const RoutedNavbars = () => ( @@ -84,14 +134,27 @@ export const RoutedNavbars = () => ( }> + }> + + } /> -) +); export const RoutedSidebars = () => ( - }>} /> + }> + + + } + /> -) +); diff --git a/admin-ui/app/utils/AppAuthProvider.js b/admin-ui/app/utils/AppAuthProvider.js index d4f94db00..ebd49e2fc 100755 --- a/admin-ui/app/utils/AppAuthProvider.js +++ b/admin-ui/app/utils/AppAuthProvider.js @@ -44,6 +44,7 @@ export default function AppAuthProvider(props) { token, issuer, } = useSelector((state) => state.authReducer) + const { islicenseCheckResultLoaded, isLicenseActivationResultLoaded, @@ -65,6 +66,7 @@ export default function AppAuthProvider(props) { dispatch(checkLicensePresent()) } }, [isConfigValid]) + const [error, setError] = useState(null) const [code, setCode] = useState(null) @@ -115,6 +117,7 @@ export default function AppAuthProvider(props) { }, [isLicenseValid]) useEffect(() => { + console.log("Heloooo") const tokenHandler = new BaseTokenRequestHandler(new FetchRequestor()) const authorizationHandler = new RedirectRequestHandler( new LocalStorageBackend(),