From 21dfb5ffe8352c55bdb2899c5885dae4fd2e61b0 Mon Sep 17 00:00:00 2001
From: Simon Zolin <s.zolin@adguard.com>
Date: Fri, 3 Jul 2020 12:21:09 +0300
Subject: [PATCH] * querylog: case-insensitive search by domain name Close
 #1828

Squashed commit of the following:

commit 347aff1f8c5293bd06ecc0693970fe447b6e2c75
Merge: f07c8dc0 9df7aba9
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Fri Jul 3 12:10:02 2020 +0300

    Merge remote-tracking branch 'origin/master' into 1828-qlog-case-insens

commit f07c8dc0665585ce00c415293c47c5a8c9724881
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Fri Jul 3 12:09:49 2020 +0300

    minor

commit 512c7acd48f649a0d11b4fef66a1351fcd19635b
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Thu Jul 2 19:01:43 2020 +0300

    minor

commit 9f5700af56340c38a2d892101e32959702816205
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Thu Jul 2 16:53:56 2020 +0300

    * querylog: case-insensitive search by domain name
---
 querylog/qlog_test.go       |  4 ++--
 querylog/search_criteria.go | 12 ++++++++----
 2 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/querylog/qlog_test.go b/querylog/qlog_test.go
index c087fa4d..c4f34e75 100644
--- a/querylog/qlog_test.go
+++ b/querylog/qlog_test.go
@@ -59,7 +59,7 @@ func TestQueryLog(t *testing.T) {
 	params.searchCriteria = append(params.searchCriteria, searchCriteria{
 		criteriaType: ctDomainOrClient,
 		strict:       true,
-		value:        "test.example.org",
+		value:        "TEST.example.org",
 	})
 	entries, _ = l.search(params)
 	assert.Equal(t, 1, len(entries))
@@ -70,7 +70,7 @@ func TestQueryLog(t *testing.T) {
 	params.searchCriteria = append(params.searchCriteria, searchCriteria{
 		criteriaType: ctDomainOrClient,
 		strict:       false,
-		value:        "example.org",
+		value:        "example.ORG",
 	})
 	entries, _ = l.search(params)
 	assert.Equal(t, 3, len(entries))
diff --git a/querylog/search_criteria.go b/querylog/search_criteria.go
index 3c1ee0de..382cd9bc 100644
--- a/querylog/search_criteria.go
+++ b/querylog/search_criteria.go
@@ -62,11 +62,13 @@ func (c *searchCriteria) quickMatchJSONValue(line string, propertyName string) b
 	if len(val) == 0 {
 		return false
 	}
+	val = strings.ToLower(val)
+	searchVal := strings.ToLower(c.value)
 
-	if c.strict && c.value == val {
+	if c.strict && searchVal == val {
 		return true
 	}
-	if !c.strict && strings.Contains(val, c.value) {
+	if !c.strict && strings.Contains(val, searchVal) {
 		return true
 	}
 
@@ -78,10 +80,12 @@ func (c *searchCriteria) quickMatchJSONValue(line string, propertyName string) b
 func (c *searchCriteria) match(entry *logEntry) bool {
 	switch c.criteriaType {
 	case ctDomainOrClient:
-		if c.strict && entry.QHost == c.value {
+		qhost := strings.ToLower(entry.QHost)
+		searchVal := strings.ToLower(c.value)
+		if c.strict && qhost == searchVal {
 			return true
 		}
-		if !c.strict && strings.Contains(entry.QHost, c.value) {
+		if !c.strict && strings.Contains(qhost, searchVal) {
 			return true
 		}