diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/site.clj | 42 | ||||
| -rwxr-xr-x | src/utils.clj | 30 |
2 files changed, 43 insertions, 29 deletions
diff --git a/src/site.clj b/src/site.clj index ab7a17f..67fab63 100644 --- a/src/site.clj +++ b/src/site.clj @@ -4,12 +4,13 @@ java.util.Date java.io.File javax.imageio.ImageIO - javax.servlet.http.Cookie) + javax.servlet.http.Cookie + org.antlr.stringtemplate.StringTemplateGroup) (:use clojure.xml clojure.contrib.command-line clojure.contrib.duck-streams clojure.contrib.json.write - clojure.contrib.seq-utils + clojure.contrib.seq-utils clojure.contrib.sql clojure.contrib.str-utils clojure.contrib.def @@ -18,7 +19,7 @@ admin compojure email - fame + fame utils cookie-login session-sweeper @@ -650,8 +651,14 @@ order by count desc limit ? offset ?") (or (not (room :admin_only)) (is-vip? session)))) +(def default-room-template "chat") + +(defn lookup-room-template [session room-key template] + (or (fetch-template (str "rooms/" (or template room-key)) session) + (fetch-template (str "rooms/" default-room-template) session))) + (defn chat [session room template] - (if-let [st (fetch-template template session)] + (if-let [st (lookup-room-template session (:key room) template)] (let [now (System/currentTimeMillis) nick (session :nick) limit (if (:admin_only room) *vip-dumps-per-page* *dumps-per-page*) @@ -677,11 +684,13 @@ order by count desc limit ? offset ?") (.toString st)) [404 "UNKNOWN PAGE"])) -(defn validated-chat [session room-key template] - (let [room-key (if (= (lower-case room-key) "www") *default-room* room-key)] - (if (validate-room-access room-key session) - (chat session (lookup-room room-key) template) - (resp-error "UNKNOWN_ROOM")))) +(defn validated-chat + ([session room-key] (validated-chat session room-key nil)) + ([session room-key template] + (let [room-key (if (= (lower-case room-key) "www") *default-room* room-key)] + (if (validate-room-access room-key session) + (chat session (lookup-room room-key) template) + (resp-error "UNKNOWN_ROOM"))))) (defn refresh [session params room] (dosync @@ -754,9 +763,9 @@ order by count desc limit ? offset ?") ;; TODO: make work for all rooms (defn browser [session] (let [room (lookup-room *default-room*) - now (System/currentTimeMillis) - nick (session :nick) - st (fetch-template "browser" session)] + now (System/currentTimeMillis) + nick (session :nick) + st (fetch-template "browser" session)] (if nick (dosync (login-user (user-struct-from-session session) room))) @@ -1129,10 +1138,11 @@ order by count desc limit ? offset ?") (GET "/avatars/*" (serve-static *avatar-directory* (params :*)))) (defroutes pichat - (GET "http://:sub.dump.fm/" (validated-chat session (params :sub) "chat")) - (GET "http://:sub.dump.fm/chat" (validated-chat session (params :sub) "chat")) - (GET "/:room/chat" (validated-chat session (params :room) "chat")) - (GET "/chat" (validated-chat session *default-room* "chat")) + (GET "http://:sub.dump.fm/" (validated-chat session (params :sub))) + (GET "http://:sub.dump.fm/chat" (validated-chat session (params :sub))) + (GET "http://:sub.dump.fm/chat" (validated-chat session (params :sub) (params :t))) + (GET "/:room/chat" (validated-chat session (params :room))) + (GET "/chat" (validated-chat session *default-room*)) (GET "/chat/:t" (validated-chat session *default-room* (params :t))) (GET "http://:sub.dump.fm/log" (validated-log session (params :sub) "0" params)) diff --git a/src/utils.clj b/src/utils.clj index 4a3343f..1dc4a2c 100755 --- a/src/utils.clj +++ b/src/utils.clj @@ -263,22 +263,26 @@ ;; Templates (def template-group (new StringTemplateGroup "dumpfm" "template")) -(.setRefreshInterval template-group 3) +(.setRefreshInterval template-group 10) + +(defn initialize-template [st session] + (if (session :nick) + (doto st + (.setAttribute "user_email" (session :email)) + (.setAttribute "user_nick" (session :nick)) + (.setAttribute "user_avatar" (if (non-empty-string? (session :avatar)) + (session :avatar) nil)) + (.setAttribute "isadmin" (session :is_admin)) + (.setAttribute "domain" config/*server-url*)) + (doto st + (.setAttribute "domain" config/*server-url*)))) (defn fetch-template [template session] (try (let [st (.getInstanceOf template-group template)] - (if (session :nick) - (doto st - (.setAttribute "user_email" (session :email)) - (.setAttribute "user_nick" (session :nick)) - (.setAttribute "user_avatar" (if (non-empty-string? (session :avatar)) - (session :avatar) nil)) - (.setAttribute "isadmin" (session :is_admin)) - (.setAttribute "domain" config/*server-url*)) - (doto st - (.setAttribute "domain" config/*server-url*)))) - (catch Exception e nil))) + (initialize-template st session)) + (catch Exception e + nil))) (defn fetch-template-fragment [template] (.getInstanceOf template-group template)) @@ -305,6 +309,6 @@ `(if (is-vip? ~'session) ~e (unknown-page))) (defmacro if-super-vip [e] - "Evaluates expr if user is vip otherwise returns 404. Can only be used + "Evaluates expr if user is super-vip otherwise returns 404. Can only be used where session is defined." `(if (is-super-vip? ~'session) ~e (unknown-page))) |
