From 82b43ddf904189157ed6d349ca933ae7c65be528 Mon Sep 17 00:00:00 2001 From: didier amyot Date: Sun, 14 Oct 2018 08:46:45 -0400 Subject: [PATCH] link the logic of the client-server login logic --- project.clj | 1 - src/clj/skirmish/bookkeeper/core.clj | 6 ++--- src/clj/skirmish/broker/core.clj | 7 +++--- src/clj/skirmish/rest/util.clj | 6 +++++ src/clj/skirmish/wui/handler.clj | 1 + .../wui/components/create_order_page.cljs | 2 +- .../skirmish/wui/components/home_page.cljs | 25 +++++++++++++++---- .../wui/components/portfolio_page.cljs | 8 +++--- .../skirmish/wui/components/todo_page.cljs | 7 +++++- src/cljs/skirmish/wui/components/topbar.cljs | 5 ++-- src/cljs/skirmish/wui/core.cljs | 21 ++++++++++++---- 11 files changed, 63 insertions(+), 26 deletions(-) diff --git a/project.clj b/project.clj index bbfd924..29135f4 100644 --- a/project.clj +++ b/project.clj @@ -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"]] diff --git a/src/clj/skirmish/bookkeeper/core.clj b/src/clj/skirmish/bookkeeper/core.clj index 61964d6..297688d 100644 --- a/src/clj/skirmish/bookkeeper/core.clj +++ b/src/clj/skirmish/bookkeeper/core.clj @@ -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))) diff --git a/src/clj/skirmish/broker/core.clj b/src/clj/skirmish/broker/core.clj index 14961c0..befd11b 100644 --- a/src/clj/skirmish/broker/core.clj +++ b/src/clj/skirmish/broker/core.clj @@ -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))) diff --git a/src/clj/skirmish/rest/util.clj b/src/clj/skirmish/rest/util.clj index e17d4d1..205a89f 100644 --- a/src/clj/skirmish/rest/util.clj +++ b/src/clj/skirmish/rest/util.clj @@ -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] diff --git a/src/clj/skirmish/wui/handler.clj b/src/clj/skirmish/wui/handler.clj index ca798a2..30cc9b2 100644 --- a/src/clj/skirmish/wui/handler.clj +++ b/src/clj/skirmish/wui/handler.clj @@ -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 diff --git a/src/cljs/skirmish/wui/components/create_order_page.cljs b/src/cljs/skirmish/wui/components/create_order_page.cljs index 2b90d08..27059de 100644 --- a/src/cljs/skirmish/wui/components/create_order_page.cljs +++ b/src/cljs/skirmish/wui/components/create_order_page.cljs @@ -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) diff --git a/src/cljs/skirmish/wui/components/home_page.cljs b/src/cljs/skirmish/wui/components/home_page.cljs index 83738ae..e3d2756 100644 --- a/src/cljs/skirmish/wui/components/home_page.cljs +++ b/src/cljs/skirmish/wui/components/home_page.cljs @@ -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 [> s str (re-matches email-pattern) some?))) + +(defn create-user [email] + (go + (let [url "http://localhost:1605/api/1/users" + resp ( % .-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])]]]) \ No newline at end of file + (for [[i sentence] (map vector (range) lorem-ipsum)] + [:p {:key i} sentence])]]]) \ No newline at end of file diff --git a/src/cljs/skirmish/wui/components/portfolio_page.cljs b/src/cljs/skirmish/wui/components/portfolio_page.cljs index c0fa363..d99a2e7 100644 --- a/src/cljs/skirmish/wui/components/portfolio_page.cljs +++ b/src/cljs/skirmish/wui/components/portfolio_page.cljs @@ -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)])) diff --git a/src/cljs/skirmish/wui/components/todo_page.cljs b/src/cljs/skirmish/wui/components/todo_page.cljs index fe40489..5878115 100644 --- a/src/cljs/skirmish/wui/components/todo_page.cljs +++ b/src/cljs/skirmish/wui/components/todo_page.cljs @@ -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."] diff --git a/src/cljs/skirmish/wui/components/topbar.cljs b/src/cljs/skirmish/wui/components/topbar.cljs index ecdb782..f8e579e 100644 --- a/src/cljs/skirmish/wui/components/topbar.cljs +++ b/src/cljs/skirmish/wui/components/topbar.cljs @@ -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"]]]))) diff --git a/src/cljs/skirmish/wui/core.cljs b/src/cljs/skirmish/wui/core.cljs index 127bd9e..904851a 100644 --- a/src/cljs/skirmish/wui/core.cljs +++ b/src/cljs/skirmish/wui/core.cljs @@ -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 [ 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