diff --git a/src/components/blocks/Sbcs.js b/src/components/blocks/Sbcs.js index fa8e1b9..40093f0 100644 --- a/src/components/blocks/Sbcs.js +++ b/src/components/blocks/Sbcs.js @@ -1,21 +1,55 @@ -import React, { useState, useEffect } from 'react'; +import React, { useState, useEffect, useContext } from 'react'; import axios from 'axios'; +import { useHistory } from 'react-router-dom'; +import { NotificationDispatchContext } from '../../contexts/NotificationContext'; const Sbcs = () => { + let history = useHistory(); + const dispatch = useContext(NotificationDispatchContext); const [ sbcs, setSbcs ] = useState(''); useEffect(() => { const getAPIData = async () => { - const sbcResults = await axios({ - method: 'get', - baseURL: process.env.REACT_APP_API_BASE_URL, - url: '/Sbcs', - headers: { - Authorization: `Bearer ${localStorage.getItem('token')}`, - }, - }); - setSbcs(sbcResults.data); + try { + if (!localStorage.getItem('token')) { + history.push('/'); + dispatch({ + type: 'ADD', + level: 'error', + message: 'You must log in to view that page.', + }); + return; + } + const sbcResults = await axios({ + method: 'get', + baseURL: process.env.REACT_APP_API_BASE_URL, + url: '/Sbcs', + headers: { + Authorization: `Bearer ${localStorage.getItem('token')}`, + }, + }); + setSbcs(sbcResults.data); + } catch (err) { + if (err.response && err.response.status === 401) { + localStorage.removeItem('token'); + sessionStorage.clear(); + history.push('/'); + dispatch({ + type: 'ADD', + level: 'error', + message: 'Your session has expired. Please log in and try again.', + }); + } else { + dispatch({ + type: 'ADD', + level: 'error', + message: (err.response && err.response.data && err.response.data.msg) || 'Something went wrong, please try again.', + }); + console.log(err.response || err); + } + } }; getAPIData(); + // eslint-disable-next-line }, []); return ( diff --git a/src/components/forms/AccountForm.js b/src/components/forms/AccountForm.js index be546de..7b549a4 100644 --- a/src/components/forms/AccountForm.js +++ b/src/components/forms/AccountForm.js @@ -49,20 +49,19 @@ const AccountForm = props => { const [ accountSid, setAccountSid ] = useState(''); const [ serviceProviderSid, setServiceProviderSid ] = useState(''); - useEffect(() => { - if (!localStorage.getItem('token')) { - history.push('/'); - dispatch({ - type: 'ADD', - level: 'error', - message: 'You must log in to view that page.', - }); - } - }, [history, dispatch]); - useEffect(() => { const getAccounts = async () => { try { + if (!localStorage.getItem('token')) { + history.push('/'); + dispatch({ + type: 'ADD', + level: 'error', + message: 'You must log in to view that page.', + }); + return; + } + const accountsResponse = await axios({ method: 'get', baseURL: process.env.REACT_APP_API_BASE_URL, @@ -120,12 +119,29 @@ const AccountForm = props => { setShowLoader(false); } catch (err) { - setErrorMessage((err.response && err.response.data && err.response.data.msg) || 'Something went wrong, please try again'); - console.log(err.response || err); + if (err.response && err.response.status === 401) { + localStorage.removeItem('token'); + sessionStorage.clear(); + history.push('/'); + dispatch({ + type: 'ADD', + level: 'error', + message: 'Your session has expired. Please log in and try again.', + }); + } else { + dispatch({ + type: 'ADD', + level: 'error', + message: (err.response && err.response.data && err.response.data.msg) || 'Something went wrong, please try again.', + }); + console.log(err.response || err); + } + setShowLoader(false); } }; getAccounts(); - }, [props.account_sid, props.type, dispatch, history]); + // eslint-disable-next-line + }, []); useEffect(() => { if (props.type === 'add') { @@ -141,13 +157,29 @@ const AccountForm = props => { }); setServiceProviderSid(serviceProviders.data[0].service_provider_sid); } catch (err) { - setErrorMessage((err.response && err.response.data && err.response.data.msg) || 'Something went wrong, please try again'); - console.log(err.response || err); + if (err.response && err.response.status === 401) { + localStorage.removeItem('token'); + sessionStorage.clear(); + history.push('/'); + dispatch({ + type: 'ADD', + level: 'error', + message: 'Your session has expired. Please log in and try again.', + }); + } else { + dispatch({ + type: 'ADD', + level: 'error', + message: (err.response && err.response.data && err.response.data.msg) || 'Something went wrong, please try again.', + }); + console.log(err.response || err); + } } }; getServiceProviders(); } - }, [props.type]); + // eslint-disable-next-line + }, []); const handleSumit = async (e) => { try { @@ -277,7 +309,7 @@ const AccountForm = props => { message: 'Your session has expired. Please log in and try again.', }); } else { - setErrorMessage((err.response && err.response.data && err.response.data.msg) || 'Something went wrong, please try again'); + setErrorMessage((err.response && err.response.data && err.response.data.msg) || 'Something went wrong, please try again.'); console.log(err.response || err); } } diff --git a/src/components/forms/ApplicationForm.js b/src/components/forms/ApplicationForm.js index bbbe2a3..7bf1990 100644 --- a/src/components/forms/ApplicationForm.js +++ b/src/components/forms/ApplicationForm.js @@ -70,23 +70,19 @@ const ApplicationForm = props => { const [ applicationSid, setApplicationSid ] = useState([]); // See if user logged in - useEffect(() => { - if (!localStorage.getItem('token')) { - history.push('/'); - dispatch({ - type: 'ADD', - level: 'error', - message: 'You must log in to view that page.', - }); - } - }, [history, dispatch]); - - // Get Account info - // Account SID needed for setup/add (when creating a new application - // Account list needed add/edit useEffect(() => { const getAPIData = async () => { try { + if (!localStorage.getItem('token')) { + history.push('/'); + dispatch({ + type: 'ADD', + level: 'error', + message: 'You must log in to view that page.', + }); + return; + } + const accountsPromise = axios({ method: 'get', baseURL: process.env.REACT_APP_API_BASE_URL, @@ -194,13 +190,23 @@ const ApplicationForm = props => { } setShowLoader(false); } catch (err) { - setErrorMessage('Something went wrong, please try again'); - dispatch({ - type: 'ADD', - level: 'error', - message: (err.response && err.response.message) || 'Unable to get accounts', - }); - console.log(err.response || err); + if (err.response && err.response.status === 401) { + localStorage.removeItem('token'); + sessionStorage.clear(); + history.push('/'); + dispatch({ + type: 'ADD', + level: 'error', + message: 'Your session has expired. Please log in and try again.', + }); + } else { + dispatch({ + type: 'ADD', + level: 'error', + message: (err.response && err.response.data && err.response.data.msg) || 'Unable to get accounts', + }); + console.log(err.response || err); + } setShowLoader(false); } }; @@ -358,7 +364,7 @@ const ApplicationForm = props => { } } catch (err) { - if (err.response.status === 401) { + if (err.response && err.response.status === 401) { localStorage.removeItem('token'); sessionStorage.clear(); history.push('/'); @@ -368,7 +374,7 @@ const ApplicationForm = props => { message: 'Your session has expired. Please log in and try again.', }); } else { - setErrorMessage((err.response && err.response.data && err.response.data.msg) || 'Something went wrong, please try again'); + setErrorMessage((err.response && err.response.data && err.response.data.msg) || 'Something went wrong, please try again.'); console.log(err.response || err); } } diff --git a/src/components/forms/PhoneNumberForm.js b/src/components/forms/PhoneNumberForm.js index ac70d33..30169b6 100644 --- a/src/components/forms/PhoneNumberForm.js +++ b/src/components/forms/PhoneNumberForm.js @@ -42,20 +42,19 @@ const PhoneNumberForm = props => { const [ errorMessage, setErrorMessage ] = useState(''); // Check if user is logged in - useEffect(() => { - if (!localStorage.getItem('token')) { - history.push('/'); - dispatch({ - type: 'ADD', - level: 'error', - message: 'You must log in to view that page.', - }); - } - }, [history, dispatch]); - useEffect(() => { const getAPIData = async () => { try { + if (!localStorage.getItem('token')) { + history.push('/'); + dispatch({ + type: 'ADD', + level: 'error', + message: 'You must log in to view that page.', + }); + return; + } + const sipTrunksPromise = axios({ method: 'get', baseURL: process.env.REACT_APP_API_BASE_URL, @@ -160,12 +159,23 @@ const PhoneNumberForm = props => { setShowLoader(false); } catch (err) { - dispatch({ - type: 'ADD', - level: 'error', - message: (err.response && err.response.data && err.response.data.msg) || 'Unable to get necessary data', - }); - console.log(err.response || err); + if (err.response && err.response.status === 401) { + localStorage.removeItem('token'); + sessionStorage.clear(); + history.push('/'); + dispatch({ + type: 'ADD', + level: 'error', + message: 'Your session has expired. Please log in and try again.', + }); + } else { + dispatch({ + type: 'ADD', + level: 'error', + message: (err.response && err.response.data && err.response.data.msg) || 'Something went wrong, please try again.', + }); + console.log(err.response || err); + } setShowLoader(false); } }; @@ -281,7 +291,7 @@ const PhoneNumberForm = props => { } catch (err) { setErrorMessage( (err.response && err.response.data && err.response.data.msg) || - 'Something went wrong, please try again' + 'Something went wrong, please try again.' ); console.log(err.response || err); } diff --git a/src/components/forms/SipTrunkForm.js b/src/components/forms/SipTrunkForm.js index 6dd69ec..4b3b0e7 100644 --- a/src/components/forms/SipTrunkForm.js +++ b/src/components/forms/SipTrunkForm.js @@ -48,91 +48,111 @@ const SipTrunkForm = props => { const [ showLoader, setShowLoader ] = useState(true); const [ errorMessage, setErrorMessage ] = useState(''); - useEffect(() => { - if (!localStorage.getItem('token')) { - history.push('/'); - dispatch({ - type: 'ADD', - level: 'error', - message: 'You must log in to view that page.', - }); - } - }, [history, dispatch]); - useEffect(() => { const getAPIData = async () => { - const sipTrunksPromise = axios({ - method: 'get', - baseURL: process.env.REACT_APP_API_BASE_URL, - url: `/VoipCarriers`, - headers: { - Authorization: `Bearer ${localStorage.getItem('token')}`, - }, - }); - const sipGatewaysPromise = axios({ - method: 'get', - baseURL: process.env.REACT_APP_API_BASE_URL, - url: `/SipGateways`, - headers: { - Authorization: `Bearer ${localStorage.getItem('token')}`, - }, - }); - const promiseAllValues = await Promise.all([ - sipTrunksPromise, - sipGatewaysPromise, - ]); - - const allSipTrunks = promiseAllValues[0].data; - const allSipGateways = promiseAllValues[1].data; - - setSipTrunks(allSipTrunks); - - if (props.type === 'setup' && allSipTrunks.length > 1) { - history.push('/internal/sip-trunks'); + if (!localStorage.getItem('token')) { + history.push('/'); dispatch({ type: 'ADD', level: 'error', - message: 'That page is only accessible during setup.', + message: 'You must log in to view that page.', }); + return; } + try { + const sipTrunksPromise = axios({ + method: 'get', + baseURL: process.env.REACT_APP_API_BASE_URL, + url: `/VoipCarriers`, + headers: { + Authorization: `Bearer ${localStorage.getItem('token')}`, + }, + }); + const sipGatewaysPromise = axios({ + method: 'get', + baseURL: process.env.REACT_APP_API_BASE_URL, + url: `/SipGateways`, + headers: { + Authorization: `Bearer ${localStorage.getItem('token')}`, + }, + }); + const promiseAllValues = await Promise.all([ + sipTrunksPromise, + sipGatewaysPromise, + ]); - if (props.type === 'edit' || props.type === 'setup') { - const currentSipTrunk = props.type === 'edit' - ? allSipTrunks.filter(s => s.voip_carrier_sid === props.voip_carrier_sid) - : allSipTrunks; + const allSipTrunks = promiseAllValues[0].data; + const allSipGateways = promiseAllValues[1].data; - if (props.type === 'edit' && !currentSipTrunk.length) { + setSipTrunks(allSipTrunks); + + if (props.type === 'setup' && allSipTrunks.length > 1) { history.push('/internal/sip-trunks'); dispatch({ type: 'ADD', level: 'error', - message: 'That SIP trunk does not exist.', + message: 'That page is only accessible during setup.', }); - return; } - const currentSipGateways = allSipGateways.filter(s => { - return s.voip_carrier_sid === currentSipTrunk[0].voip_carrier_sid; - }); + if (props.type === 'edit' || props.type === 'setup') { + const currentSipTrunk = props.type === 'edit' + ? allSipTrunks.filter(s => s.voip_carrier_sid === props.voip_carrier_sid) + : allSipTrunks; - if (currentSipTrunk.length) { - setName(currentSipTrunk[0].name); - setDescription(currentSipTrunk[0].description); - setSipGateways(currentSipGateways.map(s => ({ - sip_gateway_sid: s.sip_gateway_sid, - ip: s.ipv4, - port: s.port, - inbound: s.inbound === 1, - outbound: s.outbound === 1, - invalidIp: false, - invalidPort: false, - invalidInbound: false, - invalidOutbound: false, - }))); - setSipTrunkSid(currentSipTrunk[0].voip_carrier_sid); + if (props.type === 'edit' && !currentSipTrunk.length) { + history.push('/internal/sip-trunks'); + dispatch({ + type: 'ADD', + level: 'error', + message: 'That SIP trunk does not exist.', + }); + return; + } + + const currentSipGateways = allSipGateways.filter(s => { + return s.voip_carrier_sid === currentSipTrunk[0].voip_carrier_sid; + }); + + if (currentSipTrunk.length) { + setName(currentSipTrunk[0].name); + setDescription(currentSipTrunk[0].description); + setSipGateways(currentSipGateways.map(s => ({ + sip_gateway_sid: s.sip_gateway_sid, + ip: s.ipv4, + port: s.port, + inbound: s.inbound === 1, + outbound: s.outbound === 1, + invalidIp: false, + invalidPort: false, + invalidInbound: false, + invalidOutbound: false, + }))); + setSipTrunkSid(currentSipTrunk[0].voip_carrier_sid); + } } + setShowLoader(false); + } catch (err) { + if (err.response && err.response.status === 401) { + localStorage.removeItem('token'); + sessionStorage.clear(); + history.push('/'); + dispatch({ + type: 'ADD', + level: 'error', + message: 'Your session has expired. Please log in and try again.', + }); + } else { + setErrorMessage('Something went wrong, please try again.'); + dispatch({ + type: 'ADD', + level: 'error', + message: (err.response && err.response.data && err.response.data.msg) || 'Unable to get accounts', + }); + console.log(err.response || err); + } + setShowLoader(false); } - setShowLoader(false); }; getAPIData(); // eslint-disable-next-line @@ -496,7 +516,7 @@ const SipTrunkForm = props => { message: 'Your session has expired. Please log in and try again.', }); } else { - setErrorMessage((err.response && err.response.data && err.response.data.msg) || 'Something went wrong, please try again'); + setErrorMessage((err.response && err.response.data && err.response.data.msg) || 'Something went wrong, please try again.'); console.log(err.response || err); } } diff --git a/src/components/pages/Login.js b/src/components/pages/Login.js index 972c9c0..1f25062 100644 --- a/src/components/pages/Login.js +++ b/src/components/pages/Login.js @@ -178,7 +178,7 @@ const Login = props => { } else { setErrorMessage( (err.response && err.response.data && err.response.data.msg) || - 'Something went wrong, please try again' + 'Something went wrong, please try again.' ); console.log(err.response || err); } diff --git a/src/components/pages/internal/AccountsList.js b/src/components/pages/internal/AccountsList.js index 800e1ac..07a8243 100644 --- a/src/components/pages/internal/AccountsList.js +++ b/src/components/pages/internal/AccountsList.js @@ -1,10 +1,12 @@ import React, { useEffect, useContext } from 'react'; +import { useHistory } from 'react-router-dom'; import axios from 'axios'; import { NotificationDispatchContext } from '../../../contexts/NotificationContext'; import InternalTemplate from '../../templates/InternalTemplate'; import TableContent from '../../blocks/TableContent.js'; const AccountsList = () => { + let history = useHistory(); const dispatch = useContext(NotificationDispatchContext); useEffect(() => { document.title = `Accounts | Jambonz | Open Source CPAAS`; @@ -15,6 +17,15 @@ const AccountsList = () => { //============================================================================= const getAccounts = async () => { try { + if (!localStorage.getItem('token')) { + history.push('/'); + dispatch({ + type: 'ADD', + level: 'error', + message: 'You must log in to view that page.', + }); + return; + } const results = await axios({ method: 'get', baseURL: process.env.REACT_APP_API_BASE_URL, @@ -34,12 +45,23 @@ const AccountsList = () => { })); return(simplifiedAccounts); } catch (err) { - dispatch({ - type: 'ADD', - level: 'error', - message: (err.response && err.response.data && err.response.data.msg) || 'Unable to get account data', - }); - console.log(err.response || err); + if (err.response && err.response.status === 401) { + localStorage.removeItem('token'); + sessionStorage.clear(); + history.push('/'); + dispatch({ + type: 'ADD', + level: 'error', + message: 'Your session has expired. Please log in and try again.', + }); + } else { + dispatch({ + type: 'ADD', + level: 'error', + message: (err.response && err.response.data && err.response.data.msg) || 'Unable to get account data', + }); + console.log(err.response || err); + } } }; @@ -59,6 +81,16 @@ const AccountsList = () => { }; const deleteAccount = async accountToDelete => { try { + if (!localStorage.getItem('token')) { + history.push('/'); + dispatch({ + type: 'ADD', + level: 'error', + message: 'You must log in to view that page.', + }); + return; + } + // Check if any application or phone number uses this account const applicationsPromise = axios({ method: 'get', @@ -143,12 +175,23 @@ const AccountsList = () => { }); return true; } catch (err) { - dispatch({ - type: 'ADD', - level: 'error', - message: (err.response && err.response.data && err.response.data.msg) || 'Unable to delete account', - }); - console.log(err.response || err); + if (err.response && err.response.status === 401) { + localStorage.removeItem('token'); + sessionStorage.clear(); + history.push('/'); + dispatch({ + type: 'ADD', + level: 'error', + message: 'Your session has expired. Please log in and try again.', + }); + } else { + dispatch({ + type: 'ADD', + level: 'error', + message: (err.response && err.response.data && err.response.data.msg) || 'Unable to delete account', + }); + console.log(err.response || err); + } return false; } }; diff --git a/src/components/pages/internal/ApplicationsList.js b/src/components/pages/internal/ApplicationsList.js index 2ed41ef..01ac666 100644 --- a/src/components/pages/internal/ApplicationsList.js +++ b/src/components/pages/internal/ApplicationsList.js @@ -1,10 +1,12 @@ import React, { useEffect, useContext } from 'react'; +import { useHistory } from 'react-router-dom'; import axios from 'axios'; import { NotificationDispatchContext } from '../../../contexts/NotificationContext'; import InternalTemplate from '../../templates/InternalTemplate'; import TableContent from '../../blocks/TableContent.js'; const ApplicationsList = () => { + let history = useHistory(); const dispatch = useContext(NotificationDispatchContext); useEffect(() => { document.title = `Applications | Jambonz | Open Source CPAAS`; @@ -15,6 +17,15 @@ const ApplicationsList = () => { //============================================================================= const getApplications = async () => { try { + if (!localStorage.getItem('token')) { + history.push('/'); + dispatch({ + type: 'ADD', + level: 'error', + message: 'You must log in to view that page.', + }); + return; + } const applicationsPromise = axios({ method: 'get', baseURL: process.env.REACT_APP_API_BASE_URL, @@ -53,12 +64,23 @@ const ApplicationsList = () => { }); return(simplifiedApplications); } catch (err) { - dispatch({ - type: 'ADD', - level: 'error', - message: (err.response && err.response.data && err.response.data.msg) || 'Unable to get application data', - }); - console.log(err.response || err); + if (err.response && err.response.status === 401) { + localStorage.removeItem('token'); + sessionStorage.clear(); + history.push('/'); + dispatch({ + type: 'ADD', + level: 'error', + message: 'Your session has expired. Please log in and try again.', + }); + } else { + dispatch({ + type: 'ADD', + level: 'error', + message: (err.response && err.response.data && err.response.data.msg) || 'Unable to get application data', + }); + console.log(err.response || err); + } } }; @@ -74,6 +96,15 @@ const ApplicationsList = () => { }; const deleteApplication = async applicationToDelete => { try { + if (!localStorage.getItem('token')) { + history.push('/'); + dispatch({ + type: 'ADD', + level: 'error', + message: 'You must log in to view that page.', + }); + return; + } await axios({ method: 'delete', baseURL: process.env.REACT_APP_API_BASE_URL, @@ -84,12 +115,23 @@ const ApplicationsList = () => { }); return true; } catch (err) { - dispatch({ - type: 'ADD', - level: 'error', - message: (err.response && err.response.data && err.response.data.msg) || 'Unable to get delete application', - }); - console.log(err.response || err); + if (err.response && err.response.status === 401) { + localStorage.removeItem('token'); + sessionStorage.clear(); + history.push('/'); + dispatch({ + type: 'ADD', + level: 'error', + message: 'Your session has expired. Please log in and try again.', + }); + } else { + dispatch({ + type: 'ADD', + level: 'error', + message: (err.response && err.response.data && err.response.data.msg) || 'Unable to delete application', + }); + console.log(err.response || err); + } return false; } }; diff --git a/src/components/pages/internal/PhoneNumbersList.js b/src/components/pages/internal/PhoneNumbersList.js index 4eb38d6..be4ac65 100644 --- a/src/components/pages/internal/PhoneNumbersList.js +++ b/src/components/pages/internal/PhoneNumbersList.js @@ -1,10 +1,12 @@ import React, { useState, useEffect, useContext } from 'react'; import axios from 'axios'; +import { useHistory } from 'react-router-dom'; import { NotificationDispatchContext } from '../../../contexts/NotificationContext'; import InternalTemplate from '../../templates/InternalTemplate'; import TableContent from '../../blocks/TableContent.js'; const PhoneNumbersList = () => { + let history = useHistory(); const dispatch = useContext(NotificationDispatchContext); useEffect(() => { document.title = `Phone Number Routing | Jambonz | Open Source CPAAS`; @@ -15,6 +17,15 @@ const PhoneNumbersList = () => { //============================================================================= const getPhoneNumbers = async () => { try { + if (!localStorage.getItem('token')) { + history.push('/'); + dispatch({ + type: 'ADD', + level: 'error', + message: 'You must log in to view that page.', + }); + return; + } const phoneNumbersPromise = axios({ method: 'get', baseURL: process.env.REACT_APP_API_BASE_URL, @@ -90,12 +101,23 @@ const PhoneNumbersList = () => { }); return(combinedData); } catch (err) { - dispatch({ - type: 'ADD', - level: 'error', - message: (err.response && err.response.data && err.response.data.msg) || 'Unable to get phone number data', - }); - console.log(err.response || err); + if (err.response && err.response.status === 401) { + localStorage.removeItem('token'); + sessionStorage.clear(); + history.push('/'); + dispatch({ + type: 'ADD', + level: 'error', + message: 'Your session has expired. Please log in and try again.', + }); + } else { + dispatch({ + type: 'ADD', + level: 'error', + message: (err.response && err.response.data && err.response.data.msg) || 'Unable to get phone number data', + }); + console.log(err.response || err); + } } }; @@ -112,6 +134,15 @@ const PhoneNumbersList = () => { }; const deletePhoneNumber = async phoneNumber => { try { + if (!localStorage.getItem('token')) { + history.push('/'); + dispatch({ + type: 'ADD', + level: 'error', + message: 'You must log in to view that page.', + }); + return; + } await axios({ method: 'delete', baseURL: process.env.REACT_APP_API_BASE_URL, @@ -122,12 +153,23 @@ const PhoneNumbersList = () => { }); return true; } catch (err) { - dispatch({ - type: 'ADD', - level: 'error', - message: (err.response && err.response.data && err.response.data.msg) || 'Unable to delete phone number', - }); - console.log(err.response || err); + if (err.response && err.response.status === 401) { + localStorage.removeItem('token'); + sessionStorage.clear(); + history.push('/'); + dispatch({ + type: 'ADD', + level: 'error', + message: 'Your session has expired. Please log in and try again.', + }); + } else { + dispatch({ + type: 'ADD', + level: 'error', + message: (err.response && err.response.data && err.response.data.msg) || 'Unable to delete phone number', + }); + console.log(err.response || err); + } return false; } }; @@ -138,6 +180,15 @@ const PhoneNumbersList = () => { const [ applications, setApplications ] = useState([]); const handleBulkEditApplications = async (phoneNumberSids, application) => { try { + if (!localStorage.getItem('token')) { + history.push('/'); + dispatch({ + type: 'ADD', + level: 'error', + message: 'You must log in to view that page.', + }); + return; + } for (const sid of phoneNumberSids) { await axios({ method: 'put', @@ -153,12 +204,23 @@ const PhoneNumbersList = () => { } return true; } catch (err) { - dispatch({ - type: 'ADD', - level: 'error', - message: (err.response && err.response.data && err.response.data.msg) || 'Something went wrong, please try again.', - }); - console.log(err.response || err); + if (err.response && err.response.status === 401) { + localStorage.removeItem('token'); + sessionStorage.clear(); + history.push('/'); + dispatch({ + type: 'ADD', + level: 'error', + message: 'Your session has expired. Please log in and try again.', + }); + } else { + dispatch({ + type: 'ADD', + level: 'error', + message: (err.response && err.response.data && err.response.data.msg) || 'Something went wrong, please try again.', + }); + console.log(err.response || err); + } return false; } }; diff --git a/src/components/pages/internal/SipTrunksList.js b/src/components/pages/internal/SipTrunksList.js index b5ae7e2..5767cac 100644 --- a/src/components/pages/internal/SipTrunksList.js +++ b/src/components/pages/internal/SipTrunksList.js @@ -1,11 +1,13 @@ import React, { useEffect, useContext } from 'react'; import axios from 'axios'; +import { useHistory } from 'react-router-dom'; import { NotificationDispatchContext } from '../../../contexts/NotificationContext'; import InternalTemplate from '../../templates/InternalTemplate'; import TableContent from '../../blocks/TableContent.js'; import Sbcs from '../../blocks/Sbcs'; const SipTrunksList = () => { + let history = useHistory(); const dispatch = useContext(NotificationDispatchContext); useEffect(() => { document.title = `SIP Trunks | Jambonz | Open Source CPAAS`; @@ -16,6 +18,16 @@ const SipTrunksList = () => { //============================================================================= const getSipTrunks = async () => { try { + if (!localStorage.getItem('token')) { + history.push('/'); + dispatch({ + type: 'ADD', + level: 'error', + message: 'You must log in to view that page.', + }); + return; + } + // Get all SIP trunks const trunkResults = await axios({ method: 'get', @@ -56,12 +68,23 @@ const SipTrunksList = () => { })); return(simplifiedSipTrunks); } catch (err) { - dispatch({ - type: 'ADD', - level: 'error', - message: (err.response && err.response.data && err.response.data.msg) || 'Unable to get SIP trunk data', - }); - console.log(err.response || err); + if (err.response && err.response.status === 401) { + localStorage.removeItem('token'); + sessionStorage.clear(); + history.push('/'); + dispatch({ + type: 'ADD', + level: 'error', + message: 'Your session has expired. Please log in and try again.', + }); + } else { + dispatch({ + type: 'ADD', + level: 'error', + message: (err.response && err.response.data && err.response.data.msg) || 'Unable to get SIP trunk data', + }); + console.log(err.response || err); + } } }; @@ -83,6 +106,15 @@ const SipTrunksList = () => { }; const deleteSipTrunk = async sipTrunkToDelete => { try { + if (!localStorage.getItem('token')) { + history.push('/'); + dispatch({ + type: 'ADD', + level: 'error', + message: 'You must log in to view that page.', + }); + return; + } // delete associated gateways for (const sid of sipTrunkToDelete.gatewaysSid) { await axios({ @@ -105,12 +137,23 @@ const SipTrunksList = () => { }); return true; } catch (err) { - dispatch({ - type: 'ADD', - level: 'error', - message: (err.response && err.response.data && err.response.data.msg) || 'Unable to delete SIP trunk', - }); - console.log(err.response || err); + if (err.response && err.response.status === 401) { + localStorage.removeItem('token'); + sessionStorage.clear(); + history.push('/'); + dispatch({ + type: 'ADD', + level: 'error', + message: 'Your session has expired. Please log in and try again.', + }); + } else { + dispatch({ + type: 'ADD', + level: 'error', + message: (err.response && err.response.data && err.response.data.msg) || 'Unable to delete SIP trunk', + }); + console.log(err.response || err); + } return false; } };