Skip to content

Commit

Permalink
Merge c913ab6 into ffa7734
Browse files Browse the repository at this point in the history
  • Loading branch information
winebarrel committed Jan 7, 2021
2 parents ffa7734 + c913ab6 commit d70c40a
Show file tree
Hide file tree
Showing 16 changed files with 229 additions and 199 deletions.
20 changes: 14 additions & 6 deletions .github/workflows/test.yml
Expand Up @@ -19,10 +19,10 @@ jobs:
- gemfiles/faraday_0.15.gemfile
- gemfiles/faraday_0.16.gemfile
- gemfiles/faraday_0.17.gemfile

- gemfiles/faraday_1.0.gemfile
steps:
- uses: actions/checkout@v2
- uses: actions/setup-ruby@v1
- uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ matrix.ruby }}
- uses: actions/cache@v2
Expand All @@ -31,20 +31,28 @@ jobs:
key: ${{ runner.os }}-gems-${{ matrix.ruby }}-${{ matrix.gemfile }}-${{ hashFiles('faraday_middleware-aws-sigv4.gemspec', '**/Gemfile', '${{ matrix.gemfile }}') }}
restore-keys: |
${{ runner.os }}-gems-${{ matrix.ruby }}-${{ matrix.gemfile }}-
- name: Setup dependencies
run: |
bundle config path vendor/bundle
bundle install
env:
BUNDLE_GEMFILE: ${{ matrix.gemfile }}

- name: Run tests
run: ${{ matrix.env }} bundle exec rake
env:
BUNDLE_GEMFILE: ${{ matrix.gemfile }}

- name: Coveralls GitHub Action
- name: Coveralls Parallel
uses: coverallsapp/github-action@v1.1.2
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
flag-name: run-${{ matrix.ruby }}-${{ matrix.env }}-${{ matrix.gemfile }}
parallel: true
finish:
needs: build
runs-on: ubuntu-latest
steps:
- name: Coveralls Finished
uses: coverallsapp/github-action@v1.1.2
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
parallel-finished: true
16 changes: 16 additions & 0 deletions .rubocop.yml
@@ -0,0 +1,16 @@
AllCops:
Exclude:
- 'gemfiles/**/*'
TargetRubyVersion: 2.4
NewCops: enable
Bundler/OrderedGems:
Include:
- 'Appraisals'
Metrics/BlockLength:
Enabled: false
Layout/LineLength:
Enabled: false
Metrics/MethodLength:
Enabled: false
Style/Documentation:
Enabled: false
4 changes: 3 additions & 1 deletion .simplecov
@@ -1,4 +1,6 @@
# frozen_string_literal: true

SimpleCov.start do
# exclude directories and files
add_filter "/spec/"
add_filter '/spec/'
end
2 changes: 2 additions & 0 deletions Appraisals
@@ -1,3 +1,5 @@
# frozen_string_literal: true

appraise 'faraday-0.15' do
gem 'faraday', '~> 0.15.0'
end
Expand Down
2 changes: 2 additions & 0 deletions Gemfile
@@ -1,3 +1,5 @@
# frozen_string_literal: true

source 'https://rubygems.org'

# Specify your gem's dependencies in faraday_middleware-aws-sigv4.gemspec
Expand Down
9 changes: 8 additions & 1 deletion Rakefile
@@ -1,6 +1,13 @@
# frozen_string_literal: true

require 'bundler/gem_tasks'
require 'rspec/core/rake_task'
require 'rubocop/rake_task'

RSpec::Core::RakeTask.new(:spec)

task :default => :spec
RuboCop::RakeTask.new do |task|
task.options = %w[-c .rubocop.yml]
end

task default: %i[rubocop spec]
14 changes: 0 additions & 14 deletions bin/console

This file was deleted.

8 changes: 0 additions & 8 deletions bin/setup

This file was deleted.

24 changes: 14 additions & 10 deletions faraday_middleware-aws-sigv4.gemspec
@@ -1,5 +1,6 @@
# coding: utf-8
lib = File.expand_path('../lib', __FILE__)
# frozen_string_literal: true

lib = File.expand_path('lib', __dir__)
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)

Gem::Specification.new do |spec|
Expand All @@ -8,8 +9,8 @@ Gem::Specification.new do |spec|
spec.authors = ['Genki Sugawara']
spec.email = ['sugawara@cookpad.com']

spec.summary = %q{Faraday middleware for AWS Signature Version 4 using aws-sigv4.}
spec.description = %q{Faraday middleware for AWS Signature Version 4 using aws-sigv4.}
spec.summary = 'Faraday middleware for AWS Signature Version 4 using aws-sigv4.'
spec.description = 'Faraday middleware for AWS Signature Version 4 using aws-sigv4.'
spec.homepage = 'https://github.com/winebarrel/faraday_middleware-aws-sigv4'
spec.license = 'MIT'

Expand All @@ -20,18 +21,21 @@ Gem::Specification.new do |spec|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
spec.require_paths = ['lib']

spec.required_ruby_version = '>= 2.3'
spec.required_ruby_version = '>= 2.4'

spec.add_dependency 'faraday', '>= 0.15'
spec.add_dependency 'aws-sigv4', '~> 1.0'
spec.add_dependency 'faraday', '>= 0.15'

spec.add_development_dependency 'faraday_middleware'
spec.add_development_dependency 'appraisal', '>= 2.2'
spec.add_development_dependency 'aws-sdk-core', '~> 3.14.0'
spec.add_development_dependency 'bundler'
spec.add_development_dependency 'faraday_middleware'
spec.add_development_dependency 'rake'
spec.add_development_dependency 'rspec', '~> 3.0'
spec.add_development_dependency 'timecop'
spec.add_development_dependency 'aws-sdk-core', '~> 3.14.0'
spec.add_development_dependency 'appraisal', '>= 2.2'
spec.add_development_dependency 'rubocop', '>= 1.8.0'
spec.add_development_dependency 'rubocop-rake'
spec.add_development_dependency 'rubocop-rspec'
spec.add_development_dependency 'simplecov'
spec.add_development_dependency 'simplecov-lcov'
spec.add_development_dependency 'timecop'
end
4 changes: 3 additions & 1 deletion lib/faraday_middleware/aws_sigv4.rb
@@ -1,6 +1,8 @@
# frozen_string_literal: true

require 'faraday'

module FaradayMiddleware
autoload :AwsSigV4, 'faraday_middleware/request/aws_sigv4'
Faraday::Request.register_middleware aws_sigv4: lambda { AwsSigV4 }
Faraday::Request.register_middleware aws_sigv4: -> { AwsSigV4 }
end
54 changes: 29 additions & 25 deletions lib/faraday_middleware/request/aws_sigv4.rb
@@ -1,37 +1,41 @@
# frozen_string_literal: true

require 'aws-sigv4'
require 'faraday_middleware/request/aws_sigv4_util'

class FaradayMiddleware::AwsSigV4 < Faraday::Middleware
include FaradayMiddleware::AwsSigV4Util
module FaradayMiddleware
class AwsSigV4 < Faraday::Middleware
include FaradayMiddleware::AwsSigV4Util

def initialize(app, options = nil)
super(app)
@signer = Aws::Sigv4::Signer.new(options)
@options = options
end
def initialize(app, options = nil)
super(app)
@signer = Aws::Sigv4::Signer.new(options)
@options = options
end

def call(env)
sign!(env)
@app.call(env)
end
def call(env)
sign!(env)
@app.call(env)
end

private
private

def sign!(env)
request = build_aws_sigv4_request(env)
signature = @signer.sign_request(request)
def sign!(env)
request = build_aws_sigv4_request(env)
signature = @signer.sign_request(request)

signature.headers.each do |name, value|
env.request_headers[name] = value
signature.headers.each do |name, value|
env.request_headers[name] = value
end
end
end

def build_aws_sigv4_request(env)
{
http_method: env.method.to_s,
url: seahorse_encode_query(env.url),
headers: env.request_headers,
body: env.body,
}
def build_aws_sigv4_request(env)
{
http_method: env.method.to_s,
url: seahorse_encode_query(env.url),
headers: env.request_headers,
body: env.body
}
end
end
end
50 changes: 27 additions & 23 deletions lib/faraday_middleware/request/aws_sigv4_util.rb
@@ -1,32 +1,36 @@
module FaradayMiddleware::AwsSigV4Util
def seahorse_encode_query(url)
return url unless url.query
# frozen_string_literal: true

params = URI.decode_www_form(url.query)
module FaradayMiddleware
module AwsSigV4Util
def seahorse_encode_query(url)
return url unless url.query

if params.any? {|_, v| v[?\s] }
url = url.dup
url.query = seahorse_encode_www_form(params)
end
params = URI.decode_www_form(url.query)

url
end
if params.any? { |_, v| v["\s"] }
url = url.dup
url.query = seahorse_encode_www_form(params)
end

def seahorse_encode_www_form(params)
params.flat_map {|key, value|
encoded_key = URI.encode_www_form_component(key)
url
end

if value.nil?
encoded_key
else
Array(value).map do |v|
if v.nil?
# nothing to do
else
encoded_key + '=' + Aws::Sigv4::Signer.uri_escape(v)
def seahorse_encode_www_form(params)
params.flat_map do |key, value|
encoded_key = URI.encode_www_form_component(key)

if value.nil?
encoded_key
else
Array(value).map do |v|
if v.nil?
# nothing to do
else
"#{encoded_key}=#{Aws::Sigv4::Signer.uri_escape(v)}"
end
end
end
end
}.join(?&)
end.join('&')
end
end
end

0 comments on commit d70c40a

Please sign in to comment.