summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/reserved_nicks.txt63
-rw-r--r--src/site.clj18
-rwxr-xr-xsrc/utils.clj4
3 files changed, 80 insertions, 5 deletions
diff --git a/docs/reserved_nicks.txt b/docs/reserved_nicks.txt
new file mode 100644
index 0000000..b4087d1
--- /dev/null
+++ b/docs/reserved_nicks.txt
@@ -0,0 +1,63 @@
+about
+admin
+administrator
+ads
+advertising
+affiliates
+api
+apps
+art
+browser
+business
+classifieds
+clients
+clothing
+cmd
+debug
+developers
+directory
+dump
+dumpfm
+error
+favicon
+forums
+free
+friends
+goodies
+google
+help
+hookup
+image
+images
+investors
+ipad
+iphone
+jobs
+json
+legal
+links
+live
+log
+login
+logout
+meetup
+members
+mobile
+msg
+mute
+niggers
+phone
+pics
+porn
+post
+privacy
+refresh
+reset
+search
+shop
+team
+terms
+video
+viewer
+wiki
+xxx
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