(ns my-app.routes.auth (:require [my-app.layout :as layout] [my-app.db.core :as db] [my-app.db.user :as dbuser] [compojure.core :refer [defroutes GET POST]] [ring.util.response :refer [response redirect]] [clojure.java.io :as io] [buddy.auth :refer [authenticated?]]))
(defn login-page [request] (layout/render "login.html" (println (:flash request))))
(defn login-authenticate [request] (let [username (get-in request [:form-params "username"]) password (get-in request [:form-params "password"]) session (:session request)] (if (dbuser/check-password username password) (let [updated-session (assoc session :identity (:id (db/get-user-id {:username username})))] (-> (redirect "/") (assoc :session updated-session)))) (assoc (redirect "/") :flash "errro")))
(defn logout-authenticate [{session :session}] (-> (redirect "/login") (assoc :session (dissoc session :identity))))
(defroutes routes (GET "/login" [] login-page) (POST "/login" [] login-authenticate) (GET "/logout" [] logout-authenticate))
Do you have the wrap-flash middleware in place?
Sean Corfield -- (970) FOR-SEAN -- (904) 302-SEAN
An Architect's View -- http://corfield.org/
"If you're not annoying somebody, you're not really alive."
-- Margaret Atwood
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clo...@googlegroups.com
Note that posts from new members are moderated - please be patient with your first post.
To unsubscribe from this group, send email to
clojure+u...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
---
You received this message because you are subscribed to the Google Groups "Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email to clojure+u...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clo...@googlegroups.com
Note that posts from new members are moderated - please be patient with your first post.
To unsubscribe from this group, send email to
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
---
You received this message because you are subscribed to the Google Groups "Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
(ns my-app.middleware
(:require [my-app.env :refer [defaults]]
[cognitect.transit :as transit]
[clojure.tools.logging :as log]
[my-app.layout :refer [*app-context* error-page]]
[ring.middleware.anti-forgery :refer [wrap-anti-forgery]]
[ring.middleware.webjars :refer [wrap-webjars]]
[muuntaja.core :as muuntaja]
[muuntaja.format.transit :as transit-format]
[muuntaja.middleware :refer [wrap-format wrap-params]]
[my-app.config :refer [env]]
[ring.middleware.flash :refer [wrap-flash]]
[immutant.web.middleware :refer [wrap-session]]
[ring.middleware.defaults :refer [site-defaults wrap-defaults]]
[buddy.auth.middleware :refer [wrap-authentication wrap-authorization]]
[buddy.auth.accessrules :refer [restrict]]
[buddy.auth :refer [authenticated?]]
[buddy.auth.backends.session :refer [session-backend]]
[taoensso.tempura :as tempura :refer [tr]]
[my-app.i18n :as i18n :refer [tconfig]])
(:import [javax.servlet ServletContext]
[org.joda.time ReadableInstant]))
(defn wrap-context [handler]
(fn [request]
(binding [*app-context*
(if-let [context (:servlet-context request)]
;; If we're not inside a servlet environment
;; (for example when using mock requests), then
;; .getContextPath might not exist
(try (.getContextPath ^ServletContext context)
(catch IllegalArgumentException _ context))
;; if the context is not specified in the request
;; we check if one has been specified in the environment
;; instead
(:app-context env))]
(handler request))))
(defn wrap-internal-error [handler]
(fn [req]
(try
(handler req)
(catch Throwable t
(log/error t)
(error-page {:status 500
:title "Something very bad has happened!"
:message "We've dispatched a team of highly trained gnomes to take care of the problem."})))))
(defn wrap-csrf [handler]
(wrap-anti-forgery
handler
{:error-response
(error-page
{:status 403
:title "Invalid anti-forgery token"})}))
(defn wrap-i18n
[handler]
(tempura/wrap-ring-request handler {:tr-opts i18n/tconfig}))
(def joda-time-writer
(transit/write-handler
(constantly "m")
(fn [v] (-> ^ReadableInstant v .getMillis))
(fn [v] (-> ^ReadableInstant v .getMillis .toString))))
(def restful-format-options
(update
muuntaja/default-options
:formats
merge
{"application/transit+json"
{:decoder [(partial transit-format/make-transit-decoder :json)]
:encoder [#(transit-format/make-transit-encoder
:json
(merge
%
{:handlers {org.joda.time.DateTime joda-time-writer}}))]}}))
(defn wrap-formats [handler]
(let [wrapped (-> handler wrap-params (wrap-format restful-format-options))]
(fn [request]
;; disable wrap-formats for websockets
;; since they're not compatible with this middleware
((if (:websocket? request) handler wrapped) request))))
(defn on-error [request response]
(error-page
{:status 403
:title (str "Access to " (:uri request) " is not authorized")}))
(defn wrap-restricted [handler]
(restrict handler {:handler authenticated?
:on-error on-error}))
(defn wrap-auth [handler]
(let [backend (session-backend)]
(-> handler
(wrap-authentication backend)
(wrap-authorization backend))))
(defn wrap-base [handler]
(-> ((:middleware defaults) handler)
wrap-i18n
wrap-auth
wrap-webjars
wrap-flash
(wrap-session {:cookie-attrs {:http-only true}})
(wrap-defaults
(-> site-defaults
(assoc-in [:security :anti-forgery] false)
(dissoc :session)))
wrap-context
wrap-internal-error))