]> git.ipfire.org Git - people/shoehn/ipfire.org.git/blob - webapp/handlers_nopaste.py
adjust touch target on mobile Feature page
[people/shoehn/ipfire.org.git] / webapp / handlers_nopaste.py
1 #!/usr/bin/python
2
3 import tornado.web
4
5 from handlers_base import *
6
7 class NopasteCreateHandler(BaseHandler):
8 MODES = ("paste", "upload")
9
10 def get(self):
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)
17
18 def post(self):
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)
40
41 expires = self.get_argument("expires", "0")
42 try:
43 expires = int(expires)
44 except (TypeError, ValueError):
45 expires = None
46
47 uid = self.backend.nopaste.create(subject, content, type=type,
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
56 @property
57 def _max_size(self):
58 # Authenticated users are allowed to upload up to 10MB
59 if self.current_user:
60 return 25 * (1024 ** 2)
61
62 # The rest is only allowed to upload up to 2MB
63 return 2 * (1024 ** 2)
64
65
66 class 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
72 # Set the filename
73 self.set_header("Content-Disposition", "inline; filename=\"%s\"" % entry.subject)
74
75 # Set mimetype
76 self.set_header("Content-Type", entry.mimetype)
77
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
89 # Send content
90 content = self.backend.nopaste.get_content(entry.uuid)
91 self.finish(content)
92
93
94 class NopasteViewHandler(BaseHandler):
95 def get(self, uid):
96 entry = self.backend.nopaste.get(uid)
97 if not entry:
98 raise tornado.web.HTTPError(404)
99
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)