Commit 4c1f435a authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets

Merge pull request #971 from gingko/master

Automatic password creation..
parents 1c8008c1 5ab18562
$(document).ready(function(){
$('input#user_force_random_password').on('change', function(elem) {
var elems = $('#user_password, #user_password_confirmation');
if ($(this).attr('checked')) {
elems.val('').attr('disabled', true);
} else {
elems.removeAttr('disabled');
}
});
});
...@@ -5,7 +5,10 @@ class User < ActiveRecord::Base ...@@ -5,7 +5,10 @@ class User < ActiveRecord::Base
:recoverable, :rememberable, :trackable, :validatable, :omniauthable :recoverable, :rememberable, :trackable, :validatable, :omniauthable
attr_accessible :email, :password, :password_confirmation, :remember_me, :bio, attr_accessible :email, :password, :password_confirmation, :remember_me, :bio,
:name, :projects_limit, :skype, :linkedin, :twitter, :dark_scheme, :theme_id :name, :projects_limit, :skype, :linkedin, :twitter, :dark_scheme,
:theme_id, :force_random_password
attr_accessor :force_random_password
has_many :users_projects, :dependent => :destroy has_many :users_projects, :dependent => :destroy
has_many :projects, :through => :users_projects has_many :projects, :through => :users_projects
...@@ -53,6 +56,14 @@ class User < ActiveRecord::Base ...@@ -53,6 +56,14 @@ class User < ActiveRecord::Base
scope :blocked, where(:blocked => true) scope :blocked, where(:blocked => true)
scope :active, where(:blocked => false) scope :active, where(:blocked => false)
before_validation :generate_password, :on => :create
def generate_password
if self.force_random_password
self.password = self.password_confirmation = Devise.friendly_token.first(8)
end
end
def self.filter filter_name def self.filter filter_name
case filter_name case filter_name
when "admins"; self.admins when "admins"; self.admins
......
...@@ -18,12 +18,21 @@ ...@@ -18,12 +18,21 @@
.input .input
= f.text_field :email = f.text_field :email
%span.help-inline * required %span.help-inline * required
%hr
-if f.object.new_record?
.clearfix
= f.label :admin, :class => "checkbox" do
= f.check_box :force_random_password, {}, true, nil
%span Generate random password
%div.password-fields
.clearfix .clearfix
= f.label :password = f.label :password
.input= f.password_field :password .input= f.password_field :password, :disabled => f.object.force_random_password
.clearfix .clearfix
= f.label :password_confirmation = f.label :password_confirmation
.input= f.password_field :password_confirmation .input= f.password_field :password_confirmation, :disabled => f.object.force_random_password
%hr %hr
.clearfix .clearfix
= f.label :skype = f.label :skype
......
...@@ -22,6 +22,24 @@ describe User do ...@@ -22,6 +22,24 @@ describe User do
user.identifier.should == "test_mail_com" user.identifier.should == "test_mail_com"
end end
it "should execute callback when force_random_password specified" do
user = User.new(:email => "test@mail.com", :force_random_password => true)
user.should_receive(:generate_password)
user.save
end
it "should not generate password by default" do
user = Factory(:user, :password => 'abcdefg', :password_confirmation => 'abcdefg')
user.password.should == 'abcdefg'
end
it "should generate password when forcing random password" do
Devise.stub(:friendly_token).and_return('123456789')
user = User.create(:email => "test1@mail.com", :force_random_password => true)
user.password.should == user.password_confirmation
user.password.should == '12345678'
end
it "should have authentication token" do it "should have authentication token" do
user = Factory(:user) user = Factory(:user)
user.authentication_token.should_not == "" user.authentication_token.should_not == ""
......
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