From 42279dcfb57134607b7c707b41e6a641e6944aeb Mon Sep 17 00:00:00 2001 From: Chris W Date: Sun, 14 Jan 2024 11:48:45 -0700 Subject: [PATCH] hopefully fix issues with empty extension --- src/controllers/paste_controller.cr | 19 ++++++++++++------- src/templates/index.html.j2 | 24 ++++++++++++++---------- 2 files changed, 26 insertions(+), 17 deletions(-) diff --git a/src/controllers/paste_controller.cr b/src/controllers/paste_controller.cr index 12ac74f..b9eb115 100644 --- a/src/controllers/paste_controller.cr +++ b/src/controllers/paste_controller.cr @@ -3,10 +3,10 @@ module Paste69 class PasteController < ATH::Controller def initialize(@config : Paste69::ConfigManager, @utils : Paste69::UtilsService, @url_encoder : Paste69::UrlEncoder, @db : Paste69::DBService, @s3_client : Paste69::S3Client); end - @[ARTA::Get("/{id}")] - @[ARTA::Post("/{id}")] - @[ARTA::Get("/{secret}/{id}")] - @[ARTA::Post("/{secret}/{id}")] + @[ARTA::Get("/{id}", requirements: {"id" => /.+/})] + @[ARTA::Post("/{id}", requirements: {"id" => /.+/})] + @[ARTA::Get("/{secret}/{id}", requirements: {"id" => /.+/})] + @[ARTA::Post("/{secret}/{id}", requirements: {"id" => /.+/})] def get_paste(req : ATH::Request, id : String, secret : String? = nil) : ATH::Response path = id.split("/").first sufs = File.extname(path) @@ -136,9 +136,14 @@ module Paste69 end if form.has_key?("file") - _filename, body = form["file"] - _, filename = form["filename"] || {nil, nil} - filename = filename ? String.new(filename) : nil + filename, body = form["file"] + _, ext = form["ext"] || {nil, nil} + + if ext + filename = filename ? File.basename(filename, File.extname(filename)) : "file" + ext = String.new(ext).lstrip(".") + filename = "#{filename}.#{ext}" + end @utils.store_file( body, diff --git a/src/templates/index.html.j2 b/src/templates/index.html.j2 index 18be31b..65494d2 100644 --- a/src/templates/index.html.j2 +++ b/src/templates/index.html.j2 @@ -17,25 +17,29 @@ Be sure to check out the source code and the original source from mia. HTTP POST files here: - curl -F'file=@yourfile.png' {{ fhost_url }} + curl -i -F'file=@yourfile.png' {{ fhost_url }} You can also POST remote URLs: - curl -F'url=http://example.com/image.jpg' {{ fhost_url }} + curl -i -F'url=http://example.com/image.jpg' {{ fhost_url }} If you don't want the resulting URL to be easy to guess: - curl -F'file=@yourfile.png' -Fsecret= {{ fhost_url }} - curl -F'url=http://example.com/image.jpg' -Fsecret= {{ fhost_url }} + curl -i -F'file=@yourfile.png' -Fsecret= {{ fhost_url }} + curl -i -F'url=http://example.com/image.jpg' -Fsecret= {{ fhost_url }} Or you can shorten URLs: - curl -F'shorten=http://example.com/some/long/url' {{ fhost_url }} + curl -i -F'shorten=http://example.com/some/long/url' {{ fhost_url }} -It is possible to append your own file name to the URL: +In some cases (like when piping STDOUT), you may need to add an extension manually. Otherwise +the extension will default to .txt or .bin: + curl -i -F'file=@-' -Fext=html {{ fhost_url }} + +It is also possible to append your own file name to the URL: {{ fhost_url }}/aaa.jpg/image.jpeg File URLs are valid for at least 30 days and up to a year (see below). Shortened URLs do not expire. Files can be set to expire sooner by adding an "expires" parameter (in hours) - curl -F'file=@yourfile.png' -Fexpires=24 {{ fhost_url }} + curl -i -F'file=@yourfile.png' -Fexpires=24 {{ fhost_url }} OR by setting "expires" to a timestamp in epoch milliseconds - curl -F'file=@yourfile.png' -Fexpires=1681996320000 {{ fhost_url }} + curl -i -F'file=@yourfile.png' -Fexpires=1681996320000 {{ fhost_url }} Expired files won't be removed immediately, but will be removed as part of the next purge. @@ -45,9 +49,9 @@ the HTTP response header includes an X-Token field. You can use this to perform management operations on the file. To delete the file immediately: - curl -Ftoken=token_here -Fdelete= {{ fhost_url }}/abc.txt + curl -i -Ftoken=token_here -Fdelete= {{ fhost_url }}/abc.txt To change the expiration date (see above): - curl -Ftoken=token_here -Fexpires=3 {{ fhost_url }}/abc.txt + curl -i -Ftoken=token_here -Fexpires=3 {{ fhost_url }}/abc.txt {% set max_size = config["max_content_length"]|filesizeformat(true) %} Maximum file size: {{ max_size }}