diff options
Diffstat (limited to 'src/site.clj')
| -rwxr-xr-x | src/site.clj | 105 |
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)) - |
