From: Michael Tremer Date: Fri, 23 Feb 2024 18:33:25 +0000 (+0000) Subject: nopaste: Simplify pasting content X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=fbac12cb96e26de776f0612cd7686a6c9124c094;p=ipfire.org.git nopaste: Simplify pasting content Signed-off-by: Michael Tremer --- diff --git a/src/backend/nopaste.py b/src/backend/nopaste.py index 364f9a2c..e45eda72 100644 --- a/src/backend/nopaste.py +++ b/src/backend/nopaste.py @@ -24,6 +24,10 @@ class Nopaste(Object): return self.db.fetch_one(Paste, query, *args, **kwargs) def create(self, content, subject=None, mimetype=None, expires=None, account=None, address=None): + # Convert any text to bytes + if isinstance(content, str): + content = content.encode("utf-8") + # Store the blob blob_id = self._store_blob(content) diff --git a/src/templates/nopaste/create.html b/src/templates/nopaste/create.html index 5f81a4b3..334b0d83 100644 --- a/src/templates/nopaste/create.html +++ b/src/templates/nopaste/create.html @@ -1,34 +1,12 @@ {% extends "../base.html" %} -{% block title %} - {% if mode == "paste" %} - {{ _("New Paste") }} - {% elif mode == "upload" %} - {{ _("Upload File") }} - {% end %} -{% end block %} +{% block title %}{{ _("New Paste") }}{% end block %} {% block container %}
- -

- {% if mode == "paste" %} - {{ _("New Paste") }} - {% elif mode == "upload" %} - {{ _("Upload File") }} - {% end %} -

+

{{ _("New Paste") }}

@@ -37,68 +15,48 @@
-
+ {% raw xsrf_form_html() %} - +
+ - {% if mode == "paste" %} -
+
- {% end %} +
-
- {% if mode == "paste" %} - - {% elif mode == "upload" %} -

{{ _("File") }}

-
- -
- - {% if max_size %} -

- {{ _("You may upload up to %s") % format_size(max_size) }} -

- {% end %} - {% end %} +
-
-

Expires

+
+ -
- +
+
+ +
-
- +
+
+ +
diff --git a/src/web/__init__.py b/src/web/__init__.py index cc13fcf0..0ea16fcd 100644 --- a/src/web/__init__.py +++ b/src/web/__init__.py @@ -335,7 +335,7 @@ class Application(tornado.web.Application): # Serve any static files (r"/static/(.*)", tornado.web.StaticFileHandler, { "path" : self.settings.get("static_path") }), - ]) + ] + authentication_handlers) # location.ipfire.org self.add_handlers(r"location\.([a-z]+\.dev\.)?ipfire\.org", [ diff --git a/src/web/nopaste.py b/src/web/nopaste.py index 36b35675..dd7a94a6 100644 --- a/src/web/nopaste.py +++ b/src/web/nopaste.py @@ -6,60 +6,25 @@ from . import base from . import ui_modules class CreateHandler(base.AnalyticsMixin, base.BaseHandler): - MODES = ("paste", "upload") - + @tornado.web.authenticated def get(self): - mode = self.get_argument("mode", "paste") - if not mode in self.MODES: - raise tornado.web.HTTPError(400) - - self.render("nopaste/create.html", mode=mode, - max_size=self._max_size) + self.render("nopaste/create.html") + @tornado.web.authenticated @base.ratelimit(minutes=15, requests=5) def post(self): - mode = self.get_argument("mode") - if not mode in self.MODES: - raise tornado.web.HTTPError(400) - - mimetype = "text/plain" - - if mode == "paste": - subject = self.get_argument("subject", None) - content = self.get_argument("content", "").encode("utf-8") - - elif mode == "upload": - for f in self.request.files.get("file"): - subject = f.filename - content = f.body - mimetype = f.content_type - break - - # Check maximum size - if len(content) > self._max_size: - raise tornado.web.HTTPError(400, - "You cannot upload more than %s bytes" % self._max_size) - - expires = self.get_argument("expires", "0") - try: - expires = int(expires) - except (TypeError, ValueError): - expires = None - - paste = self.backend.nopaste.create(content, subject=subject, mimetype=mimetype, - expires=expires, account=self.current_user, address=self.get_remote_ip()) - - # Redirect the user - return self.redirect("/view/%s" % paste.uuid) + subject = self.get_argument("subject", None) + content = self.get_argument("content") - @property - def _max_size(self): - # Authenticated users are allowed to upload up to 25MB - if self.current_user: - return 25 * (1024 ** 2) + # Fetch expires time + expires = self.get_argument_int("expires", "0") - # The rest is only allowed to upload up to 2MB - return 2 * (1024 ** 2) + with self.db.transaction(): + paste = self.backend.nopaste.create(content, subject=subject, expires=expires, + account=self.current_user, address=self.get_remote_ip()) + + # Redirect to the paste + return self.redirect("/view/%s" % paste.uuid) class RawHandler(base.AnalyticsMixin, base.BaseHandler):