mini_auth 0.1.0.pre → 0.1.0.pre2
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +9 -0
- data/Gemfile +0 -2
- data/MIT-LICENSE +20 -0
- data/README.md +36 -4
- data/lib/mini_auth/version.rb +1 -1
- data/lib/mini_auth.rb +7 -0
- data/mini_auth.gemspec +3 -3
- data/spec/fake_app.rb +9 -0
- data/spec/mini_auth/password_digest_spec.rb +17 -0
- data/spec/mini_auth/password_spec.rb +14 -0
- metadata +22 -19
data/CHANGELOG.md
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
## 0.1.0.pre2 (2011-12-13)
|
2
|
+
|
3
|
+
* The `password_digest` field is protected against mass-assignment
|
4
|
+
|
5
|
+
## 0.1.0.pre (2011-12-13)
|
6
|
+
|
7
|
+
* MiniAuth#authenticate is implemented using BCrypt::Password
|
8
|
+
* Password should not be blank string but can be nil
|
9
|
+
* First public release as a gem
|
data/Gemfile
CHANGED
data/MIT-LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2011 Tsutomu Kuroda
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
CHANGED
@@ -38,21 +38,53 @@ Usage
|
|
38
38
|
a.save # => true
|
39
39
|
a.password_digest # => "$2a$10$F5YbEd..."
|
40
40
|
a.authenticate("hotyoga) # => true
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
41
|
+
a.authenticate("wrong") # => false
|
42
|
+
|
43
|
+
Remarks
|
44
|
+
-------
|
45
|
+
|
46
|
+
Password can't be blank.
|
47
|
+
|
45
48
|
b = User.new(:name => "bob")
|
46
49
|
|
47
50
|
b.password = ""
|
48
51
|
b.valid? # => false
|
49
52
|
b.errors[:password] # => "can't be blank"
|
50
53
|
|
54
|
+
But, password can be nil.
|
55
|
+
|
51
56
|
b.password = nil
|
52
57
|
b.valid? # => true
|
58
|
+
|
59
|
+
You can save a user whose `password_digest` is nil.
|
60
|
+
|
53
61
|
b.save!
|
54
62
|
b.password_digest # => nil
|
63
|
+
|
64
|
+
Such a user can't get authenticated.
|
65
|
+
|
55
66
|
b.authenticate(nil) # => false
|
56
67
|
|
68
|
+
The `password_digest` field is protected against mass assignment.
|
69
|
+
|
57
70
|
b.update_attributes :password_digest => 'dummy'
|
58
71
|
b.password_digest # => nil (unchanged)
|
72
|
+
|
73
|
+
The `password_confirmation` field is not created automatically. If you need it, add it for yourself.
|
74
|
+
|
75
|
+
class User < ActiveRecord::Base
|
76
|
+
include MiniAuth
|
77
|
+
|
78
|
+
attr_accessor :password_confirmation
|
79
|
+
validates :password, :confirmation => true
|
80
|
+
end
|
81
|
+
|
82
|
+
License
|
83
|
+
-------
|
84
|
+
|
85
|
+
`mini_auth` is distributed under the MIT license. ([MIT-LICENSE](https://github.com/kuroda/mini_auth/blob/master/MIT-LICENSE))
|
86
|
+
|
87
|
+
Copyright
|
88
|
+
---------
|
89
|
+
|
90
|
+
Copyright (c) 2011 Tsutomu Kuroda.
|
data/lib/mini_auth/version.rb
CHANGED
data/lib/mini_auth.rb
CHANGED
@@ -6,6 +6,12 @@ module MiniAuth
|
|
6
6
|
|
7
7
|
included do
|
8
8
|
attr_accessor :password
|
9
|
+
|
10
|
+
if respond_to?(:attributes_protected_by_default)
|
11
|
+
def self.attributes_protected_by_default
|
12
|
+
super + [ 'password_digest' ]
|
13
|
+
end
|
14
|
+
end
|
9
15
|
|
10
16
|
validate do
|
11
17
|
if password && password.blank?
|
@@ -16,6 +22,7 @@ module MiniAuth
|
|
16
22
|
before_save do
|
17
23
|
if password
|
18
24
|
self.password_digest = BCrypt::Password.create(password)
|
25
|
+
self.password = nil
|
19
26
|
end
|
20
27
|
end
|
21
28
|
end
|
data/mini_auth.gemspec
CHANGED
@@ -17,8 +17,8 @@ Gem::Specification.new do |s|
|
|
17
17
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
18
18
|
s.require_paths = ["lib"]
|
19
19
|
|
20
|
-
s.
|
21
|
-
s.add_development_dependency "rspec"
|
22
|
-
s.add_development_dependency "rspec-rails"
|
20
|
+
s.add_runtime_dependency "rails", "~> 3.1.0"
|
23
21
|
s.add_runtime_dependency "bcrypt-ruby"
|
22
|
+
s.add_development_dependency "rspec-rails", "~> 2.7.0"
|
23
|
+
s.add_development_dependency "sqlite3"
|
24
24
|
end
|
data/spec/fake_app.rb
CHANGED
@@ -11,6 +11,7 @@ ActiveRecord::Base.logger = Logger.new('/dev/null')
|
|
11
11
|
class CreateAllTables < ActiveRecord::Migration
|
12
12
|
def change
|
13
13
|
create_table(:users) { |t| t.string :name; t.string :password_digest }
|
14
|
+
create_table(:administrators) { |t| t.string :name; t.string :password_digest, :null => false }
|
14
15
|
end
|
15
16
|
end
|
16
17
|
|
@@ -23,3 +24,11 @@ migration.change
|
|
23
24
|
class User < ActiveRecord::Base
|
24
25
|
include MiniAuth
|
25
26
|
end
|
27
|
+
|
28
|
+
class Administrator < ActiveRecord::Base
|
29
|
+
attr_accessible :name, :password, :password_confirmation
|
30
|
+
|
31
|
+
include MiniAuth
|
32
|
+
|
33
|
+
validates :password, :presence => { :on => :create }, :confirmation => true
|
34
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "password_digest" do
|
4
|
+
it "should be protected against mass assignment" do
|
5
|
+
u = User.create!(:name => 'alice', :password => 'hotyoga')
|
6
|
+
d = u.password_digest.to_s
|
7
|
+
u.update_attributes :password_digest => 'dummy'
|
8
|
+
u.password_digest.to_s.should == d
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should be protected against mass assignment also for Administrator" do
|
12
|
+
a = Administrator.create!(:name => 'alice', :password => 'hotyoga', :password_confirmation => 'hotyoga')
|
13
|
+
d = a.password_digest.to_s
|
14
|
+
a.update_attributes :password_digest => 'dummy'
|
15
|
+
a.password_digest.to_s.should == d
|
16
|
+
end
|
17
|
+
end
|
@@ -12,4 +12,18 @@ describe "password" do
|
|
12
12
|
u.should have(1).error_on(:password)
|
13
13
|
u.errors[:password].first.should == "can't be blank"
|
14
14
|
end
|
15
|
+
|
16
|
+
it "should reject nil password for Administrator" do
|
17
|
+
a = Administrator.new(:name => 'alice', :password => nil)
|
18
|
+
a.should_not be_valid
|
19
|
+
a.should have(1).error_on(:password)
|
20
|
+
a.errors[:password].first.should == "can't be blank"
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should validate password_confirmation for Administrator" do
|
24
|
+
a = Administrator.new(:name => 'alice', :password => 'apple', :password_confirmation => 'almond')
|
25
|
+
a.should_not be_valid
|
26
|
+
a.should have(1).error_on(:password)
|
27
|
+
a.errors[:password].first.should == "doesn't match confirmation"
|
28
|
+
end
|
15
29
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mini_auth
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.0.
|
4
|
+
version: 0.1.0.pre2
|
5
5
|
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -12,49 +12,49 @@ cert_chain: []
|
|
12
12
|
date: 2011-12-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
16
|
-
requirement: &
|
15
|
+
name: rails
|
16
|
+
requirement: &20055060 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
|
-
- -
|
19
|
+
- - ~>
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
22
|
-
type: :
|
21
|
+
version: 3.1.0
|
22
|
+
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *20055060
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
|
-
name:
|
27
|
-
requirement: &
|
26
|
+
name: bcrypt-ruby
|
27
|
+
requirement: &20054420 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: '0'
|
33
|
-
type: :
|
33
|
+
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *20054420
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rspec-rails
|
38
|
-
requirement: &
|
38
|
+
requirement: &20053460 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
|
-
- -
|
41
|
+
- - ~>
|
42
42
|
- !ruby/object:Gem::Version
|
43
|
-
version:
|
43
|
+
version: 2.7.0
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *20053460
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
|
-
name:
|
49
|
-
requirement: &
|
48
|
+
name: sqlite3
|
49
|
+
requirement: &20052960 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
|
-
type: :
|
55
|
+
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *20052960
|
58
58
|
description: A minimal authentication module for Rails
|
59
59
|
email:
|
60
60
|
- t-kuroda@oiax.jp
|
@@ -63,7 +63,9 @@ extensions: []
|
|
63
63
|
extra_rdoc_files: []
|
64
64
|
files:
|
65
65
|
- .gitignore
|
66
|
+
- CHANGELOG.md
|
66
67
|
- Gemfile
|
68
|
+
- MIT-LICENSE
|
67
69
|
- README.md
|
68
70
|
- Rakefile
|
69
71
|
- lib/mini_auth.rb
|
@@ -71,6 +73,7 @@ files:
|
|
71
73
|
- mini_auth.gemspec
|
72
74
|
- spec/fake_app.rb
|
73
75
|
- spec/mini_auth/authenticate_spec.rb
|
76
|
+
- spec/mini_auth/password_digest_spec.rb
|
74
77
|
- spec/mini_auth/password_spec.rb
|
75
78
|
- spec/spec_helper.rb
|
76
79
|
homepage: ''
|