link the logic of the client-server login logic
This commit is contained in:
1 parent
1b0d58d1dd
commit
82b43ddf90
11 files changed
+63
-26
No files matched your search
@@ -148,7 +148,6 @@
|
||||
|
||||
|
||||
:source-paths ["env/dev/clj"]
|
||||
:java-source-paths ["src/java"]
|
||||
:plugins [[lein-figwheel "0.5.16"]
|
||||
[deraen/lein-sass4clj "0.3.1"]]
|
||||
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
(ns skirmish.bookkeeper.core
|
||||
(:require [org.httpkit.server :refer [run-server]]
|
||||
[compojure.handler :refer [api]]
|
||||
[skirmish.util :refer [block-thread]]
|
||||
[taoensso.timbre :as timbre]
|
||||
[skirmish.middleware.core :refer [create-map-exchange-apis]]
|
||||
[skirmish.bookkeeper.bookkeeper :refer [create-routes-for-bookkeeper]]
|
||||
[ring.middleware.cors :refer [wrap-cors]]))
|
||||
[skirmish.rest.util :refer [cors-middleware]]))
|
||||
|
||||
(defn -main [config securities-api exchange-apis-mult-chan]
|
||||
(let [bookkeeper-config (:api-bookkeeper config)
|
||||
@@ -13,6 +12,5 @@
|
||||
api-routes (create-routes-for-bookkeeper exchange-apis config)]
|
||||
(timbre/info "Running skirmish.bookkeeper.core server with config: " bookkeeper-config)
|
||||
(run-server
|
||||
(-> api-routes api (wrap-cors :access-control-allow-origin #"http://localhost:3449"
|
||||
:access-control-allow-methods [:get :put :post :delete]))
|
||||
(-> api-routes api cors-middleware)
|
||||
bookkeeper-config)))
|
||||
@@ -1,12 +1,11 @@
|
||||
(ns skirmish.broker.core
|
||||
(:require [org.httpkit.server :refer [run-server]]
|
||||
[compojure.handler :refer [api]]
|
||||
[skirmish.util :refer [block-thread]]
|
||||
[skirmish.broker.broker :refer [create-routes]]
|
||||
[taoensso.timbre :as timbre]
|
||||
[skirmish.middleware.core :refer [create-map-exchange-apis]]
|
||||
[skirmish.broker.db :refer [create-connection]]
|
||||
[ring.middleware.cors :refer [wrap-cors]]))
|
||||
[skirmish.rest.util :refer [cors-middleware]]))
|
||||
|
||||
|
||||
(defn -main [config securities-api exchange-apis]
|
||||
@@ -14,4 +13,6 @@
|
||||
conn (create-connection (-> webserver-config :datomic :transactor-url))
|
||||
api-routes (create-routes conn)]
|
||||
(timbre/info "Running skirmish.broker.core server with config: " webserver-config)
|
||||
(run-server (api api-routes) webserver-config)))
|
||||
(run-server
|
||||
(-> api-routes api cors-middleware)
|
||||
webserver-config)))
|
||||
@@ -2,6 +2,7 @@
|
||||
(:require [cheshire.core :refer [generate-string]]
|
||||
[slingshot.slingshot :refer [try+ throw+]]
|
||||
[clojure.edn :as edn]
|
||||
[ring.middleware.cors :refer [wrap-cors]]
|
||||
[clojure.string :refer [split starts-with? ends-with?]]))
|
||||
|
||||
;; Access-Control-Allow-Origin
|
||||
@@ -10,6 +11,11 @@
|
||||
[["application/json" generate-string]
|
||||
["application/edn" str]])
|
||||
|
||||
(defn cors-middleware [handler]
|
||||
(wrap-cors handler
|
||||
:access-control-allow-origin #"http://localhost:3449"
|
||||
:access-control-allow-credentials true
|
||||
:access-control-allow-methods [:get :put :post :delete]))
|
||||
|
||||
|
||||
(defn create-mime-type-predicate [accept]
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
(defn head []
|
||||
[:head
|
||||
[:meta {:charset "utf-8"}]
|
||||
[:title "Skirmish"]
|
||||
[:meta {:name "viewport"
|
||||
:content "width=device-width, initial-scale=1"}]
|
||||
(include-css "/css/site.css"); use "/css/site.min.css" in production
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
[:div.columns
|
||||
[:div.column.content
|
||||
[:div.columns.is-centered
|
||||
[:column
|
||||
[:div
|
||||
[:div.field.has-addons
|
||||
(select-type order)
|
||||
(select-securities order)
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
(ns skirmish.wui.components.home-page
|
||||
(:require [reagent.core :refer [atom]]))
|
||||
(:require [cljs-http.client :as http]
|
||||
[reagent.core :refer [atom]]
|
||||
[cljs.core.async :refer [<!] :refer-macros [go]]
|
||||
[secretary.core :as secretary]))
|
||||
|
||||
|
||||
(def lorem-ipsum ["Lorem ipsum dolor amet pickled bushwick next level adaptogen ugh franzen salvia hoodie man bun organic kinfolk. Hammock pickled banjo, artisan single-origin coffee brunch 90's occupy taxidermy. Put a bird on it gentrify offal tilde. Authentic put a bird on it prism semiotics, roof party banh mi typewriter. XOXO schlitz sriracha godard."
|
||||
@@ -11,8 +14,16 @@
|
||||
(let [email-pattern #"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$"]
|
||||
(->> s str (re-matches email-pattern) some?)))
|
||||
|
||||
|
||||
(defn create-user [email]
|
||||
(go
|
||||
(let [url "http://localhost:1605/api/1/users"
|
||||
resp (<! (http/post url {:edn-params {:email email}}))]
|
||||
(secretary/dispatch! (str "/home/" email)))))
|
||||
|
||||
|
||||
(defn login [state]
|
||||
(let [login-field (atom (get state :user ""))
|
||||
(let [login-field (atom (get-in state [:user :skirmish.broker.user/email] ""))
|
||||
on-change #(reset! login-field (-> % .-target .-value))]
|
||||
(fn []
|
||||
(let [disabled? (-> @login-field email? not)
|
||||
@@ -27,7 +38,11 @@
|
||||
:placeholder "boris.johnson@redneck.co.uk"
|
||||
:style {:margin-right "1em"}}]
|
||||
[:div.control
|
||||
[:a.button.is-link.has-background-primary {:href href :disabled disabled?} "login"]]]]]))))
|
||||
[:a.button.is-link.has-background-primary {:href href
|
||||
:disabled disabled?} "login"]]
|
||||
[:div.control
|
||||
[:button.button.is-link.has-background-primary {:disabled disabled?
|
||||
:on-click #(create-user @login-field)} "create"]]]]]))))
|
||||
|
||||
|
||||
(defn page [state]
|
||||
@@ -36,5 +51,5 @@
|
||||
[:div.container
|
||||
[:h1.title "lorem ipsum"]
|
||||
[login state]
|
||||
(for [sentence lorem-ipsum]
|
||||
[:p sentence])]]])
|
||||
(for [[i sentence] (map vector (range) lorem-ipsum)]
|
||||
[:p {:key i} sentence])]]])
|
||||
@@ -8,14 +8,14 @@
|
||||
[:tr [:th "Security"] [:th "Amount"] [:th "Face Value"]]]
|
||||
[:tbody
|
||||
(for [sec-summary portfolio]
|
||||
[:tr
|
||||
[:tr {:key (:id sec-summary)}
|
||||
[:td (:sec-id sec-summary)]
|
||||
[:td [secunit (:sec-id sec-summary) (:amount sec-summary)]]
|
||||
[:td [secunit :dapm (:face-value sec-summary)]]])]])
|
||||
|
||||
(defn page []
|
||||
(let [porfolio [{:sec-id :foo :amount 100 :face-value 1265}
|
||||
{:sec-id :toto :amount 100 :face-value 1265}
|
||||
{:sec-id :foo :amount 100 :face-value 1265}]]
|
||||
(let [porfolio [{:id 12 :sec-id :foo :amount 100 :face-value 1265}
|
||||
{:id 54 :sec-id :toto :amount 100 :face-value 1265}
|
||||
{:id 66 :sec-id :foo :amount 100 :face-value 1265}]]
|
||||
[:div.content
|
||||
(make-portfolio-summary-table porfolio)]))
|
||||
@@ -15,7 +15,7 @@
|
||||
[:li done "implement basic login in the wui"]
|
||||
[:li done "implement basic web server"]
|
||||
[:li done "implement stupid login on server side."]
|
||||
[:li "link the logic of the client-server login logic"]
|
||||
[:li on-it "link the logic of the client-server login logic"]
|
||||
[:li "add the notion of 'accounts' in the server. An
|
||||
user should have many accounts; one for each security
|
||||
he owns"]
|
||||
@@ -23,6 +23,11 @@
|
||||
[:li "when a new user logs in, he should receive some sort of money"]
|
||||
[:li "implement buy/sell securities."]]]
|
||||
|
||||
[:li "Cleaning up..."
|
||||
[:ul
|
||||
[:li "All the urls on the client should be at the same place."]
|
||||
[:li "We should have a nice way to handle routes on the server."]]]
|
||||
|
||||
[:li "Implement Ledger"
|
||||
[:ol
|
||||
[:li "Use ledger as source of through in each sub server."]
|
||||
|
||||
@@ -12,9 +12,10 @@
|
||||
|
||||
(defn- user-dropdown [state]
|
||||
(when (:user @state)
|
||||
(let [icon [:i.fa.fa-sign-out {:aria-hidden true}]]
|
||||
(let [icon [:i.fa.fa-sign-out {:aria-hidden true}]
|
||||
email (get-in @state [:user :skirmish.broker.user/email])]
|
||||
[:div.navbar-item.has-dropdown.is-hoverable
|
||||
[:a.navbar-link {} (str "[ " (:user @state) " ]")]
|
||||
[:a.navbar-link {} (str "[ " email " ]")]
|
||||
[:div.navbar-dropdown
|
||||
[:a.navbar-item {:href "/home/"} icon " logout"]]])))
|
||||
|
||||
|
||||
@@ -3,6 +3,9 @@
|
||||
[skirmish.wui.pages :as pages]
|
||||
[skirmish.wui.components.topbar :refer [top-bar]]
|
||||
[reagent.session :as session]
|
||||
[cljs-http.client :as http]
|
||||
;[taoensso.timbre :as timbre :refer-macros [info warn]]
|
||||
[cljs.core.async :refer [<!] :refer-macros [go]]
|
||||
[secretary.core :as secretary :include-macros true]
|
||||
[accountant.core :as accountant]))
|
||||
|
||||
@@ -12,7 +15,16 @@
|
||||
|
||||
(defonce state (atom {}))
|
||||
|
||||
|
||||
(defn login [email]
|
||||
(go (let [resp (<! (http/get (str "http://localhost:1605/api/1/users/" email)))]
|
||||
(if (= (:status resp) 200)
|
||||
(do
|
||||
(println "Logging in as:" (-> resp :body type))
|
||||
(session/put! :current-page #'pages/home-page)
|
||||
(swap! state #(into % {:page :home :user (:body resp)})))
|
||||
(do
|
||||
(println "Cannot log in as" email)
|
||||
(swap! state #(dissoc % :user)))))))
|
||||
|
||||
;; -------------------------
|
||||
;; Routes
|
||||
@@ -26,9 +38,8 @@
|
||||
(session/put! :current-page #'pages/home-page)
|
||||
(swap! state #(into % {:page :home})))
|
||||
|
||||
(secretary/defroute "/home/:username" [username]
|
||||
(session/put! :current-page #'pages/home-page)
|
||||
(swap! state #(into % {:page :home :user username})))
|
||||
(secretary/defroute "/home/:email" [email]
|
||||
(login email))
|
||||
|
||||
(secretary/defroute "/home/" []
|
||||
(session/put! :current-page #'pages/home-page)
|
||||
@@ -60,7 +71,7 @@
|
||||
(defn current-page []
|
||||
"This is the basic page setup."
|
||||
[:div
|
||||
(top-bar state)
|
||||
[top-bar state]
|
||||
[:div
|
||||
[:div.columns
|
||||
[:div.column.is-8.is-offset-2
|
||||
|
||||
Reference in new issue
Block a user