From d2ede89204ffe08b5a4927b6ebc7365abffdafd6 Mon Sep 17 00:00:00 2001 From: sostler Date: Tue, 16 Feb 2010 01:36:08 -0500 Subject: cookie_login refactor --- src/cookie_login.clj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/cookie_login.clj b/src/cookie_login.clj index 6ac1f6c..9e501f4 100755 --- a/src/cookie_login.clj +++ b/src/cookie_login.clj @@ -47,7 +47,7 @@ - is-logged-in?: Function to apply to request's session map to determine whether to process login token or not. If a truthy value is returned, - then the next handler is called. + then the next handler is called without further processing. - token-maker: Function to generate new login token from session map and milliseconds until login token expiry. -- cgit v1.2.3-70-g09d2 From eb764883beb1ddf4d5a2f429f4f73c6ee93e4728 Mon Sep 17 00:00:00 2001 From: sostler Date: Tue, 16 Feb 2010 01:36:32 -0500 Subject: Split site.clj --- src/site.clj | 32 ++----------------------- src/utils.clj | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+), 30 deletions(-) create mode 100755 src/utils.clj (limited to 'src') diff --git a/src/site.clj b/src/site.clj index 4ba5981..b1774fd 100755 --- a/src/site.clj +++ b/src/site.clj @@ -9,20 +9,10 @@ org.antlr.stringtemplate.StringTemplateGroup) (:use clojure.contrib.str-utils clojure.contrib.duck-streams - clojure.contrib.json.write clojure.contrib.sql compojure cookie-login - )) - -(let [db-host "localhost" - db-port 5432 - db-name "dumpfm"] - (def db {:classname "org.postgresql.Driver" - :subprotocol "postgresql" - :subname (str "//" db-host ":" db-port "/" db-name) - :user "postgres" - :password "root"})) + utils)) (def template-group (new StringTemplateGroup "dumpfm" "template")) (.setRefreshInterval template-group 3) @@ -74,12 +64,6 @@ (def formatter (new SimpleDateFormat "h:mm EEE M/d")) -(defn resp-error [message] - {:status 400 :headers {} :body message}) - -(defn resp-success [message] - {:status 200 :headers {} :body (json-str message)}) - (defn non-empty-string? [s] (and s (> (count s) 0))) @@ -98,19 +82,6 @@ (.setTimeZone df (TimeZone/getTimeZone "GMT")) (.format df dt)))) -;; Database - -(defn do-select [query] - (with-connection db - (with-query-results rs query - (doall rs)))) - -(defn do-count [query] - ((first (with-connection db - (with-query-results rs query - (doall rs)))) - :count)) - ;; User authentication (def nick-regex #"^[A-Za-z0-9\-_∆˚†]*$") @@ -586,6 +557,7 @@ (-> request :route-params :room) (-> request :route-params :offset) params)) + (GET "/stats" (validated-stats session params)) ;; TODO: validate POST Referrer headers for POSTs (POST "/msg" (validated-msg session params)) (POST "/submit-registration" (register session params)) diff --git a/src/utils.clj b/src/utils.clj new file mode 100755 index 0000000..3ffd54b --- /dev/null +++ b/src/utils.clj @@ -0,0 +1,75 @@ +(ns utils + (:import java.text.SimpleDateFormat + java.util.Date) + (:use clojure.contrib.json.write + clojure.contrib.sql)) + +(let [db-host "localhost" + db-port 5432 + db-name "dumpfm"] + (def db {:classname "org.postgresql.Driver" + :subprotocol "postgresql" + :subname (str "//" db-host ":" db-port "/" db-name) + :user "postgres" + :password "root"})) + +;; JSON responses + +(def yyyy-mm-dd-formatter (new SimpleDateFormat "yyyy-MM-dd")) + +(defmethod print-json Date + [d] + (print-json (.format yyyy-mm-dd-formatter d))) + +(defn resp-error [message] + {:status 400 :headers {} :body message}) + +(defn resp-success [message] + {:status 200 :headers {} :body (json-str message)}) + +;; Database + +(defn do-select [query] + (with-connection db + (with-query-results rs query + (doall rs)))) + +(defn do-count [query] + ((first (with-connection db + (with-query-results rs query + (doall rs)))) + :count)) + + +;; Stats + +(defn msg-stats [ts] + (let [qry (str "SELECT created_on::date, count(*) FROM messages " + "GROUP BY created_on::date " + "ORDER BY created_on::date")] + (do-select [qry]))) + +(defn new-user-stats [ts] + (let [qry (str "SELECT created_on::date, count(*) FROM users " + "GROUP BY created_on::date " + "ORDER BY created_on::date")] + (do-select [qry]))) + +(defn msgs-per-user-stats [ts] + true) + +(def *stat-map* {"msgs" msg-stats + "new users" new-user-stats + "msgs per user" msgs-per-user-stats}) + +(defn stats [session params] + (let [stat (params :stat) + ts (params :timescale)] + (if-let [f (*stat-map* stat)] + (resp-success (f ts)) + (resp-error "UNKNOWN STAT")))) + +(defn validated-stats [session params] + (if (session :is_admin) + (stats session params) + (resp-error "BAD_REQUEST"))) \ No newline at end of file -- cgit v1.2.3-70-g09d2 From d304167e85f67340fa145924a22087a0723fc1cc Mon Sep 17 00:00:00 2001 From: sostler Date: Tue, 16 Feb 2010 01:41:54 -0500 Subject: Readded clojure.contri.json.write import --- src/site.clj | 1 + 1 file changed, 1 insertion(+) (limited to 'src') diff --git a/src/site.clj b/src/site.clj index e0a40b9..dd7de80 100755 --- a/src/site.clj +++ b/src/site.clj @@ -10,6 +10,7 @@ (:use clojure.xml clojure.contrib.str-utils clojure.contrib.duck-streams + clojure.contrib.json.write clojure.contrib.sql compojure cookie-login -- cgit v1.2.3-70-g09d2 From 2b64baa3f6cffe0153596613ee7a749b90aaa816 Mon Sep 17 00:00:00 2001 From: dumpfmprod Date: Wed, 17 Feb 2010 00:47:47 -0500 Subject: commit site.clj to fix cookies --- src/site.clj | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/site.clj b/src/site.clj index dd7de80..fb78a9b 100755 --- a/src/site.clj +++ b/src/site.clj @@ -243,13 +243,9 @@ (try [(aget x 0) (Long/parseLong (aget x 1)) (aget x 2)] (catch NumberFormatException _ nil)))) + (defn read-login-token [token] - (if-let [[nick expiry token-hash] (parse-login-token token)] - (if (>= expiry (System/currentTimeMillis)) - (let [db-info (fetch-nick nick) - computed-hash (sha1-hash (db-info :hash) expiry)] - (if (= token-hash computed-hash) - db-info))))) + nil) (defn make-login-token [{nick :nick hash :hash}] @@ -272,7 +268,7 @@ db-user (authorize-nick-hash nick hash) remember-me (= (params :rememberme) "yes") login-cookie (if remember-me - (make-login-token db-user *login-token-expiry*) + (make-login-token db-user) (clear-login-token *login-token-key*))] (if db-user [(session-assoc-from-db db-user) @@ -623,4 +619,4 @@ "/upload" (servlet multipart) "/*" (servlet pichat)) -(send-off flusher flush!) \ No newline at end of file +(send-off flusher flush!) -- cgit v1.2.3-70-g09d2