Updates #3419.
Squashed commit of the following:
commit 370094c00d9c15b1336fbedb1e233bd4436c9898
Author: Dmitriy Seregin <d.seregin@adguard.com>
Date: Fri Sep 10 17:31:16 2021 +0300
added link to github issue
commit 407ba9b2db46b887a30ddb081bd37c56e56b0496
Merge: 426c8146 80548233
Author: Dmitriy Seregin <d.seregin@adguard.com>
Date: Fri Sep 10 17:29:52 2021 +0300
Merge branch 'master' into 3419-client-allowlist-collision
commit 426c8146cff5c112ebb25192af276c6601200528
Author: Dmitriy Seregin <d.seregin@adguard.com>
Date: Fri Sep 10 16:28:11 2021 +0300
fix en
commit d28c6022321828c6bdc55c3f9a4f655b26d146d2
Author: Dmitriy Seregin <d.seregin@adguard.com>
Date: Fri Sep 10 15:49:12 2021 +0300
added missing space
commit b374a09327968ca5343c1595d1ab8cf317c15ffe
Author: Dmitriy Seregin <d.seregin@adguard.com>
Date: Fri Sep 10 15:43:55 2021 +0300
fixes after review
commit 2be629d66e4703e2f5a85615bf1eaaa92e03c6fd
Author: Dmitriy Seregin <d.seregin@adguard.com>
Date: Thu Sep 9 14:17:19 2021 +0300
fixes
commit 5c2aa6201cc0ecf404d4057e354fbb0bdadcdd6d
Author: Dmitriy Seregin <d.seregin@adguard.com>
Date: Wed Sep 8 15:04:30 2021 +0300
return empty line to locale file
commit 3631c3772babbd595b1c3de4a7e91be6bac3e80f
Author: Dmitriy Seregin <d.seregin@adguard.com>
Date: Wed Sep 8 13:57:51 2021 +0300
all: fix collisions in access lists && expand block/unblock client
91 lines
3.4 KiB
JavaScript
91 lines
3.4 KiB
JavaScript
import { createAction } from 'redux-actions';
|
|
import i18next from 'i18next';
|
|
|
|
import apiClient from '../api/Api';
|
|
import { addErrorToast, addSuccessToast } from './toasts';
|
|
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 = (ip, disallowed, disallowed_rule) => async (dispatch) => {
|
|
dispatch(toggleClientBlockRequest());
|
|
try {
|
|
const accessList = await apiClient.getAccessList();
|
|
const blocked_hosts = accessList.blocked_hosts ?? [];
|
|
let allowed_clients = accessList.allowed_clients ?? [];
|
|
let disallowed_clients = accessList.disallowed_clients ?? [];
|
|
|
|
if (disallowed) {
|
|
if (!disallowed_rule) {
|
|
allowed_clients = allowed_clients.concat(ip);
|
|
} else {
|
|
disallowed_clients = disallowed_clients
|
|
.filter((client) => client !== disallowed_rule);
|
|
}
|
|
} else if (allowed_clients.length > 1) {
|
|
allowed_clients = allowed_clients
|
|
.filter((client) => client !== disallowed_rule);
|
|
} else {
|
|
disallowed_clients = disallowed_clients.concat(ip);
|
|
}
|
|
const values = {
|
|
allowed_clients,
|
|
blocked_hosts,
|
|
disallowed_clients,
|
|
};
|
|
|
|
await apiClient.setAccessList(values);
|
|
dispatch(toggleClientBlockSuccess(values));
|
|
|
|
if (disallowed) {
|
|
dispatch(addSuccessToast(i18next.t('client_unblocked', { ip: disallowed_rule || ip })));
|
|
} else {
|
|
dispatch(addSuccessToast(i18next.t('client_blocked', { ip })));
|
|
}
|
|
} catch (error) {
|
|
dispatch(addErrorToast({ error }));
|
|
dispatch(toggleClientBlockFailure());
|
|
}
|
|
};
|