summaryrefslogtreecommitdiff
path: root/src/site.clj
diff options
context:
space:
mode:
Diffstat (limited to 'src/site.clj')
-rw-r--r--src/site.clj18
1 files changed, 17 insertions, 1 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]