diff --git a/web/js/react/src/ControlPanelService/Backup.js b/web/js/react/src/ControlPanelService/Backup.js
index 42c5d37f3..92ee7654f 100644
--- a/web/js/react/src/ControlPanelService/Backup.js
+++ b/web/js/react/src/ControlPanelService/Backup.js
@@ -3,7 +3,7 @@ import { getAuthToken } from "src/utils/token";
const BASE_URL = window.location.origin;
const webApiUri = '/api/v1/list/backup/index.php';
-const scheduleBackupUri = '/schedule/backup/';
+const scheduleBackupUri = '/api/v1/schedule/restore/';
const backupDetailsUri = '/api/v1/list/backup/index.php';
const backupExclusionsUri = '/api/v1/list/backup/exclusions/index.php';
const backupExclusionsInfoUri = '/api/v1/edit/backup/exclusions/index.php';
diff --git a/web/js/react/src/ControlPanelService/Dns.js b/web/js/react/src/ControlPanelService/Dns.js
index d9258cb90..fb60f3ba6 100644
--- a/web/js/react/src/ControlPanelService/Dns.js
+++ b/web/js/react/src/ControlPanelService/Dns.js
@@ -19,13 +19,26 @@ export const getDNSRecordInfo = (domain, recordId) => {
return axios.get(`${BASE_URL}${updateDNSUri}?domain=${domain}&record_id=${recordId}`);
}
-export const bulkAction = (action, domainNameSystems) => {
+export const bulkDomainAction = (action, domains) => {
const formData = new FormData();
formData.append("action", action);
formData.append("token", getAuthToken());
- domainNameSystems.forEach(domainNameSystem => {
- formData.append("domain[]", domainNameSystem);
+ domains.forEach(record => {
+ formData.append("domain[]", record);
+ });
+
+ return axios.post(BASE_URL + '/api/v1/bulk/dns/', formData);
+};
+
+export const bulkAction = (action, records, domain) => {
+ const formData = new FormData();
+ formData.append("action", action);
+ formData.append("token", getAuthToken());
+ formData.append("domain", domain);
+
+ records.forEach(record => {
+ formData.append("record[]", record);
});
return axios.post(BASE_URL + '/api/v1/bulk/dns/', formData);
diff --git a/web/js/react/src/ControlPanelService/Firewalls.js b/web/js/react/src/ControlPanelService/Firewalls.js
index e882c67e1..3b2e003fd 100644
--- a/web/js/react/src/ControlPanelService/Firewalls.js
+++ b/web/js/react/src/ControlPanelService/Firewalls.js
@@ -17,16 +17,17 @@ export const getBanList = () => {
return axios.get(BASE_URL + banListUri);
}
-export const bulkAction = (action, firewalls) => {
+export const bulkAction = (action, ips, banIps) => {
const formData = new FormData();
formData.append("action", action);
formData.append("token", getAuthToken());
- firewalls.forEach(firewall => {
- formData.append("rule[]", firewall);
+ ips.forEach(ip => {
+ const banIp = banIps.find(banIp => banIp.NAME === ip);
+ formData.append("ipchain[]", `${ip}:${banIp['CHAIN']}`);
});
- return axios.post(BASE_URL + '/api/v1/bulk/firewall/', formData);
+ return axios.post(BASE_URL + '/api/v1/bulk/firewall/banlist/', formData);
};
export const handleAction = uri => {
@@ -54,11 +55,13 @@ export const getBanIps = data => {
export const addBanIp = (data) => {
let formDataObject = new FormData();
+ formDataObject.append('token', getAuthToken());
+
for (let key in data) {
formDataObject.append(key, data[key]);
}
- return axios.get(BASE_URL + addBanIpsUri, {
+ return axios.post(BASE_URL + addBanIpsUri, formDataObject, {
params: {
token: getAuthToken()
}
diff --git a/web/js/react/src/ControlPanelService/Search.js b/web/js/react/src/ControlPanelService/Search.js
index 187859720..c0f2fc884 100644
--- a/web/js/react/src/ControlPanelService/Search.js
+++ b/web/js/react/src/ControlPanelService/Search.js
@@ -2,7 +2,7 @@ import axios from "axios";
import { getAuthToken } from "src/utils/token";
const BASE_URL = window.location.origin;
-const webApiUri = '/search/search.php';
+const webApiUri = '/api/v1/search/';
export const getSearchResultsList = term => {
return axios.get(BASE_URL + webApiUri + '?q=' + term);
diff --git a/web/js/react/src/ControlPanelService/Updates.js b/web/js/react/src/ControlPanelService/Updates.js
index 334cf7d26..be5478e4c 100644
--- a/web/js/react/src/ControlPanelService/Updates.js
+++ b/web/js/react/src/ControlPanelService/Updates.js
@@ -1,8 +1,8 @@
import axios from "axios";
import { getAuthToken } from "src/utils/token";
-const deleteAutoUpdateUri = '/delete/cron/autoupdate/';
-const addAutoUpdateUri = '/add/cron/autoupdate/';
+const deleteAutoUpdateUri = '/api/v1/delete/cron/autoupdate/';
+const addAutoUpdateUri = '/api/v1/add/cron/autoupdate/';
const webApiUri = '/api/v1/list/updates/index.php';
const BASE_URL = window.location.origin;
diff --git a/web/js/react/src/actions/MenuCounters/menuCounterActions.js b/web/js/react/src/actions/MenuCounters/menuCounterActions.js
new file mode 100644
index 000000000..8dc5fcf5b
--- /dev/null
+++ b/web/js/react/src/actions/MenuCounters/menuCounterActions.js
@@ -0,0 +1,27 @@
+import { REFRESH_COUNTERS } from './menuCounterTypes';
+import { checkAuth } from 'src/services/session';
+import { setAuthToken } from 'src/utils/token';
+
+export const refreshCounters = () => (dispatch, getState) => {
+ return new Promise((resolve, reject) => {
+ checkAuth()
+ .then(res => {
+ const { data, token } = res.data;
+
+ if (token) setAuthToken(token);
+
+ dispatch({
+ type: REFRESH_COUNTERS,
+ value: {
+ user: data
+ }
+ });
+
+ resolve(token);
+ })
+ .catch(err => {
+ reject();
+ console.error(err);
+ });
+ });
+}
diff --git a/web/js/react/src/actions/MenuCounters/menuCounterTypes.js b/web/js/react/src/actions/MenuCounters/menuCounterTypes.js
new file mode 100644
index 000000000..e5175d6b0
--- /dev/null
+++ b/web/js/react/src/actions/MenuCounters/menuCounterTypes.js
@@ -0,0 +1 @@
+export const REFRESH_COUNTERS = 'REFRESH_COUNTERS';
\ No newline at end of file
diff --git a/web/js/react/src/actions/Session/sessionActions.js b/web/js/react/src/actions/Session/sessionActions.js
index 8fedafc35..b1cd92651 100644
--- a/web/js/react/src/actions/Session/sessionActions.js
+++ b/web/js/react/src/actions/Session/sessionActions.js
@@ -2,6 +2,7 @@ import { LOGIN, LOGOUT, LOGGED_OUT_AS, CHECK_AUTH, RESET_PASSWORD } from './sess
import { checkAuth, signIn, signInAs, signOut } from 'src/services/session';
import { resetPassword } from 'src/ControlPanelService/ResetPassword';
import { resetAuthToken, setAuthToken } from 'src/utils/token';
+import { REFRESH_COUNTERS } from '../MenuCounters/menuCounterTypes';
const LOGOUT_RESPONSE = 'logged_out';
const LOGOUT_AS_RESPONSE = 'logged_out_as';
@@ -21,10 +22,15 @@ export const login = (user, password) => dispatch => {
session,
i18n: i18n || {},
userName: user,
- user: data,
error
},
});
+ dispatch({
+ type: REFRESH_COUNTERS,
+ value: {
+ user: data,
+ }
+ });
resolve(token);
}, (error) => {
reject(error);
@@ -44,10 +50,15 @@ export const reset = ({ user = '', code = '', password = '', password_confirm =
panel,
session,
userName: user,
- user: {},
error
},
});
+ dispatch({
+ type: REFRESH_COUNTERS,
+ value: {
+ user: {},
+ }
+ });
resolve(token);
}, (error) => {
reject(error);
@@ -65,7 +76,6 @@ export const loginAs = username => dispatch => {
type: LOGIN,
value: {
userName: user,
- user: data,
i18n,
session,
panel,
@@ -73,6 +83,12 @@ export const loginAs = username => dispatch => {
error
}
});
+ dispatch({
+ type: REFRESH_COUNTERS,
+ value: {
+ user: data,
+ }
+ });
resolve(token);
}, (error) => {
@@ -94,7 +110,6 @@ export const logout = () => (dispatch, getState) => {
type: LOGOUT,
value: {
userName: '',
- user: {},
token: '',
panel: {},
session: {},
@@ -102,6 +117,12 @@ export const logout = () => (dispatch, getState) => {
error,
},
});
+ dispatch({
+ type: REFRESH_COUNTERS,
+ value: {
+ user: {},
+ }
+ });
resolve();
} else if (logout_response === LOGOUT_AS_RESPONSE) {
@@ -109,7 +130,6 @@ export const logout = () => (dispatch, getState) => {
type: LOGGED_OUT_AS,
value: {
userName,
- user,
session,
panel,
token: '',
@@ -117,6 +137,12 @@ export const logout = () => (dispatch, getState) => {
error,
},
});
+ dispatch({
+ type: REFRESH_COUNTERS,
+ value: {
+ user,
+ }
+ });
resolve();
} else {
@@ -135,11 +161,12 @@ export const checkAuthHandler = () => (dispatch, getState) => {
.then(res => {
const { user, data, session, panel, error, i18n, token } = res.data;
+ if (token) setAuthToken(token);
+
dispatch({
type: CHECK_AUTH,
value: {
userName: user,
- user: data,
i18n,
session,
panel,
@@ -147,6 +174,12 @@ export const checkAuthHandler = () => (dispatch, getState) => {
error
}
});
+ dispatch({
+ type: REFRESH_COUNTERS,
+ value: {
+ user: data,
+ }
+ });
resolve(token);
})
diff --git a/web/js/react/src/components/Backup/Backup.jsx b/web/js/react/src/components/Backup/Backup.jsx
index e0e02c08a..b1c8d0d18 100644
--- a/web/js/react/src/components/Backup/Backup.jsx
+++ b/web/js/react/src/components/Backup/Backup.jsx
@@ -57,7 +57,7 @@ const Backup = props => {
{data.UPDATED === 'no' &&
}
-
+
{i18n.download}
{data.FOCUSED ? D : }
diff --git a/web/js/react/src/components/Backup/Exclusion/Edit/index.jsx b/web/js/react/src/components/Backup/Exclusion/Edit/index.jsx
index 12dfba2f8..9b2d7e970 100644
--- a/web/js/react/src/components/Backup/Exclusion/Edit/index.jsx
+++ b/web/js/react/src/components/Backup/Exclusion/Edit/index.jsx
@@ -11,6 +11,7 @@ import { useDispatch, useSelector } from 'react-redux';
import { Helmet } from 'react-helmet';
import './style.scss';
+import HtmlParser from 'react-html-parser';
const EditBackupExclusions = () => {
const token = localStorage.getItem("token");
@@ -90,7 +91,7 @@ const EditBackupExclusions = () => {
- {state.okMessage ? : ''}
+ {state.okMessage ? : ''} {HtmlParser(state.okMessage)}
diff --git a/web/js/react/src/components/ControlPanel/AddItemLayout/AddItemLayout.scss b/web/js/react/src/components/ControlPanel/AddItemLayout/AddItemLayout.scss
index 7a7b32498..e3b839798 100644
--- a/web/js/react/src/components/ControlPanel/AddItemLayout/AddItemLayout.scss
+++ b/web/js/react/src/components/ControlPanel/AddItemLayout/AddItemLayout.scss
@@ -32,7 +32,7 @@ $errorColor: #BE5ABF;
div.error,
div.success {
- width: fit-content !important;
+ width: max-content !important;
span {
font-weight: bold;
@@ -40,6 +40,7 @@ $errorColor: #BE5ABF;
svg {
font-size: 13px;
+ margin-right: 10px;
}
}
@@ -151,10 +152,24 @@ $errorColor: #BE5ABF;
}
}
- textarea {
- &:focus {
- background: #D7F9FF;
- }
+ input:-webkit-autofill,
+ input:-webkit-autofill:hover,
+ input:-webkit-autofill:focus,
+ input:-webkit-autofill:active {
+ background-color: $primaryLight;
+ border-color: $primaryActive;
+ filter: none;
+ box-shadow: none;
+ }
+
+ input:autofill,
+ input:autofill:hover,
+ input:autofill:focus,
+ input:autofill:active {
+ background-color: $primaryLight;
+ border-color: $primaryActive;
+ filter: none;
+ box-shadow: none;
}
button {
@@ -180,7 +195,7 @@ $errorColor: #BE5ABF;
&:active {
box-shadow: unset;
border-color: $primaryActive;
- background: #D7F9FF;
+ background: #d7dcef9e;
}
}
@@ -192,7 +207,7 @@ $errorColor: #BE5ABF;
label.label-wrapper {
display: flex;
align-items: flex-end;
- width: fit-content;
+ width: max-content;
span {
font-weight: normal;
diff --git a/web/js/react/src/components/ControlPanel/AddItemLayout/Form/TextInputWithExtraButton/TextInputWithExtraButton.jsx b/web/js/react/src/components/ControlPanel/AddItemLayout/Form/TextInputWithExtraButton/TextInputWithExtraButton.jsx
index 7895e3cb1..bab4c6698 100644
--- a/web/js/react/src/components/ControlPanel/AddItemLayout/Form/TextInputWithExtraButton/TextInputWithExtraButton.jsx
+++ b/web/js/react/src/components/ControlPanel/AddItemLayout/Form/TextInputWithExtraButton/TextInputWithExtraButton.jsx
@@ -7,11 +7,7 @@ const TextInputWithExtraButton = props => {
});
useEffect(() => {
- if (props.value !== 'unlimited') {
- setState({ ...state, value: state.previousValue });
- } else {
- setState({ ...state, value: props.value });
- }
+ setState({ ...state, value: props.value });
}, [props.value]);
useEffect(() => {
diff --git a/web/js/react/src/components/ControlPanel/AddItemLayout/Form/TextInputWithTextOnTheRight/TextInputWithTextOnTheRight.jsx b/web/js/react/src/components/ControlPanel/AddItemLayout/Form/TextInputWithTextOnTheRight/TextInputWithTextOnTheRight.jsx
index b6b35ba83..1b7f9d0d6 100644
--- a/web/js/react/src/components/ControlPanel/AddItemLayout/Form/TextInputWithTextOnTheRight/TextInputWithTextOnTheRight.jsx
+++ b/web/js/react/src/components/ControlPanel/AddItemLayout/Form/TextInputWithTextOnTheRight/TextInputWithTextOnTheRight.jsx
@@ -27,7 +27,7 @@ const TextInputWithTextOnTheRight = ({ id, title, name, defaultValue = '', optio
onChange={event => setInputValue(event.target.value)}
disabled={disabled}
name={name} />
- {`admin_${inputValue}`}
+ {`${inputValue}`}
);
diff --git a/web/js/react/src/components/CronJob/Add/AddCronJob.jsx b/web/js/react/src/components/CronJob/Add/AddCronJob.jsx
index ed4bfdec5..e9d52c12c 100644
--- a/web/js/react/src/components/CronJob/Add/AddCronJob.jsx
+++ b/web/js/react/src/components/CronJob/Add/AddCronJob.jsx
@@ -12,6 +12,8 @@ import { useDispatch, useSelector } from 'react-redux';
import './AddCronJob.scss';
import { Helmet } from 'react-helmet';
+import { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions';
+import HtmlParser from 'react-html-parser';
const AddCronJob = props => {
const { i18n } = useSelector(state => state.session);
@@ -46,18 +48,17 @@ const AddCronJob = props => {
if (Object.keys(newCronJob).length !== 0 && newCronJob.constructor === Object) {
setState({ ...state, loading: true });
-
addCronJob(newCronJob)
.then(result => {
if (result.status === 200) {
- const { error_msg, ok_msg } = result.data;
+ const { error_msg: errorMessage, ok_msg: okMessage } = result.data;
- if (error_msg) {
- setState({ ...state, errorMessage: error_msg, okMessage: '', loading: false });
- } else if (ok_msg) {
- setState({ ...state, errorMessage: '', okMessage: ok_msg, loading: false });
+ if (errorMessage) {
+ setState({ ...state, errorMessage, okMessage, loading: false });
} else {
- setState({ ...state, loading: false })
+ dispatch(refreshCounters()).then(() => {
+ setState({ ...state, okMessage, errorMessage: '', loading: false });
+ });
}
}
})
@@ -100,7 +101,7 @@ const AddCronJob = props => {
{state.okMessage ? : ''}
-
+ {HtmlParser(state.okMessage)}
diff --git a/web/js/react/src/components/CronJob/CronJob.jsx b/web/js/react/src/components/CronJob/CronJob.jsx
index 253e9a8cc..0d4c8099d 100644
--- a/web/js/react/src/components/CronJob/CronJob.jsx
+++ b/web/js/react/src/components/CronJob/CronJob.jsx
@@ -25,11 +25,11 @@ const CronJob = props => {
const handleSuspend = () => {
let suspendedStatus = data.SUSPENDED === 'yes' ? 'unsuspend' : 'suspend' === 'yes' ? 'unsuspend' : 'suspend';
- props.handleModal(data.suspend_conf, `/${suspendedStatus}/cron/index.php?job=${data.NAME}`);
+ props.handleModal(data.suspend_conf, `/api/v1/${suspendedStatus}/cron/index.php?job=${data.NAME}`);
}
const handleDelete = () => {
- props.handleModal(data.delete_conf, `/delete/cron/index.php?job=${data.NAME}`);
+ props.handleModal(data.delete_conf, `/api/v1/delete/cron/index.php?job=${data.NAME}`);
}
return (
diff --git a/web/js/react/src/components/CronJob/Edit/EditCronJob.jsx b/web/js/react/src/components/CronJob/Edit/EditCronJob.jsx
index ad0274727..376832fd7 100644
--- a/web/js/react/src/components/CronJob/Edit/EditCronJob.jsx
+++ b/web/js/react/src/components/CronJob/Edit/EditCronJob.jsx
@@ -13,6 +13,9 @@ import QS from 'qs';
import './EditCronJob.scss';
import { Helmet } from 'react-helmet';
+import { checkAuthHandler } from 'src/actions/Session/sessionActions';
+import { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions';
+import HtmlParser from 'react-html-parser';
const EditMail = props => {
const token = localStorage.getItem("token");
@@ -79,14 +82,14 @@ const EditMail = props => {
updateCronJob(updatedJob, state.data.job)
.then(result => {
if (result.status === 200) {
- const { error_msg, ok_msg } = result.data;
+ const { error_msg: errorMessage, ok_msg: okMessage } = result.data;
- if (error_msg) {
- setState({ ...state, errorMessage: error_msg, okMessage: '', loading: false });
- } else if (ok_msg) {
- setState({ ...state, errorMessage: '', okMessage: ok_msg, loading: false });
+ if (errorMessage) {
+ setState({ ...state, errorMessage, okMessage, loading: false });
} else {
- setState({ ...state, loading: false });
+ dispatch(refreshCounters()).then(() => {
+ setState({ ...state, okMessage, errorMessage: '', loading: false });
+ });
}
}
})
@@ -128,7 +131,7 @@ const EditMail = props => {
- {state.okMessage ? : ''}
+ {state.okMessage ? : ''} {HtmlParser(state.okMessage)}
diff --git a/web/js/react/src/components/DNSRecord/Add/AddDNSRecord.jsx b/web/js/react/src/components/DNSRecord/Add/AddDNSRecord.jsx
index 24030276a..084a7b580 100644
--- a/web/js/react/src/components/DNSRecord/Add/AddDNSRecord.jsx
+++ b/web/js/react/src/components/DNSRecord/Add/AddDNSRecord.jsx
@@ -5,7 +5,6 @@ import SelectInput from 'src/components/ControlPanel/AddItemLayout/Form/SelectIn
import TextInput from 'src/components/ControlPanel/AddItemLayout/Form/TextInput/TextInput';
import AddItemLayout from '../../ControlPanel/AddItemLayout/AddItemLayout';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
-import { addMail } from '../../../ControlPanelService/Mail';
import { addDomainNameSystemRecord } from '../../../ControlPanelService/Dns';
import Toolbar from '../../MainNav/Toolbar/Toolbar';
import { useHistory } from 'react-router-dom';
@@ -14,6 +13,8 @@ import { useDispatch, useSelector } from 'react-redux';
import './AddDNSRecord.scss'
import { Helmet } from 'react-helmet';
+import { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions';
+import HtmlParser from 'react-html-parser';
export default function AddDNSRecord(props) {
const { i18n } = useSelector(state => state.session);
@@ -61,16 +62,18 @@ export default function AddDNSRecord(props) {
newDnsRecord['v_domain'] = props.domain;
if (Object.keys(newDnsRecord).length !== 0 && newDnsRecord.constructor === Object) {
- setState({ loading: true });
+ setState({ ...state, loading: true });
addDomainNameSystemRecord(newDnsRecord)
.then(result => {
if (result.status === 200) {
- const { error_msg, ok_msg } = result.data;
+ const { error_msg: errorMessage, ok_msg: okMessage } = result.data;
- if (error_msg) {
- setState({ ...state, errorMessage: error_msg, okMessage: '', loading: false });
- } else if (ok_msg) {
- setState({ ...state, errorMessage: '', okMessage: ok_msg, loading: false });
+ if (errorMessage) {
+ setState({ ...state, errorMessage, okMessage, loading: false });
+ } else {
+ dispatch(refreshCounters()).then(() => {
+ setState({ ...state, okMessage, errorMessage: '', loading: false });
+ });
}
}
})
@@ -94,7 +97,7 @@ export default function AddDNSRecord(props) {
{state.okMessage ? : ''}
-
+ {HtmlParser(state.okMessage)}
diff --git a/web/js/react/src/components/DNSRecord/DNSRecord.jsx b/web/js/react/src/components/DNSRecord/DNSRecord.jsx
index e6b19784c..11170ad8b 100644
--- a/web/js/react/src/components/DNSRecord/DNSRecord.jsx
+++ b/web/js/react/src/components/DNSRecord/DNSRecord.jsx
@@ -7,7 +7,6 @@ import { useSelector } from 'react-redux';
export default function DnsRecord({ data, domain, handleModal, ...props }) {
const { i18n } = useSelector(state => state.session);
- const token = localStorage.getItem("token");
const toggleFav = (starred) => {
if (starred) {
@@ -25,6 +24,10 @@ export default function DnsRecord({ data, domain, handleModal, ...props }) {
handleModal(data.delete_conf, `/api/v1/delete/dns/?domain=${domain}&record_id=${data.ID}`);
}
+ const handleSuspend = () => {
+ handleModal(data.suspend_conf, `/api/v1/${data.suspend_action}/dns/?domain=${domain}&record_id=${data.ID}`);
+ }
+
return (
+
+
+
+
- {state.okMessage ? : ''}
+ {state.okMessage ? : ''} {HtmlParser(state.okMessage)}
diff --git a/web/js/react/src/components/Database/Add/AddDatabase.jsx b/web/js/react/src/components/Database/Add/AddDatabase.jsx
index fc86b619b..31ae1b7cf 100644
--- a/web/js/react/src/components/Database/Add/AddDatabase.jsx
+++ b/web/js/react/src/components/Database/Add/AddDatabase.jsx
@@ -1,4 +1,4 @@
-import React, { useEffect, useState } from 'react';
+import React, { memo, useEffect, useState } from 'react';
import { addActiveElement, removeFocusedElement } from "../../../actions/MainNavigation/mainNavigationActions";
import { dbCharsets, addDatabase, getDbOptionalInfo } from '../../../ControlPanelService/Db';
@@ -9,11 +9,12 @@ import Toolbar from '../../MainNav/Toolbar/Toolbar';
import { useHistory } from 'react-router-dom';
import Spinner from '../../Spinner/Spinner';
import { useDispatch, useSelector } from 'react-redux';
-
-import './AddDatabase.scss'
import { Helmet } from 'react-helmet';
+import { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions';
+import HtmlParser from 'react-html-parser';
+import './AddDatabase.scss'
-const AddDatabase = props => {
+const AddDatabase = memo(props => {
const { i18n } = useSelector(state => state.session);
const token = localStorage.getItem("token");
const dispatch = useDispatch();
@@ -91,23 +92,22 @@ const AddDatabase = props => {
newDatabase[name] = value;
}
- newDatabase['v_database'] = `${state.user}_${state.databaseInputValue}`;
- newDatabase['v_dbuser'] = `${state.user}_${state.databaseUserInputValue}`;
+ newDatabase['v_database'] = state.databaseInputValue;
+ newDatabase['v_dbuser'] = state.databaseUserInputValue;
if (Object.keys(newDatabase).length !== 0 && newDatabase.constructor === Object) {
setState({ ...state, loading: true });
-
addDatabase(newDatabase)
.then(result => {
if (result.status === 200) {
- const { error_msg, ok_msg } = result.data;
+ const { error_msg: errorMessage, ok_msg: okMessage } = result.data;
- if (error_msg) {
- setState({ ...state, errorMessage: error_msg, okMessage: '', loading: false });
- } else if (ok_msg) {
- setState({ ...state, errorMessage: '', okMessage: ok_msg, loading: false });
+ if (errorMessage) {
+ setState({ ...state, errorMessage, okMessage: '', loading: false });
} else {
- setState({ ...state, loading: false })
+ dispatch(refreshCounters()).then(() => {
+ setState({ ...state, okMessage, errorMessage: '', loading: false });
+ });
}
}
})
@@ -131,7 +131,7 @@ const AddDatabase = props => {
{state.okMessage ? : ''}
-
+ {HtmlParser(state.okMessage)}
@@ -141,7 +141,7 @@ const AddDatabase = props => {
-
+ {HtmlParser(state.prefixI18N)}
@@ -215,6 +215,6 @@ const AddDatabase = props => {
);
-}
+});
-export default AddDatabase;
\ No newline at end of file
+export default AddDatabase;
diff --git a/web/js/react/src/components/Database/Edit/EditDatabase.jsx b/web/js/react/src/components/Database/Edit/EditDatabase.jsx
index f67575aa4..e1babafd5 100644
--- a/web/js/react/src/components/Database/Edit/EditDatabase.jsx
+++ b/web/js/react/src/components/Database/Edit/EditDatabase.jsx
@@ -14,15 +14,18 @@ import QS from 'qs';
import './EditDatabase.scss';
import { Helmet } from 'react-helmet';
+import { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions';
+import HtmlParser from 'react-html-parser';
const EditDatabase = props => {
const token = localStorage.getItem("token");
- const { i18n } = useSelector(state => state.session);
+ const { i18n, userName } = useSelector(state => state.session);
const history = useHistory();
const dispatch = useDispatch();
const [state, setState] = useState({
data: {},
loading: false,
+ databaseUserInputValue: '',
errorMessage: '',
okMessage: ''
});
@@ -42,6 +45,7 @@ const EditDatabase = props => {
setState({
...state,
data: response.data,
+ databaseUserInputValue: response.data.dbuser.split('_').splice(1).join('_'),
errorMessage: response.data['error_msg'],
okMessage: response.data['ok_msg'],
loading: false
@@ -60,6 +64,7 @@ const EditDatabase = props => {
}
updatedDatabase['v_database'] = state.data.database;
+ updatedDatabase['v_dbuser'] = `${userName}_${state.databaseUserInputValue}`;
if (Object.keys(updatedDatabase).length !== 0 && updatedDatabase.constructor === Object) {
setState({ ...state, loading: true });
@@ -67,14 +72,14 @@ const EditDatabase = props => {
updateDatabase(updatedDatabase, state.data.database)
.then(result => {
if (result.status === 200) {
- const { error_msg, ok_msg } = result.data;
+ const { error_msg: errorMessage, ok_msg: okMessage } = result.data;
- if (error_msg) {
- setState({ ...state, errorMessage: error_msg, okMessage: '', loading: false });
- } else if (ok_msg) {
- setState({ ...state, errorMessage: '', okMessage: ok_msg, loading: false });
+ if (errorMessage) {
+ setState({ ...state, errorMessage, okMessage, loading: false });
} else {
- setState({ ...state, loading: false });
+ dispatch(refreshCounters()).then(() => {
+ setState({ ...state, okMessage, errorMessage: '', loading: false });
+ });
}
}
})
@@ -82,6 +87,10 @@ const EditDatabase = props => {
}
}
+ const databaseUserInputHandler = value => {
+ setState({ ...state, databaseUserInputValue: value });
+ }
+
return (
@@ -97,7 +106,7 @@ const EditDatabase = props => {
- {state.okMessage ? : ''}
+ {state.okMessage ? : ''} {HtmlParser(state.okMessage)}
@@ -109,7 +118,21 @@ const EditDatabase = props => {
-
+
+
+
+
+
+ databaseUserInputHandler(event.target.value)}
+ name="v_dbuser" />
+ {`${userName}_${state.databaseUserInputValue}`}
+
+
diff --git a/web/js/react/src/components/Database/Edit/EditDatabase.scss b/web/js/react/src/components/Database/Edit/EditDatabase.scss
index e69de29bb..eef3c7568 100644
--- a/web/js/react/src/components/Database/Edit/EditDatabase.scss
+++ b/web/js/react/src/components/Database/Edit/EditDatabase.scss
@@ -0,0 +1,9 @@
+.input-wrapper {
+ display: flex;
+ align-items: center;
+
+ span.italic {
+ margin-left: 15px;
+ color: #777;
+ }
+}
\ No newline at end of file
diff --git a/web/js/react/src/components/DomainNameSystem/Add/AddDomainNameSystem.jsx b/web/js/react/src/components/DomainNameSystem/Add/AddDomainNameSystem.jsx
index a5f8a1d45..7a3c61c1c 100644
--- a/web/js/react/src/components/DomainNameSystem/Add/AddDomainNameSystem.jsx
+++ b/web/js/react/src/components/DomainNameSystem/Add/AddDomainNameSystem.jsx
@@ -13,6 +13,8 @@ import './AddDomainNameSystem.scss';
import AdvancedOptions from './AdvancedOptions/AdvancedOptions';
import { addDomainNameSystem } from '../../../ControlPanelService/Dns';
import { Helmet } from 'react-helmet';
+import { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions';
+import HtmlParser from 'react-html-parser';
const AddDomainNameSystem = props => {
const { i18n } = useSelector(state => state.session);
@@ -33,7 +35,6 @@ const AddDomainNameSystem = props => {
dispatch(removeFocusedElement());
setState({ ...state, loading: true });
-
getUserNS()
.then(result => {
if (result.data.length) {
@@ -53,18 +54,17 @@ const AddDomainNameSystem = props => {
if (Object.keys(domainNameSystem).length !== 0 && domainNameSystem.constructor === Object) {
setState({ ...state, loading: true });
-
addDomainNameSystem(domainNameSystem)
.then(result => {
if (result.status === 200) {
- const { error_msg, ok_msg } = result.data;
+ const { error_msg: errorMessage, ok_msg: okMessage } = result.data;
- if (error_msg) {
- setState({ ...state, errorMessage: error_msg, okMessage: '', loading: false });
- } else if (ok_msg) {
- setState({ ...state, errorMessage: '', okMessage: ok_msg, loading: false });
+ if (errorMessage) {
+ setState({ ...state, errorMessage, okMessage, loading: false });
} else {
- setState({ ...state, loading: false });
+ dispatch(refreshCounters()).then(() => {
+ setState({ ...state, okMessage, errorMessage: '', loading: false });
+ });
}
}
})
@@ -98,7 +98,7 @@ const AddDomainNameSystem = props => {
{state.okMessage ? : ''}
-
+ {HtmlParser(state.okMessage)}
diff --git a/web/js/react/src/components/DomainNameSystem/Edit/EditDomainNameSystem.jsx b/web/js/react/src/components/DomainNameSystem/Edit/EditDomainNameSystem.jsx
index 9c250c6d3..98916e6d0 100644
--- a/web/js/react/src/components/DomainNameSystem/Edit/EditDomainNameSystem.jsx
+++ b/web/js/react/src/components/DomainNameSystem/Edit/EditDomainNameSystem.jsx
@@ -13,6 +13,9 @@ import QS from 'qs';
import './EditDomainNameSystem.scss';
import { Helmet } from 'react-helmet';
+import { checkAuthHandler } from 'src/actions/Session/sessionActions';
+import { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions';
+import HtmlParser from 'react-html-parser';
const EditDomainNameSystem = props => {
const token = localStorage.getItem("token");
@@ -66,14 +69,14 @@ const EditDomainNameSystem = props => {
updateDNS(updatedDomain, state.data.domain)
.then(result => {
if (result.status === 200) {
- const { error_msg, ok_msg } = result.data;
+ const { error_msg: errorMessage, ok_msg: okMessage } = result.data;
- if (error_msg) {
- setState({ ...state, errorMessage: error_msg, okMessage: '', loading: false });
- } else if (ok_msg) {
- setState({ ...state, errorMessage: '', okMessage: ok_msg, loading: false });
+ if (errorMessage) {
+ setState({ ...state, errorMessage, okMessage, loading: false });
} else {
- setState({ ...state, loading: false });
+ dispatch(refreshCounters()).then(() => {
+ setState({ ...state, okMessage, errorMessage: '', loading: false });
+ });
}
}
})
@@ -96,7 +99,7 @@ const EditDomainNameSystem = props => {
- {state.okMessage ? : ''}
+ {state.okMessage ? : ''} {HtmlParser(state.okMessage)}
diff --git a/web/js/react/src/components/Firewall/Add/AddFirewall.jsx b/web/js/react/src/components/Firewall/Add/AddFirewall.jsx
index 78397037a..848b4b487 100644
--- a/web/js/react/src/components/Firewall/Add/AddFirewall.jsx
+++ b/web/js/react/src/components/Firewall/Add/AddFirewall.jsx
@@ -12,6 +12,8 @@ import { useDispatch, useSelector } from 'react-redux';
import './AddFirewall.scss';
import { Helmet } from 'react-helmet';
+import { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions';
+import HtmlParser from 'react-html-parser';
const AddFirewall = props => {
const token = localStorage.getItem("token");
@@ -48,18 +50,17 @@ const AddFirewall = props => {
if (Object.keys(newFirewall).length !== 0 && newFirewall.constructor === Object) {
setState({ ...state, loading: true });
-
addFirewall(newFirewall)
.then(result => {
if (result.status === 200) {
- const { error_msg, ok_msg } = result.data;
+ const { error_msg: errorMessage, ok_msg: okMessage } = result.data;
- if (error_msg) {
- setState({ ...state, errorMessage: error_msg, okMessage: '', loading: false });
- } else if (ok_msg) {
- setState({ ...state, errorMessage: '', okMessage: ok_msg, loading: false });
+ if (errorMessage) {
+ setState({ ...state, errorMessage, okMessage, loading: false });
} else {
- setState({ ...state, loading: false })
+ dispatch(refreshCounters()).then(() => {
+ setState({ ...state, okMessage, errorMessage: '', loading: false });
+ });
}
}
})
@@ -83,7 +84,7 @@ const AddFirewall = props => {
{state.okMessage ? : ''}
-
+ {HtmlParser(state.okMessage)}
diff --git a/web/js/react/src/components/Firewall/Add/AddFirewall.scss b/web/js/react/src/components/Firewall/Add/AddFirewall.scss
index aff53e9fd..05d56dc08 100644
--- a/web/js/react/src/components/Firewall/Add/AddFirewall.scss
+++ b/web/js/react/src/components/Firewall/Add/AddFirewall.scss
@@ -1,6 +1,6 @@
.content .edit-template.add-firewall {
.toolbar .search-toolbar-name {
- width: fit-content;
+ width: max-content;
}
label.label-wrapper[for=ip] span {
diff --git a/web/js/react/src/components/Firewall/Add/Banlist/index.jsx b/web/js/react/src/components/Firewall/Add/Banlist/index.jsx
index b463a02c6..35c75b2ce 100644
--- a/web/js/react/src/components/Firewall/Add/Banlist/index.jsx
+++ b/web/js/react/src/components/Firewall/Add/Banlist/index.jsx
@@ -8,6 +8,7 @@ import Toolbar from '../../../MainNav/Toolbar/Toolbar';
import { useHistory } from 'react-router-dom';
import { useDispatch, useSelector } from 'react-redux';
import { Helmet } from 'react-helmet';
+import HtmlParser from 'react-html-parser';
const AddBanIP = () => {
const { i18n } = useSelector(state => state.session);
@@ -42,15 +43,18 @@ const AddBanIP = () => {
}
if (Object.keys(newUser).length !== 0 && newUser.constructor === Object) {
+ setState({ ...state, loading: true });
addBanIp(newUser)
.then(result => {
if (result.status === 200) {
const { error_msg, ok_msg } = result.data;
if (error_msg) {
- setState({ ...state, errorMessage: error_msg, okMessage: '' });
+ setState({ ...state, errorMessage: error_msg, okMessage: '', loading: false });
} else if (ok_msg) {
- setState({ ...state, errorMessage: '', okMessage: ok_msg });
+ setState({ ...state, errorMessage: '', okMessage: ok_msg, loading: false });
+ } else {
+ setState({ ...state, loading: false });
}
}
})
@@ -74,12 +78,14 @@ const AddBanIP = () => {
{i18n['Adding IP Address to Banlist']}
{state.errorMessage ? : ''} {state.errorMessage}
- {state.okMessage ? : ''}
+ {state.okMessage ? : ''} {HtmlParser(state.okMessage)}
{state.loading ? :