🎉 login with LDAP form and event

This commit is contained in:
Vitaly Kornilov 2020-07-24 18:19:18 +03:00 committed by Andrey Antukh
parent 764bc2074c
commit 005f70ed19
4 changed files with 40 additions and 3 deletions

View file

@ -78,6 +78,30 @@
(rx/of (du/profile-fetched profile) (rx/of (du/profile-fetched profile)
(rt/nav' :dashboard-team {:team-id team-id})))))) (rt/nav' :dashboard-team {:team-id team-id}))))))
(defn login-with-ldap
[{:keys [email password] :as data}]
(us/verify ::login-params data)
(ptk/reify ::login-with-ldap
ptk/UpdateEvent
(update [_ state]
(merge state (dissoc initial-state :route :router)))
ptk/WatchEvent
(watch [this state s]
(let [{:keys [on-error on-success]
:or {on-error identity
on-success identity}} (meta data)
params {:email email
:password password
:scope "webapp"}]
(->> (rx/timer 100)
(rx/mapcat #(rp/mutation :login-with-ldap params))
(rx/tap on-success)
(rx/catch (fn [err]
(on-error err)
(rx/empty)))
(rx/map logged-in))))))
;; --- Logout ;; --- Logout
(def clear-user-data (def clear-user-data

View file

@ -104,5 +104,11 @@
(->> (http/send! {:method :post :uri uri :body params}) (->> (http/send! {:method :post :uri uri :body params})
(rx/mapcat handle-response)))) (rx/mapcat handle-response))))
(defmethod mutation :login-with-ldap
[id params]
(let [uri (str cfg/public-uri "/api/login-ldap")]
(->> (http/send! {:method :post :uri uri :body params})
(rx/mapcat handle-response))))
(def client-error? http/client-error?) (def client-error? http/client-error?)
(def server-error? http/server-error?) (def server-error? http/server-error?)

View file

@ -43,6 +43,7 @@
(mf/defc login-form (mf/defc login-form
[{:keys [locale] :as props}] [{:keys [locale] :as props}]
(let [error? (mf/use-state false) (let [error? (mf/use-state false)
submit-event (mf/use-var da/login)
on-error on-error
(fn [form event] (fn [form event]
@ -53,7 +54,7 @@
(reset! error? false) (reset! error? false)
(let [params (with-meta (:clean-data form) (let [params (with-meta (:clean-data form)
{:on-error on-error})] {:on-error on-error})]
(st/emit! (da/login params))))] (st/emit! (@submit-event params))))]
[:* [:*
(when @error? (when @error?
@ -78,7 +79,12 @@
:help-icon i/eye :help-icon i/eye
:label (t locale "auth.password-label")}] :label (t locale "auth.password-label")}]
[:& submit-button [:& submit-button
{:label (t locale "auth.login-submit-label")}]]])) {:label (t locale "auth.login-submit-label")
:on-click #(reset! submit-event da/login)}]
(when cfg/login-with-ldap
[:& submit-button
{:label (t locale "auth.login-with-ldap-submit-label")
:on-click #(reset! submit-event da/login-with-ldap)}])]]))
(mf/defc login-page (mf/defc login-page
[{:keys [locale] :as props}] [{:keys [locale] :as props}]

View file

@ -121,12 +121,13 @@
i/arrow-slide]]])) i/arrow-slide]]]))
(mf/defc submit-button (mf/defc submit-button
[{:keys [label form] :as props}] [{:keys [label form on-click] :as props}]
(let [form (mf/use-ctx form-ctx)] (let [form (mf/use-ctx form-ctx)]
[:input.btn-primary.btn-large [:input.btn-primary.btn-large
{:name "submit" {:name "submit"
:class (when-not (:valid form) "btn-disabled") :class (when-not (:valid form) "btn-disabled")
:disabled (not (:valid form)) :disabled (not (:valid form))
:on-click on-click
:value label :value label
:type "submit"}])) :type "submit"}]))