From c87fa8b63e7715e59e9fe45b3004bfc8615ce5b9 Mon Sep 17 00:00:00 2001 From: sostler Date: Mon, 12 Apr 2010 04:24:16 -0400 Subject: Made usernames/roomnames case insensitive --- src/utils.clj | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'src/utils.clj') 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)] -- cgit v1.2.3-70-g09d2