(ns events (: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 "/event/proxy?url=http://dump.fm/images/20100629/1277836809689-dumpfm-ryder-tmz_template.png" :author {:nick "ryder" }}) (defn event-page [session] (let [st (fetch-template "event" session) event sample-event] (.setAttribute st "event" (stringify-and-escape sample-event)) (.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")))))