From 29a5f7dfc83aa5bced43acb6570f4445b35dd23f Mon Sep 17 00:00:00 2001 From: evazion Date: Sun, 21 Jun 2020 14:01:38 -0500 Subject: [PATCH] image proxy: replace HTTParty with Danbooru::Http. --- app/controllers/uploads_controller.rb | 2 +- app/logical/image_proxy.rb | 15 +++++++-------- test/functional/uploads_controller_test.rb | 11 +++++++++++ 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/app/controllers/uploads_controller.rb b/app/controllers/uploads_controller.rb index d99d58125..97f5090dc 100644 --- a/app/controllers/uploads_controller.rb +++ b/app/controllers/uploads_controller.rb @@ -21,7 +21,7 @@ class UploadsController < ApplicationController def image_proxy authorize Upload resp = ImageProxy.get_image(params[:url]) - send_data resp.body, :type => resp.content_type, :disposition => "inline" + send_data resp.body, type: resp.mime_type, disposition: "inline" end def index diff --git a/app/logical/image_proxy.rb b/app/logical/image_proxy.rb index 80982c7cc..9c2acfe42 100644 --- a/app/logical/image_proxy.rb +++ b/app/logical/image_proxy.rb @@ -1,4 +1,6 @@ class ImageProxy + class Error < StandardError; end + def self.needs_proxy?(url) fake_referer_for(url).present? end @@ -8,16 +10,13 @@ class ImageProxy end def self.get_image(url) - if url.blank? - raise "Must specify url" - end + raise Error, "URL not present" unless url.present? + raise Error, "Proxy not allowed for this url (url=#{url})" unless needs_proxy?(url) - if !needs_proxy?(url) - raise "Proxy not allowed for this site" - end + referer = fake_referer_for(url) + response = Danbooru::Http.headers(Referer: referer).get(url) + raise Error, "Couldn't proxy image (code=#{response.status}, url=#{url})" unless response.status.success? - response = HTTParty.get(url, Danbooru.config.httparty_options.deep_merge(headers: {"Referer" => fake_referer_for(url)})) - raise "HTTP error code: #{response.code} #{response.message}" unless response.success? response end end diff --git a/test/functional/uploads_controller_test.rb b/test/functional/uploads_controller_test.rb index 9df37a1b4..e19949fca 100644 --- a/test/functional/uploads_controller_test.rb +++ b/test/functional/uploads_controller_test.rb @@ -18,6 +18,17 @@ class UploadsControllerTest < ActionDispatch::IntegrationTest mock_iqdb_service! end + context "image proxy action" do + should "work" do + url = "https://i.pximg.net/img-original/img/2017/11/21/17/06/44/65985331_p0.png" + get_auth image_proxy_uploads_path, @user, params: { url: url } + + assert_response :success + assert_equal("image/png", response.media_type) + assert_equal(15_573, response.body.size) + end + end + context "batch action" do context "for twitter galleries" do should "render" do