]>
git.ipfire.org Git - ipfire.org.git/blob - src/web/nopaste.py
7 from . import ui_modules
9 class CreateHandler(auth
.CacheMixin
, base
.BaseHandler
):
10 MODES
= ("paste", "upload")
13 mode
= self
.get_argument("mode", "paste")
14 if not mode
in self
.MODES
:
15 raise tornado
.web
.HTTPError(400)
17 self
.render("nopaste/create.html", mode
=mode
,
18 max_size
=self
._max
_size
)
20 @base.ratelimit(minutes
=15, requests
=5)
22 mode
= self
.get_argument("mode")
23 if not mode
in self
.MODES
:
24 raise tornado
.web
.HTTPError(400)
26 mimetype
= "text/plain"
29 subject
= self
.get_argument("subject", None)
30 content
= self
.get_argument("content", "").encode("utf-8")
32 elif mode
== "upload":
33 for f
in self
.request
.files
.get("file"):
36 mimetype
= f
.content_type
40 if len(content
) > self
._max
_size
:
41 raise tornado
.web
.HTTPError(400,
42 "You cannot upload more than %s bytes" % self
._max
_size
)
44 expires
= self
.get_argument("expires", "0")
46 expires
= int(expires
)
47 except (TypeError, ValueError):
50 uid
= self
.backend
.nopaste
.create(subject
, content
, mimetype
=mimetype
,
51 expires
=expires
, account
=self
.current_user
, address
=self
.get_remote_ip())
54 return self
.redirect("/view/%s" % uid
)
56 raise tornado
.web
.HTTPError(500)
60 # Authenticated users are allowed to upload up to 25MB
62 return 25 * (1024 ** 2)
64 # The rest is only allowed to upload up to 2MB
65 return 2 * (1024 ** 2)
68 class RawHandler(base
.BaseHandler
):
70 entry
= self
.backend
.nopaste
.get(uid
)
72 raise tornado
.web
.HTTPError(404)
75 self
.set_header("Content-Disposition", "inline; filename=\"%s\"" % entry
.subject
)
78 self
.set_header("Content-Type", entry
.mimetype
)
81 self
.set_expires(3600)
84 content
= self
.backend
.nopaste
.get_content(entry
.uuid
)
88 class ViewHandler(auth
.CacheMixin
, base
.BaseHandler
):
90 entry
= self
.backend
.nopaste
.get(uid
)
92 raise tornado
.web
.HTTPError(404)
94 # Fetch the content if the output should be displayed
95 if entry
.mimetype
.startswith("text/"):
96 content
= self
.backend
.nopaste
.get_content(entry
.uuid
)
101 self
.set_expires(3600)
103 self
.render("nopaste/view.html", entry
=entry
, content
=content
)
106 class CodeModule(ui_modules
.UIModule
):
107 def render(self
, content
):
108 return self
.render_string("nopaste/modules/code.html", content
=content
)
110 def javascript_files(self
):
111 return "js/prettify.js"
114 return "css/prettify.css"
116 def embedded_javascript(self
):