From fdc39061a426df619e6e6eefb9638eba6c4a1037 Mon Sep 17 00:00:00 2001 From: jumblerg Date: Tue, 20 Dec 2016 04:53:59 -0500 Subject: [PATCH 1/3] refactor exception handling to close #23 --- README.md | 2 +- build.boot | 2 +- src/castra/core.cljs | 4 ++-- src/castra/middleware.clj | 18 ++++++++---------- 4 files changed, 12 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index e7907c9..d94f9e1 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ Web application RPC library for Clojure/Script and Ring. [](dependency) ```clojure -[hoplon/castra "3.0.0-alpha7"] ;; latest release +[hoplon/castra "3.0.0-alpha8"] ;; latest release ``` [](/dependency) diff --git a/build.boot b/build.boot index 156ecf7..25bd22a 100644 --- a/build.boot +++ b/build.boot @@ -10,7 +10,7 @@ (require '[adzerk.bootlaces :refer :all]) -(def +version+ "3.0.0-alpha7") +(def +version+ "3.0.0-alpha8") (bootlaces! +version+) diff --git a/src/castra/core.cljs b/src/castra/core.cljs index a641bf4..7cb9fa5 100644 --- a/src/castra/core.cljs +++ b/src/castra/core.cljs @@ -39,8 +39,8 @@ [ex] (if (ex? ex) ex - (let [{:keys [status message data stack cause]} ex] - (doto (ex-info message (or data {}) cause) + (let [{:keys [status message stack case]} ex] + (doto (ex-info message ex cause) (aset "serverStack" stack) (aset "status" status))))) diff --git a/src/castra/middleware.clj b/src/castra/middleware.clj index 5094f48..db8adc5 100644 --- a/src/castra/middleware.clj +++ b/src/castra/middleware.clj @@ -6,7 +6,7 @@ [clojure.string :as string] [ring.util.request :as q :refer [body-string]] [clojure.set :as s :refer [intersection difference]] - [castra.core :as r :refer [ex ex? dfl-ex *pre* *request* *session* *validate-only*]] + [castra.core :as r :refer [*pre* *request* *session* *validate-only*]] [clojure.stacktrace :as u :refer [print-cause-trace print-stack-trace]]) (:import [java.io File] @@ -21,16 +21,14 @@ (string/replace string ansi-pattern "")) (defn- ex->clj [e] - (let [e (if (ex? e) e (dfl-ex e))] - {:message (.getMessage e) - :data (ex-data e) - :stack (strip-ansi - (with-out-str - (try (print-cause-trace e) + (->> (strip-ansi + (with-out-str + (try (print-cause-trace e) + (catch Throwable x + (try (print-stack-trace e) (catch Throwable x - (try (print-stack-trace e) - (catch Throwable x - (printf "No stack trace: %s" (.getMessage x))))))))})) + (printf "No stack trace: %s" (.getMessage x)))))))) + (assoc (ex-data e) :stack stack))) (defn- csrf! [] (when-not (get-in *request* [:headers "x-castra-csrf"]) From 4df0c16691ddad4de616351d09fdfae270d6fe5c Mon Sep 17 00:00:00 2001 From: jumblerg Date: Tue, 20 Dec 2016 05:24:15 -0500 Subject: [PATCH 2/3] oops --- src/castra/middleware.clj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/castra/middleware.clj b/src/castra/middleware.clj index db8adc5..59fe624 100644 --- a/src/castra/middleware.clj +++ b/src/castra/middleware.clj @@ -28,7 +28,7 @@ (try (print-stack-trace e) (catch Throwable x (printf "No stack trace: %s" (.getMessage x)))))))) - (assoc (ex-data e) :stack stack))) + (assoc (ex-data e) :stack))) (defn- csrf! [] (when-not (get-in *request* [:headers "x-castra-csrf"]) From 19b91ea07fe4a119196ec48ac33aa52903b8128f Mon Sep 17 00:00:00 2001 From: jumblerg Date: Wed, 21 Dec 2016 05:54:29 -0500 Subject: [PATCH 3/3] print errors handled by castra to stderr --- src/castra/core.cljs | 2 +- src/castra/middleware.clj | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/castra/core.cljs b/src/castra/core.cljs index 7cb9fa5..c48f309 100644 --- a/src/castra/core.cljs +++ b/src/castra/core.cljs @@ -39,7 +39,7 @@ [ex] (if (ex? ex) ex - (let [{:keys [status message stack case]} ex] + (let [{:keys [status message stack cause]} ex] (doto (ex-info message ex cause) (aset "serverStack" stack) (aset "status" status))))) diff --git a/src/castra/middleware.clj b/src/castra/middleware.clj index 59fe624..fb055fd 100644 --- a/src/castra/middleware.clj +++ b/src/castra/middleware.clj @@ -123,6 +123,7 @@ f #(do (csrf!) (do-rpc (vars) (expression body-keys req))) d (try (response body-keys req {:result (f) :state (when state-fn (state-fn))}) (catch Throwable e + (.printStackTrace e) (response body-keys req {:error (ex->clj e)})))] {:status 200, :headers h, :body d, :session @*session*}))))))