Close #1820 Squashed commit of the following: commit 5aadec2e6e126588313ff006d6f95223ba19a526 Merge: a4db6b4295f41285Author: ArtemBaskal <a.baskal@adguard.com> Date: Wed Jul 15 11:15:31 2020 +0300 Merge branch 'master' into fix/1820 commit a4db6b42ab9cbf43d96c783a72a99e0a2c594108 Author: ArtemBaskal <a.baskal@adguard.com> Date: Tue Jul 14 19:08:09 2020 +0300 Remove textarea comma splitting commit bb34797aac6602b405941dbd90fe6a81b663bb92 Author: ArtemBaskal <a.baskal@adguard.com> Date: Tue Jul 14 18:21:18 2020 +0300 Fix client Access settings normalization commit ac4fb536514f54c5722077d78dbbd981c4e906a8 Merge: 0c758ddcb9fca8d0Author: ArtemBaskal <a.baskal@adguard.com> Date: Tue Jul 14 18:14:38 2020 +0300 Merge branch 'master' into fix/1820 commit 0c758ddcd738136b92e6f947a8068ecc59f7ec25 Merge: 15650db3f5a1f311Author: ArtemBaskal <a.baskal@adguard.com> Date: Fri Jul 3 11:22:00 2020 +0300 Merge branch 'master' into fix/1820 commit 15650db35323009001fd427a74a312705b54ac86 Author: ArtemBaskal <a.baskal@adguard.com> Date: Mon Jun 29 12:01:51 2020 +0300 '- client: Don't normalise disallowed domains'
85 lines
3.2 KiB
JavaScript
85 lines
3.2 KiB
JavaScript
import { createAction } from 'redux-actions';
|
|
import i18next from 'i18next';
|
|
|
|
import apiClient from '../api/Api';
|
|
import { addErrorToast, addSuccessToast } from './toasts';
|
|
import { BLOCK_ACTIONS } from '../helpers/constants';
|
|
import { splitByNewLine } from '../helpers/helpers';
|
|
|
|
export const getAccessListRequest = createAction('GET_ACCESS_LIST_REQUEST');
|
|
export const getAccessListFailure = createAction('GET_ACCESS_LIST_FAILURE');
|
|
export const getAccessListSuccess = createAction('GET_ACCESS_LIST_SUCCESS');
|
|
|
|
export const getAccessList = () => async (dispatch) => {
|
|
dispatch(getAccessListRequest());
|
|
try {
|
|
const data = await apiClient.getAccessList();
|
|
dispatch(getAccessListSuccess(data));
|
|
} catch (error) {
|
|
dispatch(addErrorToast({ error }));
|
|
dispatch(getAccessListFailure());
|
|
}
|
|
};
|
|
|
|
export const setAccessListRequest = createAction('SET_ACCESS_LIST_REQUEST');
|
|
export const setAccessListFailure = createAction('SET_ACCESS_LIST_FAILURE');
|
|
export const setAccessListSuccess = createAction('SET_ACCESS_LIST_SUCCESS');
|
|
|
|
export const setAccessList = (config) => async (dispatch) => {
|
|
dispatch(setAccessListRequest());
|
|
try {
|
|
const { allowed_clients, disallowed_clients, blocked_hosts } = config;
|
|
|
|
const values = {
|
|
allowed_clients: splitByNewLine(allowed_clients),
|
|
disallowed_clients: splitByNewLine(disallowed_clients),
|
|
blocked_hosts: splitByNewLine(blocked_hosts),
|
|
};
|
|
|
|
await apiClient.setAccessList(values);
|
|
dispatch(setAccessListSuccess());
|
|
dispatch(addSuccessToast('access_settings_saved'));
|
|
} catch (error) {
|
|
dispatch(addErrorToast({ error }));
|
|
dispatch(setAccessListFailure());
|
|
}
|
|
};
|
|
|
|
export const toggleClientBlockRequest = createAction('TOGGLE_CLIENT_BLOCK_REQUEST');
|
|
export const toggleClientBlockFailure = createAction('TOGGLE_CLIENT_BLOCK_FAILURE');
|
|
export const toggleClientBlockSuccess = createAction('TOGGLE_CLIENT_BLOCK_SUCCESS');
|
|
|
|
export const toggleClientBlock = (type, ip) => async (dispatch) => {
|
|
dispatch(toggleClientBlockRequest());
|
|
try {
|
|
const {
|
|
allowed_clients, disallowed_clients, blocked_hosts,
|
|
} = await apiClient.getAccessList();
|
|
let updatedDisallowedClients = disallowed_clients || [];
|
|
|
|
if (type === BLOCK_ACTIONS.UNBLOCK && updatedDisallowedClients.includes(ip)) {
|
|
updatedDisallowedClients = updatedDisallowedClients.filter((client) => client !== ip);
|
|
} else if (type === BLOCK_ACTIONS.BLOCK && !updatedDisallowedClients.includes(ip)) {
|
|
updatedDisallowedClients.push(ip);
|
|
}
|
|
|
|
const values = {
|
|
allowed_clients,
|
|
blocked_hosts,
|
|
disallowed_clients: updatedDisallowedClients,
|
|
};
|
|
|
|
await apiClient.setAccessList(values);
|
|
dispatch(toggleClientBlockSuccess(values));
|
|
|
|
if (type === BLOCK_ACTIONS.UNBLOCK) {
|
|
dispatch(addSuccessToast(i18next.t('client_unblocked', { ip })));
|
|
} else if (type === BLOCK_ACTIONS.BLOCK) {
|
|
dispatch(addSuccessToast(i18next.t('client_blocked', { ip })));
|
|
}
|
|
} catch (error) {
|
|
dispatch(addErrorToast({ error }));
|
|
dispatch(toggleClientBlockFailure());
|
|
}
|
|
};
|