From 7f624b5c6135da451967d81bf570724386faf1c5 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Tue, 9 Mar 2021 21:37:53 +0100 Subject: [PATCH 1/4] :sparkles: Minor improvements on logging subsystem. --- backend/resources/log4j2.xml | 3 ++- backend/scripts/repl | 2 +- backend/src/app/http/session.clj | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/backend/resources/log4j2.xml b/backend/resources/log4j2.xml index acfa8c7a9..0c7dca017 100644 --- a/backend/resources/log4j2.xml +++ b/backend/resources/log4j2.xml @@ -23,6 +23,7 @@ + @@ -32,7 +33,7 @@ - + diff --git a/backend/scripts/repl b/backend/scripts/repl index 147661f35..cfbf661f4 100755 --- a/backend/scripts/repl +++ b/backend/scripts/repl @@ -2,7 +2,7 @@ export PENPOT_ASSERTS_ENABLED=true -export OPTIONS="-A:jmx-remote:dev -J-Dclojure.tools.logging.factory=clojure.tools.logging.impl/log4j2-factory -J-Xms512m -J-Xmx512m" +export OPTIONS="-A:jmx-remote:dev -J-Dclojure.tools.logging.factory=clojure.tools.logging.impl/log4j2-factory -J-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager -J-Xms512m -J-Xmx512m" export OPTIONS_EVAL="nil" # export OPTIONS_EVAL="(set! *warn-on-reflection* true)" diff --git a/backend/src/app/http/session.clj b/backend/src/app/http/session.clj index 0c047b310..bb5afecc5 100644 --- a/backend/src/app/http/session.clj +++ b/backend/src/app/http/session.clj @@ -147,7 +147,7 @@ (mcnt :inc) (if (ex/exception? result) (log/error result "updater: unexpected error on update sessions") - (log/tracef "updater: updated %s sessions (reason: %s)." result (name reason))) + (log/debugf "updater: updated %s sessions (reason: %s)." result (name reason))) (recur)))))) (defn- timeout-chan From 3d043adb030776d5dcb5db027cdec3c4f8b70db9 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Tue, 9 Mar 2021 21:38:22 +0100 Subject: [PATCH 2/4] :bug: Fix wrong handling of deleted users on password recovery. --- backend/src/app/rpc/queries/profile.clj | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/backend/src/app/rpc/queries/profile.clj b/backend/src/app/rpc/queries/profile.clj index 59ed2e8b0..29fb1124b 100644 --- a/backend/src/app/rpc/queries/profile.clj +++ b/backend/src/app/rpc/queries/profile.clj @@ -13,10 +13,8 @@ [app.common.spec :as us] [app.common.uuid :as uuid] [app.db :as db] - [app.db.sql :as sql] [app.util.services :as sv] - [clojure.spec.alpha :as s] - [cuerdas.core :as str])) + [clojure.spec.alpha :as s])) ;; --- Helpers & Specs @@ -97,12 +95,16 @@ profile)) +(def sql:retrieve-profile-by-email + "select p.* from profile as p + where p.email = lower(?) + and p.deleted_at is null") + (defn retrieve-profile-data-by-email [conn email] - (let [sql (sql/select :profile {:email (str/lower email)}) - data (db/exec-one! conn sql)] - (when (and data (nil? (:deleted-at data))) - (decode-profile-row data)))) + (let [sql [sql:retrieve-profile-by-email email]] + (some-> (db/exec-one! conn sql) + (decode-profile-row)))) ;; --- Attrs Helpers From ed3d57179397b1cd06f9b612de83d89d2fb51d41 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Mon, 8 Mar 2021 13:14:52 +0100 Subject: [PATCH 3/4] :tada: Backport to main the blob encoding v3. Safer approach (uses json instead of custom binary format) than v2. --- backend/dev/user.clj | 15 +++++++++++---- backend/src/app/util/blob.clj | 27 +++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/backend/dev/user.clj b/backend/dev/user.clj index 5b861a9fa..d7ee62abf 100644 --- a/backend/dev/user.clj +++ b/backend/dev/user.clj @@ -12,11 +12,12 @@ [app.common.exceptions :as ex] [app.config :as cfg] [app.main :as main] + [app.util.blob :as blob] + [app.util.json :as json] [app.util.time :as dt] [app.util.transit :as t] - [app.util.json :as json] [clojure.java.io :as io] - [clojure.pprint :refer [pprint]] + [clojure.pprint :refer [pprint print-table]] [clojure.repl :refer :all] [clojure.spec.alpha :as s] [clojure.spec.gen.alpha :as sgen] @@ -25,8 +26,7 @@ [clojure.tools.namespace.repl :as repl] [clojure.walk :refer [macroexpand-all]] [criterium.core :refer [quick-bench bench with-progress-reporting]] - [integrant.core :as ig] - [taoensso.nippy :as nippy])) + [integrant.core :as ig])) (repl/disable-reload! (find-ns 'integrant.core)) @@ -91,3 +91,10 @@ [] (stop) (repl/refresh-all :after 'user/start)) + +(defn compression-bench + [data] + (print-table + [{:v1 (alength (blob/encode data {:version 1})) + :v2 (alength (blob/encode data {:version 2})) + :v3 (alength (blob/encode data {:version 3}))}])) diff --git a/backend/src/app/util/blob.clj b/backend/src/app/util/blob.clj index dd1624b1f..b478f9de2 100644 --- a/backend/src/app/util/blob.clj +++ b/backend/src/app/util/blob.clj @@ -28,8 +28,10 @@ (declare decode-v1) (declare decode-v2) +(declare decode-v3) (declare encode-v1) (declare encode-v2) +(declare encode-v3) (def default-version (:default-blob-version cfg/config 1)) @@ -40,6 +42,7 @@ (case (long version) 1 (encode-v1 data) 2 (encode-v2 data) + 3 (encode-v3 data) (throw (ex-info "unsupported version" {:version version}))))) (defn decode @@ -52,6 +55,7 @@ (case version 1 (decode-v1 data ulen) 2 (decode-v2 data ulen) + 3 (decode-v3 data ulen) (throw (ex-info "unsupported version" {:version version})))))) ;; --- IMPL @@ -100,3 +104,26 @@ (Zstd/decompressByteArray ^bytes udata 0 ulen ^bytes cdata 6 (- (alength cdata) 6)) (n/fast-thaw udata))) + +(defn- encode-v3 + [data] + (let [data (t/encode data {:type :json}) + dlen (alength ^bytes data) + mlen (Zstd/compressBound dlen) + cdata (byte-array mlen) + clen (Zstd/compressByteArray ^bytes cdata 0 mlen + ^bytes data 0 dlen + 4)] + (with-open [^ByteArrayOutputStream baos (ByteArrayOutputStream. (+ (alength cdata) 2 4)) + ^DataOutputStream dos (DataOutputStream. baos)] + (.writeShort dos (short 3)) ;; version number + (.writeInt dos (int dlen)) + (.write dos ^bytes cdata (int 0) clen) + (.toByteArray baos)))) + +(defn- decode-v3 + [^bytes cdata ^long ulen] + (let [udata (byte-array ulen)] + (Zstd/decompressByteArray ^bytes udata 0 ulen + ^bytes cdata 6 (- (alength cdata) 6)) + (t/decode udata {:type :json}))) From b0336e1f7b96c8875bc5206774b1c24af092acb3 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Tue, 9 Mar 2021 21:55:54 +0100 Subject: [PATCH 4/4] :bug: Fix broken styles on team invitation modal. https://tree.taiga.io/project/penpot/issue/1404 --- frontend/src/app/main/ui/components/forms.cljs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/main/ui/components/forms.cljs b/frontend/src/app/main/ui/components/forms.cljs index 1df0408bb..915f5faa2 100644 --- a/frontend/src/app/main/ui/components/forms.cljs +++ b/frontend/src/app/main/ui/components/forms.cljs @@ -23,7 +23,7 @@ (mf/defc input [{:keys [label help-icon disabled form hint trim] :as props}] - (let [input-type (get props :type) + (let [input-type (get props :type "text") input-name (get props :name) more-classes (get props :class)