diff --git a/client/src/__locales/en.json b/client/src/__locales/en.json index 764d1450..4e834147 100644 --- a/client/src/__locales/en.json +++ b/client/src/__locales/en.json @@ -299,9 +299,10 @@ "client_edit": "Edit Client", "client_identifier": "Identifier", "ip_address": "IP address", - "client_identifier_desc": "Clients can be identified by the IP address or MAC address. Please note, that using MAC as identifier is possible only if AdGuard Home is also a <0>DHCP server0>", + "client_identifier_desc": "Clients can be identified by the IP address, MAC address, CIDR. Please note, that using MAC as identifier is possible only if AdGuard Home is also a <0>DHCP server0>", "form_enter_ip": "Enter IP", "form_enter_mac": "Enter MAC", + "form_enter_id": "Enter identifier", "form_client_name": "Enter client name", "client_global_settings": "Use global settings", "client_deleted": "Client \"{{key}}\" successfully deleted", diff --git a/client/src/actions/clients.js b/client/src/actions/clients.js index 3974a38c..b6fcf011 100644 --- a/client/src/actions/clients.js +++ b/client/src/actions/clients.js @@ -2,7 +2,6 @@ import { createAction } from 'redux-actions'; import { t } from 'i18next'; import apiClient from '../api/Api'; import { addErrorToast, addSuccessToast, getClients } from './index'; -import { CLIENT_ID } from '../helpers/constants'; export const toggleClientModal = createAction('TOGGLE_CLIENT_MODAL'); @@ -13,18 +12,7 @@ export const addClientSuccess = createAction('ADD_CLIENT_SUCCESS'); export const addClient = config => async (dispatch) => { dispatch(addClientRequest()); try { - let data; - if (config.identifier === CLIENT_ID.MAC) { - const { ip, identifier, ...values } = config; - - data = { ...values }; - } else { - const { mac, identifier, ...values } = config; - - data = { ...values }; - } - - await apiClient.addClient(data); + await apiClient.addClient(config); dispatch(addClientSuccess()); dispatch(toggleClientModal()); dispatch(addSuccessToast(t('client_added', { key: config.name }))); @@ -59,16 +47,7 @@ export const updateClientSuccess = createAction('UPDATE_CLIENT_SUCCESS'); export const updateClient = (config, name) => async (dispatch) => { dispatch(updateClientRequest()); try { - let data; - if (config.identifier === CLIENT_ID.MAC) { - const { ip, identifier, ...values } = config; - - data = { name, data: { ...values } }; - } else { - const { mac, identifier, ...values } = config; - - data = { name, data: { ...values } }; - } + const data = { name, data: { ...config } }; await apiClient.updateClient(data); dispatch(updateClientSuccess()); diff --git a/client/src/api/Api.js b/client/src/api/Api.js index 470577a8..72d6d527 100644 --- a/client/src/api/Api.js +++ b/client/src/api/Api.js @@ -353,6 +353,7 @@ class Api { // Per-client settings GET_CLIENTS = { path: 'clients', method: 'GET' }; + FIND_CLIENTS = { path: 'clients/find', method: 'GET' }; ADD_CLIENT = { path: 'clients/add', method: 'POST' }; DELETE_CLIENT = { path: 'clients/delete', method: 'POST' }; UPDATE_CLIENT = { path: 'clients/update', method: 'POST' }; @@ -389,6 +390,12 @@ class Api { return this.makeRequest(path, method, parameters); } + findClients(params) { + const { path, method } = this.FIND_CLIENTS; + const url = getPathWithQueryString(path, params); + return this.makeRequest(url, method); + } + // DNS access settings ACCESS_LIST = { path: 'access/list', method: 'GET' }; ACCESS_SET = { path: 'access/set', method: 'POST' }; diff --git a/client/src/components/Settings/Clients/ClientsTable.js b/client/src/components/Settings/Clients/ClientsTable.js index de1c166f..50bb48ab 100644 --- a/client/src/components/Settings/Clients/ClientsTable.js +++ b/client/src/components/Settings/Clients/ClientsTable.js @@ -3,7 +3,7 @@ import PropTypes from 'prop-types'; import { Trans, withNamespaces } from 'react-i18next'; import ReactTable from 'react-table'; -import { MODAL_TYPE, CLIENT_ID } from '../../../helpers/constants'; +import { MODAL_TYPE } from '../../../helpers/constants'; import Card from '../../ui/Card'; import Modal from './Modal'; import WrapCell from './WrapCell'; @@ -40,10 +40,7 @@ class ClientsTable extends Component { const client = clients.find(item => name === item.name); if (client) { - const identifier = client.mac ? CLIENT_ID.MAC : CLIENT_ID.IP; - return { - identifier, use_global_settings: true, use_global_blocked_services: true, ...client, @@ -51,7 +48,7 @@ class ClientsTable extends Component { } return { - identifier: CLIENT_ID.IP, + ids: [''], use_global_settings: true, use_global_blocked_services: true, }; @@ -76,28 +73,22 @@ class ClientsTable extends Component { columns = [ { Header: this.props.t('table_client'), - accessor: 'ip', + accessor: 'ids', minWidth: 150, Cell: (row) => { - if (row.original && row.original.mac) { - return ( -