Skip to content

Instantly share code, notes, and snippets.

@zahardzhan
Created June 1, 2010 12:22
Show Gist options
  • Save zahardzhan/420883 to your computer and use it in GitHub Desktop.
Save zahardzhan/420883 to your computer and use it in GitHub Desktop.
(ns user
(:import (com.google.appengine.api.users User UserService UserServiceFactory)))
(defn get-user-service []
(UserServiceFactory/getUserService))
(def *user* nil)
(defn inside-with-user-block? []
(not= nil *user*))
(defmacro with-user [& body]
(cond (inside-with-user-block?) `(do ~@body)
:else `(let [user-service# (get-user-service)
current-user# (.getCurrentUser user-service#)]
(binding [*user* {:service user-service#
:current current-user#}]
(do ~@body)))))
(defn signed-in? [] {:pre [(inside-with-user-block?)]}
(not= nil (:current *user*)))
(defn login-url [redirect-to] {:pre [(inside-with-user-block?)]}
(.createLoginURL (*user* :service) redirect-to))
(defn logout-url [redirect-to] {:pre [(inside-with-user-block?)]}
(.createLogoutURL (*user* :service) redirect-to))
(defn nickname [] {:pre [(inside-with-user-block?)]}
(when (signed-in?) (.getNickname (:current *user*))))
(defn email [] {:pre [(inside-with-user-block?)]}
(when (signed-in?) (.getEmail (:current *user*))))
(defn auth-domain [] {:pre [(inside-with-user-block?)]}
(when (signed-in?) (.getAuthDomain (:current *user*))))
(defn id [] {:pre [(inside-with-user-block?)]}
(when (signed-in?) (.getUserId (:current *user*))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment