prx_auth-rails 0.0.4 → 1.2.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: bf4706b9a841536e62b064cf2bff4f06961020f3
4
- data.tar.gz: ce59d3ffd05b67fec4a7e1d85db16d409ca282f7
2
+ SHA256:
3
+ metadata.gz: 5204c5e69c74ec1fa4d6acf36b64c62700ba72d5308a020deee0526ff4dd5499
4
+ data.tar.gz: c5bbf5402868c36ba3e2c011eb4eb906d895e3b5237975a329099047f39a8cb3
5
5
  SHA512:
6
- metadata.gz: 0899ffc17c75782572566116c4850773bd006687da304a62fc7bc3ad8b5a2beb75f17266f1d11936fee30a80fc27a1872dbe14a0b7705105b34c2f3a7ea2ca45
7
- data.tar.gz: 63f557362cb111150061fedeebe9f3f3bb8f46f6ae3bd96b90610de32ef75020f9fa6d14148b631720d4dcc7062a44783edfa114496cf677920ffc7416b491aa
6
+ metadata.gz: 0d3c3f2ba128a55921138c56e1c052ef6dfd030f720886daa5b77d831545ae9c093ac6c19cbc9887c41b17003142fe2c6eedbf18f6a102ce5e08ec7179556b49
7
+ data.tar.gz: cedc895cbe9b69bd7f87c365c7a0bf606236291e7572a7da5395c110612adf1e4164e40ed02e1f00517ee89da3e7c26563329b82bdb7026db4b563c113758fcf
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,8 +9,8 @@ module PrxAuth::Rails
9
9
  end
10
10
 
11
11
  initializer 'prx_auth.insert_middleware' do |app|
12
- if PrxAuth::Rails.middleware
13
- app.config.middleware.insert ActionDispatch::ParamsParser, Rack::PrxAuth
12
+ if PrxAuth::Rails.configuration.install_middleware
13
+ app.config.middleware.insert_after Rack::Head, Rack::PrxAuth
14
14
  end
15
15
  end
16
16
  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.0.4"
3
+ VERSION = "1.2.0"
4
4
  end
5
5
  end
@@ -15,13 +15,23 @@ Gem::Specification.new do |spec|
15
15
  spec.homepage = "https://github.com/PRX/prx_auth-rails"
16
16
  spec.license = "MIT"
17
17
 
18
+ spec.required_ruby_version = '>= 2.3'
19
+
18
20
  spec.files = `git ls-files`.split($/)
19
21
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
20
22
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
21
23
  spec.require_paths = ["lib"]
22
24
 
23
- spec.add_development_dependency "bundler", "~> 1.3"
24
- spec.add_development_dependency "rake"
25
+ spec.add_runtime_dependency 'actionpack'
26
+
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
+
25
35
 
26
- spec.add_runtime_dependency "rack-prx_auth", "~> 0.0.6"
36
+ spec.add_runtime_dependency 'prx_auth', "~> 1.2"
27
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,75 +1,153 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prx_auth-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 1.2.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: 2015-04-22 00:00:00.000000000 Z
11
+ date: 2020-08-10 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
16
30
  requirements:
17
- - - ~>
31
+ - - ">="
18
32
  - !ruby/object:Gem::Version
19
- version: '1.3'
33
+ version: '0'
20
34
  type: :development
21
35
  prerelease: false
22
36
  version_requirements: !ruby/object:Gem::Requirement
23
37
  requirements:
24
- - - ~>
38
+ - - ">="
25
39
  - !ruby/object:Gem::Version
26
- version: '1.3'
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rake
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
- - - '>='
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
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
+ - - ">="
32
74
  - !ruby/object:Gem::Version
33
75
  version: '0'
34
76
  type: :development
35
77
  prerelease: false
36
78
  version_requirements: !ruby/object:Gem::Requirement
37
79
  requirements:
38
- - - '>='
80
+ - - ">="
39
81
  - !ruby/object:Gem::Version
40
82
  version: '0'
41
83
  - !ruby/object:Gem::Dependency
42
- name: rack-prx_auth
84
+ name: guard-minitest
43
85
  requirement: !ruby/object:Gem::Requirement
44
86
  requirements:
45
- - - ~>
87
+ - - ">="
46
88
  - !ruby/object:Gem::Version
47
- version: 0.0.6
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'
111
+ - !ruby/object:Gem::Dependency
112
+ name: prx_auth
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '1.2'
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.0.6
55
- description: |
56
- Rails integration for next generation PRX Authorization system.
124
+ version: '1.2'
125
+ description: 'Rails integration for next generation PRX Authorization system.
126
+
127
+ '
57
128
  email:
58
129
  - carhoden@gmail.com
59
130
  executables: []
60
131
  extensions: []
61
132
  extra_rdoc_files: []
62
133
  files:
63
- - .gitignore
134
+ - ".gitignore"
64
135
  - Gemfile
136
+ - Guardfile
65
137
  - LICENSE.txt
66
138
  - README.md
67
139
  - Rakefile
68
140
  - lib/prx_auth/rails.rb
141
+ - lib/prx_auth/rails/configuration.rb
69
142
  - lib/prx_auth/rails/ext/controller.rb
70
143
  - lib/prx_auth/rails/railtie.rb
144
+ - lib/prx_auth/rails/token.rb
71
145
  - lib/prx_auth/rails/version.rb
72
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
73
151
  homepage: https://github.com/PRX/prx_auth-rails
74
152
  licenses:
75
153
  - MIT
@@ -80,18 +158,21 @@ require_paths:
80
158
  - lib
81
159
  required_ruby_version: !ruby/object:Gem::Requirement
82
160
  requirements:
83
- - - '>='
161
+ - - ">="
84
162
  - !ruby/object:Gem::Version
85
- version: '0'
163
+ version: '2.3'
86
164
  required_rubygems_version: !ruby/object:Gem::Requirement
87
165
  requirements:
88
- - - '>='
166
+ - - ">="
89
167
  - !ruby/object:Gem::Version
90
168
  version: '0'
91
169
  requirements: []
92
- rubyforge_project:
93
- rubygems_version: 2.1.11
170
+ 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