| @@ -22,6 +22,7 @@ import { | |||
| MY_OFFERS_PAGE, | |||
| // PRICES_PAGE, | |||
| ABOUT_PAGE, | |||
| ADMIN_HOME_PAGE, | |||
| // POLICY_PRIVACY_PAGE, | |||
| } from "./constants/pages"; | |||
| import LoginPage from "./pages/LoginPage/LoginPage"; | |||
| @@ -44,6 +45,7 @@ import MyOffers from "./pages/MyOffers/MyOffers"; | |||
| // import PricesPage from "./pages/Prices/PricesPage"; | |||
| import AboutPage from "./pages/About/AboutPage"; | |||
| import AuthRoute from "./components/Router/AuthRoute"; | |||
| import AdminHomePage from "./pages/AdminHomePage/AdminHomePage"; | |||
| // import PrivacyPolicyPage from "./pages/PrivacyPolicy/PrivacyPolicyPage"; | |||
| const AppRoutes = () => { | |||
| @@ -52,6 +54,7 @@ const AppRoutes = () => { | |||
| <Route exact path={BASE_PAGE} component={HomePage} /> | |||
| <AuthRoute exact path={LOGIN_PAGE} component={LoginPage} /> | |||
| <AuthRoute exact path={ADMIN_LOGIN_PAGE} component={AdminLoginPage} /> | |||
| <Route path={ADMIN_HOME_PAGE} component={AdminHomePage} /> | |||
| <Route path={NOT_FOUND_PAGE} component={NotFoundPage} /> | |||
| <Route path={ERROR_PAGE} component={ErrorPage} /> | |||
| <AuthRoute path={REGISTER_SUCCESSFUL_PAGE} component={RegisterSuccessful} /> | |||
| @@ -8,7 +8,7 @@ import { | |||
| fetchLogin, | |||
| } from "../../store/actions/login/loginActions"; | |||
| import { selectLoginError } from "../../store/selectors/loginSelectors"; | |||
| import { HOME_PAGE } from "../../constants/pages"; | |||
| import { HOME_PAGE, ADMIN_HOME_PAGE } from "../../constants/pages"; | |||
| import { ReactComponent as Logo } from "../../assets/images/svg/logo-vertical.svg"; | |||
| import { ReactComponent as LogoAdmin } from "../../assets/images/svg/logo-vertical-admin.svg"; | |||
| import { LoginPageContainer, LoginFormContainer } from "./Login.styled"; | |||
| @@ -37,6 +37,12 @@ const Login = (props) => { | |||
| // Api response callback function on success | |||
| const handleApiResponseSuccess = () => { | |||
| props.isAdmin ? history.push({ | |||
| pathname: ADMIN_HOME_PAGE, | |||
| state: { | |||
| from: history.location.pathname, | |||
| }, | |||
| }) : | |||
| history.push({ | |||
| pathname: HOME_PAGE, | |||
| state: { | |||
| @@ -76,6 +82,7 @@ const Login = (props) => { | |||
| password, | |||
| handleApiResponseSuccess, | |||
| handleApiResponseError, | |||
| isAdmin: props.isAdmin | |||
| }) | |||
| ); | |||
| } | |||
| @@ -18,3 +18,4 @@ export const MY_OFFERS_PAGE = "/myoffers" | |||
| export const ABOUT_PAGE = "/about"; | |||
| export const PRICES_PAGE = "/prices"; | |||
| export const POLICY_PRIVACY_PAGE = "/policy"; | |||
| export const ADMIN_HOME_PAGE = "/admin/home"; | |||
| @@ -0,0 +1,14 @@ | |||
| import React from 'react' | |||
| import PropTypes from 'prop-types' | |||
| const AdminHomePage = () => { | |||
| return ( | |||
| <div>Admin home page brateee</div> | |||
| ) | |||
| } | |||
| AdminHomePage.propTypes = { | |||
| children: PropTypes.node, | |||
| } | |||
| export default AdminHomePage | |||
| @@ -39,12 +39,17 @@ import { clearChat } from "../actions/chat/chatActions"; | |||
| function* fetchLogin({ payload }) { | |||
| try { | |||
| const isAdmin = payload.isAdmin; | |||
| // delete payload.isAdmin | |||
| const { data } = yield call(attemptLogin, payload); | |||
| if (data.token) { | |||
| const token = data.token; | |||
| const refresh = data.refresh; | |||
| const tokenDecoded = jwt.decode(token); | |||
| const refreshDecoded = jwt.decode(refresh); | |||
| if(isAdmin && !tokenDecoded.roles.includes("Admin")){ | |||
| throw Error("Not an admin login on /login"); | |||
| } | |||
| const accessToken = { | |||
| token: token, | |||
| exp: tokenDecoded.exp, | |||
| @@ -65,6 +70,9 @@ function* fetchLogin({ payload }) { | |||
| } | |||
| } | |||
| } catch (e) { | |||
| if(e.message){ | |||
| yield put(fetchUserError(e.message)); | |||
| } | |||
| if (e.response && e.response.data) { | |||
| if (payload.handleApiResponseError) { | |||
| yield call(payload.handleApiResponseError, e.response.status); | |||
| @@ -1,4 +1,5 @@ | |||
| import { | |||
| ADMIN_LOGIN_PAGE, | |||
| FORGOT_PASSWORD_MAIL_SENT, | |||
| FORGOT_PASSWORD_PAGE, | |||
| LOGIN_PAGE, | |||
| @@ -33,7 +34,8 @@ export const isAuthRoute = () => { | |||
| routeMatches(REGISTER_SUCCESSFUL_PAGE) || | |||
| routeMatches(FORGOT_PASSWORD_PAGE) || | |||
| routeMatches(FORGOT_PASSWORD_MAIL_SENT) || | |||
| routeMatches(RESET_PASSWORD_PAGE) | |||
| routeMatches(RESET_PASSWORD_PAGE) || | |||
| routeMatches(ADMIN_LOGIN_PAGE) | |||
| ) { | |||
| return true; | |||
| } | |||