summaryrefslogtreecommitdiff
path: root/src/events.clj
diff options
context:
space:
mode:
Diffstat (limited to 'src/events.clj')
-rw-r--r--src/events.clj64
1 files changed, 60 insertions, 4 deletions
diff --git a/src/events.clj b/src/events.clj
index 6660518..501c231 100644
--- a/src/events.clj
+++ b/src/events.clj
@@ -1,13 +1,69 @@
(ns events
- (use utils))
+ (:import java.util.Date
+ java.net.URL
+ java.io.ByteArrayInputStream
+ java.io.ByteArrayOutputStream
+ javax.imageio.ImageIO)
+ (:use clojure.contrib.duck-streams
+ compojure
+ rooms
+ utils))
+
+; 256bit b64 key
+(def event-secret (b64dec "zLSBf28jZ3Q89MLx7u3P/w==\r\n"))
+
+(def encoder (aes-encoder event-secret))
+(def decoder (aes-decoder event-secret))
(def sample-event {:name "TMZ Maker!"
:key "tmz"
- :template "http://dump.fm/images/20100629/1277836809689-dumpfm-ryder-tmz_template.png"
+ :template "/event/proxy?url=http://dump.fm/images/20100629/1277836809689-dumpfm-ryder-tmz_template.png"
:author {:nick "ryder" }})
-(defn current-event [session]
+(defn event-page [session]
(let [st (fetch-template "event" session)
event sample-event]
(.setAttribute st "event" (stringify-and-escape sample-event))
- (.toString st))) \ No newline at end of file
+ (.toString st)))
+
+(defn image-proxy [session params request]
+ (println "image-proxy for" (:url params))
+ [200 (.openStream (URL. (:url params)))])
+
+(defn fetch-event [key]
+ sample-event)
+
+(defn image-already-submitted? [event img-src]
+ false)
+
+(def event-submission-room "dumpfm")
+
+
+(defn build-event-msg [nick evnet url]
+ {:nick nick
+ :content url
+ :created_on (new Date)
+ :msg-id 1})
+
+(defn submit! [session params request]
+ (let [nick (:nick session)
+ bytes (b64dec (:image params))
+ src (:src params)
+ event (and nick bytes src (fetch-event (:event params)))]
+ (cond (not nick) (resp-error "NO_USER")
+ (not bytes) (resp-error "NO_IMG")
+ (not event) (resp-error "NO_EVENT")
+ (not (is-image? src)) (resp-error "BAD_SRC")
+ (image-already-submitted?
+ (:key event) src) (resp-error "IMG_SUBMITTED")
+ :else (let [ts (System/currentTimeMillis)
+ room (lookup-room event-submission-room)
+ fname (format "%s-%s.png" ts nick)
+ dest (open-file ["events" (:key event)] fname)
+ url (format "/events/%s/%s" (:key event) fname)]
+ (println "copying" dest)
+ (copy (ByteArrayInputStream. bytes) dest)
+ (dosync
+ (add-message (build-event-msg nick (:key event) url) room))
+ (println "copied")
+ (resp-success "OK"))))) \ No newline at end of file