summaryrefslogtreecommitdiff
path: root/src/events.clj
blob: 501c2319329434c9cbbad3ed1eafa7a0c0c9612c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
(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")))))