authpwn_rails 0.18.0 → 0.18.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/VERSION +1 -1
- data/authpwn_rails.gemspec +4 -2
- data/lib/authpwn_rails/generators/all_generator.rb +2 -0
- data/lib/authpwn_rails/generators/templates/session/api_token.html.erb +5 -0
- data/lib/authpwn_rails/generators/templates/session_controller_test.rb +17 -0
- data/lib/authpwn_rails/routes.rb +2 -0
- data/lib/authpwn_rails/session_controller.rb +22 -3
- data/test/fixtures/bare_session/api_token.html.erb +5 -0
- data/test/routes_test.rb +2 -2
- data/test/session_controller_api_test.rb +51 -0
- metadata +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f95225e77bd6c767761b3cf3495ccb273201c74e
|
4
|
+
data.tar.gz: cd28df6a7be62f693e4f238d16678c47173d720f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fc668c5c618028caa5d320f2247161bf6d09a23b969b7f6aa04c2173d5877ea7e917e951c7a0511621cecf0b29d3aaa9c9f190e847c4ea7e67c4acd84c85f92f
|
7
|
+
data.tar.gz: 925a34ef07e886f44ee7b42ef2d829d35bc6e9212f29a283a1effcef70183036cef41bcc599241b9a4947f2cf2a2cbb1b5b960ea037a262dd2cccd1fd22fbaa7
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.18.
|
1
|
+
0.18.1
|
data/authpwn_rails.gemspec
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: authpwn_rails 0.18.
|
5
|
+
# stub: authpwn_rails 0.18.1 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "authpwn_rails"
|
9
|
-
s.version = "0.18.
|
9
|
+
s.version = "0.18.1"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib"]
|
@@ -57,6 +57,7 @@ Gem::Specification.new do |s|
|
|
57
57
|
"lib/authpwn_rails/generators/templates/initializer.rb",
|
58
58
|
"lib/authpwn_rails/generators/templates/omniauth_initializer.rb",
|
59
59
|
"lib/authpwn_rails/generators/templates/session.rb",
|
60
|
+
"lib/authpwn_rails/generators/templates/session/api_token.html.erb",
|
60
61
|
"lib/authpwn_rails/generators/templates/session/forbidden.html.erb",
|
61
62
|
"lib/authpwn_rails/generators/templates/session/home.html.erb",
|
62
63
|
"lib/authpwn_rails/generators/templates/session/new.html.erb",
|
@@ -94,6 +95,7 @@ Gem::Specification.new do |s|
|
|
94
95
|
"test/credentials/password_reset_token_test.rb",
|
95
96
|
"test/credentials/session_uid_token_test.rb",
|
96
97
|
"test/credentials/token_crendential_test.rb",
|
98
|
+
"test/fixtures/bare_session/api_token.html.erb",
|
97
99
|
"test/fixtures/bare_session/forbidden.html.erb",
|
98
100
|
"test/fixtures/bare_session/home.html.erb",
|
99
101
|
"test/fixtures/bare_session/new.html.erb",
|
@@ -32,6 +32,8 @@ class AllGenerator < Rails::Generators::Base
|
|
32
32
|
end
|
33
33
|
|
34
34
|
def create_session_views
|
35
|
+
copy_file File.join('session', 'api_token.html.erb'),
|
36
|
+
File.join('app', 'views', 'session', 'api_token.html.erb')
|
35
37
|
copy_file File.join('session', 'forbidden.html.erb'),
|
36
38
|
File.join('app', 'views', 'session', 'forbidden.html.erb')
|
37
39
|
copy_file File.join('session', 'home.html.erb'),
|
@@ -120,6 +120,23 @@ class SessionControllerTest < ActionController::TestCase
|
|
120
120
|
assert_redirected_to new_session_url
|
121
121
|
end
|
122
122
|
|
123
|
+
test "API token request" do
|
124
|
+
user = users(:john)
|
125
|
+
set_session_current_user user
|
126
|
+
get :api_token
|
127
|
+
|
128
|
+
assert_select 'span[class="api-token"]', credentials(:john_api_token).code
|
129
|
+
end
|
130
|
+
|
131
|
+
test "API token JSON request" do
|
132
|
+
user = users(:john)
|
133
|
+
set_session_current_user user
|
134
|
+
get :api_token, format: 'json'
|
135
|
+
|
136
|
+
assert_equal credentials(:john_api_token).code,
|
137
|
+
ActiveSupport::JSON.decode(response.body)['api_token']
|
138
|
+
end
|
139
|
+
|
123
140
|
test "OmniAuth failure" do
|
124
141
|
get :omniauth_failure
|
125
142
|
|
data/lib/authpwn_rails/routes.rb
CHANGED
@@ -37,6 +37,8 @@ module MapperMixin
|
|
37
37
|
post "/#{paths}", controller: controller, action: 'create'
|
38
38
|
delete "/#{paths}", controller: controller, action: 'destroy'
|
39
39
|
|
40
|
+
get "/#{paths}/api_token", controller: controller, action: 'api_token',
|
41
|
+
as: "api_token_#{methods}"
|
40
42
|
get "/#{paths}/change_password", controller: controller,
|
41
43
|
action: 'password_change',
|
42
44
|
as: "change_password_#{methods}"
|
@@ -90,6 +90,22 @@ module SessionController
|
|
90
90
|
end
|
91
91
|
end
|
92
92
|
|
93
|
+
# GET /api_token
|
94
|
+
def api_token
|
95
|
+
unless current_user
|
96
|
+
bounce_user
|
97
|
+
return
|
98
|
+
end
|
99
|
+
|
100
|
+
token = Tokens::Api.where(user_id: current_user.id).first ||
|
101
|
+
Tokens::Api.random_for(current_user)
|
102
|
+
@api_token = token.code
|
103
|
+
respond_to do |format|
|
104
|
+
format.html
|
105
|
+
format.json { render json: { api_token: @api_token } }
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
93
109
|
# POST /session/reset_password
|
94
110
|
def reset_password
|
95
111
|
email = params[:session] && params[:session][:email]
|
@@ -127,9 +143,12 @@ module SessionController
|
|
127
143
|
|
128
144
|
# GET /session/token/token-code
|
129
145
|
def token
|
130
|
-
# NOTE:
|
131
|
-
#
|
132
|
-
|
146
|
+
# NOTE: We don't use Tokens::Base here because we don't want users to abuse
|
147
|
+
# API tokens to build permanent login links.
|
148
|
+
#
|
149
|
+
# This repeats the code in Token::Base.authenticate, because we need the
|
150
|
+
# token.
|
151
|
+
if token = Tokens::OneTime.with_code(params[:code]).first
|
133
152
|
auth = token.authenticate
|
134
153
|
else
|
135
154
|
auth = :invalid
|
data/test/routes_test.rb
CHANGED
@@ -15,8 +15,8 @@ class RoutesTest < ActionController::TestCase
|
|
15
15
|
{controller: 'session', action: 'create'})
|
16
16
|
assert_routing({path: '/session', method: :delete},
|
17
17
|
{controller: 'session', action: 'destroy'})
|
18
|
-
assert_routing({path: '/session', method: :
|
19
|
-
{controller: 'session', action: '
|
18
|
+
assert_routing({path: '/session/api_token', method: :get},
|
19
|
+
{controller: 'session', action: 'api_token'})
|
20
20
|
assert_routing({path: '/session/change_password', method: :get},
|
21
21
|
{controller: 'session', action: 'password_change'})
|
22
22
|
assert_routing({path: '/session/change_password', method: :post},
|
@@ -399,6 +399,57 @@ class SessionControllerApiTest < ActionController::TestCase
|
|
399
399
|
assert_nil assigns(:current_user)
|
400
400
|
end
|
401
401
|
|
402
|
+
test "api_token request" do
|
403
|
+
user = users(:john)
|
404
|
+
set_session_current_user user
|
405
|
+
get :api_token
|
406
|
+
assert_response :ok
|
407
|
+
assert_select 'span[class="api-token"]', credentials(:john_api_token).code
|
408
|
+
end
|
409
|
+
|
410
|
+
test "api_token request from user without token" do
|
411
|
+
set_session_current_user @user
|
412
|
+
assert_difference 'Tokens::Api.count', 1 do
|
413
|
+
get :api_token
|
414
|
+
end
|
415
|
+
assert_response :ok
|
416
|
+
token = @user.credentials.where(type: 'Tokens::Api').first
|
417
|
+
assert_select 'span[class="api-token"]', token.code
|
418
|
+
end
|
419
|
+
|
420
|
+
test "api_token request without logged in user" do
|
421
|
+
get :api_token
|
422
|
+
assert_response :forbidden
|
423
|
+
end
|
424
|
+
|
425
|
+
test "api_token JSON request" do
|
426
|
+
user = users(:john)
|
427
|
+
set_session_current_user user
|
428
|
+
get :api_token, format: 'json'
|
429
|
+
|
430
|
+
data = ActiveSupport::JSON.decode response.body
|
431
|
+
assert_equal credentials(:john_api_token).code, data['api_token']
|
432
|
+
end
|
433
|
+
|
434
|
+
test "api_token JSON request from user without token" do
|
435
|
+
set_session_current_user @user
|
436
|
+
assert_difference 'Tokens::Api.count', 1 do
|
437
|
+
get :api_token, format: 'json'
|
438
|
+
end
|
439
|
+
token = @user.credentials.where(type: 'Tokens::Api').first
|
440
|
+
|
441
|
+
data = ActiveSupport::JSON.decode response.body
|
442
|
+
assert_equal token.code, data['api_token']
|
443
|
+
end
|
444
|
+
|
445
|
+
test "api_token JSON request without logged in user" do
|
446
|
+
get :api_token, format: 'json'
|
447
|
+
assert_response :ok
|
448
|
+
|
449
|
+
data = ActiveSupport::JSON.decode response.body
|
450
|
+
assert_equal 'Please sign in', data['error']
|
451
|
+
end
|
452
|
+
|
402
453
|
test "password_change bounces without logged in user" do
|
403
454
|
get :password_change
|
404
455
|
assert_response :forbidden
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: authpwn_rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.18.
|
4
|
+
version: 0.18.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Victor Costan
|
@@ -224,6 +224,7 @@ files:
|
|
224
224
|
- lib/authpwn_rails/generators/templates/initializer.rb
|
225
225
|
- lib/authpwn_rails/generators/templates/omniauth_initializer.rb
|
226
226
|
- lib/authpwn_rails/generators/templates/session.rb
|
227
|
+
- lib/authpwn_rails/generators/templates/session/api_token.html.erb
|
227
228
|
- lib/authpwn_rails/generators/templates/session/forbidden.html.erb
|
228
229
|
- lib/authpwn_rails/generators/templates/session/home.html.erb
|
229
230
|
- lib/authpwn_rails/generators/templates/session/new.html.erb
|
@@ -261,6 +262,7 @@ files:
|
|
261
262
|
- test/credentials/password_reset_token_test.rb
|
262
263
|
- test/credentials/session_uid_token_test.rb
|
263
264
|
- test/credentials/token_crendential_test.rb
|
265
|
+
- test/fixtures/bare_session/api_token.html.erb
|
264
266
|
- test/fixtures/bare_session/forbidden.html.erb
|
265
267
|
- test/fixtures/bare_session/home.html.erb
|
266
268
|
- test/fixtures/bare_session/new.html.erb
|