summaryrefslogtreecommitdiff
path: root/src/utils.clj
diff options
context:
space:
mode:
Diffstat (limited to 'src/utils.clj')
-rwxr-xr-xsrc/utils.clj59
1 files changed, 28 insertions, 31 deletions
diff --git a/src/utils.clj b/src/utils.clj
index f42746c..628e4b8 100755
--- a/src/utils.clj
+++ b/src/utils.clj
@@ -56,7 +56,12 @@
:else s))
(defn seconds [t] (* t 1000))
-(defn minutes [t] (* t 60 1000))
+(defn minutes [t] (* 60 (seconds t)))
+(defn hours [t] (* 60 (minutes t)))
+(defn days [t] (* 24 (hours t)))
+
+(defn ms-ago [ms]
+ (- (System/currentTimeMillis) ms))
(defn kbytes [b] (* b 1024))
(defn mbytes [b] (* b 1024 1024))
@@ -72,12 +77,12 @@
(defn sha1-hash [& more]
(DigestUtils/shaHex (apply str more)))
-(defn gmt-string
- ([] (gmt-string (new Date)))
- ([dt]
- (let [df (new SimpleDateFormat "EEE, dd MMM yyyy kk:mm:ss z")]
- (.setTimeZone df (TimeZone/getTimeZone "GMT"))
- (.format df dt))))
+(defmacro with-timing [e]
+ `(let [s# (System/nanoTime)
+ r# ~e
+ f# (System/nanoTime)]
+ [(int (/ (- f# s#) 1000000.0)) r#]))
+
;; Formatters
@@ -123,6 +128,13 @@
[k (f v)]
[k v]))))
+(defn gmt-string
+ ([] (gmt-string (new Date)))
+ ([dt]
+ (let [df (new SimpleDateFormat "EEE, dd MMM yyyy kk:mm:ss z")]
+ (.setTimeZone df (TimeZone/getTimeZone "GMT"))
+ (.format df dt))))
+
;; JSON responses
(defmethod print-json Date
@@ -168,6 +180,10 @@
(with-connection *db*
(insert-values table cols values)))
+(defn assert-update
+ ([res ok err] (if (not (= (first res) 1)) err ok))
+ ([res] (assert-update res true false)))
+
;; Parsing
(defn maybe-parse-int
@@ -197,43 +213,24 @@
(def template-group (new StringTemplateGroup "dumpfm" "template"))
(.setRefreshInterval template-group 3)
-;; TODO: handle exception
+; TODO: handle exception, clean-up template setting
(defn fetch-template [template session]
(let [st (.getInstanceOf template-group template)]
(if (session :nick)
(do (.setAttribute st "user_email" (session :email))
(.setAttribute st "user_nick" (session :nick))
- (if (non-empty-string? (session :avatar)) (.setAttribute st "user_avatar" (session :avatar)))
- (.setAttribute st "isadmin" (session :is_admin)))) ;; TODO: consolidate session/user code
+ (if (non-empty-string? (session :avatar))
+ (.setAttribute st "user_avatar" (session :avatar)))
+ (.setAttribute st "isadmin" (session :is_admin))))
st))
(defn serve-template [template session]
(.toString (fetch-template template session)))
-
-;; User authentication
-; TODO: create user module
-
(defn first-or-nil [l]
(if (empty? l) nil (first l)))
-(def nick-regex #"^[A-Za-z0-9\-_∆˚†]*$")
-
-(defn is-invalid-nick? [n]
- (cond
- (< (count n) 3) "NICK_TOO_SHORT"
- (not (re-matches nick-regex n)) "NICK_INVALID_CHARS"))
-
-(defn fetch-nick [nick]
- (let [q1 "SELECT * FROM users WHERE nick = ? LIMIT 1"
- ; ORDER BY ensures consistent retrieval of ambiguious names
- q2 "SELECT * FROM users WHERE lower(nick) = ? ORDER BY nick LIMIT 1"]
- (or (first-or-nil (do-select [q1 nick]))
- (first-or-nil (do-select [q2 (lower-case nick)])))))
-
-(defn authorize-nick-hash [nick hash]
- (let [db-user (fetch-nick nick)]
- (and db-user (= (db-user :hash) hash) db-user)))
+;; VIP
(defn is-vip? [session]
(session :is_admin))