improvements to admin interface

This commit is contained in:
Kyle Drake 2016-07-20 13:33:46 -07:00
parent 32ddc97a95
commit dc0bf88392
4 changed files with 42 additions and 50 deletions

View file

@ -210,48 +210,43 @@ post '/admin/email' do
redirect '/' redirect '/'
end 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 post '/admin/banhammer' do
require_admin require_admin
site = Site[username: params[:username]] if params[:usernames].empty?
flash[:error] = 'no usernames provided'
if !params[:classifier].empty?
site.untrain 'index.html'
site.train 'index.html', params[:classifier]
end
if site.nil?
flash[:error] = 'User not found'
redirect '/admin' redirect '/admin'
end end
if site.is_banned usernames = params[:usernames].split("\n").collect {|u| u.strip}
flash[:error] = 'User is already banned'
redirect '/admin' 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 end
site.ban! flash[:success] = "#{ip_deleted_count + deleted_count} sites have been banned, including #{ip_deleted_count} matching IPs."
flash[:success] = 'MISSION ACCOMPLISHED'
redirect '/admin' redirect '/admin'
end end

View file

@ -0,0 +1,9 @@
Sequel.migration do
up {
DB.add_column :sites, :banned_at, Time
}
down {
DB.drop_column :sites, :banned_at
}
end

View file

@ -455,7 +455,7 @@ class Site < Sequel::Model
DB.transaction { DB.transaction {
self.is_banned = true self.is_banned = true
self.updated_at = Time.now self.banned_at = Time.now
save(validate: false) save(validate: false)
if !Dir.exist? BANNED_SITES_ROOT if !Dir.exist? BANNED_SITES_ROOT

View file

@ -27,8 +27,8 @@
<h2>Ban Site</h2> <h2>Ban Site</h2>
<form action="/admin/banhammer" method="POST"> <form action="/admin/banhammer" method="POST">
<%== csrf_token_input_html %> <%== csrf_token_input_html %>
<p>Site Name:</p> <p>Site Username(s):</p>
<p><input type="text" name="username" placeholder="edwardsnowden" autocapitalize="off" autocorrect="off"></p> <textarea name="usernames" cols="10" rows="5" autocapitalize="off" autocorrect="off"></textarea>
<div class="select-Container" style="display: block; width: 100px; float: none; margin: 0 auto;"> <div class="select-Container" style="display: block; width: 100px; float: none; margin: 0 auto;">
<select name="classifier" class="input-Select"> <select name="classifier" class="input-Select">
<option value=""></option> <option value=""></option>
@ -36,6 +36,7 @@
<option value="phishing">Phishing</option> <option value="phishing">Phishing</option>
</select> </select>
</div> </div>
<p>Ban sites with same IP <input type="checkbox" name="ban_using_ips" value="1"></p>
<p><input class="btn-Action" type="submit" value="Ban"></p> <p><input class="btn-Action" type="submit" value="Ban"></p>
</form> </form>
</div> </div>
@ -53,17 +54,6 @@
</div> </div>
<div class="row"> <div class="row">
<div class="col col-50">
<h2>Ban by IP</h2>
<form action="/admin/banip" method="POST">
<%== csrf_token_input_html %>
<p>All sites with this IP address will be removed.</p>
<p>Site Name:</p>
<p><input type="text" name="username" placeholder="edwardsnowden" autocapitalize="off" autocorrect="off"></p>
<p><input class="btn-Action" type="submit" value="Ban"></p>
</form>
</div>
<div class="col col-50"> <div class="col col-50">
<h2>Upgrade to Supporter</h2> <h2>Upgrade to Supporter</h2>
<form id="upgradeToSupporter" action="/plan/update" method="POST"> <form id="upgradeToSupporter" action="/plan/update" method="POST">
@ -75,9 +65,7 @@
<p><input class="btn-Action" type="submit" value="Upgrade to Supporter"></p> <p><input class="btn-Action" type="submit" value="Upgrade to Supporter"></p>
</form> </form>
</div> </div>
</div>
<div class="row">
<div class="col col-50"> <div class="col col-50">
<h2>Feature Site</h2> <h2>Feature Site</h2>
<form id="featureSite" action="/admin/feature" method="POST"> <form id="featureSite" action="/admin/feature" method="POST">