From 0878ccbf20e3888511f37036939c98cfe856e7b5 Mon Sep 17 00:00:00 2001 From: BC Date: Thu, 2 Aug 2018 21:56:36 -0700 Subject: [PATCH] added ability to see existing accounts. --- src/clj/auto_ap/routes/yodlee.clj | 8 +- src/clj/auto_ap/yodlee/core.clj | 4 +- .../auto_ap/views/pages/admin/yodlee.cljs | 121 +++++++++++++----- 3 files changed, 98 insertions(+), 35 deletions(-) diff --git a/src/clj/auto_ap/routes/yodlee.clj b/src/clj/auto_ap/routes/yodlee.clj index 8fed014b..56d34e88 100644 --- a/src/clj/auto_ap/routes/yodlee.clj +++ b/src/clj/auto_ap/routes/yodlee.clj @@ -30,5 +30,11 @@ :url (:yodlee-fastlink env) - }) }))) + }) })) + (GET "/accounts" {:keys [query-params identity] :as request} + (assert-admin identity) + (let [[session token] (yodlee/get-access-token)] + {:status 200 + :headers {"Content-Type" "application/edn"} + :body (pr-str (yodlee/get-accounts)) }))) wrap-secure)) diff --git a/src/clj/auto_ap/yodlee/core.clj b/src/clj/auto_ap/yodlee/core.clj index 26ff53ce..636f78ca 100644 --- a/src/clj/auto_ap/yodlee/core.clj +++ b/src/clj/auto_ap/yodlee/core.clj @@ -43,7 +43,9 @@ user-session (login-user cob-session)] (-> (str (:yodlee-base-url env) "/accounts") (client/get {:headers (merge base-headers {"Authorization" (auth-header cob-session user-session)}) - :as :json})))) + :as :json}) + :body + :account))) (defn get-provider-accounts [] (let [cob-session (login-cobrand) diff --git a/src/cljs/auto_ap/views/pages/admin/yodlee.cljs b/src/cljs/auto_ap/views/pages/admin/yodlee.cljs index 6843be24..5cc5e558 100644 --- a/src/cljs/auto_ap/views/pages/admin/yodlee.cljs +++ b/src/cljs/auto_ap/views/pages/admin/yodlee.cljs @@ -12,16 +12,7 @@ [auto-ap.routes :as routes] [bidi.bidi :as bidi])) -(re-frame/reg-event-fx - ::authenticate-with-yodlee - (fn [{:keys [db]} _] - {:db (assoc-in db [::yodlee :loading?] true) - :http {:token (:user db) - :method :get - :headers {"Content-Type" "application/edn"} - :uri (str "/api/yodlee/fastlink") - :on-success [::authenticated] - :on-error [::save-error]}})) + (re-frame/reg-sub ::authentication @@ -33,6 +24,44 @@ (fn [db] (-> db ::yodlee :loading?))) +(re-frame/reg-sub + ::accounts + (fn [db] + (-> db ::yodlee :accounts))) + +(re-frame/reg-sub + ::accounts-loading? + (fn [db] + (-> db ::yodlee :accounts-loading?))) + +(re-frame/reg-event-fx + ::authenticate-with-yodlee + (fn [{:keys [db]} _] + {:db (assoc-in db [::yodlee :loading?] true) + :http {:token (:user db) + :method :get + :headers {"Content-Type" "application/edn"} + :uri (str "/api/yodlee/fastlink") + :on-success [::authenticated] + :on-error [::save-error]}})) + +(re-frame/reg-event-fx + ::mounted + (fn [{:keys [db]} _] + {:db (assoc-in db [::yodlee] {:accounts-loading? true}) + :http {:token (:user db) + :method :get + :headers {"Content-Type" "application/edn"} + :uri (str "/api/yodlee/accounts") + :on-success [::got-accounts] + :on-error [::save-error]}})) + +(re-frame/reg-event-fx + ::got-accounts + (fn [{:keys [db]} [_ accounts]] + {:db (-> db + (assoc-in [::yodlee :accounts] accounts) + (assoc-in [::yodlee :accounts-loading?] false))})) (re-frame/reg-event-fx ::authenticated @@ -43,32 +72,58 @@ -(defn admin-yodlee-page [] +(defn yodlee-link-button [] [:div (let [authentication @(re-frame/subscribe [::authentication]) loading? @(re-frame/subscribe [::loading?])] - [:div - [:h1.title "Yodlee"] - (if authentication - [:div - "Authentication successful!" - [:form {:action (:url authentication) :method "POST"} - [:input {:type "hidden" - :name "rsession" - :value (:session authentication)}] - [:input {:type "hidden" - :name "token" - :value (:token authentication)}] - [:input {:type "hidden" - :name "app" - :value (:app authentication)}] + (if authentication + [:div + "Authentication successful!" + [:form {:action (:url authentication) :method "POST"} + [:input {:type "hidden" + :name "rsession" + :value (:session authentication)}] + [:input {:type "hidden" + :name "token" + :value (:token authentication)}] + [:input {:type "hidden" + :name "app" + :value (:app authentication)}] - [:input {:type "hidden" - :name "redirectReq" - :value "true"}] - [:button.button.is-primary [:span [:span.icon [:i.fa.fa-external-link]] " Go to yodlee"]]]] + [:input {:type "hidden" + :name "redirectReq" + :value "true"}] + [:button.button.is-primary [:span [:span.icon [:i.fa.fa-external-link]] " Go to yodlee"]]]] + + [:button.button.is-primary {:class (if loading? "is-loading" "") :on-click (dispatch-event [::authenticate-with-yodlee])} "Authenticate with Yodlee"]))]) + +(defn yodlee-accounts-table [] + + [:div + [:table.table + [:thead + [:tr + [:th "Account Name"] + [:th "Account Number"] + [:th "Yodlee Account Number"]]] + (if @(re-frame/subscribe [::accounts-loading?]) + [:tr [:td {:col-span "3"} "Loading..."] + ] + (for [account @(re-frame/subscribe [::accounts])] + [:tr + [:td (:accountName account)] + [:td (:accountNumber account)] + [:td (:id account)]]))]]) + + +(defn admin-yodlee-page [] + [(with-meta + (fn [] + [:div + [:h1.title "Yodlee"] - [:button.button.is-primary {:class (if loading? "is-loading" "") :on-click (dispatch-event [::authenticate-with-yodlee])} "Authenticate with Yodlee"]) - - ])]) + [yodlee-accounts-table] + [yodlee-link-button]]) + {:component-did-mount (fn [] + (re-frame/dispatch [::mounted]))})])