diff --git a/app/controllers/reports_controller.rb b/app/controllers/reports_controller.rb index 95478709b..1749178af 100644 --- a/app/controllers/reports_controller.rb +++ b/app/controllers/reports_controller.rb @@ -1,7 +1,7 @@ class ReportsController < ApplicationController before_filter :member_only, :except => [:upload_tags] before_filter :gold_only, :only => [:similar_users] - before_filter :moderator_only, :only => [:post_versions, :post_versions_create] + before_filter :moderator_only, :only => [:post_versions, :post_versions_create, :down_voting_post_report, :down_voting_post_report_create] def uploads @report = Reports::Uploads.new(params[:min_date], params[:max_date], params[:queries]) @@ -23,4 +23,16 @@ class ReportsController < ApplicationController @user = User.find(params[:user_id]) @upload_reports = Reports::UploadTags.includes(versions: { post: :versions }).for_user(params[:user_id]).order("id desc").paginate(params[:page], :limit => params[:limit]) end + + def down_voting_post + end + + def down_voting_post_create + user_id = CurrentUser.id + post_id = params[:post_id].to_i + sqs = SqsService.new(Danbooru.config.aws_sqs_async_reports) + sqs.send_message("targetedpostdownvoting-#{user_id}-#{post_id}") + flash[:notice] = "You will be messaged when the report has finished generating" + redirect_to reports_down_voting_post_path + end end diff --git a/app/views/posts/partials/show/_options.html.erb b/app/views/posts/partials/show/_options.html.erb index dfa9ca9a7..126c18ca0 100644 --- a/app/views/posts/partials/show/_options.html.erb +++ b/app/views/posts/partials/show/_options.html.erb @@ -56,6 +56,10 @@ <% end %>
  • <%= link_to "Replace Image", new_post_replacement_path(:post_id => post.id), :id => "replace-image" %>
  • + + <% if CurrentUser.is_moderator? %> +
  • <%= link_to "Down vote report", reports_down_voting_post_path(post_id: post.id) %>
  • + <% end %> <% end %> <% end %> <% end %> diff --git a/app/views/reports/down_voting_post.html.erb b/app/views/reports/down_voting_post.html.erb new file mode 100644 index 000000000..c62299f94 --- /dev/null +++ b/app/views/reports/down_voting_post.html.erb @@ -0,0 +1,17 @@ +
    +
    +

    Down Voting Post Report

    + +

    This report uses stastistical analysis to determine if a user's uploads are being targeted by an attacker. It will take some time to generate so you will receive a DMail with the results when it finishes.

    + + <%= form_tag(reports_down_voting_post_create_path) do %> + <%= hidden_field_tag "post_id", params[:post_id] %> + <%= submit_tag "Build" %> + <% end %> +
    +
    + +<% content_for(:page_title) do %> + Down Voting Post Report - <%= Danbooru.config.app_name %> +<% end %> + diff --git a/config/initializers/delayed_jobs.rb b/config/initializers/delayed_jobs.rb index fe144d69c..cdab68afe 100644 --- a/config/initializers/delayed_jobs.rb +++ b/config/initializers/delayed_jobs.rb @@ -1,2 +1,13 @@ +require 'delayed/plugin' + +class DelayedJobTimeoutPlugin < ::Delayed::Plugin + callbacks do |lifecycle| + lifecycle.before(:execute) do |job| + job.class.connection.execute "set statement_timeout = 0" + end + end +end + Delayed::Worker.default_queue_name = "default" Delayed::Worker.destroy_failed_jobs = false +Delayed::Worker.plugins << DelayedJobTimeoutPlugin diff --git a/config/routes.rb b/config/routes.rb index fb9a00372..318d8a57c 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -243,6 +243,8 @@ Rails.application.routes.draw do get "reports/upload_tags" => "reports#upload_tags" get "reports/post_versions" => "reports#post_versions" post "reports/post_versions_create" => "reports#post_versions_create" + get "reports/down_voting_post" => "reports#down_voting_post" + post "reports/down_voting_post_create" => "reports#down_voting_post_create" resources :saved_searches, :except => [:show] do collection do get :labels diff --git a/script/delayed_job b/script/delayed_job index edf195985..651baaea0 100755 --- a/script/delayed_job +++ b/script/delayed_job @@ -2,4 +2,5 @@ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'config', 'environment')) require 'delayed/command' +Delayed::Job.connection.execute "set statement_timeout=0" Delayed::Command.new(ARGV).daemonize