faraday_middleware-aws-sigv4-1.0.1/0000755000004100000410000000000014341157456017201 5ustar www-datawww-datafaraday_middleware-aws-sigv4-1.0.1/.rspec0000644000004100000410000000003614341157456020315 0ustar www-datawww-data--require spec_helper --color faraday_middleware-aws-sigv4-1.0.1/README.md0000644000004100000410000000512214341157456020460 0ustar www-datawww-data# FaradayMiddleware::AwsSigV4 [Faraday](https://github.com/lostisland/faraday) middleware for AWS Signature Version 4 using [aws-sigv4](https://rubygems.org/gems/aws-sigv4). [![Gem Version](https://badge.fury.io/rb/faraday_middleware-aws-sigv4.svg)](https://badge.fury.io/rb/faraday_middleware-aws-sigv4) [![Build Status](https://github.com/winebarrel/faraday_middleware-aws-sigv4/workflows/test/badge.svg?branch=master)](https://github.com/winebarrel/faraday_middleware-aws-sigv4/actions) [![Coverage Status](https://coveralls.io/repos/github/winebarrel/faraday_middleware-aws-sigv4/badge.svg?branch=master)](https://coveralls.io/github/winebarrel/faraday_middleware-aws-sigv4?branch=master) ## Required dependency version | version | ruby | faraday | |------------|----------|-----------| | `>= 1.0.0` | `>= 2.5` | `>= 2.0` | | `>= 0.6.0` | `>= 2.4` | `>= 1.8` | | `>= 0.5.0` | `>= 2.4` | `>= 0.15` | | `>= 0.3.0` | `>= 2.3` | `>= 0.15` | | `< 0.3.0` | - | `< 0.15` | ## Installation Add this line to your application's Gemfile: ```ruby gem 'faraday_middleware-aws-sigv4' ``` And then execute: $ bundle Or install it yourself as: $ gem install faraday_middleware-aws-sigv4 ## Usage ```ruby require 'faraday_middleware/aws_sigv4' require 'pp' conn = Faraday.new(url: 'https://apigateway.us-east-1.amazonaws.com') do |faraday| faraday.request :aws_sigv4, service: 'apigateway', region: 'us-east-1', access_key_id: ENV['AWS_ACCESS_KEY_ID'], secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'] # see http://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/Sigv4/Signer.html faraday.response :json, content_type: /\bjson\b/ # NOTE: If you need to send case sensitive headers like `x-amz-access-token` in `SP API`. # cf. https://github.com/lostisland/faraday/issues/747#issuecomment-439864181 faraday.adapter Faraday.default_adapter end res = conn.get '/account' pp res.body #=> {"_links"=> # {"curies"=> # {"href"=> # "http://docs.aws.amazon.com/apigateway/latest/developerguide/account-apigateway-{rel}.html", # "name"=>"account", # "templated"=>true}, # "self"=>{"href"=>"/account"}, # "account:update"=>{"href"=>"/account"}}, # "throttleSettings"=>{"rateLimit"=>10000.0, "burstLimit"=>5000}} ``` ## Upgrading from `faraday_middleware-aws-signers-v4` If you previously provided the `service_name` option, you need to rename it `service` ## Test ```sh bundle install bundle exec appraisal install bundle exec appraisal faraday-2.0 rake ``` ## Related Links * http://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/Sigv4/Signer.html faraday_middleware-aws-sigv4-1.0.1/gemfiles/0000755000004100000410000000000014341157456020774 5ustar www-datawww-datafaraday_middleware-aws-sigv4-1.0.1/gemfiles/faraday_2.0.gemfile0000644000004100000410000000016614341157456024317 0ustar www-datawww-data# This file was generated by Appraisal source "https://rubygems.org" gem "faraday", "~> 2.0.0" gemspec path: "../" faraday_middleware-aws-sigv4-1.0.1/gemfiles/.bundle/0000755000004100000410000000000014341157456022323 5ustar www-datawww-datafaraday_middleware-aws-sigv4-1.0.1/gemfiles/.bundle/config0000644000004100000410000000002614341157456023511 0ustar www-datawww-data--- BUNDLE_RETRY: "1" faraday_middleware-aws-sigv4-1.0.1/.rubocop.yml0000644000004100000410000000076514341157456021463 0ustar www-datawww-datarequire: - rubocop-rake - rubocop-rspec AllCops: Exclude: - "gemfiles/**/*" TargetRubyVersion: 2.5 NewCops: enable Bundler/OrderedGems: Include: - "Appraisals" Metrics/BlockLength: Enabled: false Layout/LineLength: Enabled: false Metrics/MethodLength: Enabled: false Style/Documentation: Enabled: false RSpec/ExampleLength: Enabled: false RSpec/MultipleExpectations: Enabled: false RSpec/MultipleMemoizedHelpers: Enabled: false RSpec/ContextWording: Enabled: false faraday_middleware-aws-sigv4-1.0.1/Appraisals0000644000004100000410000000013114341157456021216 0ustar www-datawww-data# frozen_string_literal: true appraise 'faraday-2.0' do gem 'faraday', '~> 2.0.0' end faraday_middleware-aws-sigv4-1.0.1/faraday_middleware-aws-sigv4.gemspec0000644000004100000410000000314214341157456026174 0ustar www-datawww-data# frozen_string_literal: true lib = File.expand_path('lib', __dir__) $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) Gem::Specification.new do |spec| spec.name = 'faraday_middleware-aws-sigv4' spec.version = '1.0.1' spec.authors = ['Genki Sugawara'] spec.email = ['sugawara@winebarrel.jp'] 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' spec.files = `git ls-files -z`.split("\x0").reject do |f| f.match(%r{^(test|spec|features)/}) end spec.bindir = 'exe' spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) } spec.require_paths = ['lib'] spec.required_ruby_version = '>= 2.5' spec.add_dependency 'aws-sigv4', '~> 1.0' spec.add_dependency 'faraday', '>= 2.0', '< 3' spec.add_development_dependency 'appraisal', '>= 2.2' spec.add_development_dependency 'aws-sdk-core', '>= 3.124.0' spec.add_development_dependency 'bundler' spec.add_development_dependency 'rake' spec.add_development_dependency 'rspec', '~> 3.0' spec.add_development_dependency 'rubocop', '>= 1.36.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' spec.metadata = { 'rubygems_mfa_required' => 'true' } end faraday_middleware-aws-sigv4-1.0.1/.simplecov0000644000004100000410000000015414341157456021203 0ustar www-datawww-data# frozen_string_literal: true SimpleCov.add_filter 'spec' SimpleCov.start 'rails' unless SimpleCov.running faraday_middleware-aws-sigv4-1.0.1/.gitignore0000644000004100000410000000023014341157456021164 0ustar www-datawww-data/.bundle/ /.yardoc /Gemfile.lock /_yardoc/ /coverage/ /doc/ /pkg/ /spec/reports/ /tmp/ test.rb /gemfiles/*.lock # rspec failure tracking .rspec_status faraday_middleware-aws-sigv4-1.0.1/Rakefile0000644000004100000410000000040214341157456020642 0ustar www-datawww-data# frozen_string_literal: true require 'bundler/gem_tasks' require 'rspec/core/rake_task' require 'rubocop/rake_task' RSpec::Core::RakeTask.new(:spec) RuboCop::RakeTask.new do |task| task.options = %w[-c .rubocop.yml] end task default: %i[rubocop spec] faraday_middleware-aws-sigv4-1.0.1/lib/0000755000004100000410000000000014341157456017747 5ustar www-datawww-datafaraday_middleware-aws-sigv4-1.0.1/lib/faraday_middleware/0000755000004100000410000000000014341157456023553 5ustar www-datawww-datafaraday_middleware-aws-sigv4-1.0.1/lib/faraday_middleware/request/0000755000004100000410000000000014341157456025243 5ustar www-datawww-datafaraday_middleware-aws-sigv4-1.0.1/lib/faraday_middleware/request/aws_sigv4_util.rb0000644000004100000410000000142014341157456030530 0ustar www-datawww-data# frozen_string_literal: true module FaradayMiddleware module AwsSigV4Util def seahorse_encode_query(url) return url unless url.query params = URI.decode_www_form(url.query) if params.any? { |_, v| v["\s"] } url = url.dup url.query = seahorse_encode_www_form(params) end url end 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 end end faraday_middleware-aws-sigv4-1.0.1/lib/faraday_middleware/request/aws_sigv4.rb0000644000004100000410000000154014341157456027476 0ustar www-datawww-data# frozen_string_literal: true require 'aws-sigv4' require 'faraday_middleware/request/aws_sigv4_util' 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 call(env) sign!(env) @app.call(env) end private 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 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 } end end end faraday_middleware-aws-sigv4-1.0.1/lib/faraday_middleware/aws_sigv4.rb0000644000004100000410000000031414341157456026004 0ustar www-datawww-data# frozen_string_literal: true require 'faraday' require 'faraday_middleware/request/aws_sigv4' module FaradayMiddleware Faraday::Request.register_middleware aws_sigv4: FaradayMiddleware::AwsSigV4 end faraday_middleware-aws-sigv4-1.0.1/Gemfile0000644000004100000410000000022014341157456020466 0ustar www-datawww-data# frozen_string_literal: true source 'https://rubygems.org' # Specify your gem's dependencies in faraday_middleware-aws-sigv4.gemspec gemspec faraday_middleware-aws-sigv4-1.0.1/.ruby-version0000644000004100000410000000001314341157456021640 0ustar www-datawww-dataruby-3.1.2 faraday_middleware-aws-sigv4-1.0.1/.github/0000755000004100000410000000000014341157456020541 5ustar www-datawww-datafaraday_middleware-aws-sigv4-1.0.1/.github/workflows/0000755000004100000410000000000014341157456022576 5ustar www-datawww-datafaraday_middleware-aws-sigv4-1.0.1/.github/workflows/test.yml0000644000004100000410000000315114341157456024300 0ustar www-datawww-dataname: test on: push: pull_request: jobs: build: runs-on: ubuntu-latest strategy: fail-fast: false matrix: include: - ruby: 2.6 gemfile: gemfiles/faraday_2.0.gemfile - ruby: 2.7 gemfile: gemfiles/faraday_2.0.gemfile - ruby: 3.0 gemfile: gemfiles/faraday_2.0.gemfile - ruby: 3.1 gemfile: gemfiles/faraday_2.0.gemfile env: BUNDLE_GEMFILE: ${{ matrix.gemfile }} steps: - uses: actions/checkout@v2 - uses: ruby/setup-ruby@v1 with: ruby-version: ${{ matrix.ruby }} - uses: actions/cache@v2 with: path: gemfiles/vendor/bundle 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 - name: Run tests run: bundle exec rake - name: Coveralls Parallel uses: coverallsapp/github-action@v1.1.2 with: github-token: ${{ secrets.GITHUB_TOKEN }} flag-name: run-${{ matrix.ruby }}-${{ 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 faraday_middleware-aws-sigv4-1.0.1/LICENSE.txt0000644000004100000410000000207114341157456021024 0ustar www-datawww-dataThe MIT License (MIT) Copyright (c) 2017 Genki Sugawara Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.