--- /dev/null
+{% extends "../base.html" %}
+
+{% block title %}{{ _("Upload File") }}{% end block %}
+
+{% block container %}
+ <section class="hero is-primary">
+ <div class="hero-body">
+ <div class="container">
+ <h1 class="title">{{ _("Upload File") }}</h1>
+ </div>
+ </div>
+ </section>
+
+ <section class="section">
+ <div class="container">
+ <div class="columns">
+ <div class="column is-8">
+ <form action="" method="POST" enctype="multipart/form-data">
+ {% raw xsrf_form_html() %}
+
+ <div class="field">
+ <label class="label">{{ _("File") }}</label>
+
+ <div class="control">
+ <div class="file has-name is-fullwidth">
+ <label class="file-label">
+ <input class="file-input" type="file" name="file">
+
+ <span class="file-cta">
+ <span class="file-icon">
+ <i class="fas fa-upload"></i>
+ </span>
+ <span class="file-label">
+ {{ _("Choose a file…") }}
+ </span>
+ </span>
+
+ <span class="file-name"></span>
+ </label>
+ </div>
+ </div>
+ </div>
+
+ <div class="field">
+ <label class="label">{{ _("Subject") }}</label>
+
+ <div class="control">
+ <input class="input" type="text" name="subject"
+ placeholder="{{ _("Subject") }} ({{ _("optional") }})">
+ </div>
+ </div>
+
+ <div class="field">
+ <label class="label">{{ _("Expires After") }}</label>
+
+ <div class="control">
+ <div class="select is-fullwidth" name="expires">
+ <select>
+ <option value="0">{{ _("never") }}</option>
+ <option value="600">{{ _("after ten minutes") }}</option>
+ <option value="3600">{{ _("after one hour") }}</option>
+ <option value="{{ 24 * 3600 }}">{{ _("after one day") }}</option>
+ <option value="{{ 7 * 24 * 3600 }}">{{ _("after one week") }}</option>
+ <option value="{{ 30 * 24 * 3600 }}" selected>{{ _("after one month") }}</option>
+ </select>
+ </div>
+ </div>
+ </div>
+
+ <div class="field">
+ <div class="control">
+ <button type="submit" class="button is-primary">
+ <i class="fa-solid fa-upload"></i> {{ _("Upload") }}
+ </button>
+ </div>
+ </div>
+ </form>
+ </div>
+ </div>
+ </div>
+ </section>
+{% end block %}
# nopaste.ipfire.org
self.add_handlers(r"nopaste\.([a-z]+\.dev\.)?ipfire\.org", [
(r"/", nopaste.CreateHandler),
+ (r"/upload", nopaste.UploadHandler),
+
+ # View
(r"/raw/(.*)", nopaste.RawHandler),
(r"/view/(.*)", nopaste.ViewHandler),
self.finish()
+class UploadHandler(base.AnalyticsMixin, base.BaseHandler):
+ @tornado.web.authenticated
+ def get(self):
+ self.render("nopaste/upload.html")
+
+ @tornado.web.authenticated
+ def post(self):
+ subject = self.get_argument("subject", None)
+
+ # Fetch expires time
+ expires = self.get_argument_int("expires", "0")
+
+ with self.db.transaction():
+ for f in self.request.files.get("file"):
+ paste = self.backend.nopaste.create(f.body, subject=subject, expires=expires,
+ account=self.current_user, address=self.get_remote_ip())
+
+ # Only accept one file
+ break
+
+ # Redirect to the paste
+ return self.redirect("/view/%s" % paste.uuid)
+
+
class RawHandler(base.AnalyticsMixin, base.BaseHandler):
def get(self, uid):
with self.db.transaction():