aws_sns_subscription 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,10 +1,13 @@
|
|
1
1
|
module AWSSNSSubscription
|
2
2
|
module Confirmer
|
3
3
|
extend ActiveSupport::Concern
|
4
|
+
class MessageWasNotAuthentic < StandardError; end
|
4
5
|
|
5
6
|
def respond_to_aws_sns_subscription_confirmations
|
6
7
|
if request.headers["x-amz-sns-message-type"] == "SubscriptionConfirmation"
|
7
|
-
|
8
|
+
sns = SNS.new(request.raw_post)
|
9
|
+
raise MessageWasNotAuthentic unless sns.authentic?
|
10
|
+
HTTParty.get sns.subscribe_url
|
8
11
|
head :ok and return
|
9
12
|
end
|
10
13
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module AWSSNSSubscription
|
2
|
+
class SNS
|
3
|
+
|
4
|
+
attr_reader :raw
|
5
|
+
|
6
|
+
def initialize(json)
|
7
|
+
@raw = json
|
8
|
+
end
|
9
|
+
|
10
|
+
def subscribe_url
|
11
|
+
JSON.parse(raw)["SubscribeURL"]
|
12
|
+
end
|
13
|
+
|
14
|
+
def authentic?
|
15
|
+
subscribe_url =~ /^https.*amazonaws\.com\//
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
data/lib/aws_sns_subscription.rb
CHANGED
data/spec/confirmer_spec.rb
CHANGED
@@ -2,6 +2,7 @@ require 'spec_helper'
|
|
2
2
|
require 'active_support/all'
|
3
3
|
require 'httparty'
|
4
4
|
require File.expand_path('../../lib/aws_sns_subscription/confirmer.rb', __FILE__)
|
5
|
+
require File.expand_path('../../lib/aws_sns_subscription/sns.rb', __FILE__)
|
5
6
|
|
6
7
|
module AWSSNSSubscription
|
7
8
|
class Controller
|
@@ -15,6 +16,9 @@ module AWSSNSSubscription
|
|
15
16
|
let(:raw_post) do
|
16
17
|
File.read(File.expand_path("../fixtures/raw_post.txt", __FILE__))
|
17
18
|
end
|
19
|
+
let(:raw_bologna_post) do
|
20
|
+
File.read(File.expand_path("../fixtures/raw_bologna_post.txt", __FILE__))
|
21
|
+
end
|
18
22
|
before(:each) do
|
19
23
|
subject.stub(:request).and_return(mock("request", headers: { "x-amz-sns-message-type" => "SubscriptionConfirmation" }, raw_post: raw_post))
|
20
24
|
end
|
@@ -22,6 +26,14 @@ module AWSSNSSubscription
|
|
22
26
|
HTTParty.should_receive(:get).with("https://sns.us-east-1.amazonaws.com/?Action=ConfirmSubscription&TopicArn=arn:aws:sns:us-east-1:123456789012:MyTopic&Token=2336412f37fb687f5d51e6e241d09c805a5a57b30d712f794cc5f6a988666d92768dd60a747ba6f3beb71854e285d6ad02428b09ceece29417f1f02d609c582afbacc99c583a916b9981dd2728f4ae6fdb82efd087cc3b7849e05798d2d2785c03b0879594eeac82c01f235d0e717736")
|
23
27
|
subject.respond_to_aws_sns_subscription_confirmations
|
24
28
|
end
|
29
|
+
describe "with a bologna endpoint" do
|
30
|
+
before(:each) do
|
31
|
+
subject.stub(:request).and_return(mock("request", headers: { "x-amz-sns-message-type" => "SubscriptionConfirmation" }, raw_post: raw_bologna_post))
|
32
|
+
end
|
33
|
+
it "should raise the right exception" do
|
34
|
+
expect { subject.respond_to_aws_sns_subscription_confirmations }.to raise_error AWSSNSSubscription::Confirmer::MessageWasNotAuthentic
|
35
|
+
end
|
36
|
+
end
|
25
37
|
end
|
26
38
|
describe "not receiving a subscription confirmation request" do
|
27
39
|
before(:each) do
|
@@ -0,0 +1,12 @@
|
|
1
|
+
{
|
2
|
+
"Type" : "SubscriptionConfirmation",
|
3
|
+
"MessageId" : "165545c9-2a5c-472c-8df2-7ff2be2b3b1b",
|
4
|
+
"Token" : "2336412f37fb687f5d51e6e241d09c805a5a57b30d712f794cc5f6a988666d92768dd60a747ba6f3beb71854e285d6ad02428b09ceece29417f1f02d609c582afbacc99c583a916b9981dd2728f4ae6fdb82efd087cc3b7849e05798d2d2785c03b0879594eeac82c01f235d0e717736",
|
5
|
+
"TopicArn" : "arn:aws:sns:us-east-1:123456789012:MyTopic",
|
6
|
+
"Message" : "You have chosen to subscribe to the topic arn:aws:sns:us-east-1:123456789012:MyTopic.\nTo confirm the subscription, visit the SubscribeURL included in this message.",
|
7
|
+
"SubscribeURL" : "http://bologna.com",
|
8
|
+
"Timestamp" : "2012-04-26T20:45:04.751Z",
|
9
|
+
"SignatureVersion" : "1",
|
10
|
+
"Signature" : "EXAMPLEpH+DcEwjAPg8O9mY8dReBSwksfg2S7WKQcikcNKWLQjwu6A4VbeS0QHVCkhRS7fUQvi2egU3N858fiTDN6bkkOxYDVrY0Ad8L10Hs3zH81mtnPk5uvvolIC1CXGu43obcgFxeL3khZl8IKvO61GWB6jI9b5+gLPoBc1Q=",
|
11
|
+
"SigningCertURL" : "https://sns.us-east-1.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem"
|
12
|
+
}
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aws_sns_subscription
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -92,8 +92,10 @@ files:
|
|
92
92
|
- lib/aws_sns_subscription.rb
|
93
93
|
- lib/aws_sns_subscription/confirmer.rb
|
94
94
|
- lib/aws_sns_subscription/railtie.rb
|
95
|
+
- lib/aws_sns_subscription/sns.rb
|
95
96
|
- lib/aws_sns_subscription/version.rb
|
96
97
|
- spec/confirmer_spec.rb
|
98
|
+
- spec/fixtures/raw_bologna_post.txt
|
97
99
|
- spec/fixtures/raw_post.txt
|
98
100
|
- spec/spec_helper.rb
|
99
101
|
homepage: ''
|
@@ -122,5 +124,6 @@ specification_version: 3
|
|
122
124
|
summary: Auto responds to AWS SNS subscription confirmations
|
123
125
|
test_files:
|
124
126
|
- spec/confirmer_spec.rb
|
127
|
+
- spec/fixtures/raw_bologna_post.txt
|
125
128
|
- spec/fixtures/raw_post.txt
|
126
129
|
- spec/spec_helper.rb
|