diff --git a/.gitignore b/.gitignore index ab230176..f365e9cd 100644 --- a/.gitignore +++ b/.gitignore @@ -30,3 +30,4 @@ files/map.txt .sass-cache/* files/sslsites.zip .tm_properties +black_box.rb diff --git a/app.rb b/app.rb index cabf725b..9d88ad2f 100644 --- a/app.rb +++ b/app.rb @@ -249,9 +249,19 @@ get '/?' do @sites_count = SimpleCache.get :sites_count end + @blackbox_question = BlackBox.generate + @question_first_number, @question_last_number = generate_question + erb :index, layout: false end +def generate_question + question_first_number = rand 5 + question_last_number = rand 5 + session[:question_answer] = (question_first_number + question_last_number).to_s + [question_first_number, question_last_number] +end + get '/plan/?' do @title = 'Supporter' erb :'plan/index' @@ -487,6 +497,15 @@ get '/new' do erb :'new' end +post '/create_validate_all' do + content_type :json + fields = params.select {|p| p.match /username|password|email|new_tags_string/} + + site = Site.new fields + return [].to_json if site.valid? + site.errors.collect {|e| [e.first, e.last.first]}.to_json +end + post '/create_validate' do content_type :json @@ -519,7 +538,20 @@ post '/create' do ip: request.ip ) - if !@site.valid? + black_box_answered = BlackBox.valid? params[:blackbox_answer], request.ip + question_answered_correctly = params[:question_answer] == session[:question_answer] + + if !question_answered_correctly + question_first_number, question_last_number = generate_question + return { + result: 'bad_answer', + question_first_number: question_first_number, + question_last_number: question_last_number + }.to_json + end + + if !black_box_answered || !@site.valid? || Site.ip_create_limit?(request.ip) + flash[:error] = 'There was an unknown error, please try again.' return {result: 'error'}.to_json end diff --git a/environment.rb b/environment.rb index e5fb61d4..ea977c0d 100644 --- a/environment.rb +++ b/environment.rb @@ -126,4 +126,12 @@ if ENV['RACK_ENV'] != 'development' Sass::Plugin.options[:style] = :compressed Sass::Plugin.options[:never_update] = true Sass::Plugin.options[:full_exception] = false +end + +unless ENV['RACK_ENV'] == 'test' + if File.exist?('./black_box.rb') + require './black_box.rb' + else + puts "WARNING: Black box was not loaded!" + end end \ No newline at end of file diff --git a/models/site.rb b/models/site.rb index c97de7df..5137a3d7 100644 --- a/models/site.rb +++ b/models/site.rb @@ -95,6 +95,9 @@ class Site < Sequel::Model SUGGESTIONS_VIEWS_MIN = 500 CHILD_SITES_MAX = 100 + IP_CREATE_LIMIT = 50 + TOTAL_IP_CREATE_LIMIT = 300 + PLAN_FEATURES[:catbus] = PLAN_FEATURES[:fatcat].merge( name: 'Cat Bus', space: Filesize.from('10GB').to_i, @@ -206,6 +209,11 @@ class Site < Sequel::Model return nil if site.nil? || site.is_banned || site.owner.is_banned site end + + def ip_create_limit?(ip) + Site.where('created_at > ?', Date.today.to_time).where(ip: ip).count > IP_CREATE_LIMIT || + Site.where(ip: ip).count > TOTAL_IP_CREATE_LIMIT + end end def self.banned_ip?(ip) @@ -643,7 +651,7 @@ class Site < Sequel::Model super if !self.class.valid_username?(values[:username]) - errors.add :username, 'A valid user/site name is required.' + errors.add :username, 'Usernames can only contain letters, numbers, underscores and hyphens.' end if new? && !values[:username].nil? && !values[:username].empty? @@ -850,12 +858,17 @@ class Site < Sequel::Model end def latest_events(current_page=1, limit=10) - events_dataset.order(:created_at.desc).paginate(current_page, limit) + site_id = self.id + Event.where{Sequel.|({site_id: site_id}, {actioning_site_id: site_id})}. + order(:created_at.desc). + paginate(current_page, limit) end def news_feed(current_page=1, limit=10) following_ids = self.followings_dataset.select(:site_id).all.collect {|f| f.site_id} - Event.filter(site_id: following_ids+[self.id]). + search_ids = following_ids+[self.id] + + Event.where{Sequel.|({site_id: search_ids}, {actioning_site_id: search_ids})}. order(:created_at.desc). paginate(current_page, limit) end diff --git a/views/_news.erb b/views/_news.erb index 75acd7c5..81d06813 100644 --- a/views/_news.erb +++ b/views/_news.erb @@ -30,7 +30,7 @@ started following <% if current_site && event_site.id == current_site.id %> - your site! + your site. <% else %> <% if event_site.supporter? && !event_site.ended_supporter? %><% end %><%= event_site.username %> <% end %> @@ -60,7 +60,7 @@ <% site_change_filenames.each do |f| %>