diff --git a/.gitignore b/.gitignore index d9e773be..4d898869 100644 --- a/.gitignore +++ b/.gitignore @@ -23,3 +23,4 @@ public/site_thumbnails public/sites public/site_screenshots *.swp +files/map.txt diff --git a/app.rb b/app.rb index da9770c2..1774496b 100644 --- a/app.rb +++ b/app.rb @@ -85,7 +85,7 @@ get '/site/:username.rss' do |username| site.to_rss.to_xml end -get '/site/:username' do |username| +get '/site/:username/?' do |username| site = Site[username: username] not_found if site.nil? if current_site && (site.is_blocking?(current_site) || current_site.is_blocking?(site)) @@ -531,6 +531,11 @@ post '/change_email' do current_site.email_confirmation_token = SecureRandom.hex 3 current_site.email_confirmed = false + if params[:email] == current_site.email + current_site.errors.add :email, 'You are already using this email address for this account.' + halt erb(:settings) + end + if current_site.valid? current_site.save_changes send_confirmation_email @@ -1146,6 +1151,14 @@ post '/site/:username/block' do |username| end end +post '/site/delete' do + require_login + if current_site.username != params[:username] + current_site.errors.add :username, 'Could not delete site, site name did not match.' + halt erb(:settings) + end +end + def require_admin redirect '/' unless signed_in? && current_site.is_admin end diff --git a/models/site.rb b/models/site.rb index de366a55..5a1af946 100644 --- a/models/site.rb +++ b/models/site.rb @@ -209,16 +209,45 @@ class Site < Sequel::Model File.read file_path(filename) end + def before_destroy + raise 'not finished' + DB.transaction { + remove_all_tags + profile_comments.destroy + profile_commentings.destroy + follows.destroy + followings.destroy + #tips.destroy + #tippings.destroy + #blocks.destroy + #blockings.destroy + #reports.destroy + #reportings.destroy + #stats.destroy + #events.destroy + #site_changes.destroy + # TODO FIND THE REST, ASSOCIATE THEM PROPERLY!!! + } + end + + def delete_site! + raise 'not finished' + DB.transaction { + destroy + FileUtils.mv files_path, File.join(PUBLIC_ROOT, 'deleted_sites', username) + } + end + def ban! if username.nil? || username.empty? raise 'username is missing' end DB.transaction { - FileUtils.mv files_path, File.join(PUBLIC_ROOT, 'banned_sites', username) self.is_banned = true self.updated_at = Time.now save(validate: false) + FileUtils.mv files_path, File.join(PUBLIC_ROOT, 'banned_sites', username) } site_files.file_list.collect {|f| f.filename}.each do |f| @@ -453,9 +482,7 @@ class Site < Sequel::Model # Check for existing email email_check = self.class.select(:id).filter(email: values[:email]).first - if email_check && email_check.id == self.id - errors.add :email, 'You are already using this email address for this account.' - elsif email_check && email_check.id != self.id + if email_check && email_check.id != self.id errors.add :email, 'This email address already exists on Neocities, please use your existing account instead of creating a new one.' end @@ -602,7 +629,7 @@ class Site < Sequel::Model end def latest_events(current_page=1, limit=10) - events_dataset.order(:created_at.desc).paginate(current_page, limit) + events_dataset.exclude(site_id: self.id).order(:created_at.desc).paginate(current_page, limit) end def news_feed(current_page=1, limit=10) diff --git a/views/not_found.erb b/views/not_found.erb index 8f461c4b..29ec9b89 100644 --- a/views/not_found.erb +++ b/views/not_found.erb @@ -17,7 +17,9 @@

<% if request.referer %> - Go Back +
+ Go Back +
<% end %> \ No newline at end of file diff --git a/views/settings.erb b/views/settings.erb index 41889bc1..7cc57838 100644 --- a/views/settings.erb +++ b/views/settings.erb @@ -69,8 +69,6 @@ - -

Change Site (User) Name

<%== csrf_token_input_html %> @@ -98,7 +96,6 @@ If your site contains objectionable (18+) content, check this box. Your site will not be removed, but it will be listed on a special browse page. We don't have an official policy on what defines 18+ content yet, but basically it's just pornography and lewd/sick/gross images. Thanks for your patience and understanding as we try to find a way to balance out the needs of everyone.

- <%== csrf_token_input_html %> @@ -113,6 +110,37 @@
+ + + + \ No newline at end of file diff --git a/views/site.erb b/views/site.erb index 71535649..a3f5d78b 100644 --- a/views/site.erb +++ b/views/site.erb @@ -33,7 +33,7 @@ <% if current_site && current_site != site %> <% is_following = current_site.is_following?(site) %> - + <%= is_following ? 'Unfollow' : 'Follow' %> @@ -83,6 +83,7 @@

You should update your site!

+ <%== erb :'_news', layout: false, locals: {site: @site, events: @latest_events} %> <% end %> <% else %>