diff --git a/.env b/.env index 42c1e4cc1..5d5cfe4c8 100644 --- a/.env +++ b/.env @@ -80,3 +80,5 @@ # export DANBOORU_AWS_SQS_REGION= # export DANBOORU_IQDBS_AUTH_KEY= # export DANBOORU_IQDBS_SERVER= +# export DANBOORU_CCS_SERVER= +# export DANBOORU_CCS_KEY= \ No newline at end of file diff --git a/app/assets/javascripts/related_tag.js b/app/assets/javascripts/related_tag.js index 177e09cee..1d269ccfc 100644 --- a/app/assets/javascripts/related_tag.js +++ b/app/assets/javascripts/related_tag.js @@ -150,6 +150,31 @@ } $dest.append(Danbooru.RelatedTag.build_html("artist", tags, "artist", true)); } + if (Danbooru.meta("ccs-server")) { + if (Danbooru.RelatedTag.recent_ccs) { + if (Danbooru.RelatedTag.recent_ccs.length) { + Danbooru.RelatedTag.build_ccs($dest); + } + } else { + Danbooru.RelatedTag.recent_ccs = []; // semaphore to only make 1 call + Danbooru.RelatedTag.fetch_ccs($dest); + } + } + } + + Danbooru.RelatedTag.fetch_ccs = function($dest) { + $.getJSON(Danbooru.meta("ccs-server") + "/query", { + "url": Danbooru.meta("image-url"), + "ref": Danbooru.meta("image-ref"), + "sig": Danbooru.meta("image-sig") + }, function(data) { + Danbooru.RelatedTag.recent_ccs = data.filter(function(x) {return x[0] > 0.25;}); + Danbooru.RelatedTag.recent_ccs = $.map(Danbooru.RelatedTag.recent_ccs, function(x) {return [[x[1], 4]];}); + + if (Danbooru.RelatedTag.recent_ccs.length) { + Danbooru.RelatedTag.build_ccs($dest); + } + }); } Danbooru.RelatedTag.build_recent_and_frequent = function($dest) { @@ -174,6 +199,12 @@ } } + Danbooru.RelatedTag.build_ccs = function($dest) { + if (Danbooru.RelatedTag.recent_ccs) { + $dest.append(this.build_html("Guessed Characters", Danbooru.RelatedTag.recent_ccs, "ccs")) + } + } + Danbooru.RelatedTag.build_translated = function($dest) { if (Danbooru.RelatedTag.translated_tags && Danbooru.RelatedTag.translated_tags.length) { $dest.append(this.build_html("Translated Tags", Danbooru.RelatedTag.translated_tags, "translated")); diff --git a/app/helpers/uploads_helper.rb b/app/helpers/uploads_helper.rb new file mode 100644 index 000000000..bf9a89ac5 --- /dev/null +++ b/app/helpers/uploads_helper.rb @@ -0,0 +1,9 @@ +module UploadsHelper + def ccs_build_sig(url) + return nil unless Danbooru.config.ccs_server.present? + + ref = ImageProxy.fake_referer_for(url) + digest = OpenSSL::Digest.new("sha256") + OpenSSL::HMAC.hexdigest(digest, Danbooru.config.ccs_key, "#{url},#{ref}") + end +end diff --git a/app/logical/sources/strategies/twitter.rb b/app/logical/sources/strategies/twitter.rb index 338456b61..7f003d316 100644 --- a/app/logical/sources/strategies/twitter.rb +++ b/app/logical/sources/strategies/twitter.rb @@ -31,6 +31,7 @@ module Sources::Strategies @tags = attrs[:entities][:hashtags].map do |text:, indices:| [text, "https://twitter.com/hashtag/#{text}"] end + rescue Twitter::Error::Forbidden end def image_urls diff --git a/app/views/uploads/new.html.erb b/app/views/uploads/new.html.erb index a24c6ab0e..9dbf0f049 100644 --- a/app/views/uploads/new.html.erb +++ b/app/views/uploads/new.html.erb @@ -141,4 +141,13 @@ Upload - <%= Danbooru.config.app_name %> <% end %> +<% if CurrentUser.is_moderator? && Danbooru.config.ccs_server.present? && @normalized_url %> + <% content_for(:html_header) do %> + <%= tag("meta", name: "ccs-server", content: Danbooru.config.ccs_server) %> + <%= tag("meta", name: "image-url", content: @normalized_url) %> + <%= tag("meta", name: "image-ref", content: ImageProxy.fake_referer_for(@normalized_url)) %> + <%= tag("meta", name: "image-sig", content: ccs_build_sig(@normalized_url)) %> + <% end %> +<% end %> + <%= render "posts/partials/common/secondary_links" %>