118 lines
3.0 KiB
JavaScript
118 lines
3.0 KiB
JavaScript
import { produce } from "immer";
|
|
|
|
import jwtDecode from "jwt-decode";
|
|
import Cookies from "universal-cookie";
|
|
|
|
const defaultState = {
|
|
error: "",
|
|
loading: false,
|
|
username: "",
|
|
isAdmin: false,
|
|
isActivated: false,
|
|
isTokenSet: false,
|
|
isLogged: false,
|
|
polochonToken: "",
|
|
polochonUrl: "",
|
|
polochonName: "",
|
|
polochonId: "",
|
|
polochonActivated: false,
|
|
tokens: [],
|
|
modules: {},
|
|
modulesLoading: false,
|
|
};
|
|
|
|
const logoutUser = () => {
|
|
localStorage.removeItem("token");
|
|
const cookies = new Cookies();
|
|
cookies.remove("token");
|
|
};
|
|
|
|
const updateFromToken = (draft, token) => {
|
|
const decodedToken = jwtDecode(token);
|
|
localStorage.setItem("token", token);
|
|
|
|
const cookies = new Cookies();
|
|
cookies.set("token", token);
|
|
|
|
draft.error = "";
|
|
draft.isLogged = true;
|
|
draft.isTokenSet = true;
|
|
draft.isAdmin = decodedToken.isAdmin;
|
|
draft.isActivated = decodedToken.isActivated;
|
|
draft.username = decodedToken.username;
|
|
};
|
|
|
|
// Initial state is the default state with the info from the current user
|
|
// token
|
|
let initialState = defaultState;
|
|
const token = localStorage.getItem("token");
|
|
if (token && token !== "") {
|
|
updateFromToken(initialState, token);
|
|
}
|
|
|
|
export default (state = initialState, action) =>
|
|
produce(state, (draft) => {
|
|
switch (action.type) {
|
|
case "USER_SIGNUP_PENDING":
|
|
case "USER_LOGIN_PENDING":
|
|
case "GET_USER_PENDING":
|
|
case "GET_USER_TOKENS_PENDING":
|
|
draft.loading = true;
|
|
break;
|
|
|
|
case "USER_LOGIN_ERROR":
|
|
logoutUser();
|
|
draft.isLogged = false;
|
|
draft.loading = false;
|
|
draft.error = action.payload.response.message;
|
|
break;
|
|
|
|
case "USER_LOGIN_FULFILLED":
|
|
draft.loading = false;
|
|
updateFromToken(draft, action.payload.response.data.token);
|
|
break;
|
|
|
|
case "USER_SIGNUP_ERROR":
|
|
draft.error = action.payload.response.message;
|
|
draft.loading = false;
|
|
break;
|
|
|
|
case "USER_SIGNUP_FULFILLED":
|
|
draft.error = "";
|
|
draft.loading = false;
|
|
break;
|
|
|
|
case "USER_SET_TOKEN":
|
|
updateFromToken(draft, action.payload.token);
|
|
break;
|
|
|
|
case "USER_LOGOUT":
|
|
logoutUser();
|
|
draft.isLogged = false;
|
|
break;
|
|
|
|
case "GET_USER_FULFILLED":
|
|
draft.polochonToken = action.payload.response.data.token;
|
|
draft.polochonUrl = action.payload.response.data.url;
|
|
draft.polochonName = action.payload.response.data.name;
|
|
draft.polochonId = action.payload.response.data.id;
|
|
draft.polochonActivated = action.payload.response.data.activated;
|
|
draft.loading = false;
|
|
break;
|
|
|
|
case "GET_USER_TOKENS_FULFILLED":
|
|
draft.tokens = action.payload.response.data;
|
|
draft.loading = false;
|
|
break;
|
|
|
|
case "GET_USER_MODULES_PENDING":
|
|
draft.modulesLoading = true;
|
|
break;
|
|
|
|
case "GET_USER_MODULES_FULFILLED":
|
|
draft.modules = action.payload.response.data;
|
|
draft.modulesLoading = false;
|
|
break;
|
|
}
|
|
});
|