diff --git a/AGHTechDoc.md b/AGHTechDoc.md index 7ab530c6..b3d52e1e 100644 --- a/AGHTechDoc.md +++ b/AGHTechDoc.md @@ -1471,7 +1471,8 @@ Strict matching can be enabled by enclosing the value in double quotes: e.g. `"a `response_status`: * all * filtered - all kinds of filtering -* blocked - blocked or blocked service +* blocked - blocked or blocked services +* blocked_services - blocked services * blocked_safebrowsing - blocked by safebrowsing * blocked_parental - blocked by parental control * whitelisted - whitelisted diff --git a/client/src/__locales/en.json b/client/src/__locales/en.json index 340c5bcb..b6235a66 100644 --- a/client/src/__locales/en.json +++ b/client/src/__locales/en.json @@ -528,6 +528,7 @@ "check_reason": "Reason: {{reason}}", "check_rule": "Rule: {{rule}}", "check_service": "Service name: {{service}}", + "service_name": "Service name", "check_not_found": "Not found in your filter lists", "client_confirm_block": "Are you sure you want to block the client \"{{ip}}\"?", "client_confirm_unblock": "Are you sure you want to unblock the client \"{{ip}}\"?", diff --git a/client/src/components/Logs/Cells/DomainCell.js b/client/src/components/Logs/Cells/DomainCell.js index 47d14846..4333089c 100644 --- a/client/src/components/Logs/Cells/DomainCell.js +++ b/client/src/components/Logs/Cells/DomainCell.js @@ -14,7 +14,6 @@ import IconTooltip from './IconTooltip'; const DomainCell = ({ answer_dnssec, - service_name, client_proto, domain, time, @@ -50,10 +49,6 @@ const DomainCell = ({ protocol, }; - if (service_name) { - requestDetailsObj.check_service = service_name; - } - const sourceData = getSourceData(tracker); const knownTrackerDataObj = { @@ -103,7 +98,7 @@ const DomainCell = ({ xlinkHref='privacy' contentItemClass='key-colon' renderContent={renderContent} place='bottom' />
-
{service_name || domain}
+
{domain}
{details && isDetailed &&
{details}
} @@ -117,7 +112,6 @@ DomainCell.propTypes = { domain: propTypes.string.isRequired, time: propTypes.string.isRequired, type: propTypes.string.isRequired, - service_name: propTypes.string, tracker: propTypes.object, }; diff --git a/client/src/components/Logs/Cells/ResponseCell.js b/client/src/components/Logs/Cells/ResponseCell.js index b152987f..816f35a3 100644 --- a/client/src/components/Logs/Cells/ResponseCell.js +++ b/client/src/components/Logs/Cells/ResponseCell.js @@ -3,7 +3,11 @@ import { shallowEqual, useSelector } from 'react-redux'; import classNames from 'classnames'; import React from 'react'; import propTypes from 'prop-types'; -import { formatElapsedMs, getFilterName } from '../../../helpers/helpers'; +import { + formatElapsedMs, + getFilterName, + getServiceName, +} from '../../../helpers/helpers'; import { FILTERED_STATUS, FILTERED_STATUS_TO_META_MAP } from '../../../helpers/constants'; import IconTooltip from './IconTooltip'; @@ -16,6 +20,7 @@ const ResponseCell = ({ upstream, rule, filterId, + service_name, }) => { const { t } = useTranslation(); const filters = useSelector((state) => state.filtering.filters, shallowEqual); @@ -52,7 +57,7 @@ const ResponseCell = ({ install_settings_dns: upstream, elapsed: formattedElapsedMs, response_code: status, - filter, + ...(service_name ? { service_name: getServiceName(service_name) } : { filter }), rule_label: rule, response_table_header: renderResponses(response), original_response: renderResponses(originalResponse), @@ -64,8 +69,22 @@ const ResponseCell = ({ ...COMMON_CONTENT, filter: '', }); - const detailedInfo = isBlocked ? filter : formattedElapsedMs; + const getDetailedInfo = (reason) => { + switch (reason) { + case FILTERED_STATUS.FILTERED_BLOCKED_SERVICE: + if (!service_name) { + return formattedElapsedMs; + } + return getServiceName(service_name); + case FILTERED_STATUS.FILTERED_BLACK_LIST: + return filter; + default: + return formattedElapsedMs; + } + }; + + const detailedInfo = getDetailedInfo(reason); return
{requestStatus}
: requestStatus, + ...(FILTERED_STATUS.FILTERED_BLOCKED_SERVICE && service_name + && { service_name: getServiceName(service_name) }), domain, type_table_header: type, protocol, @@ -219,6 +223,7 @@ Row.propTypes = { rule: propTypes.string, originalResponse: propTypes.array, status: propTypes.string.isRequired, + service_name: propTypes.string, }).isRequired, isSmallScreen: propTypes.bool.isRequired, setDetailedDataCurrent: propTypes.func.isRequired, diff --git a/client/src/helpers/constants.js b/client/src/helpers/constants.js index 91ec294e..08fd1529 100644 --- a/client/src/helpers/constants.js +++ b/client/src/helpers/constants.js @@ -280,6 +280,11 @@ export const SERVICES = [ }, ]; +export const SERVICES_ID_NAME_MAP = SERVICES.reduce((acc, { id, name }) => { + acc[id] = name; + return acc; +}, {}); + export const ENCRYPTION_SOURCE = { PATH: 'path', CONTENT: 'content', @@ -351,6 +356,10 @@ export const RESPONSE_FILTER = { QUERY: 'blocked', LABEL: 'show_blocked_responses', }, + BLOCKED_SERVICES: { + QUERY: 'blocked_services', + LABEL: 'blocked_services', + }, BLOCKED_THREATS: { QUERY: 'blocked_safebrowsing', LABEL: 'blocked_threats', @@ -397,7 +406,7 @@ export const FILTERED_STATUS_TO_META_MAP = { COLOR: QUERY_STATUS_COLORS.WHITE, }, [FILTERED_STATUS.FILTERED_BLOCKED_SERVICE]: { - LABEL: RESPONSE_FILTER.BLOCKED.LABEL, + LABEL: 'blocked_service', COLOR: QUERY_STATUS_COLORS.RED, }, [FILTERED_STATUS.FILTERED_SAFE_SEARCH]: { diff --git a/client/src/helpers/helpers.js b/client/src/helpers/helpers.js index 8cdb5384..b0bbea5a 100644 --- a/client/src/helpers/helpers.js +++ b/client/src/helpers/helpers.js @@ -26,6 +26,7 @@ import { FILTERED, FILTERED_STATUS, IP_MATCH_LIST_STATUS, + SERVICES_ID_NAME_MAP, STANDARD_DNS_PORT, STANDARD_HTTPS_PORT, STANDARD_WEB_PORT, @@ -944,3 +945,9 @@ export const getBlockingClientName = (clients, ip) => { */ export const filterOutComments = (lines) => lines .filter((line) => !line.startsWith(COMMENT_LINE_DEFAULT_TOKEN)); + +/** + * @param {string} serviceId + * @returns {string} + */ +export const getServiceName = (serviceId) => SERVICES_ID_NAME_MAP[serviceId] || serviceId; diff --git a/client/webpack.dev.js b/client/webpack.dev.js index a4971e88..afcc3506 100644 --- a/client/webpack.dev.js +++ b/client/webpack.dev.js @@ -38,6 +38,7 @@ const getDevServerConfig = (proxyUrl = BASE_URL) => { return { hot: true, + open: true, host: devServerHost, port: devServerPort, proxy: { @@ -61,5 +62,5 @@ module.exports = merge(common, { }, ], }, - devServer: process.env.WEBPACK_DEV_SERVER ? getDevServerConfig(BASE_URL) : undefined, + ...(process.env.WEBPACK_DEV_SERVER ? { devServer: getDevServerConfig(BASE_URL) } : undefined), }); diff --git a/querylog/search_criteria.go b/querylog/search_criteria.go index 382cd9bc..a9d38fb1 100644 --- a/querylog/search_criteria.go +++ b/querylog/search_criteria.go @@ -17,7 +17,8 @@ const ( filteringStatusAll = "all" filteringStatusFiltered = "filtered" // all kinds of filtering - filteringStatusBlocked = "blocked" // blocked or blocked service + filteringStatusBlocked = "blocked" // blocked or blocked services + filteringStatusBlockedService = "blocked_services" // blocked filteringStatusBlockedSafebrowsing = "blocked_safebrowsing" // blocked by safebrowsing filteringStatusBlockedParental = "blocked_parental" // blocked by parental control filteringStatusWhitelisted = "whitelisted" // whitelisted @@ -29,7 +30,7 @@ const ( // filteringStatusValues -- array with all possible filteringStatus values var filteringStatusValues = []string{ filteringStatusAll, filteringStatusFiltered, filteringStatusBlocked, - filteringStatusBlockedSafebrowsing, filteringStatusBlockedParental, + filteringStatusBlockedService, filteringStatusBlockedSafebrowsing, filteringStatusBlockedParental, filteringStatusWhitelisted, filteringStatusRewritten, filteringStatusSafeSearch, filteringStatusProcessed, } @@ -113,6 +114,8 @@ func (c *searchCriteria) match(entry *logEntry) bool { return res.IsFiltered && (res.Reason == dnsfilter.FilteredBlackList || res.Reason == dnsfilter.FilteredBlockedService) + case filteringStatusBlockedService: + return res.IsFiltered && res.Reason == dnsfilter.FilteredBlockedService case filteringStatusBlockedParental: return res.IsFiltered && res.Reason == dnsfilter.FilteredParental case filteringStatusBlockedSafebrowsing: @@ -120,8 +123,8 @@ func (c *searchCriteria) match(entry *logEntry) bool { case filteringStatusWhitelisted: return res.Reason == dnsfilter.NotFilteredWhiteList case filteringStatusRewritten: - return (res.Reason == dnsfilter.ReasonRewrite || - res.Reason == dnsfilter.RewriteEtcHosts) + return res.Reason == dnsfilter.ReasonRewrite || + res.Reason == dnsfilter.RewriteEtcHosts case filteringStatusSafeSearch: return res.IsFiltered && res.Reason == dnsfilter.FilteredSafeSearch