diff --git a/src/components/layout/Main.js b/src/components/layout/Main.js
index 2303946..35f83bf 100644
--- a/src/components/layout/Main.js
+++ b/src/components/layout/Main.js
@@ -2,6 +2,8 @@ import React from "react";
import ApplicationStepper from "./stepper/ApplicationStepper";
import Switcher from "./Switcher";
import { makeStyles } from "@material-ui/core/styles";
+import { useAuthorizationToken } from "../../hooks";
+import LoginContainer from "../../features/login/components/LoginContainer";
const useStyles = makeStyles(() => ({
app: {
@@ -19,18 +21,34 @@ const useStyles = makeStyles(() => ({
justifyContent: "center",
fontSize: "calc(10px + 2vmin)",
color: "white"
+ },
+ appLoginOnly: {
+ textAlign: "center",
+ backgroundColor: "#282c34",
+ minHeight: "100vh",
+ display: "flex",
+ flexDirection: "column",
+ justifyContent: "center"
}
}));
const Main = () => {
const classes = useStyles();
+ const { tokenIsValid } = useAuthorizationToken();
+ const _tokenIsValid = tokenIsValid();
return (
-
-
-
-
-
+
+ {_tokenIsValid ? (
+ <>
+
+
+
+
+ >
+ ) : (
+
+ )}
);
};
diff --git a/src/features/login/components/LoginContainer.js b/src/features/login/components/LoginContainer.js
index a23f64c..c2a33d7 100644
--- a/src/features/login/components/LoginContainer.js
+++ b/src/features/login/components/LoginContainer.js
@@ -23,7 +23,9 @@ const LoginContainer = () => {
try {
const response = await authenticate(userName, password);
- if (response.status === "BAD_CREDENTIALS") {
+ if (response.status === "SUCCESS") {
+ dispatchActions.onAuthorizationTokenChange(response.token);
+ } else if (response.status === "BAD_CREDENTIALS") {
error(t("Login.IncorrectCredentials"));
}
} catch (err) {
diff --git a/src/hooks/index.js b/src/hooks/index.js
index bc64692..7b4b325 100644
--- a/src/hooks/index.js
+++ b/src/hooks/index.js
@@ -1 +1,2 @@
export { useToast } from "./useToast";
+export { useAuthorizationToken } from "./useAuthorizationToken";
diff --git a/src/hooks/useAuthorizationToken.js b/src/hooks/useAuthorizationToken.js
new file mode 100644
index 0000000..ee97a0b
--- /dev/null
+++ b/src/hooks/useAuthorizationToken.js
@@ -0,0 +1,19 @@
+import { useContext } from "react";
+import { ApplicationStateContext } from "../state/ApplicationContexts";
+
+export const useAuthorizationToken = () => {
+ const state = useContext(ApplicationStateContext);
+
+ const getToken = () => state.security.authorization.token;
+ const tokenIsValid = () => {
+ const token = getToken();
+ if (!token) {
+ return false;
+ }
+
+ const valid = new Date(token.validUntil) >= new Date();
+ return valid;
+ };
+
+ return { getToken, tokenIsValid };
+};
diff --git a/src/state/initialState.js b/src/state/initialState.js
index 754d0e3..20f3db8 100644
--- a/src/state/initialState.js
+++ b/src/state/initialState.js
@@ -3,6 +3,11 @@ export const initialState = {
userName: "",
password: ""
},
+ security: {
+ authorization: {
+ token: null
+ }
+ },
network: {
test: ""
}
diff --git a/src/state/reducer.js b/src/state/reducer.js
index 2462eda..28c279c 100644
--- a/src/state/reducer.js
+++ b/src/state/reducer.js
@@ -20,6 +20,19 @@ export function reducer(state, action) {
}
};
}
+ case "onAuthorizationTokenChange": {
+ const { token } = action.payload;
+ return {
+ ...state,
+ security: {
+ ...state.security,
+ authorization: {
+ ...state.security.authorization,
+ token
+ }
+ }
+ };
+ }
default: {
return state;
}
@@ -30,5 +43,7 @@ export const dispatchActions = dispatch => ({
onCredentialsChange: (prop, value) =>
dispatch({ type: "onCredentialsChange", payload: { prop, value } }),
onNetworkChange: (prop, value) =>
- dispatch({ type: "onNetworkChange", payload: { prop, value } })
+ dispatch({ type: "onNetworkChange", payload: { prop, value } }),
+ onAuthorizationTokenChange: token =>
+ dispatch({ type: "onAuthorizationTokenChange", payload: { token } })
});