prx_auth-rails 0.3.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: aca25d4b6fa954267347e83a2f3565f88d6590130894f87813153cb89b7540af
4
- data.tar.gz: 3375fab69a09cce240744a2b6acb8a25ea08eca18640db3e47f2479f6c1038c9
3
+ metadata.gz: fb5677550d3e64273eddb57f84d6dc658d3f9ed82a2cb01e6966d9267ad76b53
4
+ data.tar.gz: d6f0ec6305622e5dbdaaf747e78678361d70d92410f84f77396db5d1254de4ec
5
5
  SHA512:
6
- metadata.gz: 249ed7915081dd4a1efe69b69bc631a3353c0536697306d8e4794512f2a79d55b788a0a8fc665f1b47048044122a591c961c898b7853d279c85a8722f015448b
7
- data.tar.gz: e00d920cbef8460ea423784aba18e002b2c150d78b87922960fae49ce0f5492c7ffb45e19f2cd4b1a4118f95029e63bfa22b036c81accb9c94102267d47cf1e9
6
+ metadata.gz: 720cfa888bbc17b9a677bc8c1944f8735db028a8196f1f170dd18b301c547687b52f466f1c1759f09820064a8317dc4d1499855a60c80a81ba4d2dd464df84aa
7
+ data.tar.gz: 151ffa59471a1c5c7543148c93f29e02ed67cbcc2d06551f9451d1599375962685bcf460179570a5ea363a237c1958dcadba8a9b234eaf73261f4fc124a879aa
data/.gitignore CHANGED
@@ -15,3 +15,5 @@ spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
+ .ruby-version
19
+ .DS_Store
@@ -0,0 +1,8 @@
1
+ guard :minitest, all_after_pass: true do
2
+ watch(%r{^test/(.*)\/?test_(.*)\.rb})
3
+ watch(%r{^lib/(.*/)?([^/]+)\.rb}) { |m| "test/#{m[1]}test_#{m[2]}.rb" }
4
+ watch(%r{^lib/(.+)\.rb}) { |m| "test/#{m[1]}_test.rb" }
5
+ watch(%r{^lib/(.+)\.rb}) { |m| "test/#{m[1]}_test.rb" }
6
+ watch(%r{^test/.+_test\.rb})
7
+ watch(%r{^test/test_helper\.rb}) { 'test' }
8
+ end
data/README.md CHANGED
@@ -14,7 +14,30 @@ And then execute:
14
14
 
15
15
  ## Usage
16
16
 
17
- That should be it, I think.
17
+ Installing the gem in a Rails project will automatically add the appropriate Rack middleware to your Rails application and add two methods to your controllers. These methods are:
18
+
19
+ * `prx_auth_token`: returns a token (similar to PrxAuth::Token) which automatically namespaces queries. The main methods you will be interested in are `authorized?`, `globally_authorized?` and `resources`. More information can be found in PrxAuth.
20
+
21
+ * `prx_authenticated?`: returns whether or not this request includes a valid PrxAuth token.
22
+
23
+ ### Configuration
24
+
25
+ Generally, configuration is not required and the gem aims for great defaults, but you can override some settings if you need to change the default behavior.
26
+
27
+ In your rails app, add a file to config/initializers called `prx_auth.rb`:
28
+
29
+ ```ruby
30
+ PrxAuth::Rails.configure do |config|
31
+
32
+ # enables automatic installation of token parser middleware
33
+ config.install_middleware = false # default: true
34
+
35
+ # automatically adds namespace to all scoped queries, e.g. .authorized?(:foo) will be treated
36
+ # as .authorized?(:my_great_ns, :foo). Has no impact on unscoped queries.
37
+ config.namespace = :my_great_ns # default: derived from Rails::Application name.
38
+ # e.g. class Feeder < Rails::Application => :feeder
39
+ end
40
+ ```
18
41
 
19
42
  ## Contributing
20
43
 
data/Rakefile CHANGED
@@ -1 +1,10 @@
1
- require "bundler/gem_tasks"
1
+ require 'bundler/gem_tasks'
2
+ require 'rake'
3
+ require 'rake/testtask'
4
+
5
+ Rake::TestTask.new do |t|
6
+ t.libs << 'test'
7
+ t.pattern = 'test/**/*test.rb'
8
+ end
9
+
10
+ task default: :test
@@ -1,10 +1,17 @@
1
1
  require "prx_auth/rails/version"
2
+ require "prx_auth/rails/configuration"
2
3
  require "prx_auth/rails/railtie" if defined?(Rails)
4
+
3
5
  module PrxAuth
4
6
  module Rails
5
7
  class << self
6
- attr_accessor :middleware
8
+ attr_accessor :configuration
9
+
10
+ def configure
11
+ yield configuration
12
+ end
7
13
  end
8
- self.middleware = true
14
+
15
+ self.configuration = Configuration.new
9
16
  end
10
17
  end
@@ -0,0 +1,17 @@
1
+ class PrxAuth::Rails::Configuration
2
+ attr_accessor :install_middleware, :namespace
3
+
4
+ def initialize
5
+ @install_middleware = true
6
+ if defined?(::Rails)
7
+ klass = ::Rails.application.class
8
+ klass_name = if klass.parent_name.present?
9
+ klass.parent_name
10
+ else
11
+ klass.name
12
+ end
13
+
14
+ @namespace = klass_name.underscore.intern
15
+ end
16
+ end
17
+ end
@@ -1,8 +1,14 @@
1
+ require 'prx_auth/rails/token'
2
+
1
3
  module PrxAuth
2
4
  module Rails
3
5
  module Controller
4
6
  def prx_auth_token
5
- request.env['prx.auth']
7
+ if !defined? @_prx_auth_token
8
+ @_prx_auth_token = request.env['prx.auth'] && PrxAuth::Rails::Token.new(request.env['prx.auth'])
9
+ else
10
+ @_prx_auth_token
11
+ end
6
12
  end
7
13
 
8
14
  def prx_authenticated?
@@ -9,7 +9,7 @@ module PrxAuth::Rails
9
9
  end
10
10
 
11
11
  initializer 'prx_auth.insert_middleware' do |app|
12
- if PrxAuth::Rails.middleware
12
+ if PrxAuth::Rails.configuration.install_middleware
13
13
  app.config.middleware.insert_after Rack::Head, Rack::PrxAuth
14
14
  end
15
15
  end
@@ -0,0 +1,31 @@
1
+ require 'rack/prx_auth'
2
+
3
+ class PrxAuth::Rails::Token
4
+ def initialize(token_data)
5
+ @token_data = token_data
6
+ @namespace = PrxAuth::Rails.configuration.namespace
7
+ end
8
+
9
+ def authorized?(resource, namespace=nil, scope=nil)
10
+ namespace, scope = @namespace, namespace if scope.nil? && !namespace.nil?
11
+ @token_data.authorized?(resource, namespace, scope)
12
+ end
13
+
14
+ def globally_authorized?(namespace, scope=nil)
15
+ namespace, scope = @namespace, namespace if scope.nil?
16
+ @token_data.globally_authorized?(namespace, scope)
17
+ end
18
+
19
+ def resources(namespace=nil, scope=nil)
20
+ namespace, scope = @namespace, namespace if scope.nil? && !namespace.nil?
21
+ @token_data.resources(namespace, scope)
22
+ end
23
+
24
+ def scopes
25
+ @token_data.scopes
26
+ end
27
+
28
+ def user_id
29
+ @token_data.user_id
30
+ end
31
+ end
@@ -1,5 +1,5 @@
1
1
  module PrxAuth
2
2
  module Rails
3
- VERSION = "0.3.0"
3
+ VERSION = "1.0.0"
4
4
  end
5
5
  end
@@ -22,8 +22,16 @@ Gem::Specification.new do |spec|
22
22
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
23
23
  spec.require_paths = ["lib"]
24
24
 
25
- spec.add_development_dependency "bundler"
26
- spec.add_development_dependency "rake"
25
+ spec.add_runtime_dependency 'actionpack'
27
26
 
28
- spec.add_runtime_dependency "rack-prx_auth", "~> 0.3.0"
27
+ spec.add_development_dependency 'bundler'
28
+ spec.add_development_dependency 'rake'
29
+ spec.add_development_dependency 'coveralls', '~> 0'
30
+ spec.add_development_dependency 'guard'
31
+ spec.add_development_dependency 'guard-minitest'
32
+ spec.add_development_dependency 'rails'
33
+
34
+
35
+
36
+ spec.add_runtime_dependency 'rack-prx_auth', "~> 1.0"
29
37
  end
File without changes
@@ -0,0 +1,30 @@
1
+ require 'test_helper'
2
+
3
+ describe PrxAuth::Rails::Configuration do
4
+
5
+ after(:each) { PrxAuth::Rails.configuration = PrxAuth::Rails::Configuration.new }
6
+ subject { PrxAuth::Rails::Configuration.new }
7
+
8
+ it 'initializes with a namespace defined by rails app name' do
9
+ assert subject.namespace == :test_app
10
+ end
11
+
12
+ it 'can be reconfigured using the namespace attr' do
13
+ PrxAuth::Rails.configure do |config|
14
+ config.namespace = :new_test
15
+ end
16
+
17
+ assert PrxAuth::Rails.configuration.namespace == :new_test
18
+ end
19
+
20
+ it 'defaults to enabling the middleware' do
21
+ assert PrxAuth::Rails.configuration.install_middleware
22
+ end
23
+
24
+ it 'allows overriding of the middleware automatic installation' do
25
+ PrxAuth::Rails.configure do |config|
26
+ config.install_middleware = false
27
+ end
28
+ assert !PrxAuth::Rails.configuration.install_middleware
29
+ end
30
+ end
@@ -0,0 +1,45 @@
1
+ require 'test_helper'
2
+
3
+ describe PrxAuth::Rails::Token do
4
+ let (:aur) { { "123" => "test_app:read other_namespace:write", "*" => "test_app:add" } }
5
+ let (:sub) { "123" }
6
+ let (:scope) { "one two three" }
7
+ let (:token_data) { Rack::PrxAuth::TokenData.new("aur" => aur, "scope" => scope, "sub" => sub)}
8
+ let (:mock_token_data) { Minitest::Mock.new(token_data) }
9
+ let (:token) { PrxAuth::Rails::Token.new(mock_token_data) }
10
+
11
+ it 'automatically namespaces requests' do
12
+ mock_token_data.expect(:authorized?, true, ["123", :test_app, :read])
13
+ assert token.authorized?("123", :read)
14
+
15
+ mock_token_data.expect(:resources, ["123"], [:test_app, :read])
16
+ assert token.resources(:read) === ['123']
17
+
18
+ mock_token_data.expect(:globally_authorized?, true, [:test_app, :add])
19
+ assert token.globally_authorized?(:add)
20
+
21
+ mock_token_data.verify
22
+ end
23
+
24
+ it 'allows unscoped calls to authorized?' do
25
+ assert token.authorized?("123")
26
+ end
27
+
28
+ it 'allows unscoped calls to resources' do
29
+ assert token.resources == [ "123" ]
30
+ end
31
+
32
+ it 'allows manual setting of namespace' do
33
+ assert token.authorized?("123", :other_namespace, :write)
34
+ assert !token.authorized?("123", :other_namespace, :read)
35
+
36
+ assert token.resources(:other_namespace, :write) == ["123"]
37
+ assert token.resources(:other_namespace, :read) == []
38
+
39
+ assert token.globally_authorized?(:add)
40
+ assert token.globally_authorized?(:test_app, :add)
41
+ assert !token.globally_authorized?(:other_namespace, :add)
42
+ end
43
+
44
+
45
+ end
@@ -0,0 +1,24 @@
1
+ require 'coveralls'
2
+ Coveralls.wear!
3
+
4
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
5
+
6
+ require 'minitest/autorun'
7
+ require 'minitest/spec'
8
+ require 'minitest/pride'
9
+ require 'action_pack'
10
+ require 'action_controller'
11
+ require 'action_view'
12
+ require 'rails'
13
+ require 'rails/generators'
14
+ require 'rails/generators/test_case'
15
+ # Bundler.require(:default)
16
+
17
+ class TestApp < Rails::Application
18
+ config.root = File.dirname(__FILE__)
19
+ config.eager_load = false
20
+ end
21
+
22
+ TestApp.initialize!
23
+
24
+ require 'prx_auth/rails'
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prx_auth-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Rhoden
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-04-03 00:00:00.000000000 Z
11
+ date: 2020-04-14 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: actionpack
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -38,20 +52,76 @@ dependencies:
38
52
  - - ">="
39
53
  - !ruby/object:Gem::Version
40
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: coveralls
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: guard
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: guard-minitest
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rails
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
41
111
  - !ruby/object:Gem::Dependency
42
112
  name: rack-prx_auth
43
113
  requirement: !ruby/object:Gem::Requirement
44
114
  requirements:
45
115
  - - "~>"
46
116
  - !ruby/object:Gem::Version
47
- version: 0.3.0
117
+ version: '1.0'
48
118
  type: :runtime
49
119
  prerelease: false
50
120
  version_requirements: !ruby/object:Gem::Requirement
51
121
  requirements:
52
122
  - - "~>"
53
123
  - !ruby/object:Gem::Version
54
- version: 0.3.0
124
+ version: '1.0'
55
125
  description: 'Rails integration for next generation PRX Authorization system.
56
126
 
57
127
  '
@@ -63,14 +133,21 @@ extra_rdoc_files: []
63
133
  files:
64
134
  - ".gitignore"
65
135
  - Gemfile
136
+ - Guardfile
66
137
  - LICENSE.txt
67
138
  - README.md
68
139
  - Rakefile
69
140
  - lib/prx_auth/rails.rb
141
+ - lib/prx_auth/rails/configuration.rb
70
142
  - lib/prx_auth/rails/ext/controller.rb
71
143
  - lib/prx_auth/rails/railtie.rb
144
+ - lib/prx_auth/rails/token.rb
72
145
  - lib/prx_auth/rails/version.rb
73
146
  - prx_auth-rails.gemspec
147
+ - test/log/development.log
148
+ - test/prx_auth/rails/configuration_test.rb
149
+ - test/prx_auth/rails/token_test.rb
150
+ - test/test_helper.rb
74
151
  homepage: https://github.com/PRX/prx_auth-rails
75
152
  licenses:
76
153
  - MIT
@@ -94,4 +171,8 @@ rubygems_version: 3.0.1
94
171
  signing_key:
95
172
  specification_version: 4
96
173
  summary: Rails integration for next generation PRX Authorization system.
97
- test_files: []
174
+ test_files:
175
+ - test/log/development.log
176
+ - test/prx_auth/rails/configuration_test.rb
177
+ - test/prx_auth/rails/token_test.rb
178
+ - test/test_helper.rb