(ns auto-ap.routes.yodlee2 (:require [auto-ap.datomic :refer [conn]] [auto-ap.datomic.clients :as d-clients] [auto-ap.graphql.utils :refer [assert-admin assert-can-see-client]] [auto-ap.routes.utils :refer [wrap-secure]] [auto-ap.yodlee.core2 :as yodlee] [clojure.tools.logging :as log] [compojure.core :refer [context defroutes GET POST wrap-routes]] [config.core :refer [env]] [datomic.api :as d])) (defroutes routes (wrap-routes (context "/yodlee2" [] (GET "/fastlink" {:keys [query-params identity] :as request} (assert-can-see-client identity (d/pull (d/db conn) [:db/id] [:client/code (get query-params "client")])) (let [token (if-let [client-id (get query-params "client-id")] (-> client-id Long/parseLong d-clients/get-by-id :client/code (yodlee/get-access-token)) (yodlee/get-access-token (get query-params "client")))] {:status 200 :headers {"Content-Type" "application/edn"} :body (pr-str {:token token :url (:yodlee2-fastlink env)}) })) (POST "/provider-accounts/refresh/" {:keys [query-params identity edn-params] {:keys [id]} :route-params :as request} (assert-admin identity) (log/info "refreshing " edn-params) (try (yodlee/refresh-provider-account (-> (:client-id edn-params) Long/parseLong d-clients/get-by-id :client/code) (:provider-account-id edn-params)) {:status 200 :headers {"Content-Type" "application/edn"} :body "{}" } (catch Exception e (log/error e) {:status 400 :headers {"Content-Type" "application/edn"} :body (pr-str {:message (.getMessage e) :error (.toString e)})}))) (GET "/provider-accounts/:client/:id" {:keys [query-params identity edn-params] {:keys [client id]} :route-params :as request} (assert-admin identity) (log/info "looking-up " client id) (try {:status 200 :headers {"Content-Type" "application/edn"} :body (pr-str (yodlee/get-provider-account-detail (-> client Long/parseLong d-clients/get-by-id :client/code) id))} (catch Exception e (log/error e) {:status 400 :headers {"Content-Type" "application/edn"} :body (pr-str {:message (.getMessage e) :error (.toString e)})}))) (POST "/provider-accounts/delete/" {:keys [edn-params identity] {:keys [id]} :route-params :as request} (assert-admin identity) (try (yodlee/delete-provider-account (-> (:client-id edn-params) Long/parseLong d-clients/get-by-id :client/code) (:provider-account-id edn-params)) {:status 200 :headers {"Content-Type" "application/edn"} :body (pr-str {}) } (catch Exception e (log/error e) {:status 400 :headers {"Content-Type" "application/edn"} :body (pr-str {:message (.getMessage e) :error (.toString e)})}))) (POST "/reauthenticate/:id" {:keys [identity] {:keys [id]} :route-params data :edn-params} (assert-admin identity) (try {:status 200 :headers {"Content-Type" "application/edn"} :body (pr-str (yodlee/reauthenticate-and-recache (-> (:client-id data) Long/parseLong d-clients/get-by-id :client/code) (Long/parseLong id) (dissoc data :client-id )))} (catch Exception e (log/error e) {:status 500 :headers {"Content-Type" "application/edn"} :body (pr-str {:message (.getMessage e) :error (.toString e)})})))) wrap-secure))