Added ConfirmSubscription + Tests + checks
For now subscriptions do nothing, but if we go the route of handing out subscribe tokens, I have layed the groundwork for validating that
This commit is contained in:
parent
ef8a97f6c3
commit
19074c535c
@ -77,6 +77,7 @@ class Subscription(BaseModel):
|
|||||||
self.protocol = protocol
|
self.protocol = protocol
|
||||||
self.arn = make_arn_for_subscription(self.topic.arn)
|
self.arn = make_arn_for_subscription(self.topic.arn)
|
||||||
self.attributes = {}
|
self.attributes = {}
|
||||||
|
self.confirmed = False
|
||||||
|
|
||||||
def publish(self, message, message_id):
|
def publish(self, message, message_id):
|
||||||
if self.protocol == 'sqs':
|
if self.protocol == 'sqs':
|
||||||
|
@ -540,25 +540,53 @@ class SNSResponse(BaseResponse):
|
|||||||
accounts = self._get_multi_param('AWSAccountId.member.')
|
accounts = self._get_multi_param('AWSAccountId.member.')
|
||||||
action = self._get_multi_param('ActionName.member.')
|
action = self._get_multi_param('ActionName.member.')
|
||||||
|
|
||||||
|
if arn not in self.backend.topics:
|
||||||
|
error_response = self._error('NotFound', 'Topic does not exist')
|
||||||
|
return error_response, dict(status=404)
|
||||||
|
|
||||||
key = (arn, label)
|
key = (arn, label)
|
||||||
self.backend.permissions[key] = {'accounts': accounts, 'action': action}
|
self.backend.permissions[key] = {'accounts': accounts, 'action': action}
|
||||||
|
|
||||||
template = self.response_template(ADD_PERMISSION)
|
template = self.response_template(ADD_PERMISSION_TEMPLATE)
|
||||||
return template.render()
|
return template.render()
|
||||||
|
|
||||||
def remove_permission(self):
|
def remove_permission(self):
|
||||||
arn = self._get_param('TopicArn')
|
arn = self._get_param('TopicArn')
|
||||||
label = self._get_param('Label')
|
label = self._get_param('Label')
|
||||||
|
|
||||||
|
if arn not in self.backend.topics:
|
||||||
|
error_response = self._error('NotFound', 'Topic does not exist')
|
||||||
|
return error_response, dict(status=404)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
key = (arn, label)
|
key = (arn, label)
|
||||||
del self.backend.permissions[key]
|
del self.backend.permissions[key]
|
||||||
except KeyError:
|
except KeyError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
template = self.response_template(DEL_PERMISSION)
|
template = self.response_template(DEL_PERMISSION_TEMPLATE)
|
||||||
return template.render()
|
return template.render()
|
||||||
|
|
||||||
|
def confirm_subscription(self):
|
||||||
|
arn = self._get_param('TopicArn')
|
||||||
|
|
||||||
|
if arn not in self.backend.topics:
|
||||||
|
error_response = self._error('NotFound', 'Topic does not exist')
|
||||||
|
return error_response, dict(status=404)
|
||||||
|
|
||||||
|
# Added other parts here for when they are needed
|
||||||
|
# token = self._get_param('Token')
|
||||||
|
# auth = self._get_param('AuthenticateOnUnsubscribe')
|
||||||
|
# if already_subscribed:
|
||||||
|
# error_response = self._error(
|
||||||
|
# code='AuthorizationError',
|
||||||
|
# message='Subscription already confirmed'
|
||||||
|
# )
|
||||||
|
# return error_response, dict(status=400)
|
||||||
|
|
||||||
|
template = self.response_template(CONFIRM_SUBSCRIPTION_TEMPLATE)
|
||||||
|
return template.render(sub_arn='{0}:68762e72-e9b1-410a-8b3b-903da69ee1d5'.format(arn))
|
||||||
|
|
||||||
|
|
||||||
CREATE_TOPIC_TEMPLATE = """<CreateTopicResponse xmlns="http://sns.amazonaws.com/doc/2010-03-31/">
|
CREATE_TOPIC_TEMPLATE = """<CreateTopicResponse xmlns="http://sns.amazonaws.com/doc/2010-03-31/">
|
||||||
<CreateTopicResult>
|
<CreateTopicResult>
|
||||||
@ -920,14 +948,23 @@ OPT_IN_NUMBER_TEMPLATE = """<OptInPhoneNumberResponse xmlns="http://sns.amazonaw
|
|||||||
</ResponseMetadata>
|
</ResponseMetadata>
|
||||||
</OptInPhoneNumberResponse>"""
|
</OptInPhoneNumberResponse>"""
|
||||||
|
|
||||||
ADD_PERMISSION = """<AddPermissionResponse xmlns="http://sns.amazonaws.com/doc/2010-03-31/">
|
ADD_PERMISSION_TEMPLATE = """<AddPermissionResponse xmlns="http://sns.amazonaws.com/doc/2010-03-31/">
|
||||||
<ResponseMetadata>
|
<ResponseMetadata>
|
||||||
<RequestId>c046e713-c5ff-5888-a7bc-b52f0e4f1299</RequestId>
|
<RequestId>c046e713-c5ff-5888-a7bc-b52f0e4f1299</RequestId>
|
||||||
</ResponseMetadata>
|
</ResponseMetadata>
|
||||||
</AddPermissionResponse>"""
|
</AddPermissionResponse>"""
|
||||||
|
|
||||||
DEL_PERMISSION = """<RemovePermissionResponse xmlns="http://sns.amazonaws.com/doc/2010-03-31/">
|
DEL_PERMISSION_TEMPLATE = """<RemovePermissionResponse xmlns="http://sns.amazonaws.com/doc/2010-03-31/">
|
||||||
<ResponseMetadata>
|
<ResponseMetadata>
|
||||||
<RequestId>e767cc9f-314b-5e1b-b283-9ea3fd4e38a3</RequestId>
|
<RequestId>e767cc9f-314b-5e1b-b283-9ea3fd4e38a3</RequestId>
|
||||||
</ResponseMetadata>
|
</ResponseMetadata>
|
||||||
</RemovePermissionResponse>"""
|
</RemovePermissionResponse>"""
|
||||||
|
|
||||||
|
CONFIRM_SUBSCRIPTION_TEMPLATE = """<ConfirmSubscriptionResponse xmlns="http://sns.amazonaws.com/doc/2010-03-31/">
|
||||||
|
<ConfirmSubscriptionResult>
|
||||||
|
<SubscriptionArn>{{ sub_arn }}</SubscriptionArn>
|
||||||
|
</ConfirmSubscriptionResult>
|
||||||
|
<ResponseMetadata>
|
||||||
|
<RequestId>16eb4dde-7b3c-5b3e-a22a-1fe2a92d3293</RequestId>
|
||||||
|
</ResponseMetadata>
|
||||||
|
</ConfirmSubscriptionResponse>"""
|
||||||
|
@ -87,14 +87,27 @@ def test_opt_in():
|
|||||||
@mock_sns
|
@mock_sns
|
||||||
def test_add_remove_permissions():
|
def test_add_remove_permissions():
|
||||||
conn = boto3.client('sns', region_name='us-east-1')
|
conn = boto3.client('sns', region_name='us-east-1')
|
||||||
|
response = conn.create_topic(Name='testpermissions')
|
||||||
|
|
||||||
conn.add_permission(
|
conn.add_permission(
|
||||||
TopicArn='arn:aws:sns:us-east-1:000000000000:terry_test',
|
TopicArn=response['TopicArn'],
|
||||||
Label='Test1234',
|
Label='Test1234',
|
||||||
AWSAccountId=['999999999999'],
|
AWSAccountId=['999999999999'],
|
||||||
ActionName=['AddPermission']
|
ActionName=['AddPermission']
|
||||||
)
|
)
|
||||||
conn.remove_permission(
|
conn.remove_permission(
|
||||||
TopicArn='arn:aws:sns:us-east-1:000000000000:terry_test',
|
TopicArn=response['TopicArn'],
|
||||||
Label='Test1234'
|
Label='Test1234'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@mock_sns
|
||||||
|
def test_confirm_subscription():
|
||||||
|
conn = boto3.client('sns', region_name='us-east-1')
|
||||||
|
response = conn.create_topic(Name='testconfirm')
|
||||||
|
|
||||||
|
conn.confirm_subscription(
|
||||||
|
TopicArn=response['TopicArn'],
|
||||||
|
Token='2336412f37fb687f5d51e6e241d59b68c4e583a5cee0be6f95bbf97ab8d2441cf47b99e848408adaadf4c197e65f03473d53c4ba398f6abbf38ce2e8ebf7b4ceceb2cd817959bcde1357e58a2861b05288c535822eb88cac3db04f592285249971efc6484194fc4a4586147f16916692',
|
||||||
|
AuthenticateOnUnsubscribe='true'
|
||||||
|
)
|
||||||
|
Loading…
Reference in New Issue
Block a user