summaryrefslogtreecommitdiff
path: root/src/site.clj
diff options
context:
space:
mode:
Diffstat (limited to 'src/site.clj')
-rwxr-xr-xsrc/site.clj105
1 files changed, 77 insertions, 28 deletions
diff --git a/src/site.clj b/src/site.clj
index 06d711b..8ca26b8 100755
--- a/src/site.clj
+++ b/src/site.clj
@@ -71,10 +71,13 @@
(defn process-message-for-json [d]
(assoc d :created_on (.getTime (d :created_on))))
+(defn ensure-trailing-slash [s]
+ (if (.endsWith s "/") s (str s "/")))
+
(defn message-room-link [m]
(if (default-room? (:key m *default-room*))
- "http://dump.fm/"
- (format "http://%s.dump.fm/" (:key m))))
+ (ensure-trailing-slash *server-url*)
+ (format "%s://%s.%s/" *public-scheme* (:key m) *public-host*)))
(defn process-message-for-output [d]
(escape-html-deep
@@ -265,22 +268,59 @@
(do-cmds query))
(catch Exception e nil)))
+(declare reserved-nicks ip-recently-muted? ip-recently-created?)
+
+(defn nick-in-reserved-list? [nick]
+ (let [reserved (poll reserved-nicks)]
+ (or (contains? reserved nick)
+ (contains? reserved (lower-case nick)))))
+
+(defn fetch-or-create-passwordless-user! [nick ip]
+ (if-let [existing (fetch-nick-uncached nick)]
+ existing
+ (if-let [invalid-reason (is-invalid-nick? nick)]
+ invalid-reason
+ (if (nick-in-reserved-list? nick)
+ "NICK_TAKEN"
+ (if (ip-recently-muted? ip)
+ "RECENTLY_MUTED"
+ (if (ip-recently-created? ip)
+ "RECENTLY_CREATED"
+ (let [hash (sha1-hash nick (System/currentTimeMillis) (rand))
+ email ""]
+ (try
+ (do-insert :users [:nick :hash :email] [nick hash email])
+ (catch Exception _ nil))
+ (if-let [db-user (fetch-nick-uncached nick)]
+ (do
+ (try
+ (let [query (format "UPDATE users SET created_ip = '%s'::cidr WHERE user_id = %s"
+ (str ip)
+ (str (db-user :user_id)))]
+ (do-cmds query))
+ (catch Exception _ nil))
+ db-user)
+ "BAD_LOGIN"))))))))
+
(defn login [session params cookies request]
- (let [nick (or (params :nick) "")
- hash (or (params :hash) "")
- remember-me (= (params :rememberme) "yes")
- db-user (authorize-nick-hash nick hash)
- login-cookie (if remember-me
- (make-login-token db-user)
- (clear-login-token *login-token-key*))
- ip (get-ip request)]
- (if db-user
- (do
- (log-login (db-user :user_id) ip)
- [(session-assoc-from-db db-user)
- login-cookie
- (resp-success "OK")])
- (resp-error "BAD_LOGIN"))))
+ (let [nick (.trim (or (params :nick) ""))
+ hash (or (params :hash) "")
+ remember-me (= (params :rememberme) "yes")
+ ip (get-ip request)
+ authorized (when (non-empty-string? hash) (authorize-nick-hash nick hash))
+ db-user (cond
+ authorized authorized
+ *passwordless-login* (fetch-or-create-passwordless-user! nick ip)
+ :else nil)]
+ (if (map? db-user)
+ (let [login-cookie (if remember-me
+ (make-login-token db-user)
+ (clear-login-token *login-token-key*))]
+ (log-login (db-user :user_id) ip)
+ [(session-assoc-from-db db-user)
+ login-cookie
+ (resp-success "OK")])
+ (resp-error (if (string? db-user) db-user "BAD_LOGIN")))))
(defn logout [session]
[(session-dissoc :nick :user_id :is_admin :avatar)
@@ -1012,7 +1052,7 @@ WHERE user_id IN
(def random-posts
["http://24.media.tumblr.com/tumblr_l41x4eLWZm1qzon5ko1_400.png hi"
"lol http://29.media.tumblr.com/tumblr_l3o3wuRFpM1qawuaao1_500.jpg"
- "http://dump.fm/images/20100819/1282199186063-dumpfm-timb-dump.stone.logo.gif http://teamassignment.com/images/getmesomemore.jpg http://26.media.tumblr.com/tumblr_l7kro0os531qaajkio1_500.gif"])
+ "https://archive.hump.fm/images/20100819/1282199186063-dumpfm-timb-dump.stone.logo.gif http://teamassignment.com/images/getmesomemore.jpg http://26.media.tumblr.com/tumblr_l7kro0os531qaajkio1_500.gif"])
(defn make-random-post! []
(msg {:user_id 1
@@ -1194,7 +1234,7 @@ WHERE user_id IN
(defn serve-static [dir path]
(if (= path "")
- (redirect-to "http://dump.fm")
+ (redirect-to "/")
(serve-file dir path)))
(defroutes static
@@ -1220,16 +1260,22 @@ WHERE user_id IN
(defroutes pichat
- (GET "http://www.dump.fm/*" (redirect-to "http://dump.fm"))
- (GET "http://:sub.dump.fm/" (validated-chat session (params :sub)))
- (GET "http://:sub.dump.fm/chat" (validated-chat session (params :sub)))
- (GET "http://:sub.dump.fm/chat" (validated-chat session (params :sub) (params :t)))
+ (GET (str "http://www." *public-host* "/*")
+ (redirect-to (ensure-trailing-slash *server-url*)))
+ (GET (str "http://:sub." *public-host* "/")
+ (validated-chat session (params :sub)))
+ (GET (str "http://:sub." *public-host* "/chat")
+ (validated-chat session (params :sub)))
+ (GET (str "http://:sub." *public-host* "/chat")
+ (validated-chat session (params :sub) (params :t)))
(GET "/:room/chat" (validated-chat session (params :room)))
(GET "/chat" (validated-chat session *default-room*))
(GET "/chat/:t" (validated-chat session *default-room* (params :t)))
- (GET "http://:sub.dump.fm/log" (validated-log session (params :sub) "0" params))
- (GET "http://:sub.dump.fm/log/:offset" (validated-log session (params :sub) (params :offset) params))
+ (GET (str "http://:sub." *public-host* "/log")
+ (validated-log session (params :sub) "0" params))
+ (GET (str "http://:sub." *public-host* "/log/:offset")
+ (validated-log session (params :sub) (params :offset) params))
(GET "/log" (validated-log session *default-room* "0" params))
(GET "/log/:offset" (validated-log session *default-room* (params :offset) params))
(GET "/r/:room/log" (validated-log session (params :room) "0" params))
@@ -1430,7 +1476,11 @@ WHERE user_id IN
(defn parse-command-args
"Parses command-line arguments. First arg is script name,
second arg is port number (defaults to 8080)."
- ([script] {:port 8080})
+ ([] {:port 8080})
+ ([arg]
+ (if (re-matches #"\d+" arg)
+ {:port (Integer/parseInt arg)}
+ {:port 8080}))
([script port] {:port (Integer/parseInt port)}))
(def options
@@ -1446,7 +1496,6 @@ WHERE user_id IN
(start-user-flusher!)
(start-session-pruner!)
-;(if (not= *server-url* "http://dump.fm")
+;(if (not= *server-url* "/")
; (start! random-poster))
-