diff options
| -rw-r--r-- | docs/reserved_nicks.txt | 63 | ||||
| -rw-r--r-- | src/site.clj | 18 | ||||
| -rwxr-xr-x | src/utils.clj | 4 |
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 |
