simple_auth 1.5.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/.rspec +1 -1
  3. data/.travis.yml +11 -0
  4. data/CHANGELOG.md +5 -0
  5. data/Gemfile +0 -2
  6. data/Gemfile.lock +102 -79
  7. data/README.md +243 -0
  8. data/Rakefile +15 -0
  9. data/gemfiles/rails_3_1.gemfile +5 -0
  10. data/gemfiles/rails_3_1.gemfile.lock +151 -0
  11. data/gemfiles/rails_3_2.gemfile +5 -0
  12. data/gemfiles/rails_3_2.gemfile.lock +149 -0
  13. data/gemfiles/rails_4_0.gemfile +4 -0
  14. data/gemfiles/rails_4_0.gemfile.lock +140 -0
  15. data/gemfiles/rails_4_1.gemfile +4 -0
  16. data/gemfiles/rails_4_1.gemfile.lock +146 -0
  17. data/lib/simple_auth.rb +1 -6
  18. data/lib/simple_auth/action_controller.rb +14 -10
  19. data/lib/simple_auth/active_record.rb +86 -0
  20. data/lib/simple_auth/compat.rb +2 -0
  21. data/lib/simple_auth/compat/active_record.rb +31 -0
  22. data/lib/simple_auth/compat/config.rb +17 -0
  23. data/lib/simple_auth/config.rb +0 -20
  24. data/lib/simple_auth/exceptions.rb +0 -1
  25. data/lib/simple_auth/railtie.rb +1 -1
  26. data/lib/simple_auth/rspec.rb +2 -2
  27. data/lib/simple_auth/session.rb +1 -1
  28. data/lib/simple_auth/version.rb +2 -2
  29. data/simple_auth.gemspec +4 -4
  30. data/spec/controllers/redirect_logged_user_spec.rb +16 -16
  31. data/spec/controllers/require_logged_user_spec.rb +34 -34
  32. data/spec/schema.rb +5 -1
  33. data/spec/simple_auth/active_record_spec.rb +104 -2
  34. data/spec/simple_auth/compat_spec.rb +31 -0
  35. data/spec/simple_auth/config_spec.rb +8 -27
  36. data/spec/simple_auth/helper_spec.rb +7 -7
  37. data/spec/simple_auth/session_spec.rb +76 -76
  38. data/spec/spec_helper.rb +2 -168
  39. data/spec/support/app/models/customer.rb +3 -0
  40. data/templates/initializer.rb +0 -8
  41. metadata +62 -33
  42. data/README.markdown +0 -202
  43. data/lib/simple_auth/orm/active_record.rb +0 -80
  44. data/lib/simple_auth/orm/base.rb +0 -89
  45. data/lib/simple_auth/orm/mongo_mapper.rb +0 -62
  46. data/spec/simple_auth/mongo_mapper_spec.rb +0 -10
  47. data/spec/support/app/models/account.rb +0 -6
@@ -12,7 +12,7 @@ describe ApplicationController do
12
12
 
13
13
  context "redirecting logged users" do
14
14
  context "using hash" do
15
- controller do
15
+ controller ApplicationController do
16
16
  redirect_logged_user :to => { :controller => "dashboard" }
17
17
 
18
18
  def index
@@ -20,17 +20,17 @@ describe ApplicationController do
20
20
  end
21
21
  end
22
22
 
23
- it "should redirect logged users" do
23
+ it "redirects logged users" do
24
24
  session[:user_id] = user.id
25
25
  get :index
26
26
 
27
- response.code.should match(/302/)
28
- response.should redirect_to("/dashboard")
27
+ expect(response.code).to match(/302/)
28
+ expect(response).to redirect_to("/dashboard")
29
29
  end
30
30
  end
31
31
 
32
32
  context "using block" do
33
- controller do
33
+ controller ApplicationController do
34
34
  redirect_logged_user :to => proc { dashboard_path }
35
35
 
36
36
  def index
@@ -38,17 +38,17 @@ describe ApplicationController do
38
38
  end
39
39
  end
40
40
 
41
- it "should redirect logged users" do
41
+ it "redirects logged users" do
42
42
  session[:user_id] = user.id
43
43
  get :index
44
44
 
45
- response.code.should match(/302/)
46
- response.should redirect_to("/dashboard")
45
+ expect(response.code).to match(/302/)
46
+ expect(response).to redirect_to("/dashboard")
47
47
  end
48
48
  end
49
49
 
50
50
  context "using configuration" do
51
- controller do
51
+ controller ApplicationController do
52
52
  redirect_logged_user
53
53
 
54
54
  def index
@@ -56,18 +56,18 @@ describe ApplicationController do
56
56
  end
57
57
  end
58
58
 
59
- it "should redirect logged users" do
59
+ it "redirects logged users" do
60
60
  SimpleAuth::Config.logged_url = proc { dashboard_path }
61
61
  session[:user_id] = user.id
62
62
  get :index
63
63
 
64
- response.code.should match(/302/)
65
- response.should redirect_to("/dashboard")
64
+ expect(response.code).to match(/302/)
65
+ expect(response).to redirect_to("/dashboard")
66
66
  end
67
67
  end
68
68
 
69
69
  context "when unlogged" do
70
- controller do
70
+ controller ApplicationController do
71
71
  redirect_logged_user :to => { :controller => "dashboard" }
72
72
 
73
73
  def index
@@ -75,12 +75,12 @@ describe ApplicationController do
75
75
  end
76
76
  end
77
77
 
78
- it "should render page" do
78
+ it "renders page" do
79
79
  session[:user_id] = nil
80
80
  get :index
81
81
 
82
- response.code.should match(/200/)
83
- response.body.should == "Rendered"
82
+ expect(response.code).to match(/200/)
83
+ expect(response.body).to eq("Rendered")
84
84
  end
85
85
  end
86
86
  end
@@ -15,7 +15,7 @@ describe ApplicationController do
15
15
  end
16
16
 
17
17
  context "redirecting to requested page" do
18
- controller do
18
+ controller ApplicationController do
19
19
  require_logged_user :to => "/login"
20
20
 
21
21
  def index
@@ -23,66 +23,66 @@ describe ApplicationController do
23
23
  end
24
24
  end
25
25
 
26
- it "should keep other session data" do
26
+ it "keeps other session data" do
27
27
  session[:skip_intro] = true
28
28
  get :index
29
- session[:skip_intro].should be_true
29
+ expect(session[:skip_intro]).to be_truthy
30
30
  end
31
31
 
32
- it "should remove record id from session" do
32
+ it "removes record id from session" do
33
33
  session[:user_id] = 0
34
34
  get :index
35
- session.should_not have_key(:user)
35
+ expect(session).not_to have_key(:user)
36
36
  end
37
37
 
38
- it "should remove session id from session" do
38
+ it "removes session id from session" do
39
39
  session[:session_id] = "xSQR"
40
40
  get :index
41
- session.should_not have_key(:session_id)
41
+ expect(session).not_to have_key(:session_id)
42
42
  end
43
43
 
44
- it "should return the request url" do
44
+ it "returns the request url" do
45
45
  get :index, :some => "param"
46
- controller.send(:return_to, "/dashboard").should == "/anonymous?some=param"
46
+ expect(controller.send(:return_to, "/dashboard")).to eq("/anonymous?some=param")
47
47
  end
48
48
 
49
- it "should return the default url" do
50
- controller.send(:return_to, "/dashboard").should == "/dashboard"
49
+ it "returns the default url" do
50
+ expect(controller.send(:return_to, "/dashboard")).to eq("/dashboard")
51
51
  end
52
52
 
53
- it "should set return to" do
53
+ it "sets return to" do
54
54
  get :index, :some => "param"
55
- session[:return_to].should == "/anonymous?some=param"
55
+ expect(session[:return_to]).to eq("/anonymous?some=param")
56
56
  end
57
57
 
58
- it "should remove return to from session" do
58
+ it "removes return to from session" do
59
59
  get :index, :some => "param"
60
60
  controller.send(:return_to, "/dashboard")
61
- session[:return_to].should be_nil
61
+ expect(session[:return_to]).to be_nil
62
62
  end
63
63
 
64
- it "should set warning message" do
64
+ it "sets warning message" do
65
65
  get :index
66
- flash[:alert].should == "You need to be logged"
66
+ expect(flash[:alert]).to eq("You need to be logged")
67
67
  end
68
68
 
69
- it "should redirect when user is not authorized on controller level" do
69
+ it "redirects when user is not authorized on controller level" do
70
70
  session[:user_id] = user.id
71
- @controller.should_receive(:authorized?).and_return(false)
71
+ expect(@controller).to receive(:authorized?).and_return(false)
72
72
 
73
73
  get :index
74
- response.should redirect_to("/login")
74
+ expect(response).to redirect_to("/login")
75
75
  end
76
76
 
77
- it "should redirect when session is not valid" do
77
+ it "redirects when session is not valid" do
78
78
  session[:user_id] = "invalid"
79
79
 
80
80
  get :index
81
- response.should redirect_to("/login")
81
+ expect(response).to redirect_to("/login")
82
82
  end
83
83
 
84
84
  context "using hash" do
85
- controller do
85
+ controller ApplicationController do
86
86
  require_logged_user :to => {:controller => "session", :action => "new"}
87
87
 
88
88
  def index
@@ -90,14 +90,14 @@ describe ApplicationController do
90
90
  end
91
91
  end
92
92
 
93
- it "should be redirected" do
93
+ it "is redirected" do
94
94
  get :index
95
- response.should redirect_to("/login")
95
+ expect(response).to redirect_to("/login")
96
96
  end
97
97
  end
98
98
 
99
99
  context "using block" do
100
- controller do
100
+ controller ApplicationController do
101
101
  require_logged_user :to => proc { login_path }
102
102
 
103
103
  def index
@@ -105,14 +105,14 @@ describe ApplicationController do
105
105
  end
106
106
  end
107
107
 
108
- it "should be redirected" do
108
+ it "is redirected" do
109
109
  get :index
110
- response.should redirect_to("/login")
110
+ expect(response).to redirect_to("/login")
111
111
  end
112
112
  end
113
113
 
114
114
  context "using configuration" do
115
- controller do
115
+ controller ApplicationController do
116
116
  require_logged_user
117
117
 
118
118
  def index
@@ -120,16 +120,16 @@ describe ApplicationController do
120
120
  end
121
121
  end
122
122
 
123
- it "should be redirected" do
123
+ it "is redirected" do
124
124
  SimpleAuth::Config.login_url = "/login"
125
125
  get :index
126
- response.should redirect_to("/login")
126
+ expect(response).to redirect_to("/login")
127
127
  end
128
128
  end
129
129
  end
130
130
 
131
131
  context "when logged" do
132
- controller do
132
+ controller ApplicationController do
133
133
  require_logged_user
134
134
 
135
135
  def index
@@ -137,10 +137,10 @@ describe ApplicationController do
137
137
  end
138
138
  end
139
139
 
140
- it "should render page" do
140
+ it "renders page" do
141
141
  session[:user_id] = user.id
142
142
  get :index
143
- response.body.should == "Rendered"
143
+ expect(response.body).to eq("Rendered")
144
144
  end
145
145
  end
146
146
  end
data/spec/schema.rb CHANGED
@@ -1,5 +1,9 @@
1
1
  ActiveRecord::Schema.define(:version => 0) do
2
2
  create_table :users do |t|
3
- t.string :email, :login, :password_hash, :password_salt, :username
3
+ t.string :email, :login, :password_digest, :username
4
+ end
5
+
6
+ create_table :customers do |t|
7
+ t.string :email, :login, :password_digest, :password_salt
4
8
  end
5
9
  end
@@ -1,9 +1,111 @@
1
1
  require "spec_helper"
2
2
 
3
- describe SimpleAuth::Orm::ActiveRecord do
3
+ describe SimpleAuth::ActiveRecord do
4
4
  let(:model) { User }
5
5
  let(:model_name) { :user }
6
6
  subject { model.new }
7
7
 
8
- it_should_behave_like "orm"
8
+ before do
9
+ SimpleAuth::Config.model = model_name
10
+ end
11
+
12
+ context "configuration" do
13
+ it "sets credentials" do
14
+ model.authentication do |config|
15
+ config.credentials = ["uid"]
16
+ end
17
+
18
+ expect(SimpleAuth::Config.credentials).to eq(["uid"])
19
+ end
20
+
21
+ it "automatically sets model" do
22
+ model.authentication do |config|
23
+ config.model = nil
24
+ end
25
+
26
+ expect(SimpleAuth::Config.model).to eq(model_name)
27
+ end
28
+ end
29
+
30
+ context "new record" do
31
+ before do
32
+ expect(subject).not_to be_valid
33
+ end
34
+
35
+ it "requires password" do
36
+ expect(subject.errors[:password]).not_to be_empty
37
+ end
38
+
39
+ it "requires password to be at least 4-chars long" do
40
+ subject.password = "123"
41
+ expect(subject).not_to be_valid
42
+ expect(subject.errors[:password]).not_to be_empty
43
+ end
44
+
45
+ it "requires password confirmation", if: Rails::VERSION::STRING >= "4.0" do
46
+ user = User.create(password: "test", password_confirmation: "invalid")
47
+ expect(user.errors[:password_confirmation]).not_to be_empty
48
+ end
49
+
50
+ it "requires password confirmation", if: Rails::VERSION::STRING < "4.0" do
51
+ user = User.create(password: "test", password_confirmation: "invalid")
52
+ expect(user.errors[:password]).not_to be_empty
53
+ end
54
+ end
55
+
56
+ context "existing record" do
57
+ before do
58
+ model.delete_all
59
+ model.create(
60
+ :email => "john@doe.com",
61
+ :login => "johndoe",
62
+ :password => "test",
63
+ :password_confirmation => "test",
64
+ :username => "john"
65
+ )
66
+ end
67
+
68
+ subject { model.first }
69
+
70
+ it "requires password" do
71
+ user = User.create(password: nil)
72
+ expect(user.errors[:password]).not_to be_empty
73
+ end
74
+
75
+ it "authenticates using email" do
76
+ expect(model.authenticate("john@doe.com", "test")).to eq(subject)
77
+ end
78
+
79
+ it "authenticates using login" do
80
+ expect(model.authenticate("johndoe", "test")).to eq(subject)
81
+ end
82
+
83
+ it "authenticates using custom attribute" do
84
+ SimpleAuth::Config.credentials = [:username]
85
+ expect(model.authenticate("john", "test")).to eq(subject)
86
+ end
87
+
88
+ it "doesn't authenticate using invalid credential" do
89
+ expect(model.authenticate("invalid", "test")).to be_nil
90
+ end
91
+
92
+ it "doesn't authenticate using wrong password" do
93
+ expect(model.authenticate("johndoe", "invalid")).not_to be
94
+ end
95
+
96
+ it "returns nil when no user has been found" do
97
+ expect(model.find_by_credential("invalid")).to be_nil
98
+ end
99
+
100
+ it "raises error when no user has been found" do
101
+ expect {
102
+ model.find_by_credential!("invalid")
103
+ }.to raise_error(SimpleAuth::RecordNotFound)
104
+ end
105
+
106
+ it "returns user" do
107
+ expect(model.find_by_credential(subject.email)).to eq(subject)
108
+ expect(model.find_by_credential!(subject.email)).to eq(subject)
109
+ end
110
+ end
9
111
  end
@@ -0,0 +1,31 @@
1
+ require "spec_helper"
2
+
3
+ describe SimpleAuth, "compatibility mode" do
4
+ before do
5
+ SimpleAuth::Config.model = :customer
6
+ require "simple_auth/compat"
7
+ require "customer"
8
+ end
9
+
10
+ after do
11
+ mod = SimpleAuth::ActiveRecord::InstanceMethods
12
+ mod.send :remove_method, :password=
13
+ mod.send :remove_method, :password_confirmation=
14
+ mod.send :remove_method, :authenticate
15
+ end
16
+
17
+ it "finds user based on the hashing system" do
18
+ password_salt = SecureRandom.hex
19
+ password_hash = SimpleAuth::Config.crypter.call("test", password_salt)
20
+ password_digest = BCrypt::Password.create(password_hash, cost: BCrypt::Engine::MIN_COST)
21
+
22
+ ActiveRecord::Base.connection.execute <<-SQL
23
+ INSERT INTO customers
24
+ (email, login, password_digest, password_salt)
25
+ VALUES
26
+ ('john@example.org', 'johndoe', '#{password_digest}', '#{password_salt}')
27
+ SQL
28
+
29
+ expect(Customer.authenticate("johndoe", "test")).to be_a(Customer)
30
+ end
31
+ end
@@ -1,40 +1,21 @@
1
1
  require "spec_helper"
2
2
 
3
3
  describe SimpleAuth::Config do
4
- it "should yield SimpleAuth::Config class" do
4
+ it "yields SimpleAuth::Config class" do
5
5
  SimpleAuth.setup do |config|
6
- config.should == SimpleAuth::Config
6
+ expect(config).to eq(SimpleAuth::Config)
7
7
  end
8
8
  end
9
9
 
10
- it "should use [:email, :login] as credential attributes" do
11
- SimpleAuth::Config.credentials.should == [:email, :login]
10
+ it "uses [:email, :login] as credential attributes" do
11
+ expect(SimpleAuth::Config.credentials).to eq([:email, :login])
12
12
  end
13
13
 
14
- it "should use User as default model" do
15
- SimpleAuth::Config.model.should == :user
14
+ it "uses User as default model" do
15
+ expect(SimpleAuth::Config.model).to eq(:user)
16
16
  end
17
17
 
18
- specify "crypter should expect 2 block arguments" do
19
- SimpleAuth::Config.crypter.arity.should == 2
20
- end
21
-
22
- specify "salt should expect 1 block argument" do
23
- SimpleAuth::Config.salt.arity.should == 1
24
- end
25
-
26
- specify "salt should return a 64-char long salt" do
27
- SimpleAuth::Config.salt.call(nil).size.should == 64
28
- end
29
-
30
- specify "wipeout session should be disabled" do
31
- SimpleAuth::Config.wipeout_session.should be_false
32
- end
33
-
34
- specify "deprecated reset_session accessor" do
35
- Kernel.should_receive(:warn).twice
36
-
37
- SimpleAuth::Config.reset_session = true
38
- SimpleAuth::Config.reset_session
18
+ it "disables session wipeout" do
19
+ expect(SimpleAuth::Config.wipeout_session).to be_falsey
39
20
  end
40
21
  end