From 01edf49de03ca5d5f15673937c6ef36e19e38a2b Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Thu, 10 Dec 2020 21:51:48 +0100 Subject: [PATCH] :bug: Fix incorrect erorr reporting. --- backend/src/app/http/errors.clj | 9 ++++----- backend/src/app/media.clj | 1 - common/app/common/spec.cljc | 10 ++++++++-- frontend/src/app/main/ui.cljs | 12 ++++++++++++ 4 files changed, 24 insertions(+), 8 deletions(-) diff --git a/backend/src/app/http/errors.clj b/backend/src/app/http/errors.clj index 58acd948c..7d6a1bb09 100644 --- a/backend/src/app/http/errors.clj +++ b/backend/src/app/http/errors.clj @@ -29,19 +29,18 @@ (defmethod handle-exception :validation [err req] (let [header (get-in req [:headers "accept"]) - edata (ex-data err)] + error (ex-data err)] (cond (and (str/starts-with? header "text/html") - (= :spec-validation (:code edata))) + (= :spec-validation (:code error))) {:status 400 :headers {"content-type" "text/html"} :body (str "
"
-                  (with-out-str
-                    (:data edata))
+                  (:hint-verbose error)
                   "
\n")} :else {:status 400 - :body edata}))) + :body error}))) (defmethod handle-exception :ratelimit [_ _] diff --git a/backend/src/app/media.clj b/backend/src/app/media.clj index a05f4c0c4..fc6808f7d 100644 --- a/backend/src/app/media.clj +++ b/backend/src/app/media.clj @@ -32,7 +32,6 @@ (defstate semaphore :start (Semaphore. (:image-process-max-threads cfg/config 1))) - ;; --- Generic specs (s/def :internal.http.upload/filename ::us/string) diff --git a/common/app/common/spec.cljc b/common/app/common/spec.cljc index 10a174deb..7639d7021 100644 --- a/common/app/common/spec.cljc +++ b/common/app/common/spec.cljc @@ -186,10 +186,16 @@ [spec data] (let [result (s/conform spec data)] (when (= result ::s/invalid) - (let [edata (s/explain-data spec data)] + (let [edata (s/explain-data spec data) + nhint (with-out-str + (s/explain-out edata)) + vhint (with-out-str + (expound/printer edata))] (throw (ex/error :type :validation :code :spec-validation - :data data)))) + :data data + :hint nhint + :hint-verbose vhint)))) result)) (defmacro instrument! diff --git a/frontend/src/app/main/ui.cljs b/frontend/src/app/main/ui.cljs index 635d2afa6..9af5d1109 100644 --- a/frontend/src/app/main/ui.cljs +++ b/frontend/src/app/main/ui.cljs @@ -209,6 +209,18 @@ ;; --- Error Handling (defmethod ptk/handle-error :validation + [error] + (ts/schedule + (st/emitf (dm/show {:content "Unexpected validation error (server side)." + :type :error + :timeout 5000}))) + (when-let [explain (:hint-verbose error)] + (js/console.group "Server Error") + (js/console.error (if (map? error) (pr-str error) error)) + (js/console.error explain) + (js/console.endGroup "Server Error"))) + +(defmethod ptk/handle-error :spec-validation [error] (ts/schedule (st/emitf (dm/show {:content "Unexpected validation error (server side)."