From dc0bf88392a86b94c17c28ae277895a6084b8be6 Mon Sep 17 00:00:00 2001 From: Kyle Drake Date: Wed, 20 Jul 2016 13:33:46 -0700 Subject: [PATCH] improvements to admin interface --- app/admin.rb | 63 +++++++++++++++----------------- migrations/091_site_banned_at.rb | 9 +++++ models/site.rb | 2 +- views/admin.erb | 18 ++------- 4 files changed, 42 insertions(+), 50 deletions(-) create mode 100644 migrations/091_site_banned_at.rb diff --git a/app/admin.rb b/app/admin.rb index dcfdb0ba..2eda7fa6 100644 --- a/app/admin.rb +++ b/app/admin.rb @@ -210,48 +210,43 @@ post '/admin/email' do redirect '/' end -post '/admin/banip' do - require_admin - site = Site[username: params[:username]] - - if site.nil? - flash[:error] = 'User not found' - redirect '/admin' - end - - if site.ip.nil? || site.ip.empty? - flash[:error] = 'IP is blank, cannot continue' - redirect '/admin' - end - sites = Site.filter(ip: site.ip, is_banned: false).all - sites.each {|s| s.ban!} - flash[:error] = "#{sites.length} sites have been banned." - redirect '/admin' -end - post '/admin/banhammer' do require_admin - site = Site[username: params[:username]] - - if !params[:classifier].empty? - site.untrain 'index.html' - site.train 'index.html', params[:classifier] - end - - if site.nil? - flash[:error] = 'User not found' + if params[:usernames].empty? + flash[:error] = 'no usernames provided' redirect '/admin' end - if site.is_banned - flash[:error] = 'User is already banned' - redirect '/admin' + usernames = params[:usernames].split("\n").collect {|u| u.strip} + + deleted_count = 0 + ip_deleted_count = 0 + + usernames.each do |username| + next if username == '' + site = Site[username: username] + next if site.nil? || site.is_banned + + if !params[:classifier].empty? + site.untrain 'index.html' + site.train 'index.html', params[:classifier] + end + + site.ban! + deleted_count += 1 + + if !params[:ban_using_ips].empty? && !site.ip.empty? + sites = Site.filter(ip: site.ip, is_banned: false).all + sites.each do |s| + next if usernames.include?(s.username) + s.ban! + end + ip_deleted_count += 1 + end end - site.ban! - - flash[:success] = 'MISSION ACCOMPLISHED' + flash[:success] = "#{ip_deleted_count + deleted_count} sites have been banned, including #{ip_deleted_count} matching IPs." redirect '/admin' end diff --git a/migrations/091_site_banned_at.rb b/migrations/091_site_banned_at.rb new file mode 100644 index 00000000..313280df --- /dev/null +++ b/migrations/091_site_banned_at.rb @@ -0,0 +1,9 @@ +Sequel.migration do + up { + DB.add_column :sites, :banned_at, Time + } + + down { + DB.drop_column :sites, :banned_at + } +end diff --git a/models/site.rb b/models/site.rb index 6b5603cd..1632c7fc 100644 --- a/models/site.rb +++ b/models/site.rb @@ -455,7 +455,7 @@ class Site < Sequel::Model DB.transaction { self.is_banned = true - self.updated_at = Time.now + self.banned_at = Time.now save(validate: false) if !Dir.exist? BANNED_SITES_ROOT diff --git a/views/admin.erb b/views/admin.erb index 394e617a..578485a0 100644 --- a/views/admin.erb +++ b/views/admin.erb @@ -27,8 +27,8 @@

Ban Site

<%== csrf_token_input_html %> -

Site Name:

-

+

Site Username(s):

+
+

Ban sites with same IP

@@ -53,17 +54,6 @@
-
-

Ban by IP

-
- <%== csrf_token_input_html %> -

All sites with this IP address will be removed.

-

Site Name:

-

-

-
-
-

Upgrade to Supporter

@@ -75,9 +65,7 @@

-
-

Feature Site