]> git.ipfire.org Git - people/shoehn/ipfire.org.git/blame - webapp/handlers_nopaste.py
mirrors: Sort by distance (ascending)
[people/shoehn/ipfire.org.git] / webapp / handlers_nopaste.py
CommitLineData
60024cc8
MT
1#!/usr/bin/python
2
3import tornado.web
4
5from handlers_base import *
6
66862195 7class NopasteCreateHandler(BaseHandler):
b0b3e3e7
MT
8 MODES = ("paste", "upload")
9
60024cc8 10 def get(self):
b0b3e3e7
MT
11 mode = self.get_argument("mode", "paste")
12 if not mode in self.MODES:
13 raise tornado.web.HTTPError(400)
14
15 self.render("nopaste/create.html", mode=mode,
16 max_size=self._max_size)
60024cc8
MT
17
18 def post(self):
b0b3e3e7
MT
19 mode = self.get_argument("mode")
20 if not mode in self.MODES:
21 raise tornado.web.HTTPError(400)
22
23 if mode == "paste":
24 subject = self.get_argument("subject", None)
25 content = self.get_argument("content")
26 type = "text"
27
28 elif mode == "upload":
29 type = "file"
30
31 for f in self.request.files.get("file"):
32 subject = f.filename
33 content = f.body
34 break
35
36 # Check maximum size
37 if len(content) > self._max_size:
38 raise tornado.web.HTTPError(400,
39 "You cannot upload more than %s bytes" % self._max_size)
66862195
MT
40
41 expires = self.get_argument("expires", "0")
42 try:
43 expires = int(expires)
44 except (TypeError, ValueError):
45 expires = None
46
b0b3e3e7 47 uid = self.backend.nopaste.create(subject, content, type=type,
66862195
MT
48 expires=expires, account=self.current_user,
49 address=self.get_remote_ip())
50
51 if uid:
52 return self.redirect("/view/%s" % uid)
53
54 raise tornado.web.HTTPError(500)
55
b0b3e3e7
MT
56 @property
57 def _max_size(self):
58 # Authenticated users are allowed to upload up to 10MB
59 if self.current_user:
e72c1f45 60 return 25 * (1024 ** 2)
b0b3e3e7
MT
61
62 # The rest is only allowed to upload up to 2MB
63 return 2 * (1024 ** 2)
64
66862195
MT
65
66class NopasteRawHandler(BaseHandler):
67 def get(self, uid):
68 entry = self.backend.nopaste.get(uid)
69 if not entry:
70 raise tornado.web.HTTPError(404)
71
6f3eb7f9
MT
72 # Set the filename
73 self.set_header("Content-Disposition", "inline; filename=\"%s\"" % entry.subject)
74
66862195
MT
75 # Set mimetype
76 self.set_header("Content-Type", entry.mimetype)
77
e2708eb5
MT
78 # Set expiry headers
79 expires = entry.time_expires or \
80 (datetime.datetime.utcnow() + datetime.timedelta(days=30))
81
82 # For HTTP/1.0
83 self.set_header("Expires", expires)
84
85 # For HTTP/1.1
86 max_age = expires - datetime.datetime.utcnow()
87 self.set_header("Cache-Control", "public,max-age=%d" % max_age.total_seconds())
88
66862195 89 # Send content
0de07bc3
MT
90 content = self.backend.nopaste.get_content(entry.uuid)
91 self.finish(content)
60024cc8
MT
92
93
66862195
MT
94class NopasteViewHandler(BaseHandler):
95 def get(self, uid):
96 entry = self.backend.nopaste.get(uid)
97 if not entry:
98 raise tornado.web.HTTPError(404)
60024cc8 99
0de07bc3
MT
100 # Fetch the content if the output should be displayed
101 if entry.mimetype.startswith("text/"):
102 content = self.backend.nopaste.get_content(entry.uuid)
103 else:
104 content = None
105
106 self.render("nopaste/view.html", entry=entry, content=content)