uploads: remove batch upload page.
* Make /uploads/batch redirect to /uploads/new. * Remove /uploads/image_proxy.
This commit is contained in:
@@ -15,19 +15,6 @@ class UploadsController < ApplicationController
|
|||||||
respond_with(@upload)
|
respond_with(@upload)
|
||||||
end
|
end
|
||||||
|
|
||||||
def batch
|
|
||||||
authorize Upload
|
|
||||||
@url = params.dig(:batch, :url) || params[:url]
|
|
||||||
@source = Sources::Strategies.find(@url, params[:ref]) if @url.present?
|
|
||||||
respond_with(@source)
|
|
||||||
end
|
|
||||||
|
|
||||||
def image_proxy
|
|
||||||
authorize Upload
|
|
||||||
resp = ImageProxy.get_image(params[:url])
|
|
||||||
send_data resp.body, type: resp.mime_type, disposition: "inline"
|
|
||||||
end
|
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@mode = params.fetch(:mode, "gallery")
|
@mode = params.fetch(:mode, "gallery")
|
||||||
|
|
||||||
|
|||||||
@@ -21,10 +21,6 @@ Upload.initialize_all = function() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($("#c-uploads #a-batch").length) {
|
|
||||||
$(document).on("click.danbooru", "#c-uploads #a-batch #link", Upload.batch_open_all);
|
|
||||||
}
|
|
||||||
|
|
||||||
Upload.loadAssets();
|
Upload.loadAssets();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -71,10 +67,6 @@ Upload.toggle_translation = function() {
|
|||||||
$(".commentary-translation").slideToggle();
|
$(".commentary-translation").slideToggle();
|
||||||
};
|
};
|
||||||
|
|
||||||
Upload.batch_open_all = function() {
|
|
||||||
$(".upload-preview > a").each((_i, link) => window.open(link.href));
|
|
||||||
};
|
|
||||||
|
|
||||||
$(function() {
|
$(function() {
|
||||||
Upload.initialize_all();
|
Upload.initialize_all();
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -44,28 +44,4 @@ div#c-uploads {
|
|||||||
margin-right: 1.5em;
|
margin-right: 1.5em;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
div.upload-preview {
|
|
||||||
display: inline-block;
|
|
||||||
|
|
||||||
> a {
|
|
||||||
width: 154px;
|
|
||||||
height: 154px;
|
|
||||||
margin: 0 10px 10px 0;
|
|
||||||
display: inline-block;
|
|
||||||
|
|
||||||
img {
|
|
||||||
margin: auto;
|
|
||||||
border: 2px solid transparent;
|
|
||||||
|
|
||||||
max-width: 154px;
|
|
||||||
max-height: 154px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.caption-top {
|
|
||||||
font-size: var(--text-sm);
|
|
||||||
margin-bottom: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,24 +0,0 @@
|
|||||||
# frozen_string_literal: true
|
|
||||||
|
|
||||||
class ImageProxy
|
|
||||||
class Error < StandardError; end
|
|
||||||
|
|
||||||
def self.needs_proxy?(url)
|
|
||||||
fake_referer_for(url).present?
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.fake_referer_for(url)
|
|
||||||
Sources::Strategies.find(url).headers["Referer"]
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.get_image(url)
|
|
||||||
raise Error, "URL not present" unless url.present?
|
|
||||||
raise Error, "Proxy not allowed for this url (url=#{url})" unless needs_proxy?(url)
|
|
||||||
|
|
||||||
referer = fake_referer_for(url)
|
|
||||||
response = Danbooru::Http.timeout(30).headers(Referer: referer).get(url)
|
|
||||||
raise Error, "Couldn't proxy image (code=#{response.status}, url=#{url})" unless response.status.success?
|
|
||||||
|
|
||||||
response
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -211,12 +211,6 @@ module Sources
|
|||||||
nil
|
nil
|
||||||
end
|
end
|
||||||
|
|
||||||
# Subclasses should merge in any required headers needed to access resources
|
|
||||||
# on the site.
|
|
||||||
def headers
|
|
||||||
{}
|
|
||||||
end
|
|
||||||
|
|
||||||
# Download the file at the given url, or at the main image url by default.
|
# Download the file at the given url, or at the main image url by default.
|
||||||
def download_file!(download_url = image_url)
|
def download_file!(download_url = image_url)
|
||||||
response, file = http_downloader.download_media(download_url)
|
response, file = http_downloader.download_media(download_url)
|
||||||
|
|||||||
@@ -100,10 +100,6 @@ module Sources
|
|||||||
tags.map(&:first).flat_map(&method(:translate_tag)).uniq.sort
|
tags.map(&:first).flat_map(&method(:translate_tag)).uniq.sort
|
||||||
end
|
end
|
||||||
|
|
||||||
def headers
|
|
||||||
{ "Referer" => "http://#{site_name}" }
|
|
||||||
end
|
|
||||||
|
|
||||||
# Moebooru returns an empty array when doing an md5:<hash> search for a
|
# Moebooru returns an empty array when doing an md5:<hash> search for a
|
||||||
# deleted post. Because of this, api_response may be empty in some cases.
|
# deleted post. Because of this, api_response may be empty in some cases.
|
||||||
def api_response
|
def api_response
|
||||||
|
|||||||
@@ -177,10 +177,6 @@ module Sources
|
|||||||
api_illust[:description]
|
api_illust[:description]
|
||||||
end
|
end
|
||||||
|
|
||||||
def headers
|
|
||||||
{ "Referer" => "https://www.pixiv.net" }
|
|
||||||
end
|
|
||||||
|
|
||||||
def normalize_for_source
|
def normalize_for_source
|
||||||
return nil if illust_id.blank?
|
return nil if illust_id.blank?
|
||||||
"https://www.pixiv.net/artworks/#{illust_id}"
|
"https://www.pixiv.net/artworks/#{illust_id}"
|
||||||
|
|||||||
@@ -93,10 +93,6 @@ module Sources
|
|||||||
image_urls.map { |img| img.gsub(%r{.cn/\w+/(\w+)}, '.cn/orj360/\1') }
|
image_urls.map { |img| img.gsub(%r{.cn/\w+/(\w+)}, '.cn/orj360/\1') }
|
||||||
end
|
end
|
||||||
|
|
||||||
def headers
|
|
||||||
{ "Referer" => "https://weibo.com" }
|
|
||||||
end
|
|
||||||
|
|
||||||
def page_url
|
def page_url
|
||||||
if api_response.present?
|
if api_response.present?
|
||||||
artist_id = api_response["user"]["id"]
|
artist_id = api_response["user"]["id"]
|
||||||
|
|||||||
@@ -9,14 +9,6 @@ class UploadPolicy < ApplicationPolicy
|
|||||||
user.is_admin? || record.uploader_id == user.id
|
user.is_admin? || record.uploader_id == user.id
|
||||||
end
|
end
|
||||||
|
|
||||||
def batch?
|
|
||||||
unbanned?
|
|
||||||
end
|
|
||||||
|
|
||||||
def image_proxy?
|
|
||||||
unbanned?
|
|
||||||
end
|
|
||||||
|
|
||||||
def permitted_attributes
|
def permitted_attributes
|
||||||
[:source, :referer_url, files: {}]
|
[:source, :referer_url, files: {}]
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -6,7 +6,6 @@
|
|||||||
|
|
||||||
<p>
|
<p>
|
||||||
<%= link_to "Post to #{Danbooru.config.app_name}", "javascript:location.href='#{request.protocol + request.host_with_port}/uploads/new?url='+encodeURIComponent(location.href)+'&ref='+encodeURIComponent(document.referrer)" %>
|
<%= link_to "Post to #{Danbooru.config.app_name}", "javascript:location.href='#{request.protocol + request.host_with_port}/uploads/new?url='+encodeURIComponent(location.href)+'&ref='+encodeURIComponent(document.referrer)" %>
|
||||||
| <%= link_to "Batch to #{Danbooru.config.app_name}", "javascript:location.href='#{request.protocol + request.host_with_port}/uploads/batch?url='+encodeURIComponent(location.href)" %>
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div class="prose">
|
<div class="prose">
|
||||||
|
|||||||
@@ -1,37 +0,0 @@
|
|||||||
<% page_title "Batch Upload" %>
|
|
||||||
<%= render "uploads/secondary_links" %>
|
|
||||||
|
|
||||||
<div id="c-uploads">
|
|
||||||
<div id="a-batch">
|
|
||||||
<h1>Batch Upload</h1>
|
|
||||||
|
|
||||||
<%= simple_form_for(:batch, url: batch_uploads_path, method: :get, defaults: { required: false }, html: { class: "one-line-form" }) do |f| %>
|
|
||||||
<%= f.input :url, label: "URL", input_html: { size: 70, value: @url, placeholder: "https://www.pixiv.net/member_illust.php?mode=medium&illust_id=65981746" } %>
|
|
||||||
<%= f.submit "Fetch" %>
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
<% if @source.present? %>
|
|
||||||
<section>
|
|
||||||
<% @source.image_urls.zip(@source.preview_urls).each.with_index do |(url, preview_url), i| %>
|
|
||||||
<div class="upload-preview">
|
|
||||||
<p class="caption-top">
|
|
||||||
<%= link_to "Image ##{i}", new_upload_path(url: url, ref: @url), target: "_blank" %>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<%= link_to new_upload_path(url: url, ref: @url), target: "_blank" do %>
|
|
||||||
<% if ImageProxy.needs_proxy?(url) %>
|
|
||||||
<%= image_tag(image_proxy_uploads_path(url: preview_url)) %>
|
|
||||||
<% elsif url.is_a?(String) %>
|
|
||||||
<%= image_tag preview_url %>
|
|
||||||
<% else %>
|
|
||||||
Direct Link
|
|
||||||
<% end %>
|
|
||||||
<% end %>
|
|
||||||
</div>
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
<p><%= link_to "Open all links in new tabs", "#", :id => "link" %></p>
|
|
||||||
</section>
|
|
||||||
<% end %>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
@@ -249,8 +249,7 @@ Rails.application.routes.draw do
|
|||||||
resources :tag_implications, only: [:show, :index, :destroy]
|
resources :tag_implications, only: [:show, :index, :destroy]
|
||||||
resources :uploads do
|
resources :uploads do
|
||||||
collection do
|
collection do
|
||||||
get :batch
|
get :batch, to: redirect(path: "/uploads/new")
|
||||||
get :image_proxy
|
|
||||||
end
|
end
|
||||||
resources :upload_media_assets, only: [:show, :index], path: "assets"
|
resources :upload_media_assets, only: [:show, :index], path: "assets"
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -6,39 +6,11 @@ class UploadsControllerTest < ActionDispatch::IntegrationTest
|
|||||||
@user = create(:user)
|
@user = create(:user)
|
||||||
end
|
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 "batch action" do
|
||||||
context "for twitter galleries" do
|
should "redirect to the new upload page" do
|
||||||
should "render" do
|
get batch_uploads_path(url: "https://twitter.com/lvlln/status/567054278486151168")
|
||||||
skip "Twitter keys are not set" unless Danbooru.config.twitter_api_key
|
|
||||||
get_auth batch_uploads_path, @user, params: {:url => "https://twitter.com/lvlln/status/567054278486151168"}
|
|
||||||
assert_response :success
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context "for pixiv ugoira galleries" do
|
assert_redirected_to new_upload_path(url: "https://twitter.com/lvlln/status/567054278486151168")
|
||||||
should "render" do
|
|
||||||
get_auth batch_uploads_path, @user, params: {:url => "https://www.pixiv.net/member_illust.php?mode=medium&illust_id=59523577"}
|
|
||||||
assert_response :success
|
|
||||||
assert_no_match(/59523577_ugoira0\.jpg/, response.body)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context "for a blank source" do
|
|
||||||
should "render" do
|
|
||||||
get_auth batch_uploads_path, @user
|
|
||||||
assert_response :success
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user