faraday_middleware-escher 0.0.0 → 0.1.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: 5b85b5e51b037018eae7c305f3b31144d766c886
4
- data.tar.gz: 7f2182218b4e33a395a6f986ac8fa9952bd747e8
3
+ metadata.gz: 93e28632c2c22aaa0ab477dbda353b69696d2fb3
4
+ data.tar.gz: 4712f9d091691aa0b820358acb2db74a4f5c6733
5
5
  SHA512:
6
- metadata.gz: 438750ce6f8d5539aa5fb2068eea32113eeecb72edea4e3e0e32dbfcdc4ff2c13853d7ac2398bbcfcc5133f2b8ddd0cf202c31f27208d09b37d44f351ff4656c
7
- data.tar.gz: a240c1496a125b90b9749ab3f5dd6b4dd02c87972f1cf4c5b7926850b80d95f249325509c92debae661cba98c35ed63e002dbe04226f9b2694d8b85085b5daa2
6
+ metadata.gz: 7e0c93b74c6ff5de92c5bfef6aedb253ec62f138753d9a05cba5965c0e771f204f9f39c8d8e1a2ddf7c2bdf5385b5cceb5837258092ab96719c8dd7a609f42b5
7
+ data.tar.gz: d3ca6593d986eea89548bd44e7b8d6957308ffe54241e69e82832a8a595f5557995fd7c09bdba5ced369d0a805250bfcd60317f94ac8c1046bbdf4e58f177fb2
data/README.md CHANGED
@@ -18,6 +18,26 @@ Or install it yourself as:
18
18
 
19
19
  ## Usage
20
20
 
21
+ ### for sign requests
22
+
23
+ The FaradayMiddleware::Escher::RequestSigner will help you sign your requests before sending them
24
+
25
+ ```ruby
26
+
27
+
28
+ require 'faraday_middleware/escher'
29
+ conn = Faraday.new do |builder|
30
+
31
+ builder.use FaradayMiddleware::Escher::RequestSigner, credential_scope: 'example/credential/scope' do
32
+ {api_key_id: 'EscherExample', api_secret: 'TheBeginningOfABeautifulFriendship'}
33
+ end
34
+
35
+ builder.adapter :net_http
36
+
37
+ end
38
+
39
+ ```
40
+
21
41
  TODO: Write usage instructions here
22
42
 
23
43
  ## Contributing
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
@@ -1,13 +1,10 @@
1
1
  # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
3
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'faraday_middleware/escher/version'
5
-
6
2
  Gem::Specification.new do |spec|
7
- spec.name = "faraday_middleware-escher"
8
- spec.version = FaradayMiddleware::Escher::VERSION
9
- spec.authors = ["Adam Luzsi"]
10
- spec.email = ["adamluzsi@gmail.com"]
3
+
4
+ spec.name = 'faraday_middleware-escher'
5
+ spec.version = File.read(File.join(File.dirname(__FILE__),'VERSION')).split("\n")[0].chomp
6
+ spec.authors = ['Adam Luzsi']
7
+ spec.email = ['adamluzsi@gmail.com']
11
8
  spec.summary = %q{escher sign and validation for faraday http rest client}
12
9
  spec.description = %q{WIP!!! escher sign and validation for faraday http rest client}
13
10
  spec.homepage = 'https://github.com/adamluzsi/faraday_middleware-escher'
@@ -18,6 +15,14 @@ Gem::Specification.new do |spec|
18
15
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
16
  spec.require_paths = ["lib"]
20
17
 
21
- spec.add_development_dependency 'bundler', "~> 1.6"
22
- spec.add_development_dependency 'rake'
23
- end
18
+ spec.add_development_dependency('bundler', '>= 1.6')
19
+ spec.add_development_dependency('rake')
20
+ spec.add_development_dependency('rspec')
21
+ spec.add_development_dependency('webmock')
22
+
23
+ spec.add_dependency('faraday')
24
+ spec.add_dependency('faraday_middleware')
25
+
26
+ spec.add_dependency('escher')
27
+
28
+ end
@@ -1,7 +1,7 @@
1
- require "faraday_middleware/escher/version"
2
-
3
- module FaradayMiddleware
4
- module Escher
5
- # Your code goes here...
6
- end
7
- end
1
+ require 'escher'
2
+ require 'faraday_middleware'
3
+ module FaradayMiddleware::Escher
4
+ require 'faraday_middleware/escher/base_middleware'
5
+ require 'faraday_middleware/escher/request_signer'
6
+ require 'faraday_middleware/escher/response_validator'
7
+ end
@@ -0,0 +1,15 @@
1
+ require 'socket'
2
+ class FaradayMiddleware::Escher::BaseMiddleware < Faraday::Middleware
3
+
4
+ def initialize(app,options={},&escher_keydb_constructor)
5
+
6
+ super(app)
7
+ @host = options[:host] || Socket.gethostname
8
+
9
+ @escher_options = options[:options] || {}
10
+ @escher_credential_scope = options[:credential_scope] || raise(ArgumentError,'missing escher credential scope!')
11
+ @escher_keydb_constructor = escher_keydb_constructor || raise(ArgumentError,'missing escher constructor')
12
+
13
+ end
14
+
15
+ end
@@ -0,0 +1,30 @@
1
+ class FaradayMiddleware::Escher::RequestSigner < FaradayMiddleware::Escher::BaseMiddleware
2
+
3
+ def call(env)
4
+
5
+ escher = Escher::Auth.new(@escher_credential_scope, @escher_options)
6
+
7
+ uri_path = env[:url].path
8
+ endpoint = uri_path.empty? ? '/' : uri_path
9
+
10
+ request_data = {
11
+ uri: endpoint,
12
+ method: env[:method].to_s.upcase,
13
+ headers: env[:request_headers].map{|k,v| [k,v] }.push(['host',@host])
14
+ }
15
+
16
+ request_data[:body]= env[:body] unless env[:body].nil?
17
+
18
+ escher.sign!(
19
+ request_data,
20
+ @escher_keydb_constructor.call,
21
+ request_data[:headers].map{|ary| ary[0] }
22
+ )
23
+
24
+ env[:request_headers].merge!(request_data[:headers])
25
+
26
+ return @app.call(env)
27
+
28
+ end
29
+
30
+ end
@@ -0,0 +1,3 @@
1
+ class FaradayMiddleware::Escher::ResponseValidator
2
+
3
+ end
@@ -0,0 +1,47 @@
1
+ require_relative '../spec_helper'
2
+ describe FaradayMiddleware::Escher::BaseMiddleware do
3
+
4
+ let(:app){double('app')}
5
+
6
+ let(:host){'localhost'}
7
+ let(:api_key){'superKey'}
8
+ let(:api_secret){'superSecret'}
9
+
10
+ let(:options){
11
+
12
+ {
13
+ api_key: api_key,
14
+ api_secret: api_secret,
15
+ host: host
16
+ }
17
+
18
+ }
19
+
20
+ subject{ self.described_class.new(app,options) }
21
+
22
+ before do
23
+ allow(Socket).to receive(:gethostname).and_return(host)
24
+ end
25
+
26
+ describe '#initialize' do
27
+ describe 'init take an options hash after app, and catch some of its value' do
28
+
29
+ %W[ host api_key api_secret ].each do |element|
30
+ it "should save #{element} hast key's value under @#{element}" do
31
+ expect(subject.instance_variable_get("@#{element}")).to eq options[element.to_sym]
32
+ end
33
+ end
34
+
35
+ it 'should cache @app from the first argument' do
36
+ expect(subject.instance_variable_get('@app')).to eq app
37
+ end
38
+
39
+ end
40
+
41
+ it 'should child of the Faraday::Middleware class' do
42
+ expect(subject).to be_a(Faraday::Middleware)
43
+ end
44
+
45
+ end
46
+
47
+ end
@@ -0,0 +1,74 @@
1
+ require_relative '../spec_helper'
2
+ describe FaradayMiddleware::Escher::RequestSigner do
3
+ describe 'this is a faraday middleware witch instance will response to call method' do
4
+
5
+ let(:api_key) { 'superKey' }
6
+ let(:api_secret) { 'superSecret' }
7
+ let(:host) { 'localhost' }
8
+
9
+ let(:stubs) { Faraday::Adapter::Test::Stubs.new }
10
+
11
+ subject do
12
+
13
+ Faraday.new do |builder|
14
+
15
+ builder.use FaradayMiddleware::Escher::RequestSigner,
16
+ api_key: api_key,
17
+ api_secret: api_secret,
18
+ host: host
19
+
20
+ builder.adapter :test, stubs do |stub|
21
+ stub.get('/ebi') { |env| [200, {}, 'shrimp'] }
22
+ end
23
+
24
+ end
25
+
26
+ end
27
+
28
+ let(:connection) do
29
+ Faraday.new do |builder|
30
+ builder.use FaradayMiddleware::Escher::RequestSigner,
31
+ api_key: api_key,
32
+ api_secret: api_secret,
33
+ host: host
34
+
35
+ builder.use FaradayMiddleware::FollowRedirects
36
+ builder.adapter Faraday.default_adapter
37
+ end
38
+ end
39
+
40
+ let(:target_url) { "http://api-with-escher.example.com" }
41
+
42
+ describe '#call' do
43
+
44
+ it ''
45
+
46
+ it "redirects" do
47
+
48
+ # stubs.get('/uni') {[ 200, {}, 'urchin' ]}
49
+
50
+ request_mock = stub_request(:get, target_url)
51
+
52
+ puts request_mock.methods - Object.methods
53
+
54
+ stub_request(:get, "http://facebook.com").to_return(
55
+ :status => 302,
56
+ :headers => {"Location" => "http://www.facebook.com/"})
57
+
58
+ stub_request(:get, "http://www.facebook.com/").to_return(
59
+ :status => 302,
60
+ :headers => {"Location" => "https://www.facebook.com/"})
61
+
62
+ stub_request(:get, "https://www.facebook.com/")
63
+
64
+ response = connection.get "http://facebook.com"
65
+
66
+ expect(response.env[:url].to_s).to eq("https://www.facebook.com/")
67
+
68
+ end
69
+
70
+
71
+ end
72
+
73
+ end
74
+ end
@@ -0,0 +1,48 @@
1
+ gem_root_dir = File.join(File.dirname(__FILE__),'..')
2
+ $LOAD_PATH.unshift(File.join(gem_root_dir,'lib'))
3
+
4
+
5
+ require 'rspec'
6
+ require 'webmock/rspec'
7
+ require 'faraday_middleware/escher'
8
+
9
+ module EnvCompatibility
10
+ def faraday_env(env)
11
+ if defined?(Faraday::Env)
12
+ Faraday::Env.from(env)
13
+ else
14
+ env
15
+ end
16
+ end
17
+ end
18
+
19
+ module ResponseMiddlewareExampleGroup
20
+ def self.included(base)
21
+ base.let(:options) { Hash.new }
22
+ base.let(:headers) { Hash.new }
23
+ base.let(:middleware) {
24
+ described_class.new(lambda {|env|
25
+ Faraday::Response.new(env)
26
+ }, options)
27
+ }
28
+ end
29
+
30
+ def process(body, content_type = nil, options = {})
31
+ env = {
32
+ :body => body, :request => options,
33
+ :request_headers => Faraday::Utils::Headers.new,
34
+ :response_headers => Faraday::Utils::Headers.new(headers)
35
+ }
36
+ env[:response_headers]['content-type'] = content_type if content_type
37
+ yield(env) if block_given?
38
+ middleware.call(faraday_env(env))
39
+ end
40
+ end
41
+
42
+ RSpec.configure do |config|
43
+ config.include EnvCompatibility
44
+ config.include ResponseMiddlewareExampleGroup, :type => :response
45
+ config.expect_with :rspec do |c|
46
+ c.syntax = :expect
47
+ end
48
+ end
metadata CHANGED
@@ -1,27 +1,27 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: faraday_middleware-escher
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Luzsi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-29 00:00:00.000000000 Z
11
+ date: 2015-06-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.6'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.6'
27
27
  - !ruby/object:Gem::Dependency
@@ -38,6 +38,76 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
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: webmock
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: faraday
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
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: faraday_middleware
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
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: escher
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
41
111
  description: WIP!!! escher sign and validation for faraday http rest client
42
112
  email:
43
113
  - adamluzsi@gmail.com
@@ -51,9 +121,15 @@ files:
51
121
  - LICENSE.txt
52
122
  - README.md
53
123
  - Rakefile
124
+ - VERSION
54
125
  - faraday_middleware-escher.gemspec
55
126
  - lib/faraday_middleware/escher.rb
56
- - lib/faraday_middleware/escher/version.rb
127
+ - lib/faraday_middleware/escher/base_middleware.rb
128
+ - lib/faraday_middleware/escher/request_signer.rb
129
+ - lib/faraday_middleware/escher/response_validator.rb
130
+ - spec/escher/base_middleware_spec.rb
131
+ - spec/escher/request_signer_spec.rb
132
+ - spec/spec_helper.rb
57
133
  homepage: https://github.com/adamluzsi/faraday_middleware-escher
58
134
  licenses:
59
135
  - MIT
@@ -78,4 +154,7 @@ rubygems_version: 2.2.2
78
154
  signing_key:
79
155
  specification_version: 4
80
156
  summary: escher sign and validation for faraday http rest client
81
- test_files: []
157
+ test_files:
158
+ - spec/escher/base_middleware_spec.rb
159
+ - spec/escher/request_signer_spec.rb
160
+ - spec/spec_helper.rb
@@ -1,5 +0,0 @@
1
- module FaradayMiddleware
2
- module Escher
3
- VERSION = "0.0.0"
4
- end
5
- end