monban 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rspec +1 -0
- data/Gemfile.lock +100 -68
- data/NEWS.rdoc +5 -0
- data/README.md +13 -1
- data/lib/monban.rb +1 -0
- data/lib/monban/configuration.rb +1 -1
- data/lib/monban/failure_app.rb +48 -0
- data/lib/monban/version.rb +2 -2
- data/spec/features/user/user_tries_to_access_http_auth_page_spec.rb +9 -0
- data/spec/features/visitor/visitor_fails_to_sign_up_spec.rb +1 -1
- data/spec/features/visitor/visitor_signs_up_spec.rb +2 -2
- data/spec/monban/controller_helpers_spec.rb +41 -32
- data/spec/monban/services/password_reset_spec.rb +2 -1
- data/spec/monban/services/sign_in_spec.rb +2 -1
- data/spec/monban/services/sign_out_spec.rb +2 -1
- data/spec/monban/services/sign_up_spec.rb +2 -2
- data/spec/monban/test_helpers_spec.rb +7 -7
- data/spec/monban_spec.rb +1 -1
- data/spec/rails_app/app/controllers/basic_auth_controller.rb +7 -0
- data/spec/rails_app/app/controllers/sessions_controller.rb +1 -3
- data/spec/rails_app/app/controllers/users_controller.rb +1 -3
- data/spec/rails_app/config/routes.rb +1 -0
- metadata +9 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: acd6663ce53c6af5ad43f138da55020b087cea3e
|
|
4
|
+
data.tar.gz: 048b50dc5d4f0fc2bec708a5d25c50123cb865e6
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 9c9a8140dfa2b6c5c04aa3d4513885d8b319b30edc2852d5ca68b3d87c8d5c6d580b422650ba2b3ae1508280690ecc5100eb7f767c3316386bb118a399b844f8
|
|
7
|
+
data.tar.gz: 75e929873ffa7175559ffc0779a5366f992d157353d1ce735f3db32a6b9f03802707951ed1c0203e56ce6f50b4885d87659fd07ba42fbd9eaaadaa362be0a0ca
|
data/.rspec
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
--color
|
data/Gemfile.lock
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
monban (0.2.
|
|
4
|
+
monban (0.2.1)
|
|
5
5
|
bcrypt
|
|
6
6
|
rails
|
|
7
7
|
warden
|
|
@@ -9,98 +9,130 @@ PATH
|
|
|
9
9
|
GEM
|
|
10
10
|
remote: https://rubygems.org/
|
|
11
11
|
specs:
|
|
12
|
-
actionmailer (
|
|
13
|
-
actionpack (
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
12
|
+
actionmailer (4.2.2)
|
|
13
|
+
actionpack (= 4.2.2)
|
|
14
|
+
actionview (= 4.2.2)
|
|
15
|
+
activejob (= 4.2.2)
|
|
16
|
+
mail (~> 2.5, >= 2.5.4)
|
|
17
|
+
rails-dom-testing (~> 1.0, >= 1.0.5)
|
|
18
|
+
actionpack (4.2.2)
|
|
19
|
+
actionview (= 4.2.2)
|
|
20
|
+
activesupport (= 4.2.2)
|
|
21
|
+
rack (~> 1.6)
|
|
18
22
|
rack-test (~> 0.6.2)
|
|
19
|
-
|
|
20
|
-
|
|
23
|
+
rails-dom-testing (~> 1.0, >= 1.0.5)
|
|
24
|
+
rails-html-sanitizer (~> 1.0, >= 1.0.1)
|
|
25
|
+
actionview (4.2.2)
|
|
26
|
+
activesupport (= 4.2.2)
|
|
21
27
|
builder (~> 3.1)
|
|
22
28
|
erubis (~> 2.7.0)
|
|
23
|
-
|
|
29
|
+
rails-dom-testing (~> 1.0, >= 1.0.5)
|
|
30
|
+
rails-html-sanitizer (~> 1.0, >= 1.0.1)
|
|
31
|
+
active_hash (1.4.0)
|
|
24
32
|
activesupport (>= 2.2.2)
|
|
25
|
-
|
|
26
|
-
activesupport (= 4.
|
|
33
|
+
activejob (4.2.2)
|
|
34
|
+
activesupport (= 4.2.2)
|
|
35
|
+
globalid (>= 0.3.0)
|
|
36
|
+
activemodel (4.2.2)
|
|
37
|
+
activesupport (= 4.2.2)
|
|
27
38
|
builder (~> 3.1)
|
|
28
|
-
activerecord (4.
|
|
29
|
-
activemodel (= 4.
|
|
30
|
-
activesupport (= 4.
|
|
31
|
-
arel (~>
|
|
32
|
-
activesupport (4.
|
|
33
|
-
i18n (~> 0.
|
|
39
|
+
activerecord (4.2.2)
|
|
40
|
+
activemodel (= 4.2.2)
|
|
41
|
+
activesupport (= 4.2.2)
|
|
42
|
+
arel (~> 6.0)
|
|
43
|
+
activesupport (4.2.2)
|
|
44
|
+
i18n (~> 0.7)
|
|
34
45
|
json (~> 1.7, >= 1.7.7)
|
|
35
46
|
minitest (~> 5.1)
|
|
36
|
-
thread_safe (~> 0.
|
|
47
|
+
thread_safe (~> 0.3, >= 0.3.4)
|
|
37
48
|
tzinfo (~> 1.1)
|
|
38
|
-
arel (
|
|
49
|
+
arel (6.0.0)
|
|
39
50
|
bcrypt (3.1.10)
|
|
40
51
|
builder (3.2.2)
|
|
41
|
-
capybara (2.
|
|
52
|
+
capybara (2.4.4)
|
|
42
53
|
mime-types (>= 1.16)
|
|
43
54
|
nokogiri (>= 1.3.3)
|
|
44
55
|
rack (>= 1.0.0)
|
|
45
56
|
rack-test (>= 0.5.4)
|
|
46
|
-
|
|
47
|
-
xpath (~> 1.0.0)
|
|
48
|
-
childprocess (0.3.7)
|
|
49
|
-
ffi (~> 1.0, >= 1.0.6)
|
|
57
|
+
xpath (~> 2.0)
|
|
50
58
|
diff-lcs (1.2.5)
|
|
51
59
|
erubis (2.7.0)
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
60
|
+
globalid (0.3.5)
|
|
61
|
+
activesupport (>= 4.1.0)
|
|
62
|
+
i18n (0.7.0)
|
|
63
|
+
json (1.8.3)
|
|
64
|
+
loofah (2.0.2)
|
|
65
|
+
nokogiri (>= 1.5.9)
|
|
66
|
+
mail (2.6.3)
|
|
67
|
+
mime-types (>= 1.16, < 3)
|
|
68
|
+
mime-types (2.6.1)
|
|
69
|
+
mini_portile (0.6.2)
|
|
70
|
+
minitest (5.7.0)
|
|
71
|
+
nokogiri (1.6.6.2)
|
|
72
|
+
mini_portile (~> 0.6.0)
|
|
73
|
+
rack (1.6.4)
|
|
74
|
+
rack-test (0.6.3)
|
|
61
75
|
rack (>= 1.0)
|
|
62
|
-
rails (
|
|
63
|
-
actionmailer (
|
|
64
|
-
actionpack (
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
activesupport (= 4.
|
|
76
|
+
rails (4.2.2)
|
|
77
|
+
actionmailer (= 4.2.2)
|
|
78
|
+
actionpack (= 4.2.2)
|
|
79
|
+
actionview (= 4.2.2)
|
|
80
|
+
activejob (= 4.2.2)
|
|
81
|
+
activemodel (= 4.2.2)
|
|
82
|
+
activerecord (= 4.2.2)
|
|
83
|
+
activesupport (= 4.2.2)
|
|
84
|
+
bundler (>= 1.3.0, < 2.0)
|
|
85
|
+
railties (= 4.2.2)
|
|
86
|
+
sprockets-rails
|
|
87
|
+
rails-deprecated_sanitizer (1.0.3)
|
|
88
|
+
activesupport (>= 4.2.0.alpha)
|
|
89
|
+
rails-dom-testing (1.0.6)
|
|
90
|
+
activesupport (>= 4.2.0.beta, < 5.0)
|
|
91
|
+
nokogiri (~> 1.6.0)
|
|
92
|
+
rails-deprecated_sanitizer (>= 1.0.1)
|
|
93
|
+
rails-html-sanitizer (1.0.2)
|
|
94
|
+
loofah (~> 2.0)
|
|
95
|
+
railties (4.2.2)
|
|
96
|
+
actionpack (= 4.2.2)
|
|
97
|
+
activesupport (= 4.2.2)
|
|
70
98
|
rake (>= 0.8.7)
|
|
71
99
|
thor (>= 0.18.1, < 2.0)
|
|
72
|
-
rake (10.
|
|
73
|
-
rspec (
|
|
74
|
-
rspec-core (~>
|
|
75
|
-
rspec-expectations (~>
|
|
76
|
-
rspec-mocks (~>
|
|
77
|
-
rspec-core (
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
100
|
+
rake (10.4.2)
|
|
101
|
+
rspec (3.3.0)
|
|
102
|
+
rspec-core (~> 3.3.0)
|
|
103
|
+
rspec-expectations (~> 3.3.0)
|
|
104
|
+
rspec-mocks (~> 3.3.0)
|
|
105
|
+
rspec-core (3.3.1)
|
|
106
|
+
rspec-support (~> 3.3.0)
|
|
107
|
+
rspec-expectations (3.3.0)
|
|
108
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
|
109
|
+
rspec-support (~> 3.3.0)
|
|
110
|
+
rspec-mocks (3.3.0)
|
|
111
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
|
112
|
+
rspec-support (~> 3.3.0)
|
|
113
|
+
rspec-rails (3.3.2)
|
|
114
|
+
actionpack (>= 3.0, < 4.3)
|
|
115
|
+
activesupport (>= 3.0, < 4.3)
|
|
116
|
+
railties (>= 3.0, < 4.3)
|
|
117
|
+
rspec-core (~> 3.3.0)
|
|
118
|
+
rspec-expectations (~> 3.3.0)
|
|
119
|
+
rspec-mocks (~> 3.3.0)
|
|
120
|
+
rspec-support (~> 3.3.0)
|
|
121
|
+
rspec-support (3.3.0)
|
|
122
|
+
sprockets (3.2.0)
|
|
123
|
+
rack (~> 1.0)
|
|
124
|
+
sprockets-rails (2.3.1)
|
|
82
125
|
actionpack (>= 3.0)
|
|
83
|
-
activemodel (>= 3.0)
|
|
84
126
|
activesupport (>= 3.0)
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
rspec-expectations (~> 2.14.0)
|
|
88
|
-
rspec-mocks (~> 2.14.0)
|
|
89
|
-
rubyzip (0.9.9)
|
|
90
|
-
selenium-webdriver (2.29.0)
|
|
91
|
-
childprocess (>= 0.2.5)
|
|
92
|
-
multi_json (~> 1.0)
|
|
93
|
-
rubyzip
|
|
94
|
-
websocket (~> 1.0.4)
|
|
95
|
-
sqlite3 (1.3.7)
|
|
127
|
+
sprockets (>= 2.8, < 4.0)
|
|
128
|
+
sqlite3 (1.3.10)
|
|
96
129
|
thor (0.19.1)
|
|
97
|
-
thread_safe (0.3.
|
|
98
|
-
tzinfo (1.
|
|
130
|
+
thread_safe (0.3.5)
|
|
131
|
+
tzinfo (1.2.2)
|
|
99
132
|
thread_safe (~> 0.1)
|
|
100
133
|
warden (1.2.3)
|
|
101
134
|
rack (>= 1.0)
|
|
102
|
-
|
|
103
|
-
xpath (1.0.0)
|
|
135
|
+
xpath (2.0.0)
|
|
104
136
|
nokogiri (~> 1.3)
|
|
105
137
|
|
|
106
138
|
PLATFORMS
|
data/NEWS.rdoc
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
== 0.2.1
|
|
2
|
+
* Updated documentation for test helpers
|
|
3
|
+
* Updated documentation for using monban in console
|
|
4
|
+
* Fixed bug with failure app now allowing actual http auth to occur
|
|
5
|
+
|
|
1
6
|
== 0.2.0
|
|
2
7
|
* `sign_in` test helper now returns the user
|
|
3
8
|
* `authenticate_session` arguments are coerced to Hash
|
data/README.md
CHANGED
|
@@ -57,6 +57,15 @@ configure and change any of these:
|
|
|
57
57
|
|
|
58
58
|
### Suggestions
|
|
59
59
|
|
|
60
|
+
#### Console Usage
|
|
61
|
+
|
|
62
|
+
If you're trying to sign up a User in a console you won't be able to call User#new or User#create because the User model does not know how to encrypt passwords.
|
|
63
|
+
You should instead use the sign up service in order to create the user:
|
|
64
|
+
|
|
65
|
+
```ruby
|
|
66
|
+
Monban.config.sign_up_service.new(email: "foo@example.com", password: "password").perform
|
|
67
|
+
```
|
|
68
|
+
|
|
60
69
|
#### Validations
|
|
61
70
|
|
|
62
71
|
Monban doesn't add validations to your user model unless you're using [monban generators] so it's suggested to add the following validations:
|
|
@@ -175,7 +184,7 @@ end
|
|
|
175
184
|
|
|
176
185
|
### Spec helpers
|
|
177
186
|
|
|
178
|
-
A couple of convenience methods are available in your tests.
|
|
187
|
+
A couple of convenience methods are available in your tests. In order to set this up you'll want to add the following to `rails_helper.rb` or if that doesn't exist `spec_helper.rb`
|
|
179
188
|
|
|
180
189
|
```ruby
|
|
181
190
|
Monban.test_mode!
|
|
@@ -188,6 +197,8 @@ RSpec.configure do |config|
|
|
|
188
197
|
end
|
|
189
198
|
```
|
|
190
199
|
|
|
200
|
+
Then you can use any of the [test helpers] in your scenarios
|
|
201
|
+
|
|
191
202
|
```ruby
|
|
192
203
|
feature "A feature spec" do
|
|
193
204
|
scenario "that requires login" do
|
|
@@ -359,3 +370,4 @@ Here are a few of the current limitations of monban:
|
|
|
359
370
|
5. Create new Pull Request
|
|
360
371
|
|
|
361
372
|
[monban generators]: https://github.com/halogenandtoast/monban-generators
|
|
373
|
+
[test helpers]: https://github.com/halogenandtoast/monban/blob/master/lib/monban/test/helpers.rb
|
data/lib/monban.rb
CHANGED
data/lib/monban/configuration.rb
CHANGED
|
@@ -109,7 +109,7 @@ module Monban
|
|
|
109
109
|
end
|
|
110
110
|
|
|
111
111
|
def setup_warden_requirements
|
|
112
|
-
@failure_app =
|
|
112
|
+
@failure_app = Monban::FailureApp
|
|
113
113
|
@authentication_strategy = Monban::Strategies::PasswordStrategy
|
|
114
114
|
end
|
|
115
115
|
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
module Monban
|
|
2
|
+
class FailureApp
|
|
3
|
+
def self.call(env)
|
|
4
|
+
request = Rack::Request.new(env)
|
|
5
|
+
new(request).response
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def initialize(request)
|
|
9
|
+
@request = request
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def response
|
|
13
|
+
[401, headers, body]
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
private
|
|
17
|
+
|
|
18
|
+
attr_reader :request
|
|
19
|
+
|
|
20
|
+
def headers
|
|
21
|
+
if http_auth_header?
|
|
22
|
+
basic_headers.merge(auth_headers)
|
|
23
|
+
else
|
|
24
|
+
basic_headers
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def basic_headers
|
|
29
|
+
{
|
|
30
|
+
"Content-Type" => request.content_type.to_s
|
|
31
|
+
}
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def auth_headers
|
|
35
|
+
{
|
|
36
|
+
"WWW-Authenticate" => 'Basic realm="Application"'
|
|
37
|
+
}
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def body
|
|
41
|
+
["Authorization Failed"]
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def http_auth_header?
|
|
45
|
+
!request.xhr?
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
data/lib/monban/version.rb
CHANGED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
feature 'User tries to access constrained routes' do
|
|
4
|
+
scenario 'they can access a route constrained to users' do
|
|
5
|
+
page.driver.browser.basic_authorize("admin", "password")
|
|
6
|
+
visit basic_auth_path
|
|
7
|
+
expect(page.status_code).to eq(200)
|
|
8
|
+
end
|
|
9
|
+
end
|
|
@@ -7,7 +7,7 @@ feature 'Visitor signs up' do
|
|
|
7
7
|
fill_in 'user_password', with: 'password'
|
|
8
8
|
click_on 'go'
|
|
9
9
|
|
|
10
|
-
page.current_path.
|
|
10
|
+
expect(page.current_path).to eq(posts_path)
|
|
11
11
|
end
|
|
12
12
|
|
|
13
13
|
scenario 'multiple users' do
|
|
@@ -26,6 +26,6 @@ feature 'Visitor signs up' do
|
|
|
26
26
|
fill_in 'session_password', with: 'password'
|
|
27
27
|
click_on 'go'
|
|
28
28
|
|
|
29
|
-
page.current_path.
|
|
29
|
+
expect(page.current_path).to eq(posts_path)
|
|
30
30
|
end
|
|
31
31
|
end
|
|
@@ -46,22 +46,25 @@ module Monban
|
|
|
46
46
|
it 'runs the block when user is signed in' do
|
|
47
47
|
user = stub_sign_in
|
|
48
48
|
expectation = double()
|
|
49
|
-
expectation.
|
|
49
|
+
allow(expectation).to receive(:success)
|
|
50
50
|
@dummy.sign_in(user) { expectation.success }
|
|
51
|
+
expect(expectation).to have_received(:success)
|
|
51
52
|
end
|
|
52
53
|
|
|
53
54
|
it 'does not run the block when user can not be signed in' do
|
|
54
55
|
user = stub_sign_in(false)
|
|
55
56
|
expectation = double()
|
|
56
|
-
expectation.
|
|
57
|
+
allow(expectation).to receive(:failure)
|
|
57
58
|
@dummy.sign_in(user) { expectation.failure }
|
|
59
|
+
expect(expectation).not_to have_received(:failure)
|
|
58
60
|
end
|
|
59
61
|
|
|
60
62
|
it 'performs a sign out' do
|
|
61
63
|
sign_out = double()
|
|
62
|
-
sign_out.
|
|
63
|
-
Services::SignOut.
|
|
64
|
+
allow(sign_out).to receive(:perform)
|
|
65
|
+
allow(Services::SignOut).to receive(:new).with(@warden).and_return(sign_out)
|
|
64
66
|
@dummy.sign_out
|
|
67
|
+
expect(sign_out).to have_received(:perform)
|
|
65
68
|
end
|
|
66
69
|
|
|
67
70
|
it 'performs a sign_up' do
|
|
@@ -72,25 +75,27 @@ module Monban
|
|
|
72
75
|
it 'runs the block when user is signed up' do
|
|
73
76
|
user_params = stub_sign_up
|
|
74
77
|
expectation = double()
|
|
75
|
-
expectation.
|
|
78
|
+
allow(expectation).to receive(:success)
|
|
76
79
|
@dummy.sign_up(user_params) { expectation.success }
|
|
80
|
+
expect(expectation).to have_received(:success)
|
|
77
81
|
end
|
|
78
82
|
|
|
79
83
|
it 'does not run the block when user can not be signed up' do
|
|
80
84
|
user_params = stub_sign_up(false)
|
|
81
85
|
expectation = double()
|
|
82
|
-
expectation.
|
|
83
|
-
@dummy.sign_up(user_params) {
|
|
86
|
+
allow(expectation).to receive(:failure)
|
|
87
|
+
@dummy.sign_up(user_params) { expectation.failure }
|
|
88
|
+
expect(expectation).not_to have_received(:failure)
|
|
84
89
|
end
|
|
85
90
|
|
|
86
91
|
it 'authenticates a session' do
|
|
87
92
|
session_params = { password: 'password', email: 'a@b.com' }
|
|
88
93
|
user = double()
|
|
89
94
|
authentication = double()
|
|
90
|
-
authentication.
|
|
91
|
-
Monban.
|
|
92
|
-
Services::Authentication.
|
|
93
|
-
@dummy.authenticate_session(session_params).
|
|
95
|
+
allow(authentication).to receive(:perform).and_return(user)
|
|
96
|
+
allow(Monban).to receive(:lookup).with({email: 'a@b.com'}, nil).and_return(user)
|
|
97
|
+
allow(Services::Authentication).to receive(:new).with(user, 'password').and_return(authentication)
|
|
98
|
+
expect(@dummy.authenticate_session(session_params)).to eq user
|
|
94
99
|
end
|
|
95
100
|
|
|
96
101
|
it 'authenticates a session against multiple fields' do
|
|
@@ -98,44 +103,48 @@ module Monban
|
|
|
98
103
|
field_map = { email_or_username: [:email, :username] }
|
|
99
104
|
user = double()
|
|
100
105
|
authentication = double()
|
|
101
|
-
authentication.
|
|
102
|
-
Monban.
|
|
103
|
-
Services::Authentication.
|
|
104
|
-
@dummy.authenticate_session(session_params, field_map).
|
|
106
|
+
allow(authentication).to receive(:perform).and_return(user)
|
|
107
|
+
allow(Monban).to receive(:lookup).with(session_params.except(:password), field_map).and_return(user)
|
|
108
|
+
allow(Services::Authentication).to receive(:new).with(user, 'password').and_return(authentication)
|
|
109
|
+
expect(@dummy.authenticate_session(session_params, field_map)).to eq user
|
|
105
110
|
end
|
|
106
111
|
|
|
107
112
|
it 'returns false when it could not authenticate the user' do
|
|
108
113
|
session_params = { password: "password", lookup_key: "lookup_key" }
|
|
109
114
|
user = double()
|
|
110
115
|
authentication = double()
|
|
111
|
-
authentication.
|
|
112
|
-
Monban.
|
|
113
|
-
Services::Authentication.
|
|
114
|
-
@dummy.authenticate_session(session_params).
|
|
116
|
+
allow(authentication).to receive(:perform).and_return(false)
|
|
117
|
+
allow(Monban).to receive(:lookup).with({ lookup_key: "lookup_key" }, nil).and_return(user)
|
|
118
|
+
allow(Services::Authentication).to receive(:new).with(user, 'password').and_return(authentication)
|
|
119
|
+
expect(@dummy.authenticate_session(session_params)).to be_falsey
|
|
115
120
|
end
|
|
116
121
|
|
|
117
122
|
it 'performs an authenticate' do
|
|
118
123
|
user = double()
|
|
119
124
|
password = double()
|
|
120
125
|
authentication = double()
|
|
121
|
-
authentication.
|
|
122
|
-
Services::Authentication.
|
|
126
|
+
allow(authentication).to receive(:perform)
|
|
127
|
+
allow(Services::Authentication).to receive(:new).with(user, password).and_return(authentication)
|
|
123
128
|
@dummy.authenticate user, password
|
|
129
|
+
expect(authentication).to have_received(:perform)
|
|
124
130
|
end
|
|
125
131
|
|
|
126
132
|
it 'returns the current user' do
|
|
127
|
-
|
|
128
|
-
@
|
|
133
|
+
current_user = double()
|
|
134
|
+
allow(@warden).to receive(:user).and_return(current_user)
|
|
135
|
+
expect(@dummy.current_user).to eq current_user
|
|
129
136
|
end
|
|
130
137
|
|
|
131
138
|
it 'returns signed_in?' do
|
|
132
|
-
@warden.
|
|
133
|
-
@dummy.
|
|
139
|
+
allow(@warden).to receive(:user)
|
|
140
|
+
allow(@dummy).to receive(:current_user)
|
|
134
141
|
@dummy.signed_in?
|
|
142
|
+
expect(@warden).to have_received(:user)
|
|
143
|
+
expect(@dummy).not_to have_received(:current_user)
|
|
135
144
|
end
|
|
136
145
|
|
|
137
146
|
it 'redirects when not signed_in' do
|
|
138
|
-
@warden.
|
|
147
|
+
allow(@warden).to receive(:user).and_return(false)
|
|
139
148
|
@dummy.require_login
|
|
140
149
|
expect(@dummy.redirected).to eq(true)
|
|
141
150
|
expect(@dummy.redirected_to).to eq(Monban.config.no_login_redirect)
|
|
@@ -143,28 +152,28 @@ module Monban
|
|
|
143
152
|
end
|
|
144
153
|
|
|
145
154
|
it 'does not redirect when signed_in' do
|
|
146
|
-
@warden.
|
|
155
|
+
allow(@warden).to receive(:user).and_return(true)
|
|
147
156
|
@dummy.require_login
|
|
148
157
|
expect(@dummy.redirected).to eq(false)
|
|
149
158
|
end
|
|
150
159
|
|
|
151
160
|
it 'returns warden' do
|
|
152
|
-
@dummy.warden.
|
|
161
|
+
expect(@dummy.warden).to eq @warden
|
|
153
162
|
end
|
|
154
163
|
|
|
155
164
|
def stub_sign_in(success = true)
|
|
156
165
|
user = double()
|
|
157
166
|
sign_in = double()
|
|
158
|
-
sign_in.
|
|
159
|
-
Services::SignIn.
|
|
167
|
+
allow(sign_in).to receive(:perform).and_return(success)
|
|
168
|
+
allow(Services::SignIn).to receive(:new).with(user, @warden).and_return(sign_in)
|
|
160
169
|
user
|
|
161
170
|
end
|
|
162
171
|
|
|
163
172
|
def stub_sign_up(success = true)
|
|
164
173
|
user_params = double()
|
|
165
174
|
sign_up = double()
|
|
166
|
-
sign_up.
|
|
167
|
-
Services::SignUp.
|
|
175
|
+
allow(sign_up).to receive(:perform).and_return(success)
|
|
176
|
+
allow(Services::SignUp).to receive(:new).with(user_params).and_return(sign_up)
|
|
168
177
|
user_params
|
|
169
178
|
end
|
|
170
179
|
end
|
|
@@ -11,10 +11,11 @@ describe Monban::Services::PasswordReset do
|
|
|
11
11
|
password_digest = Monban.hash_token('password')
|
|
12
12
|
user = double()
|
|
13
13
|
field = Monban.config.user_token_store_field
|
|
14
|
-
user.
|
|
14
|
+
allow(user).to receive(:[]=)
|
|
15
15
|
password_reset = Monban::Services::PasswordReset.new(user, 'password')
|
|
16
16
|
|
|
17
17
|
password_reset.perform
|
|
18
|
+
expect(user).to have_received(:[]=).with(field, 'passwordsecret')
|
|
18
19
|
end
|
|
19
20
|
|
|
20
21
|
after do
|
|
@@ -5,8 +5,9 @@ describe Monban::Services::SignIn, '#perform' do
|
|
|
5
5
|
it 'signs the user in' do
|
|
6
6
|
user = double()
|
|
7
7
|
warden = double()
|
|
8
|
-
warden.
|
|
8
|
+
allow(warden).to receive(:set_user)
|
|
9
9
|
|
|
10
10
|
Monban::Services::SignIn.new(user, warden).perform
|
|
11
|
+
expect(warden).to have_received(:set_user).with(user)
|
|
11
12
|
end
|
|
12
13
|
end
|
|
@@ -4,8 +4,9 @@ require 'monban/services/sign_out'
|
|
|
4
4
|
describe Monban::Services::SignOut, '#perform' do
|
|
5
5
|
it 'signs out the user' do
|
|
6
6
|
warden = double()
|
|
7
|
-
warden.
|
|
7
|
+
allow(warden).to receive(:logout)
|
|
8
8
|
|
|
9
9
|
Monban::Services::SignOut.new(warden).perform
|
|
10
|
+
expect(warden).to have_received(:logout)
|
|
10
11
|
end
|
|
11
12
|
end
|
|
@@ -9,7 +9,7 @@ describe Monban::Services::SignUp, '#perform' do
|
|
|
9
9
|
Monban::Services::SignUp.new(user_params).perform
|
|
10
10
|
expect(User).to have_received(:create) do |args|
|
|
11
11
|
expect(args[:email]).to eq(user_params[:email])
|
|
12
|
-
expect(Monban.compare_token(args[:password_digest], 'password')).to
|
|
12
|
+
expect(Monban.compare_token(args[:password_digest], 'password')).to be_truthy
|
|
13
13
|
end
|
|
14
14
|
end
|
|
15
15
|
|
|
@@ -23,7 +23,7 @@ describe Monban::Services::SignUp, '#perform' do
|
|
|
23
23
|
end
|
|
24
24
|
|
|
25
25
|
expect(user_create_double).to have_received(:call) do |args|
|
|
26
|
-
expect(Monban.compare_token(args[:password_digest], 'password')).to
|
|
26
|
+
expect(Monban.compare_token(args[:password_digest], 'password')).to be_truthy
|
|
27
27
|
end
|
|
28
28
|
end
|
|
29
29
|
|
|
@@ -67,14 +67,14 @@ module Monban
|
|
|
67
67
|
return_value = sign_in(user)
|
|
68
68
|
app = lambda do |env|
|
|
69
69
|
$captures << :run
|
|
70
|
-
env['warden'].
|
|
71
|
-
env['warden'].user.
|
|
70
|
+
expect(env['warden']).to be_authenticated
|
|
71
|
+
expect(env['warden'].user).to eq(user)
|
|
72
72
|
valid_response
|
|
73
73
|
end
|
|
74
74
|
setup_rack(app).call(env_with_params)
|
|
75
75
|
|
|
76
|
-
return_value.
|
|
77
|
-
$captures.
|
|
76
|
+
expect(return_value).to eq(user)
|
|
77
|
+
expect($captures).to eq([:run])
|
|
78
78
|
end
|
|
79
79
|
|
|
80
80
|
it 'performs a sign out' do
|
|
@@ -85,12 +85,12 @@ module Monban
|
|
|
85
85
|
app = lambda do |env|
|
|
86
86
|
$captures << :run
|
|
87
87
|
warden = env['warden']
|
|
88
|
-
warden.user.
|
|
89
|
-
warden.
|
|
88
|
+
expect(warden.user).to be_nil
|
|
89
|
+
expect(warden).not_to be_authenticated
|
|
90
90
|
end
|
|
91
91
|
|
|
92
92
|
setup_rack(app).call(env_with_params)
|
|
93
|
-
$captures.
|
|
93
|
+
expect($captures).to eq([:run])
|
|
94
94
|
end
|
|
95
95
|
end
|
|
96
96
|
end
|
data/spec/monban_spec.rb
CHANGED
|
@@ -9,7 +9,7 @@ describe 'Monban' do
|
|
|
9
9
|
it "provides a .test_mode!" do
|
|
10
10
|
Monban.test_mode!
|
|
11
11
|
expect(Monban.hash_token('password')).to eql('password')
|
|
12
|
-
expect(Monban.compare_token('password', 'password')).to
|
|
12
|
+
expect(Monban.compare_token('password', 'password')).to be_truthy
|
|
13
13
|
end
|
|
14
14
|
|
|
15
15
|
it "allows lookup with a field_map" do
|
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
class SessionsController < ApplicationController
|
|
2
|
-
respond_to :html
|
|
3
|
-
|
|
4
2
|
def new
|
|
5
3
|
end
|
|
6
4
|
|
|
@@ -22,7 +20,7 @@ class SessionsController < ApplicationController
|
|
|
22
20
|
private
|
|
23
21
|
|
|
24
22
|
def session_params
|
|
25
|
-
params
|
|
23
|
+
params.require(:session).permit(:email, :password)
|
|
26
24
|
end
|
|
27
25
|
end
|
|
28
26
|
|
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
class UsersController < ApplicationController
|
|
2
|
-
respond_to :html
|
|
3
|
-
|
|
4
2
|
def new
|
|
5
3
|
@user = User.new
|
|
6
4
|
end
|
|
@@ -19,7 +17,7 @@ class UsersController < ApplicationController
|
|
|
19
17
|
private
|
|
20
18
|
|
|
21
19
|
def user_params
|
|
22
|
-
params
|
|
20
|
+
params.require(:user).permit(:email, :password)
|
|
23
21
|
end
|
|
24
22
|
end
|
|
25
23
|
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: monban
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.2.
|
|
4
|
+
version: 0.2.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- halogenandtoast
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2015-
|
|
12
|
+
date: 2015-06-19 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: rails
|
|
@@ -145,6 +145,7 @@ extensions: []
|
|
|
145
145
|
extra_rdoc_files: []
|
|
146
146
|
files:
|
|
147
147
|
- ".gitignore"
|
|
148
|
+
- ".rspec"
|
|
148
149
|
- ".travis.yml"
|
|
149
150
|
- Gemfile
|
|
150
151
|
- Gemfile.lock
|
|
@@ -158,6 +159,7 @@ files:
|
|
|
158
159
|
- lib/monban/constraints/signed_in.rb
|
|
159
160
|
- lib/monban/constraints/signed_out.rb
|
|
160
161
|
- lib/monban/controller_helpers.rb
|
|
162
|
+
- lib/monban/failure_app.rb
|
|
161
163
|
- lib/monban/field_map.rb
|
|
162
164
|
- lib/monban/railtie.rb
|
|
163
165
|
- lib/monban/services.rb
|
|
@@ -174,6 +176,7 @@ files:
|
|
|
174
176
|
- monban.gemspec
|
|
175
177
|
- spec/features/user/user_signs_in_through_back_door_spec.rb
|
|
176
178
|
- spec/features/user/user_tries_to_access_constrained_routes_spec.rb
|
|
179
|
+
- spec/features/user/user_tries_to_access_http_auth_page_spec.rb
|
|
177
180
|
- spec/features/visitor/visitor_fails_to_sign_up_spec.rb
|
|
178
181
|
- spec/features/visitor/visitor_is_unauthorized_spec.rb
|
|
179
182
|
- spec/features/visitor/visitor_signs_in_via_invalid_form_spec.rb
|
|
@@ -197,6 +200,7 @@ files:
|
|
|
197
200
|
- spec/rails_app/app/assets/javascripts/application.js
|
|
198
201
|
- spec/rails_app/app/assets/stylesheets/application.css
|
|
199
202
|
- spec/rails_app/app/controllers/application_controller.rb
|
|
203
|
+
- spec/rails_app/app/controllers/basic_auth_controller.rb
|
|
200
204
|
- spec/rails_app/app/controllers/constrained_to_users_controller.rb
|
|
201
205
|
- spec/rails_app/app/controllers/constrained_to_visitors_controller.rb
|
|
202
206
|
- spec/rails_app/app/controllers/failures_controller.rb
|
|
@@ -250,13 +254,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
250
254
|
version: '0'
|
|
251
255
|
requirements: []
|
|
252
256
|
rubyforge_project:
|
|
253
|
-
rubygems_version: 2.
|
|
257
|
+
rubygems_version: 2.4.5
|
|
254
258
|
signing_key:
|
|
255
259
|
specification_version: 4
|
|
256
260
|
summary: Making rails authentication as simple as possible
|
|
257
261
|
test_files:
|
|
258
262
|
- spec/features/user/user_signs_in_through_back_door_spec.rb
|
|
259
263
|
- spec/features/user/user_tries_to_access_constrained_routes_spec.rb
|
|
264
|
+
- spec/features/user/user_tries_to_access_http_auth_page_spec.rb
|
|
260
265
|
- spec/features/visitor/visitor_fails_to_sign_up_spec.rb
|
|
261
266
|
- spec/features/visitor/visitor_is_unauthorized_spec.rb
|
|
262
267
|
- spec/features/visitor/visitor_signs_in_via_invalid_form_spec.rb
|
|
@@ -280,6 +285,7 @@ test_files:
|
|
|
280
285
|
- spec/rails_app/app/assets/javascripts/application.js
|
|
281
286
|
- spec/rails_app/app/assets/stylesheets/application.css
|
|
282
287
|
- spec/rails_app/app/controllers/application_controller.rb
|
|
288
|
+
- spec/rails_app/app/controllers/basic_auth_controller.rb
|
|
283
289
|
- spec/rails_app/app/controllers/constrained_to_users_controller.rb
|
|
284
290
|
- spec/rails_app/app/controllers/constrained_to_visitors_controller.rb
|
|
285
291
|
- spec/rails_app/app/controllers/failures_controller.rb
|