]>
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")
14 mode
= self
.get_argument("mode", "paste")
15 if not mode
in self
.MODES
:
16 raise tornado
.web
.HTTPError(400)
18 self
.render("nopaste/create.html", mode
=mode
,
19 max_size
=self
._max
_size
)
22 @base.ratelimit(minutes
=15, requests
=5)
24 mode
= self
.get_argument("mode")
25 if not mode
in self
.MODES
:
26 raise tornado
.web
.HTTPError(400)
28 mimetype
= "text/plain"
31 subject
= self
.get_argument("subject", None)
32 content
= self
.get_argument("content", "").encode("utf-8")
34 elif mode
== "upload":
35 for f
in self
.request
.files
.get("file"):
38 mimetype
= f
.content_type
42 if len(content
) > self
._max
_size
:
43 raise tornado
.web
.HTTPError(400,
44 "You cannot upload more than %s bytes" % self
._max
_size
)
46 expires
= self
.get_argument("expires", "0")
48 expires
= int(expires
)
49 except (TypeError, ValueError):
52 uid
= self
.backend
.nopaste
.create(subject
, content
, mimetype
=mimetype
,
53 expires
=expires
, account
=self
.current_user
, address
=self
.get_remote_ip())
56 return self
.redirect("/view/%s" % uid
)
58 raise tornado
.web
.HTTPError(500)
62 # Authenticated users are allowed to upload up to 25MB
64 return 25 * (1024 ** 2)
66 # The rest is only allowed to upload up to 2MB
67 return 2 * (1024 ** 2)
70 class RawHandler(base
.BaseHandler
):
73 entry
= self
.backend
.nopaste
.get(uid
)
75 raise tornado
.web
.HTTPError(404)
78 self
.set_header("Content-Disposition", "inline; filename=\"%s\"" % entry
.subject
)
81 self
.set_header("Content-Type", entry
.mimetype
)
84 self
.set_expires(3600)
87 content
= self
.backend
.nopaste
.get_content(entry
.uuid
)
91 class ViewHandler(auth
.CacheMixin
, base
.BaseHandler
):
94 entry
= self
.backend
.nopaste
.get(uid
)
96 raise tornado
.web
.HTTPError(404)
98 # Fetch the content if the output should be displayed
99 if entry
.mimetype
.startswith("text/"):
100 content
= self
.backend
.nopaste
.get_content(entry
.uuid
)
105 self
.set_expires(3600)
107 self
.render("nopaste/view.html", entry
=entry
, content
=content
)
110 class CodeModule(ui_modules
.UIModule
):
111 def render(self
, content
):
112 return self
.render_string("nopaste/modules/code.html", content
=content
)
114 def javascript_files(self
):
115 return "js/prettify.js"
118 return "css/prettify.css"
120 def embedded_javascript(self
):