From 8b0ead68320d1a52d2c150af6bb9f10dbae0e03f Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Mon, 16 Jun 2025 13:56:30 +0200 Subject: [PATCH] :bug: Fix regression on singup flow Move all params handling to prepare-register, just for consistency --- backend/src/app/rpc/commands/auth.clj | 20 ++++----- .../test/backend_tests/rpc_profile_test.clj | 42 +++++++++---------- frontend/src/app/main/ui/auth/register.cljs | 34 ++++++++------- 3 files changed, 47 insertions(+), 49 deletions(-) diff --git a/backend/src/app/rpc/commands/auth.clj b/backend/src/app/rpc/commands/auth.clj index 04c28dc02..301582a2f 100644 --- a/backend/src/app/rpc/commands/auth.clj +++ b/backend/src/app/rpc/commands/auth.clj @@ -231,13 +231,14 @@ :hint "email has complaint reports"))) (defn prepare-register - [{:keys [::db/pool] :as cfg} {:keys [email accept-newsletter-updates] :as params}] + [{:keys [::db/pool] :as cfg} {:keys [fullname email accept-newsletter-updates] :as params}] (validate-register-attempt! cfg params) (let [email (profile/clean-email email) profile (profile/get-profile-by-email pool email) params {:email email + :fullname fullname :password (:password params) :invitation-token (:invitation-token params) :backend "penpot" @@ -254,8 +255,10 @@ (def schema:prepare-register-profile [:map {:title "prepare-register-profile"} + [:fullname ::sm/text] [:email ::sm/email] [:password schema:password] + [:create-welcome-file {:optional true} :boolean] [:invitation-token {:optional true} schema:token]]) (sv/defmethod ::prepare-register-profile @@ -359,13 +362,9 @@ :extra-data ptoken}))) (defn register-profile - [{:keys [::db/conn ::wrk/executor] :as cfg} {:keys [token fullname theme] :as params}] - (let [theme (when (= theme "light") theme) - claims (tokens/verify (::setup/props cfg) {:token token :iss :prepared-register}) - params (-> claims - (into params) - (assoc :fullname fullname) - (assoc :theme theme)) + [{:keys [::db/conn ::wrk/executor] :as cfg} {:keys [token] :as params}] + (let [claims (tokens/verify (::setup/props cfg) {:token token :iss :prepared-register}) + params (into claims params) profile (if-let [profile-id (:profile-id claims)] (profile/get-profile conn profile-id) @@ -479,10 +478,7 @@ (def schema:register-profile [:map {:title "register-profile"} - [:token schema:token] - [:fullname [::sm/word-string {:max 100}]] - [:theme {:optional true} [:string {:max 10}]] - [:create-welcome-file {:optional true} :boolean]]) + [:token schema:token]]) (sv/defmethod ::register-profile {::rpc/auth false diff --git a/backend/test/backend_tests/rpc_profile_test.clj b/backend/test/backend_tests/rpc_profile_test.clj index 7e4645f67..8327d510c 100644 --- a/backend/test/backend_tests/rpc_profile_test.clj +++ b/backend/test/backend_tests/rpc_profile_test.clj @@ -379,15 +379,14 @@ (t/deftest prepare-register-and-register-profile-1 (let [data {::th/type :prepare-register-profile :email "user@example.com" + :fullname "foobar" :password "foobar"} out (th/command! data) token (get-in out [:result :token])] (t/is (string? token)) ;; try register without token - (let [data {::th/type :register-profile - :fullname "foobar" - :accept-terms-and-privacy true} + (let [data {::th/type :register-profile} out (th/command! data)] ;; (th/print-result! out) (let [error (:error out)] @@ -398,11 +397,8 @@ ;; try correct register (let [data {::th/type :register-profile :token token - :fullname "foobar" :utm_campaign "utma" - :mtm_campaign "mtma" - :accept-terms-and-privacy true - :accept-newsletter-subscription true}] + :mtm_campaign "mtma"}] (let [{:keys [result error]} (th/command! data)] (t/is (nil? error)))) @@ -424,6 +420,7 @@ ;; PREPARE REGISTER (let [data {::th/type :prepare-register-profile :email "hello@example.com" + :fullname "foobar" :password "foobar"} out (th/command! data) token (get-in out [:result :token])] @@ -432,10 +429,7 @@ ;; DO REGISTRATION (let [data {::th/type :register-profile - :token @current-token - :fullname "foobar" - :accept-terms-and-privacy true - :accept-newsletter-subscription true} + :token @current-token} out (th/command! data)] (t/is (nil? (:error out))) (t/is (= 1 (:call-count @mock)))) @@ -445,6 +439,7 @@ ;; PREPARE REGISTER: second attempt (let [data {::th/type :prepare-register-profile :email "hello@example.com" + :fullname "foobar" :password "foobar"} out (th/command! data) token (get-in out [:result :token])] @@ -479,6 +474,7 @@ ;; PREPARE REGISTER (let [data {::th/type :prepare-register-profile :email "hello@example.com" + :fullname "foobar" :password "foobar"} out (th/command! data) token (get-in out [:result :token])] @@ -487,10 +483,7 @@ ;; DO REGISTRATION (let [data {::th/type :register-profile - :token @current-token - :fullname "foobar" - :accept-terms-and-privacy true - :accept-newsletter-subscription true} + :token @current-token} out (th/command! data)] (t/is (nil? (:error out))) (t/is (= 1 (:call-count @mock)))) @@ -504,6 +497,7 @@ ;; PREPARE REGISTER: second attempt (let [data {::th/type :prepare-register-profile :email "hello@example.com" + :fullname "foobar" :password "foobar"} out (th/command! data) token (get-in out [:result :token])] @@ -514,10 +508,7 @@ :return true}] ;; DO REGISTRATION: second attempt (let [data {::th/type :register-profile - :token @current-token - :fullname "foobar" - :accept-terms-and-privacy true - :accept-newsletter-subscription true} + :token @current-token} out (th/command! data)] (t/is (nil? (:error out))) (t/is (= 0 (:call-count @mock)))))))) @@ -532,6 +523,7 @@ :member-email "user@example.com"}) data {::th/type :prepare-register-profile :invitation-token itoken + :fullname "foobar" :email "user@example.com" :password "foobar"} @@ -542,8 +534,7 @@ (let [rtoken (:token result) data {::th/type :register-profile - :token rtoken - :fullname "foobar"} + :token rtoken} {:keys [result error] :as out} (th/command! data)] ;; (th/print-result! out) @@ -563,6 +554,7 @@ data {::th/type :prepare-register-profile :invitation-token itoken :email "user@example.com" + :fullname "foobar" :password "foobar"} out (th/command! data)] @@ -582,6 +574,7 @@ :member-email "user@example.com"}) data {::th/type :prepare-register-profile :invitation-token itoken + :fullname "foobar" :email "user@example.com" :password "foobar"} out (th/command! data)] @@ -604,6 +597,7 @@ data {::th/type :prepare-register-profile :invitation-token itoken :email "user@example.com" + :fullname "foobar" :password "foobar"} out (th/command! data)] @@ -624,6 +618,7 @@ data {::th/type :prepare-register-profile :invitation-token itoken + :fullname "foobar" :email "user@example.com" :password "foobar"} out (th/command! data)] @@ -636,6 +631,7 @@ (t/deftest prepare-register-with-registration-disabled (with-redefs [app.config/flags #{}] (let [data {::th/type :prepare-register-profile + :fullname "foobar" :email "user@example.com" :password "foobar"} out (th/command! data)] @@ -648,6 +644,7 @@ (t/deftest prepare-register-with-existing-user (let [profile (th/create-profile* 1) data {::th/type :prepare-register-profile + :fullname "foobar" :email (:email profile) :password "foobar"} out (th/command! data)] @@ -660,6 +657,7 @@ (let [pool (:app.db/pool th/*system*) data {::th/type :prepare-register-profile + :fullname "foobar" :email "user@example.com" :password "foobar"}] @@ -674,6 +672,7 @@ (t/deftest register-profile-with-complained-email (let [pool (:app.db/pool th/*system*) data {::th/type :prepare-register-profile + :fullname "foobar" :email "user@example.com" :password "foobar"}] @@ -688,6 +687,7 @@ (t/deftest register-profile-with-email-as-password (let [data {::th/type :prepare-register-profile + :fullname "foobar" :email "user@example.com" :password "USER@example.com"} out (th/command! data)] diff --git a/frontend/src/app/main/ui/auth/register.cljs b/frontend/src/app/main/ui/auth/register.cljs index 3cedef6c8..d066d1ecf 100644 --- a/frontend/src/app/main/ui/auth/register.cljs +++ b/frontend/src/app/main/ui/auth/register.cljs @@ -82,7 +82,7 @@ on-error (mf/use-fn - (fn [form cause] + (fn [cause] (let [{:keys [type code] :as edata} (ex-data cause)] (condp = [type code] [:restriction :registration-disabled] @@ -101,7 +101,10 @@ (swap! form assoc-in [:errors :password] {:message (tr "errors.email-as-password")}) - (st/emit! (ntf/error (tr "errors.generic"))))))) + (do + (when-let [explain (get edata :explain)] + (println explain)) + (st/emit! (ntf/error (tr "errors.generic")))))))) on-success (mf/use-fn @@ -109,10 +112,9 @@ (fn [params] (if (fn? on-success-callback) (on-success-callback (:email params)) - (cond - (some? (:token params)) - (let [token (:token params)] + (some? (:invitation-token params)) + (let [token (:invitation-token params)] (st/emit! (rt/nav :auth-verify-token {:token token}))) (:is-active params) @@ -126,25 +128,25 @@ on-register-profile (mf/use-fn (mf/deps on-success on-error) - (fn [form] + (fn [params] (reset! submitted? true) - (let [create-welcome-file? - (cf/external-feature-flag "onboarding-03" "test") - - params - (cond-> form - create-welcome-file? (assoc :create-welcome-file true))] - (->> (rp/cmd! :register-profile params) - (rx/subs! on-success on-error #(reset! submitted? false)))))) + (->> (rp/cmd! :register-profile params) + (rx/subs! on-success on-error #(reset! submitted? false))))) on-submit (mf/use-fn (mf/deps on-success-callback) (fn [form _event] (reset! submitted? true) - (let [cdata (:clean-data @form)] + (let [create-welcome-file? + (cf/external-feature-flag "onboarding-03" "test") + + cdata + (cond-> (:clean-data @form) + create-welcome-file? + (assoc :create-welcome-file true))] + (->> (rp/cmd! :prepare-register-profile cdata) - (rx/map #(merge % cdata)) (rx/finalize #(reset! submitted? false)) (rx/subs! on-register-profile)))))]