diff --git a/src/main/lrsql/system/util.clj b/src/main/lrsql/system/util.clj index 2cfb5d01..7ae0f00c 100644 --- a/src/main/lrsql/system/util.clj +++ b/src/main/lrsql/system/util.clj @@ -4,7 +4,7 @@ [clojure.walk :as w] [clojure.tools.logging :as log] [next.jdbc.connection :as jdbc-conn] - [ring.util.codec :refer [form-encode form-decode]])) + [lrsql.util :refer [form-encode form-decode]])) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Helpers and Macros diff --git a/src/main/lrsql/util.clj b/src/main/lrsql/util.clj index b3e27aa7..792432cb 100644 --- a/src/main/lrsql/util.clj +++ b/src/main/lrsql/util.clj @@ -6,6 +6,7 @@ [clojure.tools.logging :as log] [clojure.java.io :as io] [cheshire.core :as cjson] + [ring.util.codec :as ring-codec] [xapi-schema.spec :as xs] [com.yetanalytics.squuid :as squuid] [com.yetanalytics.lrs.xapi.document :refer [json-bytes-gen-fn]] @@ -361,3 +362,25 @@ (io/copy in baos) (.flush baos) (.toByteArray baos))))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Form + URL Encoding +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; Wrappers for ring.util.codec functions so that we don't have to remember +;; that particular util namespace. + +(defn form-encode + "Wrapper for `ring.util.codec/form-encode`." + [s] + (ring-codec/form-encode s)) + +(defn form-decode + "Wrapper for `ring.util.codec/form-decode`." + [s] + (ring-codec/form-decode s)) + +(defn url-encode + "Wrapper for `ring.util.codec/url-encode`." + [s] + (ring-codec/url-encode s)) diff --git a/src/main/lrsql/util/statement.clj b/src/main/lrsql/util/statement.clj index c21acf77..c4156c7c 100644 --- a/src/main/lrsql/util/statement.clj +++ b/src/main/lrsql/util/statement.clj @@ -1,6 +1,5 @@ (ns lrsql.util.statement - (:require [ring.util.codec :refer [form-encode]] - [com.yetanalytics.pathetic :as pa] + (:require [com.yetanalytics.pathetic :as pa] [com.yetanalytics.lrs.xapi.statements :as ss] [lrsql.util :as u] [lrsql.util.path :as up])) @@ -166,7 +165,7 @@ (let [{?agent :agent} query-params] (str prefix "/statements?" - (form-encode + (u/form-encode (cond-> query-params true (assoc :from (u/uuid->str next-cursor)) ?agent (assoc :agent (u/write-json-str ?agent))))))) diff --git a/src/test/lrsql/admin/route_test.clj b/src/test/lrsql/admin/route_test.clj index cec7af60..8c777f22 100644 --- a/src/test/lrsql/admin/route_test.clj +++ b/src/test/lrsql/admin/route_test.clj @@ -4,7 +4,6 @@ (:require [clojure.test :refer [deftest testing is use-fixtures are]] [clojure.string :refer [lower-case]] [babashka.curl :as curl] - [ring.util.codec :refer [url-encode]] [com.stuartsierra.component :as component] [xapi-schema.spec.regex :refer [Base64RegEx]] [com.yetanalytics.lrs.protocol :as lrsp] @@ -287,7 +286,7 @@ (= 200)))))) (testing "download CSV data" (let [property-paths-vec [["id"] ["actor" "mbox"]] - property-paths-str (url-encode (str property-paths-vec)) + property-paths-str (u/url-encode (str property-paths-vec)) endpoint-url (format "http://0.0.0.0:8080/admin/csv?property-paths=%s&ascending=true" property-paths-str) {:keys [status body]} (curl/get endpoint-url @@ -296,7 +295,7 @@ csv-body (slurp body)] (is (= 200 status)) (is (= "id,actor_mbox\r\n" csv-body))) - (let [bad-prop-path (->> ["zoo" "wee" "mama"] str url-encode) + (let [bad-prop-path (->> ["zoo" "wee" "mama"] str u/url-encode) bad-url (format "http://0.0.0.0:8080/admin/csv?property-paths=%s" bad-prop-path)] (is-err-code (curl/get bad-url {:headers headers :as :stream}) diff --git a/src/test/lrsql/bench_test.clj b/src/test/lrsql/bench_test.clj index 99296c3f..44290b9b 100644 --- a/src/test/lrsql/bench_test.clj +++ b/src/test/lrsql/bench_test.clj @@ -4,7 +4,6 @@ [clojure.data.csv :as csv] [clojure.java.io :as io] [clojure.tools.logging :as log] - [ring.util.codec :refer [url-encode]] [com.stuartsierra.component :as component] [babashka.curl :as curl] [java-time.api :as jt] @@ -41,7 +40,7 @@ url-prefix (-> sys' :webserver :config :url-prefix) stmt-endpoint (format "http://localhost:8080%s/statements" url-prefix) csv-endpoint (format "http://localhost:8080/admin/csv?property-paths=%s" - (url-encode [["id"] ["verb" "id"]])) + (u/url-encode [["id"] ["verb" "id"]])) statements (support/bench-statements* num-statements)] (testing "Inserting large amounts of data" (let [start (jt/instant)] diff --git a/src/test/lrsql/scope_test.clj b/src/test/lrsql/scope_test.clj index 3b40f506..fee06df3 100644 --- a/src/test/lrsql/scope_test.clj +++ b/src/test/lrsql/scope_test.clj @@ -5,7 +5,6 @@ (:require [clojure.test :refer [deftest testing is use-fixtures]] [clojure.string :as cstr] [babashka.curl :as curl] - [ring.util.codec :refer [form-encode]] [com.stuartsierra.component :as component] [lrsql.test-support :as support] [lrsql.util :as u]) @@ -159,7 +158,7 @@ (let [params-vec (reduce-kv (fn [acc k v] (let [k-str (name k) - v-str (form-encode v)] + v-str (u/form-encode v)] (conj acc (str k-str "=" v-str)))) [] params)