0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-01-10 08:50:57 -05:00

Add backend integration for auth (login page).

This commit is contained in:
Andrey Antukh 2016-03-15 20:54:04 +02:00
parent 735ad645f7
commit de233cdbf5

View file

@ -13,12 +13,12 @@
[uxbox.router :as r] [uxbox.router :as r]
[uxbox.state :as st] [uxbox.state :as st]
[uxbox.schema :as sc] [uxbox.schema :as sc]
[uxbox.util.time :as time])) [uxbox.locales :refer (tr)]
[uxbox.ui.messages :as uum]))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Schema
;; Schemas ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(def ^:const +login-schema+ (def ^:const +login-schema+
{:username [sc/required sc/string] {:username [sc/required sc/string]
@ -30,33 +30,24 @@
:photo [sc/required sc/string] :photo [sc/required sc/string]
:fullname [sc/required sc/string]}) :fullname [sc/required sc/string]})
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Events ;; Events
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defn- login-success
[{:keys [full photo username email] :as params}]
(sc/validate! +user-schema+ params)
(reify
rs/UpdateEvent
(-apply-update [_ state]
(assoc state :auth params))
rs/EffectEvent
(-apply-effect [_ state]
(r/go :dashboard/projects))))
(defn login (defn login
[{:keys [username password] :as params}] [{:keys [username password] :as params}]
(sc/validate! +login-schema+ params) (sc/validate! +login-schema+ params)
(letfn [(on-error [err] (letfn [(on-error [err]
(rx/of (login-success {}))) (uum/error (tr "errors.auth"))
(rx/empty))
(on-success [value] (on-success [value]
(rx/of (login-success value)))] (rx/of (rs/swap #(assoc % :auth value))
(r/navigate :dashboard/projects)))]
(reify (reify
rs/WatchEvent rs/WatchEvent
(-apply-watch [_ state] (-apply-watch [_ state]
(->> (rp/do :login params) (->> (rp/do :login (merge params {:scope "webapp"}))
(rx/from-promise)
(rx/flat-map on-success) (rx/flat-map on-success)
(rx/catch on-error)))))) (rx/catch on-error))))))