diff --git a/src/api/SwaggerApi.js b/src/api/SwaggerApi.js index e523f4da0b3873dea0bcd2705d3a77b602bb3a84..3e286ce4c9024c560b073c61ab6aaa96ccd98d71 100644 --- a/src/api/SwaggerApi.js +++ b/src/api/SwaggerApi.js @@ -34,19 +34,20 @@ export function useAPI() { } export const apiContext = createContext(null); -export const userContext = createContext({ user: null, login: ()=>{}, logout: ()=>{} }); +export const userContext = createContext({ user: null, userRoles:[], getUserRoles: ()=>{}, login: ()=>{}, logout: ()=>{} }); export function UserProvider({ children }) { const [user, setUser] = useState(); + const [userRoles, getUserRoles] = useUserRoles(); const [userInfo, getUserInfo] = useUserInfo(); - const [isLoggedIn, loginFcn] = useLogin(); + const [loginResponse, loginFcn] = useLogin(); const logoutFcn = useLogout(); const history = useHistory(); console.log("rendering UserProvider") console.log(user); - useEffect(getUserInfo, [isLoggedIn, getUserInfo]); + useEffect(getUserInfo, [Boolean(loginResponse), getUserInfo]); useEffect(() => userInfo && setUser(userInfo), [setUser, userInfo]); const logout = async () => { @@ -58,12 +59,14 @@ export function UserProvider({ children }) { const login = async (username, password) => { console.log("Logging in!"); await loginFcn(username, password); + await getUserRoles(); setUser(await getUserInfo()); console.log(history); + console.log(userRoles); } return ( - <userContext.Provider value={{ user, login, logout }}> + <userContext.Provider value={{ user, userRoles, getUserRoles, login, logout }}> {children} </userContext.Provider> ); @@ -372,21 +375,21 @@ export function useHostIOCList(id) { } export function unpackLogin(loginResponse) { - console.log(loginResponse) - const isLoggedIn = Boolean(loginResponse); - return isLoggedIn; + return { ...loginResponse }; } export function useLogin() { const api = useContext(apiContext); - const callLogin = (u, p) => api.apis.Authentication.login({}, { - requestBody: { - userName: u, - password: p - } - }); - const method = callAndUnpack(callLogin, unpackLogin) - return useAsync({ fcn: method, call: false }) + const method = callAndUnpack( + (username, password) => api.apis.Authentication.login({},{ + requestBody: { + userName: username, + password: password + } + }), + unpackLogin + ); + return useAsync({ fcn: method, call: false }); } export function unpackUser(user) { @@ -399,6 +402,16 @@ export function useUserInfo() { return useAsync({ fcn: method, call: false }); } +export function unpackUserRoles(roles) { + return { ...roles }; +} + +export function useUserRoles() { + const api = useContext(apiContext); + const method = callAndUnpack(api.apis.Authentication.getUserRoles, unpackUserRoles); + return useAsync({ fcn: method, call: false }); +} + export function useLogout() { const api = useContext(apiContext); const method = callAndUnpack(api.apis.Authentication.logout); diff --git a/src/components/auth/TokenRenew.js b/src/components/auth/TokenRenew.js index bfeca4503b9d2ee05662612abe72f02c440da1f0..46cf2374701dd9e8ef9f07176b3832989bf55072 100644 --- a/src/components/auth/TokenRenew.js +++ b/src/components/auth/TokenRenew.js @@ -2,17 +2,18 @@ import { useEffect, useContext } from "react"; import { useRenewToken, userContext } from "../../api/SwaggerApi"; export default function TokenRenew() { - const { user } = useContext(userContext); + const { user, getUserRoles } = useContext(userContext); const renewToken = useRenewToken(); useEffect(() => { - const interval = setInterval(() => { + const interval = setInterval(async () => { if(user) { - renewToken(); + await renewToken(); + getUserRoles(); } }, `${window.TOKEN_RENEW_INTERVAL}`); return () => clearInterval(interval); - }, [renewToken, user]); + }, [renewToken, user, getUserRoles]); return null; } \ No newline at end of file diff --git a/src/views/home/HomeView.js b/src/views/home/HomeView.js index bdb7d054222a98c32727ead6da759464f41cec2d..29d4d6002bd2f1e23c7e898f0c7d2e71fae0cad0 100644 --- a/src/views/home/HomeView.js +++ b/src/views/home/HomeView.js @@ -18,7 +18,7 @@ export function HomeView() { const [iocs, getIocs] = useIOCSearch(); const [query, setQuery] = useState(); const [iocFormOpen, setIOCFormOpen] = useState(false); - const {user} = useContext(userContext); + const {user, userRoles} = useContext(userContext); const classes = useStyles(); useEffect(() => getIocs(`${query}`), [query, getIocs]); @@ -34,6 +34,8 @@ export function HomeView() { function preFilter(iocs) { console.log(iocs); + console.log(user); + console.log(userRoles); const abcIOCs = iocs.filter((ioc) => ioc.owner === user?.loginName).sort((a, b) => a.latestVersion.namingName.localeCompare(b.latestVersion.namingName)); return abcIOCs; }