link the logic of the client-server login logic

This commit is contained in:
didier amyot committed 2018-10-14 08:46:45 -04:00
1 parent 1b0d58d1dd
commit 82b43ddf90
11 files changed
+63 -26

No files matched your search

-1
View File
@@ -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"]]
+2 -4
View File
@@ -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)))
+4 -3
View File
@@ -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)))
+6
View File
@@ -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]
+1
View File
@@ -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."]
+3 -2
View File
@@ -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"]]])))
+16 -5
View File
@@ -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