From 2cc193a66fc4394735b2fabc5e06c9ebe6dae091 Mon Sep 17 00:00:00 2001 From: BC Date: Tue, 31 Jul 2018 17:55:57 -0700 Subject: [PATCH] adding more validation. --- docker-compose.prod.yml | 2 ++ project.clj | 2 +- src/clj/auto_ap/graphql/invoices.clj | 6 ++++-- src/clj/auto_ap/routes/graphql.clj | 15 ++++++++++----- src/cljs/auto_ap/views/pages/unpaid_invoices.cljs | 2 +- 5 files changed, 18 insertions(+), 9 deletions(-) diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index c9160508..0b2539f6 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -5,6 +5,8 @@ services: ports: - "80:80" - "443:443" + labels: + - com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy=true volumes: - /var/run/docker.sock:/tmp/docker.sock:ro - /opt/integreat/prod/certs/:/etc/nginx/certs:ro diff --git a/project.clj b/project.clj index 970bdd0c..9c7a8c13 100644 --- a/project.clj +++ b/project.clj @@ -71,7 +71,7 @@ :plugins [[lein-figwheel "0.5.13"] [lein-pdo "0.1.1"] [cider/cider-nrepl "0.16.0"]] - :jvm-opts ["-Dconfig=config/dev.edn" #_#_"--add-modules" "java.xml.bind"]} + :jvm-opts ["-Dconfig=config/dev.edn" "--add-modules" "java.xml.bind"]} :uberjar {:prep-tasks [["cljsbuild" "once" "min"] "compile"]} :provided {:dependencies [[org.clojure/clojurescript "1.10.238"] [reagent "0.7.0"] diff --git a/src/clj/auto_ap/graphql/invoices.clj b/src/clj/auto_ap/graphql/invoices.clj index ad246094..34d4e827 100644 --- a/src/clj/auto_ap/graphql/invoices.clj +++ b/src/clj/auto_ap/graphql/invoices.clj @@ -16,9 +16,11 @@ (when (seq (invoices/find-conflicting {:invoice-number invoice_number :vendor-id vendor_id :company-id company_id})) - (throw (ex-info "that invoice already exists" {:invoice-number invoice_number}))) + (throw (ex-info (str "Invoice '" invoice_number "' already exists.") {:invoice-number invoice_number}))) (let [vendor (-create-or-get-vendor vendor_id vendor_name) _ (assert-can-see-company (:id context) company_id) + _ (when-not (:default-expense-account vendor) + (throw (ex-info (str "Vendor '" (:name vendor) "' does not have a default expense acount.") {:vendor-id vendor_id} ))) company (companies/get-by-id company_id) [invoice] (invoices/insert-multi! [{:invoice-number invoice_number @@ -44,7 +46,7 @@ :invoice-number invoice_number :vendor-id (:vendor-id invoice) :company-id (:company-id invoice)})) - (throw (ex-info "that invoice already exists" {:invoice-number invoice_number}))) + (throw (ex-info (str "Invoice '" invoice_number "' already exists.") {:invoice-number invoice_number}))) paid-amount (- (:total invoice) (:outstanding-balance invoice)) _ (assert-can-see-company (:id context) (:company-id invoice)) updated-invoice (invoices/update (-> in diff --git a/src/clj/auto_ap/routes/graphql.clj b/src/clj/auto_ap/routes/graphql.clj index 6081d471..be8323e2 100644 --- a/src/clj/auto_ap/routes/graphql.clj +++ b/src/clj/auto_ap/routes/graphql.clj @@ -16,9 +16,14 @@ (when (= "none" (:role (:identity r))) (throw-unauthorized)) - (let [variables (some-> (query-params "variables") - edn/read-string)] - {:status 200 - :body (pr-str (ql/query (:identity r) (query-params "query") variables )) - :headers {"Content-Type" "application/edn"}}))) + (try + (let [variables (some-> (query-params "variables") + edn/read-string)] + {:status 200 + :body (pr-str (ql/query (:identity r) (query-params "query") variables )) + :headers {"Content-Type" "application/edn"}}) + (catch Exception e + {:status 400 + :body (pr-str {:data (merge {:message (.getMessage e)} (ex-data e))}) + :headers {"Content-Type" "application/edn"}})))) wrap-secure)) diff --git a/src/cljs/auto_ap/views/pages/unpaid_invoices.cljs b/src/cljs/auto_ap/views/pages/unpaid_invoices.cljs index 485fa9c0..74de3da9 100644 --- a/src/cljs/auto_ap/views/pages/unpaid_invoices.cljs +++ b/src/cljs/auto_ap/views/pages/unpaid_invoices.cljs @@ -344,7 +344,7 @@ (re-frame/reg-event-fx ::invoice-create-failed (fn [{:keys [db]} [_ data]] - {:dispatch [::events/modal-failed ::new-invoice "That invoice already exists."]})) + {:dispatch [::events/modal-failed ::new-invoice (:message data)]})) (re-frame/reg-event-fx ::invoice-created