cleanses user's queries.

This commit is contained in:
Bryce Covert
2022-04-29 11:24:09 -07:00
parent 523afd9d37
commit 4b4246fafa
3 changed files with 19 additions and 5 deletions

View File

@@ -5,6 +5,7 @@
[auto-ap.graphql.utils [auto-ap.graphql.utils
:refer [->graphql :refer [->graphql
<-graphql <-graphql
cleanse-query
assert-admin assert-admin
assert-can-see-client assert-can-see-client
enum->keyword enum->keyword
@@ -66,7 +67,8 @@
(defn search [context {query :query client :client_id} _] (defn search [context {query :query client :client_id} _]
(when client (when client
(assert-can-see-client (:id context) client)) (assert-can-see-client (:id context) client))
(let [num (some-> (re-find #"([0-9]+)" query) (let [query (cleanse-query query)
num (some-> (re-find #"([0-9]+)" query)
second second
(not-empty ) (not-empty )
Integer/parseInt)] Integer/parseInt)]

View File

@@ -123,3 +123,14 @@
(defn assert-none-locked [client-id dates] (defn assert-none-locked [client-id dates]
(doseq [d dates] (doseq [d dates]
(assert-not-locked client-id d))) (assert-not-locked client-id d)))
(defn cleanse-query [q]
(let [parts (-> q
(str/replace #"[\[\]\+\*]" "")
(str/split #"\s+"))
exacts (butlast parts)
partial (last parts)]
(as-> exacts e
(mapv #(str "+" %) e)
(conj e (str partial "*"))
(str/join " " e))))

View File

@@ -5,6 +5,7 @@
[auto-ap.graphql.utils [auto-ap.graphql.utils
:refer [->graphql :refer [->graphql
<-graphql <-graphql
cleanse-query
assert-admin assert-admin
assert-failure assert-failure
enum->keyword enum->keyword
@@ -148,19 +149,19 @@
(:id args)))) (:id args))))
(defn search [context args _] (defn search [context args _]
(let [data (if (is-admin? (:id context)) (let [search-query (cleanse-query (:query args))
data (if (is-admin? (:id context))
(d/q '[:find ?n ?i ?s (d/q '[:find ?n ?i ?s
:in $ ?q :in $ ?q
:where [(fulltext $ :vendor/search-terms ?q) [[?i ?n _ ?s]]]] :where [(fulltext $ :vendor/search-terms ?q) [[?i ?n _ ?s]]]]
(d/db conn) (d/db conn)
(:query args)) search-query)
(d/q '[:find ?n ?i ?s (d/q '[:find ?n ?i ?s
:in $ ?q :in $ ?q
:where [(fulltext $ :vendor/search-terms ?q) [[?i ?n _ ?s]]] :where [(fulltext $ :vendor/search-terms ?q) [[?i ?n _ ?s]]]
(not [?i :vendor/hidden true])] (not [?i :vendor/hidden true])]
(d/db conn) (d/db conn)
(:query args)))] search-query))]
(->> data (->> data
(sort-by (comp - last)) (sort-by (comp - last))
(map (fn [[n i]] (map (fn [[n i]]