From 7ab33da7fcebff70280c8cbca48a5bba73bb89c1 Mon Sep 17 00:00:00 2001 From: Chris W Date: Mon, 15 Jan 2024 14:52:38 -0700 Subject: [PATCH] Improve handling of URLs --- src/controllers/paste_controller.cr | 16 ++++++++++------ src/services/utils_service.cr | 5 +++-- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/controllers/paste_controller.cr b/src/controllers/paste_controller.cr index b63eaa8..731aa78 100644 --- a/src/controllers/paste_controller.cr +++ b/src/controllers/paste_controller.cr @@ -136,14 +136,16 @@ module Paste69 if form.has_key?("file") filename, body = form["file"] + end - if form.has_key?("ext") - _, ext = form["ext"] - ext = String.new(ext).lstrip(".") - filename = filename ? File.basename(filename, File.extname(filename)) : "file" - filename = "#{filename}.#{ext}" - end + if form.has_key?("ext") + _, ext = form["ext"] + ext = String.new(ext).lstrip(".") + filename = filename ? File.basename(filename, File.extname(filename)) : "file" + filename = "#{filename}.#{ext}" + end + if body @utils.store_file( body, content_type, @@ -157,6 +159,8 @@ module Paste69 _, body = form["url"] @utils.store_url( String.new(body), + filename, + expires ? String.new(expires).to_i64 : nil, remote_addr, user_agent, !!secret, diff --git a/src/services/utils_service.cr b/src/services/utils_service.cr index b8755be..5aaf6ca 100644 --- a/src/services/utils_service.cr +++ b/src/services/utils_service.cr @@ -81,7 +81,7 @@ module Paste69 res end - def store_url(url : String, addr : String? = nil, ua : String? = nil, secret : Bool = false) + def store_url(url : String, filename : String? = nil, requested_expiration : Int64? = nil, addr : String? = nil, ua : String? = nil, secret : Bool = false) if is_fhost_url?(url) raise ATH::Exceptions::BadRequest.new("Invalid URL") end @@ -102,7 +102,8 @@ module Paste69 if res.headers.has_key?("Content-Length") l = res.headers["Content-Length"].to_i64 if l <= @config.get("max_content_length").as_i64 - return store_file(res.body.to_slice, res.headers["Content-Type"], nil, nil, addr, ua, secret) + filename ||= File.basename(url) + return store_file(res.body.to_slice, res.headers["Content-Type"], filename, nil, addr, ua, secret) else raise Exceptions::ContentTooLarge.new("Content-Length was too large") end