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")))))
|