diff --git a/app.rb b/app.rb index 22a806b8..c2b10b12 100644 --- a/app.rb +++ b/app.rb @@ -963,6 +963,31 @@ post '/comment/:comment_id/delete' do |comment_id| return {result: 'error'}.to_json end +post '/site/:username/report' do |username| + site = Site[username: username] + + redirect request.referer if site.nil? + + report = Report.new site_id: site.id, type: params[:type], comments: params[:comments] + + if current_site + report.reporting_site_id = current_site.id + else + report.ip = request.ip + end + + report.save + + EmailWorker.perform_async({ + from: 'web@neocities.org', + to: 'report@neocities.org', + subject: "[Neocities Report] #{site.username} has been reported for #{report.type}", + body: "Reported by #{report.reporting_site_id ? report.reporting_site.username : report.ip}: #{report.comments}" + }) + + redirect request.referer +end + def require_admin redirect '/' unless signed_in? && current_site.is_admin end diff --git a/migrations/034_add_reports.rb b/migrations/034_add_reports.rb new file mode 100644 index 00000000..08cd9492 --- /dev/null +++ b/migrations/034_add_reports.rb @@ -0,0 +1,18 @@ +Sequel.migration do + up { + DB.create_table! :reports do + primary_key :id + Integer :site_id + Integer :reporting_site_id + String :type + Text :comments + Text :action_taken + String :ip + DateTime :created_at + end + } + + down { + DB.drop_table :reports + } +end \ No newline at end of file diff --git a/models/report.rb b/models/report.rb new file mode 100644 index 00000000..da085532 --- /dev/null +++ b/models/report.rb @@ -0,0 +1,4 @@ +class Report < Sequel::Model + many_to_one :site + many_to_one :reporting_site, class: :Site +end \ No newline at end of file diff --git a/models/site.rb b/models/site.rb index de31be98..4458907a 100644 --- a/models/site.rb +++ b/models/site.rb @@ -78,6 +78,9 @@ class Site < Sequel::Model one_to_many :blocks one_to_many :blockings, key: :actioning_site_id, class: :Block + one_to_many :reports + one_to_many :reportings, key: :reporting_site_id, class: :Report + one_to_many :stats one_to_many :events diff --git a/views/site.erb b/views/site.erb index d01aa918..b2b9ce0d 100644 --- a/views/site.erb +++ b/views/site.erb @@ -102,9 +102,40 @@ <%== erb :'_tags', layout: false, locals: {site: site, is_current_site: site == current_site} %> -
+ <% if site != current_site %> + + <% end %> + + \ No newline at end of file