66 lines
1.8 KiB
Clojure
66 lines
1.8 KiB
Clojure
(ns toaster.session
|
|
(:refer-clojure :exclude [get])
|
|
(:require
|
|
[toaster.config :as conf]
|
|
[taoensso.timbre :as log]
|
|
[failjure.core :as f]
|
|
[just-auth.core :as auth]
|
|
[toaster.ring :as ring]
|
|
[toaster.bulma :as web]))
|
|
|
|
(defn param [request param]
|
|
(let [value
|
|
(get-in request
|
|
(conj [:params] param))]
|
|
(if (nil? value)
|
|
(f/fail (str "Parameter not found: " param))
|
|
value)))
|
|
|
|
;; TODO: not working?
|
|
(defn get [req arrk]
|
|
{:pre (coll? arrk)}
|
|
(if-let [value (get-in req (conj [:session] arrk))]
|
|
value
|
|
(f/fail (str "Value not found in session: " (str arrk)))))
|
|
|
|
(defn check-config [request]
|
|
;; reload configuration from file all the time if in debug mode
|
|
(if-let [session (:session request)]
|
|
(if (contains? session :config)
|
|
(:config session)
|
|
(conf/load-config "toaster" conf/default-settings))
|
|
(f/fail "Session not found.")))
|
|
|
|
(defn check-account [request]
|
|
;; check if login is present in session
|
|
(f/attempt-all
|
|
[login (get-in request [:session :auth :email])
|
|
user (auth/get-account @ring/auth login)]
|
|
user
|
|
(f/when-failed [e]
|
|
(->> e f/message
|
|
(str "Unauthorized access: ")
|
|
f/fail))))
|
|
|
|
(defn check-database []
|
|
(if-let [db @ring/db]
|
|
db
|
|
(f/fail "No connection to database.")))
|
|
|
|
(defn auth-wrap [request fun]
|
|
(f/attempt-all
|
|
[db (check-database)
|
|
config (check-config request)
|
|
account (if (conf/q config [:webserver :mock-auth])
|
|
{:email "mock@dyne.org"
|
|
:name "MockUser"
|
|
:activated true}
|
|
;; else
|
|
(check-account request))]
|
|
(fun request config account)
|
|
(f/when-failed [e]
|
|
(web/render [:span
|
|
(web/notify (f/message e) "is-error")
|
|
web/login-form
|
|
]))))
|