Commit c17a4741 authored by maruf's avatar maruf Committed by jaywink
Browse files

Simple captcha for signup page

parent 867b0a7b
#!/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
......@@ -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>
<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
......
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
\ No newline at end of file
......@@ -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"
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
......@@ -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
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment