about summary refs log tree commit diff stats
path: root/internal/server/mux.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/server/mux.go')
-rw-r--r--internal/server/mux.go22
1 files changed, 15 insertions, 7 deletions
diff --git a/internal/server/mux.go b/internal/server/mux.go
index f7a82d8..968b37c 100644
--- a/internal/server/mux.go
+++ b/internal/server/mux.go
@@ -93,12 +93,15 @@ func NewMux(
 				}
 			}
 
-			ctx, cancel := context.WithTimeout(r.Context(), searchTimeout)
-			defer cancel()
-
 			if r.URL.Query().Has("query") {
 				qs := r.URL.Query().Get("query")
 
+				if len(qs) < 2 {
+					errorHandler(w, r, "Query too short", http.StatusBadRequest)
+
+					return
+				}
+
 				var pageSize int = search.DefaultPageSize
 				var pageNumber = 1
 				if pg := r.URL.Query().Get("page"); pg != "" {
@@ -110,11 +113,15 @@ func NewMux(
 					}
 					if pageNumber == 0 {
 						pageNumber = 1
-						pageSize = math.MaxInt
+						pageSize = config.MaxResultsShowAll
 					}
 				}
 				page := pagination.New(pageNumber, pageSize)
+
+				ctx, cancel := context.WithTimeout(r.Context(), searchTimeout)
 				results, err := index.Search(ctx, source, qs, page.From, page.Size)
+				cancel()
+
 				if err != nil {
 					if err == context.DeadlineExceeded {
 						errorHandler(w, r, "Search timed out", http.StatusInternalServerError)
@@ -126,7 +133,8 @@ func NewMux(
 
 					return
 				}
-				if pageSize == math.MaxInt && results.Total > config.MaxResultsShowAll {
+				if pageSize == config.MaxResultsShowAll &&
+					results.Total > config.MaxResultsShowAll {
 					errorHandler(w, r, "Too many results, use pagination", http.StatusBadRequest)
 				}
 
@@ -219,9 +227,9 @@ func NewMux(
 			importerSingular := importerType.Singular()
 
 			ctx, cancel := context.WithTimeout(r.Context(), searchTimeout)
-			defer cancel()
-
 			doc, err := index.GetDocument(ctx, source, r.PathValue("id"))
+			cancel()
+
 			if err != nil {
 				errorHandler(
 					w,