Created
January 29, 2010 19:07
-
-
Save mmcgrana/289993 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;; 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