Skip to content

Instantly share code, notes, and snippets.

@mmcgrana
Created January 29, 2010 19:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mmcgrana/289993 to your computer and use it in GitHub Desktop.
Save mmcgrana/289993 to your computer and use it in GitHub Desktop.
;; possible functional interface
(defn with-sessions [handler session-store-impl & [opts]] ...)
(defn session [req] ...)
(defn flash [req] ...)
(defn session-assoc [resp key val] ...)
(defn session-dissoc [resp key] ...)
(defn session-set [resp session] ...)
(defn session-drop [resp] ...)
(defn flash-assoc [resp key val] ...)
;; possible atom helpers
; ?
;; counter
(defn counter [req]
(let [count (:count (session req) 0)]
(-> (respond (str "count =" count))
(session-assoc :account))))
(defn counter [req]
(let [sess (session req)
count (:count @sess 0)]
(do
(swap! sess update-in [:count] inc)
(respond (str "count =" count)))))
;; authentication
(defn login [req]
(let [{:keys [username password]} (:params req)]
(if-let [user (auth-user username password)]
(-> (redirect (or (:return-to (session req)) "/"))
(session-assoc :user-id (:id user))
(session-dissoc :return-to)
(flash-assoc :message "Logged in!"))
(-> (redirect "/login")
(flash-assoc :message "Incorrect username or password!")))))
(defn login [req]
(let [{:keys [username password]} (:params req)
sess (:session req)]
(if-let [user (auth-user username password)]
(let [return-to (:return-to @sess)]
(swap! sess assoc :user-id (:id user))
(swqp! sess dissoc :return-to)
(swap! sess assoc :flash {:message "Logged in!"})
(redirect (or return-to "/")))
(do
(swap! sess assoc :flash {:message "Incorrect username or password!"})
(redirect "/login")))))
(defn logout [req]
(-> (redirect "/")
(session-dissoc :user-id)))
(defn logout [req]
(swap! (:session req) dissoc :user-id)
(redirect "/"))
(defn authed-action [req]
(if-let [user-id (:user-id (session req))]
(let [user (and user-id (find-user user-id))]
(success "Authorized as " (:username user) "..."))
(-> (redirect "/login")
(session-assoc :return-to (:uri req))
(flash-assoc :message "Log in please!"))))
(defn authed-action [req]
(let [sess (:session req)]
(if-let [user-id (:user-id @sess)]
(let [user (and user-id (find-user user-id))]
(success "Authorized as " (:username user) "..."))
(do
(swap! sess assoc :return-to (:uri req))
(swap! sess assoc :flash {:message "Log in please!"})
(redirect "/login")))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment