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.update}
}
- + {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 ? :
submitFormHandler(event)} id="add-user"> + +