Simple captcha for signup page
This commit is contained in:
parent
867b0a7b79
commit
c17a474142
13 changed files with 157 additions and 79 deletions
23
.rvmrc
23
.rvmrc
|
|
@ -1,21 +1,2 @@
|
|||
#!/bin/sh
|
||||
|
||||
rvm rvmrc warning ignore
|
||||
|
||||
. ./script/env/ruby_env
|
||||
|
||||
if [ -e '.rvmrc.local' ]; then
|
||||
. ./.rvmrc.local;
|
||||
elif [ -e '.rvmrc_custom' ] ; then
|
||||
. ./.rvmrc_custom;
|
||||
else
|
||||
if rvm list strings | grep -q "$ruby_version" ; then
|
||||
rvm --create use "$ruby_version@$gemset"
|
||||
else
|
||||
printf "\e[00;31mPLEASE INSTALL RUBY $ruby_version WITH \`rvm install $ruby_version\`\n"
|
||||
printf "Don't forget to run \`cd .. && cd -\` afterwards!\e[00m\n"
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
|
||||
. ./script/env/ensure_right_rubygems
|
||||
rvm use 1.9.3-p484
|
||||
rvm gemset use diaspora
|
||||
|
|
|
|||
4
Gemfile
4
Gemfile
|
|
@ -15,6 +15,10 @@ gem 'json', '1.8.0'
|
|||
|
||||
gem 'devise', '3.0.2'
|
||||
|
||||
# Captcha
|
||||
|
||||
gem 'galetahub-simple_captcha', :require => 'simple_captcha'
|
||||
|
||||
# Background processing
|
||||
|
||||
gem 'sidekiq', '2.17.0'
|
||||
|
|
|
|||
|
|
@ -141,6 +141,7 @@ GEM
|
|||
rspec (~> 2.0)
|
||||
rspec-instafail (~> 0.2.0)
|
||||
ruby-progressbar (~> 1.0)
|
||||
galetahub-simple_captcha (0.1.5)
|
||||
gherkin (2.12.0)
|
||||
multi_json (~> 1.3)
|
||||
gon (4.1.1)
|
||||
|
|
@ -448,6 +449,7 @@ DEPENDENCIES
|
|||
foreigner (= 1.4.2)
|
||||
foreman (= 0.62)
|
||||
fuubar (= 1.1.1)
|
||||
galetahub-simple_captcha
|
||||
gon (= 4.1.1)
|
||||
guard-cucumber (= 1.4.0)
|
||||
guard-rspec (= 3.0.2)
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ class RegistrationsController < Devise::RegistrationsController
|
|||
@user = User.build(user_params)
|
||||
@user.process_invite_acceptence(invite) if invite.present?
|
||||
|
||||
if @user.save
|
||||
if @user.sign_up
|
||||
flash[:notice] = I18n.t 'registrations.create.success'
|
||||
@user.seed_aspects
|
||||
sign_in_and_redirect(:user, @user)
|
||||
|
|
@ -56,6 +56,6 @@ class RegistrationsController < Devise::RegistrationsController
|
|||
helper_method :invite
|
||||
|
||||
def user_params
|
||||
params.require(:user).permit(:username, :email, :getting_started, :password, :password_confirmation, :language, :disable_mail, :invitation_service, :invitation_identifier, :show_community_spotlight_in_stream, :auto_follow_back, :auto_follow_back_aspect_id, :remember_me)
|
||||
params.require(:user).permit(:username, :email, :getting_started, :password, :password_confirmation, :language, :disable_mail, :invitation_service, :invitation_identifier, :show_community_spotlight_in_stream, :auto_follow_back, :auto_follow_back_aspect_id, :remember_me, :captcha, :captcha_key)
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -8,6 +8,8 @@ class User < ActiveRecord::Base
|
|||
include Querying
|
||||
include SocialActions
|
||||
|
||||
apply_simple_captcha :message => I18n.t('simple_captcha.message.failed'), :add_to_base => true
|
||||
|
||||
scope :logged_in_since, lambda { |time| where('last_sign_in_at > ?', time) }
|
||||
scope :monthly_actives, lambda { |time = Time.now| logged_in_since(time - 1.month) }
|
||||
scope :daily_actives, lambda { |time = Time.now| logged_in_since(time - 1.day) }
|
||||
|
|
@ -476,6 +478,13 @@ class User < ActiveRecord::Base
|
|||
self.save(:validate => false)
|
||||
end
|
||||
|
||||
def sign_up
|
||||
if AppConfig.settings.captcha.enable?
|
||||
save_with_captcha
|
||||
else
|
||||
save
|
||||
end
|
||||
end
|
||||
private
|
||||
def clearable_fields
|
||||
self.attributes.keys - ["id", "username", "encrypted_password",
|
||||
|
|
|
|||
|
|
@ -2,70 +2,77 @@
|
|||
<div class="container">
|
||||
|
||||
<div class="row">
|
||||
<div class="span4" id="image-container">
|
||||
<%= image_tag('signupimages@2x_mini.jpg', :id => "collage") %>
|
||||
</div>
|
||||
<div class="span4" id="image-container">
|
||||
<%= image_tag('signupimages@2x_mini.jpg', :id => "collage") %>
|
||||
</div>
|
||||
|
||||
<div class="span8">
|
||||
<h1 id="create-something-text">
|
||||
<%= t('.hey_make').html_safe %>
|
||||
</h1>
|
||||
<div class="span8">
|
||||
<h1 id="create-something-text">
|
||||
<%= t('.hey_make').html_safe %>
|
||||
</h1>
|
||||
|
||||
<h3 id="diaspora-hearts">
|
||||
<%= t('.diaspora') %>
|
||||
</h3>
|
||||
<h3 id="diaspora-hearts">
|
||||
<%= t('.diaspora') %>
|
||||
</h3>
|
||||
|
||||
<h4 id="sign-up-text">
|
||||
<%= t('.sign_up') %>
|
||||
</h4>
|
||||
<h4 id="sign-up-text">
|
||||
<%= t('.sign_up') %>
|
||||
</h4>
|
||||
|
||||
<%= form_for(resource, :validate => true, :url => registration_path(resource_name), :html => {:class => "form-horizontal block-form", :autocomplete => "off"}) do |f| %>
|
||||
<fieldset>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="user_email">
|
||||
<%= t('.email') %>
|
||||
</label>
|
||||
<%= form_for(resource, :validate => true, :url => registration_path(resource_name), :html => {:class => "form-horizontal block-form", :autocomplete => "off"}) do |f| %>
|
||||
<fieldset>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="user_email">
|
||||
<%= t('.email') %>
|
||||
</label>
|
||||
|
||||
<div class="controls">
|
||||
<%= f.email_field :email, :placeholder => "luke@hoth.net", :title => t('registrations.new.enter_email'), :required => true %>
|
||||
</div>
|
||||
</div>
|
||||
<div class="controls">
|
||||
<%= f.email_field :email, :placeholder => "luke@hoth.net", :title => t('registrations.new.enter_email'), :required => true %>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="user_username">
|
||||
<%= t('.username') %>
|
||||
</label>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="user_username">
|
||||
<%= t('.username') %>
|
||||
</label>
|
||||
|
||||
<div class="controls">
|
||||
<%= f.text_field :username, :placeholder => "jedi_guy", :title => t('registrations.new.enter_username'), :required => true, :pattern => "[A-Za-z0-9_]+" %>
|
||||
</div>
|
||||
</div>
|
||||
<div class="controls">
|
||||
<%= f.text_field :username, :placeholder => "jedi_guy", :title => t('registrations.new.enter_username'), :required => true, :pattern => "[A-Za-z0-9_]+" %>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="user_password">
|
||||
<%= t('.password') %>
|
||||
</label>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="user_password">
|
||||
<%= t('.password') %>
|
||||
</label>
|
||||
|
||||
<div class="controls">
|
||||
<%= f.password_field :password, :placeholder => "••••••••", :title => t('registrations.new.enter_password'), :required => true, :pattern => "......+" %>
|
||||
</div>
|
||||
</div>
|
||||
<div class="controls">
|
||||
<%= f.password_field :password, :placeholder => "••••••••", :title => t('registrations.new.enter_password'), :required => true, :pattern => "......+" %>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="user_password_confirmation">
|
||||
<%= t('.password_confirmation') %>
|
||||
</label>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="user_password_confirmation">
|
||||
<%= t('.password_confirmation') %>
|
||||
</label>
|
||||
|
||||
<div class="controls">
|
||||
<%= f.password_field :password_confirmation, :placeholder => "••••••••", :title => t('registrations.new.enter_password_again'), :required => true, :pattern => "......+" %>
|
||||
</div>
|
||||
</div>
|
||||
<%= invite_hidden_tag(invite) %>
|
||||
</fieldset>
|
||||
<div class="controls">
|
||||
<%= f.password_field :password_confirmation, :placeholder => "••••••••", :title => t('registrations.new.enter_password_again'), :required => true, :pattern => "......+" %>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<%= f.submit t('.continue'), :class => "new-btn", :disable_with => t('.submitting') %>
|
||||
<% end %>
|
||||
</div>
|
||||
<% if AppConfig.settings.captcha.enable? %>
|
||||
<div class="control-group" id="captcha">
|
||||
<%= show_simple_captcha(:object => 'user', :code_type => 'numeric') %>
|
||||
</div>
|
||||
<% end %>
|
||||
<%= invite_hidden_tag(invite) %>
|
||||
</fieldset>
|
||||
|
||||
|
||||
<%= f.submit t('.continue'), :class => "new-btn", :disable_with => t('.submitting') %>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
8
app/views/simple_captcha/_simple_captcha.erb
Normal file
8
app/views/simple_captcha/_simple_captcha.erb
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
<div class='control-label'>
|
||||
<%= simple_captcha_options[:image] %>
|
||||
</div>
|
||||
|
||||
<div class='controls'>
|
||||
<%= simple_captcha_options[:field] %>
|
||||
</div>
|
||||
|
||||
|
|
@ -82,6 +82,12 @@ defaults:
|
|||
- 'support'
|
||||
- 'contact'
|
||||
- 'example_user1dsioaioedfhgoiesajdigtoearogjaidofgjo'
|
||||
captcha:
|
||||
enable: true
|
||||
image_size: '120x20'
|
||||
captcha_length: 5
|
||||
image_style: 'simply_green'
|
||||
distortion: 'low'
|
||||
services:
|
||||
facebook:
|
||||
enable: false
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ configuration: ## Section
|
|||
## from the internet. This should be the URL you want to use to
|
||||
## access the pod. So if you plan to reverse proxy it, it should be
|
||||
## the URL the proxy listens on.
|
||||
## DO NOT CHNANGE THIS AFTER INITIAL SETUP
|
||||
## DO NOT CHANGE THIS AFTER INITIAL SETUP
|
||||
## UNLESS YOU KNOW WHAT YOU'RE DOING!
|
||||
## However changing http to https is okay and has no consequences.
|
||||
## If you do change it you have to start over as it's hardcoded into
|
||||
|
|
@ -223,7 +223,29 @@ configuration: ## Section
|
|||
## your server to contact joindiaspora.com, you can change account
|
||||
## below or set autofollow_on_join to false
|
||||
#autofollow_on_join_user: 'diasporahq@joindiaspora.com'
|
||||
|
||||
|
||||
## Settings about captcha
|
||||
captcha: ## Section
|
||||
|
||||
## Set this to false if you don't want to use captcha for signup process
|
||||
#enable: true
|
||||
|
||||
## Change this value to use different captcha image size
|
||||
#image_size: '120x20'
|
||||
|
||||
## Length of captcha text. Default value is 5
|
||||
#captcha_length: 5
|
||||
|
||||
## Change this value to use various image style.
|
||||
## Available options are: 'simply_blue', 'simply_red'
|
||||
## 'simply_green', 'charcoal_grey', 'embosed_silver', 'all_black',
|
||||
## 'distorted_black', 'almost_invisible', 'random'
|
||||
#image_style: 'simply_green'
|
||||
|
||||
## Set this value to use various level of distortion
|
||||
## Available options are: 'low', 'medium', 'high', 'random'
|
||||
#distortion: 'low'
|
||||
|
||||
## Settings about invitations
|
||||
invitations: ## Section
|
||||
|
||||
|
|
|
|||
7
config/initializers/setup_simple_captcha.rb
Normal file
7
config/initializers/setup_simple_captcha.rb
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
SimpleCaptcha.setup do |sc|
|
||||
sc.image_size = AppConfig.settings.captcha.image_size
|
||||
sc.length = AppConfig.settings.captcha.captcha_length.to_i
|
||||
sc.image_style = AppConfig.settings.captcha.image_style
|
||||
sc.distortion = AppConfig.settings.captcha.distortion
|
||||
p AppConfig.settings.captcha
|
||||
end
|
||||
|
|
@ -1270,3 +1270,11 @@ en:
|
|||
xrd_fetch_failed: "there was an error getting the xrd from account %{account}"
|
||||
not_enabled: "webfinger does not seem to be enabled for %{account}'s host"
|
||||
no_person_constructed: "No person could be constructed from this hcard."
|
||||
|
||||
simple_captcha:
|
||||
placeholder: "Enter the image value"
|
||||
label: "Enter the code in the box:"
|
||||
message:
|
||||
default: "Secret Code did not match with the Image"
|
||||
user: "The secret Image and code were different"
|
||||
failed: "Human verification failed"
|
||||
|
|
|
|||
15
db/migrate/20131213171804_create_simple_captcha_data.rb
Normal file
15
db/migrate/20131213171804_create_simple_captcha_data.rb
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
class CreateSimpleCaptchaData < ActiveRecord::Migration
|
||||
def self.up
|
||||
create_table :simple_captcha_data do |t|
|
||||
t.string :key, :limit => 40
|
||||
t.string :value, :limit => 6
|
||||
t.timestamps
|
||||
end
|
||||
|
||||
add_index :simple_captcha_data, :key, :name => "idx_key"
|
||||
end
|
||||
|
||||
def self.down
|
||||
drop_table :simple_captcha_data
|
||||
end
|
||||
end
|
||||
13
db/schema.rb
13
db/schema.rb
|
|
@ -11,7 +11,7 @@
|
|||
#
|
||||
# It's strongly recommended to check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema.define(:version => 20130801063213) do
|
||||
ActiveRecord::Schema.define(:version => 20131213171804) do
|
||||
|
||||
create_table "account_deletions", :force => true do |t|
|
||||
t.string "diaspora_handle"
|
||||
|
|
@ -316,8 +316,8 @@ ActiveRecord::Schema.define(:version => 20130801063213) do
|
|||
t.boolean "favorite", :default => false
|
||||
t.string "facebook_id"
|
||||
t.string "tweet_id"
|
||||
t.text "tumblr_ids"
|
||||
t.integer "open_graph_cache_id"
|
||||
t.text "tumblr_ids"
|
||||
end
|
||||
|
||||
add_index "posts", ["author_id", "root_guid"], :name => "index_posts_on_author_id_and_root_guid", :unique => true
|
||||
|
|
@ -401,6 +401,15 @@ ActiveRecord::Schema.define(:version => 20130801063213) do
|
|||
add_index "share_visibilities", ["shareable_id", "shareable_type", "hidden", "contact_id"], :name => "shareable_and_hidden_and_contact_id"
|
||||
add_index "share_visibilities", ["shareable_id"], :name => "index_post_visibilities_on_post_id"
|
||||
|
||||
create_table "simple_captcha_data", :force => true do |t|
|
||||
t.string "key", :limit => 40
|
||||
t.string "value", :limit => 6
|
||||
t.datetime "created_at", :null => false
|
||||
t.datetime "updated_at", :null => false
|
||||
end
|
||||
|
||||
add_index "simple_captcha_data", ["key"], :name => "idx_key"
|
||||
|
||||
create_table "tag_followings", :force => true do |t|
|
||||
t.integer "tag_id", :null => false
|
||||
t.integer "user_id", :null => false
|
||||
|
|
|
|||
Loading…
Reference in a new issue