diff --git a/Gemfile b/Gemfile index 5dfb2f7c5..f2ef657e5 100644 --- a/Gemfile +++ b/Gemfile @@ -35,6 +35,7 @@ gem 'acts-as-taggable-on' gem "responders" gem 'foundation-rails' gem 'acts_as_votable' +gem "recaptcha", :require => "recaptcha/rails" group :development, :test do # Call 'byebug' anywhere in the code to stop execution and get a debugger console diff --git a/Gemfile.lock b/Gemfile.lock index 0b070914b..34de0c6d2 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -137,6 +137,7 @@ GEM thor (>= 0.18.1, < 2.0) rake (10.4.2) rdoc (4.2.0) + recaptcha (0.4.0) responders (2.1.0) railties (>= 4.2.0, < 5) rspec-core (3.3.1) @@ -210,6 +211,7 @@ DEPENDENCIES jquery-rails pg rails (= 4.2.3) + recaptcha responders rspec-rails (~> 3.0) sass-rails (~> 5.0) diff --git a/app/controllers/debates_controller.rb b/app/controllers/debates_controller.rb index 9ad043bb6..672f41d20 100644 --- a/app/controllers/debates_controller.rb +++ b/app/controllers/debates_controller.rb @@ -1,4 +1,5 @@ class DebatesController < ApplicationController + include RecaptchaHelper before_action :set_debate, only: [:show, :edit, :update] before_action :authenticate_user!, except: [:show, :index] before_action :validate_ownership, only: [:edit, :update] @@ -24,8 +25,11 @@ class DebatesController < ApplicationController def create @debate = Debate.new(debate_params) @debate.author = current_user - @debate.save - respond_with @debate + if verify_captcha? and @debate.save + redirect_to @debate, notice: t('flash.actions.create.notice', resource_name: 'Debate') + else + render :new + end end def update @@ -47,4 +51,9 @@ class DebatesController < ApplicationController raise ActiveRecord::RecordNotFound unless @debate.editable_by?(current_user) end + def verify_captcha? + return true unless recaptcha_keys? + verify_recaptcha(model: @debate) + end + end diff --git a/app/helpers/recaptcha_helper.rb b/app/helpers/recaptcha_helper.rb new file mode 100644 index 000000000..9e6fa90e6 --- /dev/null +++ b/app/helpers/recaptcha_helper.rb @@ -0,0 +1,8 @@ +module RecaptchaHelper + + def recaptcha_keys? + Recaptcha.configuration.public_key.present? && + Recaptcha.configuration.private_key.present? + end + +end \ No newline at end of file diff --git a/app/views/debates/_form.html.erb b/app/views/debates/_form.html.erb index 9d0af3892..df43ab8b0 100644 --- a/app/views/debates/_form.html.erb +++ b/app/views/debates/_form.html.erb @@ -30,6 +30,8 @@ Acepto la política de privacidad y el aviso legal <% end %> + <%= render 'shared/captcha' %> +
<%= notice %>
<% end %> @@ -22,11 +22,11 @@ <% if alert %><%= alert %>
<% end %> - +