summaryrefslogtreecommitdiff
path: root/src/utils.clj
diff options
context:
space:
mode:
authorsostler <sbostler@gmail.com>2010-04-12 04:24:16 -0400
committersostler <sbostler@gmail.com>2010-04-12 04:24:16 -0400
commitc87fa8b63e7715e59e9fe45b3004bfc8615ce5b9 (patch)
tree216071b4f8b2029d16cb8c924f0635906b44096f /src/utils.clj
parent5587ef8a9b45ba7c969df2643ab1baa2591e2be4 (diff)
Made usernames/roomnames case insensitive
Diffstat (limited to 'src/utils.clj')
-rwxr-xr-xsrc/utils.clj12
1 files changed, 9 insertions, 3 deletions
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)]