diff --git a/app.rb b/app.rb index e8954375..c47f6abe 100644 --- a/app.rb +++ b/app.rb @@ -209,6 +209,23 @@ get '/privacy' do slim :'privacy' end +get '/admin' do + require_admin + slim :'admin' +end + +post '/admin/banhammer' do + require_admin + site = Site[username: params[:username]] + binding.pry + + flash[:success] = 'MISSION ACCOMPLISHED' +end + +def require_admin + redirect '/' unless signed_in? && current_site.is_admin +end + def dashboard_if_signed_in redirect '/dashboard' if signed_in? end diff --git a/migrations/011_add_admin_flag.rb b/migrations/011_add_admin_flag.rb new file mode 100644 index 00000000..2ccb9cde --- /dev/null +++ b/migrations/011_add_admin_flag.rb @@ -0,0 +1,9 @@ +Sequel.migration do + up { + DB.add_column :sites, :is_admin, :boolean, default: false + } + + down { + DB.add_column :sites, :is_admin + } +end \ No newline at end of file diff --git a/models/site.rb b/models/site.rb index 0dc46c58..3c1ed352 100644 --- a/models/site.rb +++ b/models/site.rb @@ -39,18 +39,6 @@ class Site < Sequel::Model values[:password] = BCrypt::Password.create plaintext, cost: (self.class.bcrypt_cost || BCrypt::Engine::DEFAULT_COST) end - def after_save - if @new_tag_strings - @new_tag_strings.each do |new_tag_string| - add_tag Tag[name: new_tag_string] || Tag.create(name: new_tag_string) - end - end - end - - def after_create - DB['update servers set slots_available=slots_available-1 where id=?', self.server.id].first - end - def new_tags=(tags_string) tags_string.gsub! /[^a-zA-Z0-9, ]/, '' tags = tags_string.split ',' @@ -60,6 +48,26 @@ class Site < Sequel::Model def before_validation self.server ||= Server.with_slots_available + super + end + + def after_save + if @new_tag_strings + @new_tag_strings.each do |new_tag_string| + add_tag Tag[name: new_tag_string] || Tag.create(name: new_tag_string) + end + end + super + end + + def after_create + DB['update servers set slots_available=slots_available-1 where id=?', self.server.id].first + super + end + + def after_destroy + FileUtils.rm_rf file_path + super end def validate @@ -88,12 +96,16 @@ class Site < Sequel::Model end end + def file_path + File.join DIR_ROOT, 'public', 'sites', username + end + def file_list - Dir.glob(File.join(DIR_ROOT, 'public', 'sites', username, '*')).collect {|p| File.basename(p)}.sort.collect {|sitename| SiteFile.new sitename} + Dir.glob(File.join(file_path, '*')).collect {|p| File.basename(p)}.sort.collect {|sitename| SiteFile.new sitename} end def total_space - space = Dir.glob(File.join(DIR_ROOT, 'public', 'sites', username, '*')).collect {|p| File.size(p)}.inject {|sum,x| sum += x} + space = Dir.glob(File.join(file_path, '*')).collect {|p| File.size(p)}.inject {|sum,x| sum += x} space.nil? ? 0 : space end diff --git a/views/admin.slim b/views/admin.slim new file mode 100644 index 00000000..76093cc5 --- /dev/null +++ b/views/admin.slim @@ -0,0 +1,12 @@ +.row + .span12 + h1 SECRET NSA BACKDOOR REPORTING ZONE + + h2 Ban User for REASONS OF TERRRROROR! + + form action="/admin/banhammer" method="POST" + input name="csrf_token" type="hidden" value="#{csrf_token}" + p TerrRRRROR Suspect: + input type="text" name="username" place="" + br + input.btn.btn-danger type="submit" value="Warrantlessly Delete" \ No newline at end of file