aws-sdk-rails 3.13.0 → 4.0.1

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
  SHA256:
3
- metadata.gz: 43528604142d01e2ddcddf37ae598a08c11744aa3a9ccc6757dbc7d1932d3546
4
- data.tar.gz: 7977e087f6372fc8326193dad744f908cda1d2174fc6f817e9cfe48b286a5cfb
3
+ metadata.gz: 70e4d6fbacd3d91ed765159f2d906b82a2a2815b85149dbfbaa3672f233d69aa
4
+ data.tar.gz: 7688fdf35a277ccc9c31a97ad497ecaf72d596d7c88084e9a6831be09d398ffe
5
5
  SHA512:
6
- metadata.gz: 2ceda136ba4f7077b6608787528f2ae97b9ceb3169d9c67f101105e7e512dc8000cdb3bf09e5f96b786544bdb427eb15cc0df6571ecc544f5b1603c51cc034b8
7
- data.tar.gz: 1fdb53b5fdc4a752643deb9e360988983ad939cce6ada4a8ce3bc68122959c44c7ca6f98d55987172c4d559d9d010ec652b482576bf12b4e496193b183aa236e
6
+ metadata.gz: 4fa464e1a441dbde9b006f59053f094442ce9c5b718d24cb4a25d3b3958ede560df5e660a8674728c11a40b268af5cb6f5851ab4c40594be90744db30482053b
7
+ data.tar.gz: 4d2dc1299ed7600b9585bf69ce971f1d4b0bbb2439f1bb7012b7d9b456d90e4c2ac6368ea536e6abe15d202e4a30eb7d8eff5fdd40b5561190b1d91d3e1354ad
data/VERSION CHANGED
@@ -1 +1 @@
1
- 3.13.0
1
+ 4.0.1
@@ -0,0 +1,79 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'aws/rails/action_mailbox/sns_notification'
4
+
5
+ module ActionMailbox
6
+ module Ingresses
7
+ module Ses
8
+ # Ingests inbound emails from Amazon SES/SNS and confirms subscriptions.
9
+ #
10
+ # Subscription requests must provide the following parameters in a JSON body:
11
+ # - +Message+: Notification content
12
+ # - +MessagId+: Notification unique identifier
13
+ # - +Timestamp+: iso8601 timestamp
14
+ # - +TopicArn+: Topic identifier
15
+ # - +Type+: Type of event ("Subscription")
16
+ #
17
+ # Inbound email events must provide the following parameters in a JSON body:
18
+ # - +Message+: Notification content
19
+ # - +MessagId+: Notification unique identifier
20
+ # - +Timestamp+: iso8601 timestamp
21
+ # - +SubscribeURL+: Topic identifier
22
+ # - +TopicArn+: Topic identifier
23
+ # - +Type+: Type of event ("SubscriptionConfirmation")
24
+ #
25
+ # All requests are authenticated by validating the provided AWS signature.
26
+ #
27
+ # Returns:
28
+ #
29
+ # - <tt>204 No Content</tt> if a request is successfully processed
30
+ # - <tt>401 Unauthorized</tt> if a request does not contain a valid signature
31
+ # - <tt>404 Not Found</tt> if the Amazon ingress has not been configured
32
+ # - <tt>422 Unprocessable Entity</tt> if a request provides invalid parameters
33
+ class InboundEmailsController < ActionMailbox::BaseController
34
+ before_action :verify_authenticity, :validate_topic, :confirm_subscription
35
+
36
+ def create
37
+ head :bad_request unless notification.message_content.present?
38
+
39
+ ActionMailbox::InboundEmail.create_and_extract_message_id!(notification.message_content)
40
+ head :no_content
41
+ end
42
+
43
+ private
44
+
45
+ def verify_authenticity
46
+ head :bad_request unless notification.present?
47
+ head :unauthorized unless notification.verified?
48
+ end
49
+
50
+ def confirm_subscription
51
+ return unless notification.type == 'SubscriptionConfirmation'
52
+ return head :ok if notification.subscription_confirmed?
53
+
54
+ Rails.logger.error('SNS subscription confirmation request rejected.')
55
+ head :unprocessable_entity
56
+ end
57
+
58
+ def validate_topic
59
+ return if valid_topic == notification.topic
60
+
61
+ Rails.logger.warn("Ignoring unknown topic: #{topic}")
62
+ head :unauthorized
63
+ end
64
+
65
+ def notification
66
+ @notification ||= Aws::Rails::ActionMailbox::SnsNotification.new(request.raw_post)
67
+ end
68
+
69
+ def topic
70
+ @topic ||= notification.topic
71
+ end
72
+
73
+ def valid_topic
74
+ ::Rails.configuration.action_mailbox.ses.subscribed_topic
75
+ end
76
+ end
77
+ end
78
+ end
79
+ end
data/config/routes.rb ADDED
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ Rails.application.routes.draw do
4
+ scope '/rails/action_mailbox', module: 'action_mailbox/ingresses' do
5
+ post '/ses/inbound_emails' => 'ses/inbound_emails#create',
6
+ as: :rails_ses_inbound_emails
7
+ end
8
+ end
@@ -2,7 +2,7 @@
2
2
 
3
3
  module ActiveJob
4
4
  module QueueAdapters
5
- class AmazonSqsAdapter
5
+ class SqsAdapter
6
6
  # == build request parameter of Aws::SQS::Client
7
7
  class Params
8
8
  class << self
@@ -4,7 +4,12 @@ require 'aws-sdk-sqs'
4
4
 
5
5
  module ActiveJob
6
6
  module QueueAdapters
7
- class AmazonSqsAdapter
7
+ # Set in rails config via config.active_job.queue_adapter = :sqs to use the SQS adapter
8
+ class SqsAdapter
9
+ def enqueue_after_transaction_commit?
10
+ true
11
+ end
12
+
8
13
  def enqueue(job)
9
14
  _enqueue(job)
10
15
  end
@@ -49,9 +54,5 @@ module ActiveJob
49
54
  Aws::Rails::SqsActiveJob.config.client.send_message(send_message_opts)
50
55
  end
51
56
  end
52
-
53
- # create an alias to allow `:amazon` to be used as the adapter name
54
- # `:amazon` is the convention used for ActionMailer and ActiveStorage
55
- AmazonAdapter = AmazonSqsAdapter
56
57
  end
57
58
  end
@@ -12,8 +12,8 @@ module ActiveJob
12
12
  #
13
13
  # To use this adapter, set up as:
14
14
  #
15
- # config.active_job.queue_adapter = :amazon_sqs_async
16
- class AmazonSqsAsyncAdapter < AmazonSqsAdapter
15
+ # config.active_job.queue_adapter = :sqs_async
16
+ class SqsAsyncAdapter < SqsAdapter
17
17
  private
18
18
 
19
19
  def _enqueue(job, body = nil, send_message_opts = {})
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'action_mailbox/engine'
4
+
5
+ module Aws
6
+ module Rails
7
+ module ActionMailbox
8
+ # @api private
9
+ class Engine < ::Rails::Engine
10
+ config.action_mailbox.ses = ActiveSupport::OrderedOptions.new
11
+ config.action_mailbox.ses.s3_client_options ||= {}
12
+
13
+ initializer 'aws-sdk-rails.mount_engine' do |app|
14
+ app.routes.append do
15
+ mount Engine => '/'
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Aws
4
+ module Rails
5
+ module ActionMailbox
6
+ module RSpec
7
+ # @api private
8
+ class Email
9
+ def initialize(authentic: true, topic: 'topic:arn:default', mail: default_mail, message_params: {})
10
+ @authentic = authentic
11
+ @topic = topic
12
+ @mail = mail
13
+ @message_params = message_params
14
+ end
15
+
16
+ def headers
17
+ { 'content-type' => 'application/json' }
18
+ end
19
+
20
+ def url
21
+ '/rails/action_mailbox/ses/inbound_emails'
22
+ end
23
+
24
+ def params
25
+ {
26
+ 'Type' => 'Notification',
27
+ 'TopicArn' => @topic,
28
+ 'Message' => message_json
29
+ }
30
+ end
31
+
32
+ def message_json
33
+ {
34
+ 'notificationType' => 'Received',
35
+ 'content' => @mail.encoded
36
+ }.merge(@message_params).to_json
37
+ end
38
+
39
+ def authentic?
40
+ @authentic
41
+ end
42
+
43
+ def default_mail
44
+ Mail.new
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Aws
4
+ module Rails
5
+ module ActionMailbox
6
+ module RSpec
7
+ # @api private
8
+ class SubscriptionConfirmation
9
+ def initialize(authentic: true, topic: 'topic:arn:default')
10
+ @authentic = authentic
11
+ @topic = topic
12
+ end
13
+
14
+ def url
15
+ '/rails/action_mailbox/ses/inbound_emails'
16
+ end
17
+
18
+ def headers
19
+ { 'content-type' => 'application/json' }
20
+ end
21
+
22
+ def params
23
+ {
24
+ 'Type' => 'SubscriptionConfirmation',
25
+ 'TopicArn' => @topic,
26
+ 'SubscribeURL' => 'http://example.com/subscribe'
27
+ }
28
+ end
29
+
30
+ def authentic?
31
+ @authentic
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,69 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'aws/rails/action_mailbox/rspec/email'
4
+ require 'aws/rails/action_mailbox/rspec/subscription_confirmation'
5
+ require 'aws-sdk-sns'
6
+ require 'aws/rails/action_mailbox/sns_message_verifier'
7
+
8
+ module Aws
9
+ module Rails
10
+ module ActionMailbox
11
+ # Include the `Aws::Rails::ActionMailbox::RSpec` extension in your tests, like so:
12
+ # require 'aws/rails/action_mailbox/rspec'
13
+ # RSpec.configure do |config|
14
+ # config.include Aws::Rails::ActionMailbox::RSpec
15
+ # end
16
+ # Then, in a request spec, use like so:
17
+ # RSpec.describe 'amazon emails', type: :request do
18
+ # it 'delivers a subscription notification' do
19
+ # action_mailbox_ses_deliver_subscription_confirmation
20
+ # expect(response).to have_http_status :ok
21
+ # end
22
+
23
+ # it 'delivers an email notification' do
24
+ # action_mailbox_ses_deliver_email(mail: Mail.new(to: 'user@example.com'))
25
+ # expect(ActionMailbox::InboundEmail.last.mail.recipients).to eql ['user@example.com']
26
+ # end
27
+ # end
28
+ module RSpec
29
+ def action_mailbox_ses_deliver_subscription_confirmation(options = {})
30
+ subscription_confirmation = SubscriptionConfirmation.new(**options)
31
+ stub_aws_sns_message_verifier(subscription_confirmation)
32
+ stub_aws_sns_subscription_request
33
+
34
+ post subscription_confirmation.url,
35
+ params: subscription_confirmation.params,
36
+ headers: subscription_confirmation.headers,
37
+ as: :json
38
+ end
39
+
40
+ def action_mailbox_ses_deliver_email(options = {})
41
+ email = Email.new(**options)
42
+ stub_aws_sns_message_verifier(email)
43
+
44
+ post email.url,
45
+ params: email.params,
46
+ headers: email.headers,
47
+ as: :json
48
+ end
49
+
50
+ private
51
+
52
+ def message_verifier(subscription_confirmation)
53
+ instance_double(Aws::SNS::MessageVerifier, authentic?: subscription_confirmation.authentic?)
54
+ end
55
+
56
+ def stub_aws_sns_message_verifier(notification)
57
+ allow(Aws::Rails::ActionMailbox::SnsMessageVerifier).to receive(:verifier) { message_verifier(notification) }
58
+ end
59
+
60
+ def stub_aws_sns_subscription_request
61
+ allow(Net::HTTP).to receive(:get_response).and_call_original
62
+ allow(Net::HTTP)
63
+ .to receive(:get_response)
64
+ .with(URI('http://example.com/subscribe')) { double(code: '200') }
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'aws-sdk-s3'
4
+
5
+ module Aws
6
+ module Rails
7
+ module ActionMailbox
8
+ # @api private
9
+ class S3Client
10
+ class << self
11
+ def client
12
+ @client ||= build_client
13
+ end
14
+
15
+ private
16
+
17
+ def build_client
18
+ client = Aws::S3::Client.new(
19
+ **::Rails.configuration.action_mailbox.ses.s3_client_options
20
+ )
21
+ client.config.user_agent_frameworks << 'aws-sdk-rails'
22
+ client
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'aws-sdk-sns'
4
+
5
+ module Aws
6
+ module Rails
7
+ module ActionMailbox
8
+ # @api private
9
+ class SnsMessageVerifier
10
+ class << self
11
+ def verifier
12
+ @verifier ||= Aws::SNS::MessageVerifier.new
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,99 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'aws-sdk-sns'
4
+ require 'aws/rails/action_mailbox/s3_client'
5
+ require 'aws/rails/action_mailbox/sns_message_verifier'
6
+
7
+ module Aws
8
+ module Rails
9
+ module ActionMailbox
10
+ # @api private
11
+ class SnsNotification
12
+ class MessageContentError < StandardError; end
13
+
14
+ def initialize(request_body)
15
+ @request_body = request_body
16
+ end
17
+
18
+ def subscription_confirmed?
19
+ (200..299).cover?(confirmation_response.code.to_i)
20
+ end
21
+
22
+ def verified?
23
+ SnsMessageVerifier.verifier.authentic?(@request_body)
24
+ end
25
+
26
+ def topic
27
+ notification.fetch(:TopicArn)
28
+ end
29
+
30
+ def type
31
+ notification.fetch(:Type)
32
+ end
33
+
34
+ def message_content
35
+ raise MessageContentError, 'Incoming emails must have notificationType `Received`' unless receipt?
36
+
37
+ if content_in_s3?
38
+ s3_content
39
+ else
40
+ return message[:content] unless destination
41
+
42
+ "X-Original-To: #{destination}\n#{message[:content]}"
43
+ end
44
+ end
45
+
46
+ private
47
+
48
+ def notification
49
+ @notification ||= JSON.parse(@request_body, symbolize_names: true)
50
+ rescue JSON::ParserError => e
51
+ Rails.logger.warn("Unable to parse SNS notification: #{e}")
52
+ nil
53
+ end
54
+
55
+ def s3_content
56
+ S3Client
57
+ .client
58
+ .get_object(key: key, bucket: bucket)
59
+ .body
60
+ .string
61
+ end
62
+
63
+ def message
64
+ @message ||= JSON.parse(notification[:Message], symbolize_names: true)
65
+ end
66
+
67
+ def destination
68
+ message.dig(:mail, :destination)&.first
69
+ end
70
+
71
+ def action
72
+ return unless message[:receipt]
73
+
74
+ message.fetch(:receipt).fetch(:action)
75
+ end
76
+
77
+ def bucket
78
+ action.fetch(:bucketName)
79
+ end
80
+
81
+ def key
82
+ action.fetch(:objectKey)
83
+ end
84
+
85
+ def content_in_s3?
86
+ action&.fetch(:type) == 'S3'
87
+ end
88
+
89
+ def receipt?
90
+ message.fetch(:notificationType) == 'Received'
91
+ end
92
+
93
+ def confirmation_response
94
+ @confirmation_response ||= Net::HTTP.get_response(URI(notification[:SubscribeURL]))
95
+ end
96
+ end
97
+ end
98
+ end
99
+ end
@@ -9,7 +9,7 @@ module Aws
9
9
  before: :load_config_initializers do
10
10
  # Initialization Actions
11
11
  Aws::Rails.use_rails_encrypted_credentials
12
- Aws::Rails.add_action_mailer_delivery_method
12
+ Aws::Rails.add_action_mailer_delivery_method(:ses)
13
13
  Aws::Rails.add_action_mailer_delivery_method(:sesv2)
14
14
  Aws::Rails.log_to_rails_logger
15
15
  end
@@ -25,18 +25,22 @@ module Aws
25
25
  end
26
26
 
27
27
  # This is called automatically from the SDK's Railtie, but can be manually
28
- # called if you want to specify options for building the Aws::SES::Client.
28
+ # called if you want to specify options for building the Aws::SES::Client or
29
+ # Aws::SESV2::Client.
29
30
  #
30
31
  # @param [Symbol] name The name of the ActionMailer delivery method to
31
- # register.
32
+ # register, either :ses or :sesv2.
32
33
  # @param [Hash] client_options The options you wish to pass on to the
33
34
  # Aws::SES[V2]::Client initialization method.
34
- def self.add_action_mailer_delivery_method(name = :ses, client_options = {})
35
+ def self.add_action_mailer_delivery_method(name, client_options = {})
35
36
  ActiveSupport.on_load(:action_mailer) do
36
- if name == :sesv2
37
+ case name
38
+ when :ses
39
+ add_delivery_method(name, Aws::Rails::SesMailer, client_options)
40
+ when :sesv2
37
41
  add_delivery_method(name, Aws::Rails::Sesv2Mailer, client_options)
38
42
  else
39
- add_delivery_method(name, Aws::Rails::SesMailer, client_options)
43
+ raise ArgumentError, "Unknown action mailer delivery method: #{name}"
40
44
  end
41
45
  end
42
46
  end
@@ -2,6 +2,7 @@
2
2
 
3
3
  module Aws
4
4
  module Rails
5
+ # Configuration for AWS SQS ActiveJob.
5
6
  module SqsActiveJob
6
7
  # @return [Configuration] the (singleton) Configuration
7
8
  def self.config
@@ -17,7 +18,6 @@ module Aws
17
18
  queue_url.ends_with? '.fifo'
18
19
  end
19
20
 
20
- # Configuration for AWS SQS ActiveJob.
21
21
  # Use +Aws::Rails::SqsActiveJob.config+ to access the singleton config instance.
22
22
  class Configuration
23
23
  # Default configuration options
@@ -90,7 +90,7 @@ module Aws
90
90
  # @option options [Callable] :async_queue_error_handler An error handler
91
91
  # to be called when the async active job adapter experiances an error
92
92
  # queueing a job. Only applies when
93
- # +active_job.queue_adapter = :amazon_sqs_async+. Called with:
93
+ # +active_job.queue_adapter = :sqs_async+. Called with:
94
94
  # [error, job, job_options]
95
95
  #
96
96
  # @option options [SQS::Client] :client SQS Client to use. A default
@@ -186,13 +186,11 @@ module Aws
186
186
 
187
187
  # Avoid incompatible changes with Psych 4.0.0
188
188
  # https://bugs.ruby-lang.org/issues/17866
189
- # rubocop:disable Security/YAMLLoad
190
189
  begin
191
- YAML.load(source, aliases: true) || {}
190
+ YAML.safe_load(source, aliases: true) || {}
192
191
  rescue ArgumentError
193
- YAML.load(source) || {}
192
+ YAML.safe_load(source) || {}
194
193
  end
195
- # rubocop:enable Security/YAMLLoad
196
194
  end
197
195
  end
198
196
  end
@@ -3,6 +3,7 @@
3
3
  module Aws
4
4
  module Rails
5
5
  module SqsActiveJob
6
+ # @api private
6
7
  class JobRunner
7
8
  attr_reader :id, :class_name
8
9
 
@@ -4,11 +4,11 @@ require 'aws-sdk-sqs'
4
4
 
5
5
  module Aws
6
6
  module Rails
7
+ # A lambda event handler to run jobs from an SQS queue trigger
8
+ # Trigger the lambda from your SQS queue
9
+ # Configure the entrypoint to: +config/environment.Aws::Rails::SqsActiveJob.lambda_job_handler+
10
+ # This will load your Rails environment, and then use this method as the handler.
7
11
  module SqsActiveJob
8
- # A lambda event handler to run jobs from an SQS queue trigger
9
- # Trigger the lambda from your SQS queue
10
- # Configure the entrypoint to: +config/environment.Aws::Rails::SqsActiveJob.lambda_job_handler+
11
- # This will load your Rails environment, and then use this method as the handler.
12
12
  def self.lambda_job_handler(event:, context:)
13
13
  return 'no records to process' unless event['Records']
14
14
 
data/lib/aws-sdk-rails.rb CHANGED
@@ -3,6 +3,7 @@
3
3
  require_relative 'aws/rails/ses_mailer'
4
4
  require_relative 'aws/rails/sesv2_mailer'
5
5
  require_relative 'aws/rails/railtie'
6
+ require_relative 'aws/rails/action_mailbox/engine'
6
7
  require_relative 'aws/rails/notifications'
7
8
  require_relative 'aws/rails/sqs_active_job/configuration'
8
9
  require_relative 'aws/rails/sqs_active_job/deduplication'
@@ -12,9 +13,9 @@ require_relative 'aws/rails/sqs_active_job/lambda_handler'
12
13
  require_relative 'aws/rails/middleware/ebs_sqs_active_job_middleware'
13
14
 
14
15
  require_relative 'action_dispatch/session/dynamodb_store'
15
- require_relative 'active_job/queue_adapters/amazon_sqs_adapter'
16
- require_relative 'active_job/queue_adapters/amazon_sqs_adapter/params'
17
- require_relative 'active_job/queue_adapters/amazon_sqs_async_adapter'
16
+ require_relative 'active_job/queue_adapters/sqs_adapter'
17
+ require_relative 'active_job/queue_adapters/sqs_adapter/params'
18
+ require_relative 'active_job/queue_adapters/sqs_async_adapter'
18
19
 
19
20
  require_relative 'generators/aws_record/base'
20
21
 
@@ -141,9 +141,9 @@ module AwsRecord
141
141
 
142
142
  @primary_read_units, @primary_write_units = parse_rw_units('primary')
143
143
 
144
- @gsi_rw_units = @gsis.map do |idx|
144
+ @gsi_rw_units = @gsis.to_h do |idx|
145
145
  [idx.name, parse_rw_units(idx.name)]
146
- end.to_h
146
+ end
147
147
 
148
148
  options['table_config'].each_key do |config|
149
149
  next if config == 'primary'
@@ -54,7 +54,7 @@ module AwsRecord
54
54
 
55
55
  def parse_type_and_options(name, type, opts)
56
56
  opts ||= []
57
- [parse_type(name, type), opts.map { |opt| parse_option(name, opt) }.to_h]
57
+ [parse_type(name, type), opts.to_h { |opt| parse_option(name, opt) }]
58
58
  end
59
59
 
60
60
  def parse_option(name, opt)
@@ -19,7 +19,7 @@ module AwsRecord
19
19
 
20
20
  def parse_raw_options(raw_opts)
21
21
  raw_opts ||= []
22
- raw_opts.map { |opt| get_option_value(opt) }.to_h
22
+ raw_opts.to_h { |opt| get_option_value(opt) }
23
23
  end
24
24
 
25
25
  def get_option_value(raw_option)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aws-sdk-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.13.0
4
+ version: 4.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Amazon Web Services
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-06-06 00:00:00.000000000 Z
11
+ date: 2024-07-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-record
@@ -24,6 +24,26 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: aws-sdk-s3
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1'
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: 1.123.0
37
+ type: :runtime
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - "~>"
42
+ - !ruby/object:Gem::Version
43
+ version: '1'
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: 1.123.0
27
47
  - !ruby/object:Gem::Dependency
28
48
  name: aws-sdk-ses
29
49
  requirement: !ruby/object:Gem::Requirement
@@ -65,7 +85,7 @@ dependencies:
65
85
  - !ruby/object:Gem::Version
66
86
  version: 1.34.0
67
87
  - !ruby/object:Gem::Dependency
68
- name: aws-sdk-sqs
88
+ name: aws-sdk-sns
69
89
  requirement: !ruby/object:Gem::Requirement
70
90
  requirements:
71
91
  - - "~>"
@@ -73,7 +93,7 @@ dependencies:
73
93
  version: '1'
74
94
  - - ">="
75
95
  - !ruby/object:Gem::Version
76
- version: 1.56.0
96
+ version: 1.61.0
77
97
  type: :runtime
78
98
  prerelease: false
79
99
  version_requirements: !ruby/object:Gem::Requirement
@@ -83,63 +103,83 @@ dependencies:
83
103
  version: '1'
84
104
  - - ">="
85
105
  - !ruby/object:Gem::Version
86
- version: 1.56.0
106
+ version: 1.61.0
87
107
  - !ruby/object:Gem::Dependency
88
- name: aws-sessionstore-dynamodb
108
+ name: aws-sdk-sqs
89
109
  requirement: !ruby/object:Gem::Requirement
90
110
  requirements:
91
111
  - - "~>"
92
112
  - !ruby/object:Gem::Version
93
- version: '2'
113
+ version: '1'
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: 1.56.0
94
117
  type: :runtime
95
118
  prerelease: false
96
119
  version_requirements: !ruby/object:Gem::Requirement
97
120
  requirements:
98
121
  - - "~>"
99
122
  - !ruby/object:Gem::Version
100
- version: '2'
123
+ version: '1'
124
+ - - ">="
125
+ - !ruby/object:Gem::Version
126
+ version: 1.56.0
101
127
  - !ruby/object:Gem::Dependency
102
- name: concurrent-ruby
128
+ name: actionmailbox
103
129
  requirement: !ruby/object:Gem::Requirement
104
130
  requirements:
105
131
  - - ">="
106
132
  - !ruby/object:Gem::Version
107
- version: 1.3.1
133
+ version: 7.0.0
108
134
  type: :runtime
109
135
  prerelease: false
110
136
  version_requirements: !ruby/object:Gem::Requirement
111
137
  requirements:
112
138
  - - ">="
113
139
  - !ruby/object:Gem::Version
114
- version: 1.3.1
140
+ version: 7.0.0
115
141
  - !ruby/object:Gem::Dependency
116
- name: railties
142
+ name: aws-sessionstore-dynamodb
143
+ requirement: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - "~>"
146
+ - !ruby/object:Gem::Version
147
+ version: '2'
148
+ type: :runtime
149
+ prerelease: false
150
+ version_requirements: !ruby/object:Gem::Requirement
151
+ requirements:
152
+ - - "~>"
153
+ - !ruby/object:Gem::Version
154
+ version: '2'
155
+ - !ruby/object:Gem::Dependency
156
+ name: concurrent-ruby
117
157
  requirement: !ruby/object:Gem::Requirement
118
158
  requirements:
119
159
  - - ">="
120
160
  - !ruby/object:Gem::Version
121
- version: 5.2.0
161
+ version: 1.3.1
122
162
  type: :runtime
123
163
  prerelease: false
124
164
  version_requirements: !ruby/object:Gem::Requirement
125
165
  requirements:
126
166
  - - ">="
127
167
  - !ruby/object:Gem::Version
128
- version: 5.2.0
168
+ version: 1.3.1
129
169
  - !ruby/object:Gem::Dependency
130
- name: rails
170
+ name: railties
131
171
  requirement: !ruby/object:Gem::Requirement
132
172
  requirements:
133
173
  - - ">="
134
174
  - !ruby/object:Gem::Version
135
- version: '0'
136
- type: :development
175
+ version: 7.0.0
176
+ type: :runtime
137
177
  prerelease: false
138
178
  version_requirements: !ruby/object:Gem::Requirement
139
179
  requirements:
140
180
  - - ">="
141
181
  - !ruby/object:Gem::Version
142
- version: '0'
182
+ version: 7.0.0
143
183
  description: Integrates the AWS Ruby SDK with Ruby on Rails
144
184
  email:
145
185
  - aws-dr-rubygems@amazon.com
@@ -149,12 +189,21 @@ extensions: []
149
189
  extra_rdoc_files: []
150
190
  files:
151
191
  - VERSION
192
+ - app/controllers/action_mailbox/ingresses/ses/inbound_emails_controller.rb
152
193
  - bin/aws_sqs_active_job
194
+ - config/routes.rb
153
195
  - lib/action_dispatch/session/dynamodb_store.rb
154
- - lib/active_job/queue_adapters/amazon_sqs_adapter.rb
155
- - lib/active_job/queue_adapters/amazon_sqs_adapter/params.rb
156
- - lib/active_job/queue_adapters/amazon_sqs_async_adapter.rb
196
+ - lib/active_job/queue_adapters/sqs_adapter.rb
197
+ - lib/active_job/queue_adapters/sqs_adapter/params.rb
198
+ - lib/active_job/queue_adapters/sqs_async_adapter.rb
157
199
  - lib/aws-sdk-rails.rb
200
+ - lib/aws/rails/action_mailbox/engine.rb
201
+ - lib/aws/rails/action_mailbox/rspec.rb
202
+ - lib/aws/rails/action_mailbox/rspec/email.rb
203
+ - lib/aws/rails/action_mailbox/rspec/subscription_confirmation.rb
204
+ - lib/aws/rails/action_mailbox/s3_client.rb
205
+ - lib/aws/rails/action_mailbox/sns_message_verifier.rb
206
+ - lib/aws/rails/action_mailbox/sns_notification.rb
158
207
  - lib/aws/rails/middleware/ebs_sqs_active_job_middleware.rb
159
208
  - lib/aws/rails/notifications.rb
160
209
  - lib/aws/rails/railtie.rb
@@ -191,7 +240,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
191
240
  requirements:
192
241
  - - ">="
193
242
  - !ruby/object:Gem::Version
194
- version: '2.5'
243
+ version: '2.7'
195
244
  required_rubygems_version: !ruby/object:Gem::Requirement
196
245
  requirements:
197
246
  - - ">="