f4w-rack 0.1.0 → 0.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
2
  SHA1:
3
- metadata.gz: 8ad35b1fc323072c8c9bf4c6d239ede885a90d59
4
- data.tar.gz: 177811be343d378b03bf1922e61f69888127143a
3
+ metadata.gz: 2e26ce490c8f1a9a9b3a9445998b5e0d78dcb96c
4
+ data.tar.gz: 24b76f9dfb3c2881ccdb16a74fef83a9bf248032
5
5
  SHA512:
6
- metadata.gz: 768f3cea3eff162ca162295e2e52d799c1e7d87789b84cef0fd4297f50ce8d973db3ed4ea744522fb3a65f300679fff3bc151fd3be3e0c1607e6d5a016a85b52
7
- data.tar.gz: e83f6f3501d3ee52cbcab1b92c2125c89ed36a792a1f45e0835e1155132161dd667edf6c5710a0cd00c38e2879b3cfa631234325cac577530b64c50173b2ae49
6
+ metadata.gz: d38398bdee034c8354f3adc468150d4e442a21b3d919017e4c1917d2f40bb43edbc0f7bad702157174a8a0788dee47c97e5e9461e85ccb629200d7bd198e2f89
7
+ data.tar.gz: 77c05003f2933bea65ff5c0bd69ad8c6fec5d40eee8ff2cdb25428702c6bc0f2b59ee84454ff389c173cd9484daf2efde5080afa267bfdd9b11f491921e5a94e
@@ -0,0 +1,28 @@
1
+ services: []
2
+
3
+ test_ruby_2.2:
4
+ stage: test
5
+ variables:
6
+ LC_ALL: C.UTF-8
7
+ image: ruby:2.2
8
+ script:
9
+ - bundle install
10
+ - bundle exec rake test
11
+
12
+ test_ruby_2.3:
13
+ stage: test
14
+ variables:
15
+ LC_ALL: C.UTF-8
16
+ image: ruby:2.3
17
+ script:
18
+ - bundle install
19
+ - bundle exec rake test
20
+
21
+ rubocop:
22
+ stage: test
23
+ variables:
24
+ LC_ALL: C.UTF-8
25
+ image: ruby:2.2
26
+ script:
27
+ - bundle install
28
+ - bundle exec rubocop -f s
@@ -0,0 +1,25 @@
1
+ inherit_from: .rubocop_todo.yml
2
+
3
+ AllCops:
4
+ DisplayStyleGuide: true
5
+ DisplayCopNames: true
6
+ DefaultFormatter: fuubar
7
+
8
+ Metrics/BlockLength:
9
+ Exclude:
10
+ - 'test/**/*'
11
+
12
+ # Metrics/MethodLength:
13
+ # Max: 20
14
+
15
+ # Documentation:
16
+ # Enabled: false
17
+ # # Exclude:
18
+ # # - 'app/controllers/**/*'
19
+
20
+ # BlockLength:
21
+ # Exclude:
22
+ # - 'app/**/concerns/**/*'
23
+ # - 'app/controllers/apidocs_controller.rb'
24
+ # - 'app/models/docs/**/*'
25
+
@@ -0,0 +1,58 @@
1
+ # This configuration was generated by
2
+ # `rubocop --auto-gen-config`
3
+ # on 2016-12-15 15:56:28 +0100 using RuboCop version 0.46.0.
4
+ # The point is for the user to remove these configuration records
5
+ # one by one as the offenses are removed from the code base.
6
+ # Note that changes in the inspected code, or installation of new
7
+ # versions of RuboCop, may require this file to be generated again.
8
+
9
+ # Offense count: 1
10
+ Lint/IneffectiveAccessModifier:
11
+ Exclude:
12
+ - 'lib/f4w/logging/entry.rb'
13
+
14
+ # Offense count: 1
15
+ Lint/RescueException:
16
+ Exclude:
17
+ - 'lib/f4w/rack/logger.rb'
18
+
19
+ # Offense count: 1
20
+ # Configuration parameters: ContextCreatingMethods.
21
+ Lint/UselessAccessModifier:
22
+ Exclude:
23
+ - 'lib/f4w/logging/entry.rb'
24
+
25
+ # Offense count: 1
26
+ Metrics/AbcSize:
27
+ Max: 18
28
+
29
+ # Offense count: 5
30
+ # Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
31
+ # URISchemes: http, https
32
+ Metrics/LineLength:
33
+ Max: 132
34
+
35
+ # Offense count: 1
36
+ # Configuration parameters: CountComments.
37
+ Metrics/MethodLength:
38
+ Max: 14
39
+
40
+ # Offense count: 1
41
+ # Configuration parameters: CountKeywordArgs.
42
+ Metrics/ParameterLists:
43
+ Max: 6
44
+
45
+ # Offense count: 4
46
+ Style/Documentation:
47
+ Exclude:
48
+ - 'spec/**/*'
49
+ - 'test/**/*'
50
+ - 'lib/f4w/logging/app_data.rb'
51
+ - 'lib/f4w/logging/entry.rb'
52
+ - 'lib/f4w/rack.rb'
53
+ - 'lib/f4w/rack/logger.rb'
54
+
55
+ # Offense count: 1
56
+ Style/StructInheritance:
57
+ Exclude:
58
+ - 'lib/f4w/logging/error_data.rb'
@@ -0,0 +1,19 @@
1
+ # F4W Rack middlewares #
2
+
3
+ ## [Unreleased] ##
4
+
5
+ ## [0.2.0] - 2016-12-30 ##
6
+ Added
7
+ - testing & linting
8
+ - dry-initiliazer
9
+ - OAuth2 mock middleware for testing purpose
10
+
11
+ ## 0.1.0 - 2016-11-15 ##
12
+
13
+ ### Added ###
14
+ - OAuth2 checking middleware
15
+ - Logging middleware
16
+
17
+
18
+ [Unreleased]: https://gitlab.com/unifi-f4w/f4w-rack/compare/0.1.0...develop
19
+ [0.2.0]: https://gitlab.com/unifi-f4w/f4w-rack/compare/0.2.0...0.1.0
data/Rakefile CHANGED
@@ -1,6 +1,11 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
1
+ require 'bundler/gem_tasks'
2
+ require 'rake/testtask'
3
3
 
4
- RSpec::Core::RakeTask.new(:spec)
4
+ Rake::TestTask.new(:test) do |t|
5
+ t.options = '-v'
6
+ t.libs << 'test'
7
+ t.libs << 'lib'
8
+ t.test_files = FileList['test/**/*_test.rb'] + FileList['test/**/spec_*.rb']
9
+ end
5
10
 
6
- task :default => :spec
11
+ task default: :test
@@ -1,14 +1,12 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require "bundler/setup"
4
- require "f4w/rack"
3
+ require 'bundler/setup'
4
+ require 'f4w/rack'
5
5
 
6
6
  # You can add fixtures and/or initialization code here to make experimenting
7
7
  # with your gem easier. You can also use a different console, if you like.
8
+ require 'f4w/rack/oauth2'
8
9
 
9
10
  # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
11
- # Pry.start
12
-
13
- require "irb"
14
- IRB.start
11
+ require 'pry'
12
+ Pry.start
@@ -4,26 +4,31 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require 'f4w/rack/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
- spec.name = "f4w-rack"
7
+ spec.name = 'f4w-rack'
8
8
  spec.version = F4w::Rack::VERSION
9
- spec.authors = ["Alessio Caiazza"]
10
- spec.email = ["nolith@abisso.org"]
9
+ spec.authors = ['Alessio Caiazza']
10
+ spec.email = ['nolith@abisso.org']
11
11
 
12
- spec.summary = %q{A collection of rack middleware}
13
- spec.description = %q{A collection of rack middleware related to FACTS4WORKERS EU project}
14
- spec.homepage = "https://gitlab.com/unifi-f4w/f4w-rack"
12
+ spec.summary = 'A collection of rack middleware'
13
+ spec.description = 'A collection of rack middleware related to FACTS4WORKERS EU project'
14
+ spec.homepage = 'https://gitlab.com/unifi-f4w/f4w-rack'
15
15
 
16
16
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
17
17
  f.match(%r{^(test|spec|features)/})
18
18
  end
19
- spec.bindir = "exe"
19
+ spec.bindir = 'exe'
20
20
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
- spec.require_paths = ["lib"]
21
+ spec.require_paths = ['lib']
22
22
 
23
- spec.add_dependency "rack", ">= 1.6.4"
24
- spec.add_dependency "oauth2-checker", "~> 0.2.0"
23
+ spec.add_dependency 'rack', '>= 1.6.4'
24
+ spec.add_dependency 'oauth2-checker', '~> 0.2.0'
25
+ spec.add_dependency 'dry-initializer', '~> 0.10.0'
25
26
 
26
- spec.add_development_dependency "bundler", "~> 1.13"
27
- spec.add_development_dependency "rake", "~> 10.0"
28
- spec.add_development_dependency "rspec", "~> 3.0"
27
+ spec.add_development_dependency 'pry'
28
+ spec.add_development_dependency 'bundler', '~> 1.13'
29
+ spec.add_development_dependency 'rake', '~> 10.0'
30
+ spec.add_development_dependency 'minitest', '~> 5.0'
31
+ spec.add_development_dependency 'minitest-rg', '~> 5.2.0'
32
+ spec.add_development_dependency 'simplecov', '~> 0.12.0'
33
+ spec.add_development_dependency 'rubocop', '~> 0.46.0'
29
34
  end
@@ -3,13 +3,13 @@ module F4w
3
3
  class AppData
4
4
  attr_accessor :data
5
5
 
6
- def initialize(data={})
6
+ def initialize(data = {})
7
7
  @data = data
8
8
  end
9
9
 
10
- def as_json(options = nil)
10
+ def as_json(_options = nil)
11
11
  { 'appData' => @data.to_json }
12
12
  end
13
13
  end
14
14
  end
15
- end
15
+ end
@@ -24,11 +24,11 @@ module F4w
24
24
  @invocation_zoned_date_time = DateTime.now.iso8601(3)
25
25
  end
26
26
 
27
- def as_json(options=nil)
27
+ def as_json(options = nil)
28
28
  json = {
29
- 'invocationZonedDateTime' => @invocation_zoned_date_time,
30
- 'serviceURI' => @service_uri,
31
- 'tyepeOfCall' => @type_of_call
29
+ 'invocationZonedDateTime' => @invocation_zoned_date_time,
30
+ 'serviceURI' => @service_uri,
31
+ 'tyepeOfCall' => @type_of_call
32
32
  }
33
33
 
34
34
  json['appDataLogRecord'] = @app_data_log_record.as_json(options) unless @app_data_log_record.nil?
@@ -56,12 +56,10 @@ module F4w
56
56
 
57
57
  private
58
58
 
59
- def self.log_request(uri, type, user_id, data = nil, error_context=nil, error_message=nil)
59
+ def self.log_request(uri, type, user_id, data = nil, error_context = nil, error_message = nil)
60
60
  error = if !error_context.nil? && !error_message.nil?
61
- ErrorData.new(error_context, error_message)
62
- else
63
- nil
64
- end
61
+ ErrorData.new(error_context, error_message)
62
+ end
65
63
  new(uri, type, user_id, data.nil? ? nil : AppData.new(data), error)
66
64
  end
67
65
  end
@@ -3,4 +3,4 @@ module F4w
3
3
  class ErrorData < Struct.new(:context, :message)
4
4
  end
5
5
  end
6
- end
6
+ end
@@ -1,4 +1,4 @@
1
- require "f4w/rack/version"
1
+ require 'f4w/rack/version'
2
2
 
3
3
  module F4w
4
4
  module Rack
@@ -0,0 +1,6 @@
1
+ require 'f4w/rack'
2
+ require 'f4w/rack/logger'
3
+ require 'f4w/rack/oauth2'
4
+ require 'f4w/logging/app_data'
5
+ require 'f4w/logging/entry'
6
+ require 'f4w/logging/error_data'
@@ -10,7 +10,7 @@ module F4w
10
10
 
11
11
  def call(env)
12
12
  req = ::Rack::Request.new(env)
13
- requested_uri = req.url()
13
+ requested_uri = req.url
14
14
  user_id = env['rack.oauth2.resource_owner']
15
15
  data = app_data(env)
16
16
  puts F4w::Logging::Entry.request_start(requested_uri, user_id, data)
@@ -29,9 +29,8 @@ module F4w
29
29
  private
30
30
 
31
31
  def app_data(env)
32
- env.dup.delete_if { |key,_| !(key =~/^HTTP_/) || key == 'HTTP_COOKIE' }
32
+ env.dup.delete_if { |key, _| !(key =~ /^HTTP_/) || key == 'HTTP_COOKIE' }
33
33
  end
34
-
35
34
  end
36
35
  end
37
36
  end
@@ -0,0 +1,35 @@
1
+ require 'dry-initializer'
2
+ require 'rack/request'
3
+
4
+ module F4w
5
+ module Rack
6
+ # A Mock that behaves like <tt>F4w::Rack::Oauth2</tt>
7
+ class MockOauth2
8
+ include Dry::Initializer.define -> do # rubocop:disable Style/Lambda
9
+ param :app
10
+ param :token_validator,
11
+ default: proc { ->(_token) { [true, 'mock_owner'] } }
12
+ end
13
+
14
+ def call(env)
15
+ req = ::Rack::Request.new(env)
16
+ if req.params['access_token']
17
+ validate_token(req, env)
18
+ else
19
+ env['rack.oauth2.valid_token'] = false
20
+ end
21
+
22
+ @app.call(env)
23
+ end
24
+
25
+ private
26
+
27
+ def validate_token(request, env)
28
+ valid, resource_owner = @token_validator
29
+ .call(request.params['access_token'])
30
+ env['rack.oauth2.valid_token'] = valid
31
+ env['rack.oauth2.resource_owner'] = resource_owner
32
+ end
33
+ end
34
+ end
35
+ end
@@ -1,24 +1,22 @@
1
+ require 'dry-initializer'
1
2
  require 'rack/request'
2
3
  require 'oauth2/checker'
3
4
 
4
5
  module F4w
5
6
  module Rack
7
+ # Validates oauth token
6
8
  class Oauth2
7
- def initialize(app, client_id, client_secret, options={})
8
- @app = app
9
- @client_id = client_id
10
- @client_secret = client_secret
11
- @options = options
9
+ include Dry::Initializer.define -> do # rubocop:disable Style/Lambda
10
+ param :app
11
+ param :client_id
12
+ param :client_secret
13
+ param :options
12
14
  end
13
15
 
14
16
  def call(env)
15
17
  req = ::Rack::Request.new(env)
16
18
  if req.params['access_token']
17
- req.logger.debug('getting Oauth2 resource_owner') unless req.logger.nil?
18
- valid, resource_owner = oauth2_checker.validate(req.params['access_token'])
19
- env['rack.oauth2.valid_token'] = valid
20
- env['rack.oauth2.resource_owner'] = resource_owner
21
- req.logger.debug("resource_owner: #{resource_owner}") unless req.logger.nil?
19
+ validate_token(req, env)
22
20
  else
23
21
  env['rack.oauth2.valid_token'] = false
24
22
  end
@@ -29,9 +27,19 @@ module F4w
29
27
  private
30
28
 
31
29
  def oauth2_checker
32
- ::OAuth2::Checker.new(@client_id,@client_secret,@options)
30
+ ::OAuth2::Checker.new(@client_id, @client_secret, @options)
33
31
  end
34
32
 
33
+ def validate_token(request, env)
34
+ logger = request.logger || ::Logger.new($stdout)
35
+
36
+ logger.debug('getting Oauth2 resource_owner')
37
+ valid, resource_owner = oauth2_checker
38
+ .validate(request.params['access_token'])
39
+ env['rack.oauth2.valid_token'] = valid
40
+ env['rack.oauth2.resource_owner'] = resource_owner
41
+ logger.debug("resource_owner: #{resource_owner}")
42
+ end
35
43
  end
36
44
  end
37
45
  end
@@ -1,5 +1,5 @@
1
1
  module F4w
2
2
  module Rack
3
- VERSION = "0.1.0"
3
+ VERSION = '0.2.0'.freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: f4w-rack
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alessio Caiazza
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-11-15 00:00:00.000000000 Z
11
+ date: 2016-12-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -38,6 +38,34 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: 0.2.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: dry-initializer
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 0.10.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 0.10.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry
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'
41
69
  - !ruby/object:Gem::Dependency
42
70
  name: bundler
43
71
  requirement: !ruby/object:Gem::Requirement
@@ -67,19 +95,61 @@ dependencies:
67
95
  - !ruby/object:Gem::Version
68
96
  version: '10.0'
69
97
  - !ruby/object:Gem::Dependency
70
- name: rspec
98
+ name: minitest
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '5.0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '5.0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: minitest-rg
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: 5.2.0
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: 5.2.0
125
+ - !ruby/object:Gem::Dependency
126
+ name: simplecov
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: 0.12.0
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: 0.12.0
139
+ - !ruby/object:Gem::Dependency
140
+ name: rubocop
71
141
  requirement: !ruby/object:Gem::Requirement
72
142
  requirements:
73
143
  - - "~>"
74
144
  - !ruby/object:Gem::Version
75
- version: '3.0'
145
+ version: 0.46.0
76
146
  type: :development
77
147
  prerelease: false
78
148
  version_requirements: !ruby/object:Gem::Requirement
79
149
  requirements:
80
150
  - - "~>"
81
151
  - !ruby/object:Gem::Version
82
- version: '3.0'
152
+ version: 0.46.0
83
153
  description: A collection of rack middleware related to FACTS4WORKERS EU project
84
154
  email:
85
155
  - nolith@abisso.org
@@ -88,8 +158,12 @@ extensions: []
88
158
  extra_rdoc_files: []
89
159
  files:
90
160
  - ".gitignore"
161
+ - ".gitlab-ci.yml"
91
162
  - ".rspec"
163
+ - ".rubocop.yml"
164
+ - ".rubocop_todo.yml"
92
165
  - ".travis.yml"
166
+ - CHANGELOG.md
93
167
  - Gemfile
94
168
  - README.md
95
169
  - Rakefile
@@ -100,7 +174,9 @@ files:
100
174
  - lib/f4w/logging/entry.rb
101
175
  - lib/f4w/logging/error_data.rb
102
176
  - lib/f4w/rack.rb
177
+ - lib/f4w/rack/all.rb
103
178
  - lib/f4w/rack/logger.rb
179
+ - lib/f4w/rack/mock_oauth2.rb
104
180
  - lib/f4w/rack/oauth2.rb
105
181
  - lib/f4w/rack/version.rb
106
182
  homepage: https://gitlab.com/unifi-f4w/f4w-rack