summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorsostler <sbostler@gmail.com>2010-04-26 22:06:56 -0400
committersostler <sbostler@gmail.com>2010-04-26 22:06:56 -0400
commita547b0c44c0fdbd04f5eec18f866c8959de43dab (patch)
tree460ab5cc5de6903f4fac542089356bc29cc663d0 /src
parent261c45adad88af2180005cd28fa4c7eff556999a (diff)
Added reserved-nick check to registration
Diffstat (limited to 'src')
-rw-r--r--src/site.clj18
-rwxr-xr-xsrc/utils.clj4
2 files changed, 17 insertions, 5 deletions
diff --git a/src/site.clj b/src/site.clj
index cc30d61..ceea48b 100644
--- a/src/site.clj
+++ b/src/site.clj
@@ -331,13 +331,29 @@
;; Registration
+(def *reserved-nicks-path* "docs/reserved_nicks.txt")
+(def *reserved-nicks-refresh-period-sec* 300)
+
+(defn load-invalid-nicks []
+ (set (read-lines *reserved-nicks-path*)))
+
+(def *reserved-nicks*
+ (scheduled-agent (no-args-adaptor load-invalid-nicks)
+ *reserved-nicks-refresh-period-sec*
+ (load-invalid-nicks)))
+
+(defn nick-reserved? [nick]
+ (let [query "SELECT * FROM users WHERE LOWER(nick) = ? LIMIT 1"]
+ (and (not (contains? (poll *reserved-nicks*) nick))
+ (= (count (do-select [query (lower-case nick)])) 0))))
+
(defn register [session params]
(let [nick (params :nick)
email (params :email)
hash (params :hash)
invalid-nick-reason (is-invalid-nick? nick)]
(cond invalid-nick-reason (resp-error invalid-nick-reason)
- (check-nick nick) (resp-error "NICK_TAKEN")
+ (nick-reserved? nick) (resp-error "NICK_TAKEN")
:else (do
(do-insert :users
[:nick :hash :email]
diff --git a/src/utils.clj b/src/utils.clj
index 16cd28d..f42746c 100755
--- a/src/utils.clj
+++ b/src/utils.clj
@@ -224,10 +224,6 @@
(< (count n) 3) "NICK_TOO_SHORT"
(not (re-matches nick-regex n)) "NICK_INVALID_CHARS"))
-(defn check-nick [nick]
- (let [query "SELECT * FROM users WHERE LOWER(nick) = ? LIMIT 1"]
- (> (count (do-select [query (lower-case nick)])) 0)))
-
(defn fetch-nick [nick]
(let [q1 "SELECT * FROM users WHERE nick = ? LIMIT 1"
; ORDER BY ensures consistent retrieval of ambiguious names