f4w-rack 0.1.0 → 0.2.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
  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