diff options
| author | sostler <sbostler@gmail.com> | 2010-04-12 04:24:16 -0400 |
|---|---|---|
| committer | sostler <sbostler@gmail.com> | 2010-04-12 04:24:16 -0400 |
| commit | c87fa8b63e7715e59e9fe45b3004bfc8615ce5b9 (patch) | |
| tree | 216071b4f8b2029d16cb8c924f0635906b44096f | |
| parent | 5587ef8a9b45ba7c969df2643ab1baa2591e2be4 (diff) | |
Made usernames/roomnames case insensitive
| -rw-r--r-- | src/site.clj | 29 | ||||
| -rwxr-xr-x | src/utils.clj | 12 |
2 files changed, 26 insertions, 15 deletions
diff --git a/src/site.clj b/src/site.clj index ebf2077..57f9bb1 100644 --- a/src/site.clj +++ b/src/site.clj @@ -94,6 +94,9 @@ ;; Room handling +(defn lookup-room [key] + (@rooms (lower-case key))) + (defn fetch-rooms [] (do-select ["SELECT * FROM ROOMS"])) @@ -362,6 +365,7 @@ (defn profile [session profile-nick offset] (if-let [user-info (fetch-nick profile-nick)] (let [st (fetch-template "profile" session) + profile-nick (:nick user-info) nick (session :nick) logger (make-time-logger) is-home (and nick (= nick profile-nick)) @@ -528,7 +532,7 @@ (dosync (ref-set (room :topic) nil))) (defn validate-set-topic [session params] - (let [room (@rooms (params :room)) + (let [room (lookup-room (params :room)) topic (params :topic) deadline (params :deadline) maker (params :maker)] @@ -542,7 +546,7 @@ (resp-success "OK"))))) (defn validate-end-topic [session params] - (let [room (@rooms (params :room))] + (let [room (lookup-room (params :room))] (cond (not (is-vip? :is_admin)) (resp-error "NOT_VIP") (not room) (resp-error "INVALID_ROOM") :else (do @@ -552,12 +556,11 @@ ;; Chat (defn validate-room-access [room-key session] - (let [room (@rooms room-key)] + (let [room (lookup-room room-key)] (and room (or (not (room :admin_only)) (is-vip? session))))) -;; 3/20/10: add template so multiple chat urls for ryder (defn chat [session room template] (let [now (System/currentTimeMillis) nick (session :nick) @@ -580,9 +583,11 @@ (.setAttribute st "timestamp" now) (.toString st))) + + (defn validated-chat [session room-key template] (if (validate-room-access room-key session) - (chat session (@rooms room-key) template) + (chat session (lookup-room room-key) template) (resp-error "UNKNOWN_ROOM"))) (defn refresh [session params room] @@ -601,7 +606,7 @@ (defn validated-refresh [session params] (let [room-key (params :room) - room (@rooms room-key)] + room (lookup-room room-key)] (if (validate-room-access room-key session) (refresh session params room) (resp-error "UNKNOWN_ROOM")))) @@ -630,7 +635,7 @@ (let [user-id (session :user_id) nick (session :nick) room-key (params :room) - room (@rooms room-key) + room (lookup-room room-key) content (.trim (params :content)) now (new Date)] (cond (not room) (resp-error "BAD_ROOM") @@ -652,7 +657,7 @@ ;; Browser (defn browser [session] - (let [room (@rooms "dumpfm") + (let [room (lookup-room "dumpfm") now (System/currentTimeMillis) nick (session :nick) st (fetch-template "browser" session)] @@ -703,7 +708,7 @@ (defn validated-log [session room-key offset params] (if (validate-room-access room-key session) - (log session (@rooms room-key) offset params) + (log session (lookup-room room-key) offset params) (resp-error "UNKNOWN_ROOM"))) ;; Tags @@ -881,7 +886,7 @@ (cond (not nick) [200 "NOT_LOGGED_IN"] (not image) [200 "INVALID_REQUEST"] (not (validate-room-access room-key session)) [200 "UNKNOWN_ROOM"] - :else (do-upload session image (@rooms room-key))))) + :else (do-upload session image (lookup-room room-key))))) ;; N.B. -- Upload responses aren't JSON-evaluated (defn do-upload-avatar [session image] @@ -1022,8 +1027,8 @@ (dosync (doseq [room-db (fetch-rooms)] - (alter rooms assoc (room-db :key) - (build-room-map-from-db room-db)))) + (alter rooms assoc (lower-case (room-db :key)) + (build-room-map-from-db room-db)))) (defn start-server [port] (run-server {:port port} diff --git a/src/utils.clj b/src/utils.clj index 3e77710..ea696e5 100755 --- a/src/utils.clj +++ b/src/utils.clj @@ -122,7 +122,10 @@ ;; User authentication -; TODO: move to user module +; TODO: create user module + +(defn first-or-nil [l] + (if (empty? l) nil (first l))) (def nick-regex #"^[A-Za-z0-9\-_∆˚†]*$") @@ -136,8 +139,11 @@ (> (count (do-select [query (lower-case nick)])) 0))) (defn fetch-nick [nick] - (let [query "SELECT * FROM users WHERE nick = ? LIMIT 1"] - (first (do-select [query nick])))) + (let [q1 "SELECT * FROM users WHERE nick = ? LIMIT 1" + ; ORDER BY ensures consistent retrieval of ambiguious names + q2 "SELECT * FROM users WHERE lower(nick) = ? ORDER BY nick LIMIT 1"] + (or (first-or-nil (do-select [q1 nick])) + (first-or-nil (do-select [q2 (lower-case nick)]))))) (defn authorize-nick-hash [nick hash] (let [db-user (fetch-nick nick)] |
