Commit 05dbd36f021420a024cf6bdf1729df89ea3cf572
1 parent
96fa5dd4
Exists in
master
and in
29 other branches
First steps
Showing
2 changed files
with
49 additions
and
13 deletions
Show diff stats
app/controllers/public/account_controller.rb
@@ -55,6 +55,11 @@ class AccountController < ApplicationController | @@ -55,6 +55,11 @@ class AccountController < ApplicationController | ||
55 | render :action => 'login', :layout => false | 55 | render :action => 'login', :layout => false |
56 | end | 56 | end |
57 | 57 | ||
58 | + def signup_time | ||
59 | + set_signup_time_for_now | ||
60 | + render :text => {:ok=>true}.to_json | ||
61 | + end | ||
62 | + | ||
58 | # action to register an user to the application | 63 | # action to register an user to the application |
59 | def signup | 64 | def signup |
60 | if @plugins.dispatch(:allow_user_registration).include?(false) | 65 | if @plugins.dispatch(:allow_user_registration).include?(false) |
@@ -62,6 +67,7 @@ class AccountController < ApplicationController | @@ -62,6 +67,7 @@ class AccountController < ApplicationController | ||
62 | session[:notice] = _("This environment doesn't allow user registration.") | 67 | session[:notice] = _("This environment doesn't allow user registration.") |
63 | end | 68 | end |
64 | 69 | ||
70 | + @block_bot = !!session[:may_be_a_bot] | ||
65 | @invitation_code = params[:invitation_code] | 71 | @invitation_code = params[:invitation_code] |
66 | begin | 72 | begin |
67 | if params[:user] | 73 | if params[:user] |
@@ -76,19 +82,28 @@ class AccountController < ApplicationController | @@ -76,19 +82,28 @@ class AccountController < ApplicationController | ||
76 | @person = Person.new(params[:profile_data]) | 82 | @person = Person.new(params[:profile_data]) |
77 | @person.environment = @user.environment | 83 | @person.environment = @user.environment |
78 | if request.post? | 84 | if request.post? |
79 | - @user.signup! | ||
80 | - owner_role = Role.find_by_name('owner') | ||
81 | - @user.person.affiliate(@user.person, [owner_role]) if owner_role | ||
82 | - invitation = Task.find_by_code(@invitation_code) | ||
83 | - if invitation | ||
84 | - invitation.update_attributes!({:friend => @user.person}) | ||
85 | - invitation.finish | ||
86 | - end | ||
87 | - if @user.activated? | ||
88 | - self.current_user = @user | ||
89 | - redirect_to '/' | 85 | + if may_be_a_bot |
86 | + set_signup_time_for_now | ||
87 | + @block_bot = true | ||
88 | + session[:may_be_a_bot] = true | ||
90 | else | 89 | else |
91 | - @register_pending = true | 90 | + if session[:may_be_a_bot] |
91 | + return false unless verify_recaptcha :model=>@user, :message=>_('bota o recaptcha manuel!') | ||
92 | + end | ||
93 | + @user.signup! | ||
94 | + owner_role = Role.find_by_name('owner') | ||
95 | + @user.person.affiliate(@user.person, [owner_role]) if owner_role | ||
96 | + invitation = Task.find_by_code(@invitation_code) | ||
97 | + if invitation | ||
98 | + invitation.update_attributes!({:friend => @user.person}) | ||
99 | + invitation.finish | ||
100 | + end | ||
101 | + if @user.activated? | ||
102 | + self.current_user = @user | ||
103 | + redirect_to '/' | ||
104 | + else | ||
105 | + @register_pending = true | ||
106 | + end | ||
92 | end | 107 | end |
93 | end | 108 | end |
94 | rescue ActiveRecord::RecordInvalid | 109 | rescue ActiveRecord::RecordInvalid |
@@ -271,7 +286,16 @@ class AccountController < ApplicationController | @@ -271,7 +286,16 @@ class AccountController < ApplicationController | ||
271 | def no_redirect | 286 | def no_redirect |
272 | @cannot_redirect = true | 287 | @cannot_redirect = true |
273 | end | 288 | end |
274 | - | 289 | + |
290 | + def set_signup_time_for_now | ||
291 | + session[:signup_time] = Time.now | ||
292 | + end | ||
293 | + | ||
294 | + def may_be_a_bot | ||
295 | + return true if session[:signup_time].nil? | ||
296 | + session[:signup_time] > ( Time.now - 15.seconds ) | ||
297 | + end | ||
298 | + | ||
275 | def check_answer | 299 | def check_answer |
276 | unless answer_correct | 300 | unless answer_correct |
277 | @enterprise.block | 301 | @enterprise.block |
app/views/account/_signup_form.rhtml
1 | +<script type="text/javascript"> | ||
2 | + jQuery.post("<%= url_for :controller=>'account', :action=>'signup_time' %>"); | ||
3 | +</script> | ||
4 | + | ||
5 | +<% if @block_bot %> | ||
6 | + <div class="bot-notice"> | ||
7 | + <%=_('<strong>How Fast!</strong> Looks like you are a bot.')%> | ||
8 | + </div> | ||
9 | +<% end %> | ||
10 | + | ||
1 | <% @profile_data = @person %> | 11 | <% @profile_data = @person %> |
2 | 12 | ||
3 | <%= error_messages_for :user, :person, :header_message => _('The account could not be created') %> | 13 | <%= error_messages_for :user, :person, :header_message => _('The account could not be created') %> |
@@ -97,6 +107,8 @@ | @@ -97,6 +107,8 @@ | ||
97 | <% end %> | 107 | <% end %> |
98 | </div> | 108 | </div> |
99 | 109 | ||
110 | +<%= recaptcha_tags :ajax => true, :display => {:theme => 'clean'} if @block_bot %> | ||
111 | + | ||
100 | <p style="text-align: center"> | 112 | <p style="text-align: center"> |
101 | <%= submit_button('save', _('Create my account')) %> | 113 | <%= submit_button('save', _('Create my account')) %> |
102 | </p> | 114 | </p> |