| 94 | |
| 95 | |
| 96 | class QueueEncryptionSamples(): |
| 97 | def __init__(self, account): |
| 98 | self.account = account |
| 99 | |
| 100 | def run_all_samples(self): |
| 101 | self.service = self.account.create_queue_service() |
| 102 | |
| 103 | self.put_encrypted_message() |
| 104 | self.peek_get_update_encrypted() |
| 105 | self.decrypt_with_key_encryption_key() |
| 106 | self.require_encryption() |
| 107 | self.alternate_key_algorithms() |
| 108 | |
| 109 | def _get_queue_reference(self, prefix='queue'): |
| 110 | queue_name = '{}{}'.format(prefix, str(uuid.uuid4()).replace('-', '')) |
| 111 | return queue_name |
| 112 | |
| 113 | def _create_queue(self, prefix='queue'): |
| 114 | queue_name = self._get_queue_reference(prefix) |
| 115 | self.service.create_queue(queue_name) |
| 116 | return queue_name |
| 117 | |
| 118 | def put_encrypted_message(self): |
| 119 | queue_name = self._create_queue() |
| 120 | |
| 121 | # KeyWrapper implements the key encryption key interface |
| 122 | # outlined in the get/update message documentation. |
| 123 | # Setting the key_encryption_key property will tell these |
| 124 | # APIs to encrypt messages. |
| 125 | self.service.key_encryption_key = KeyWrapper('key1') |
| 126 | self.service.put_message(queue_name, 'message1') |
| 127 | |
| 128 | self.service.delete_queue(queue_name) |
| 129 | |
| 130 | def peek_get_update_encrypted(self): |
| 131 | queue_name = self._create_queue() |
| 132 | |
| 133 | # The KeyWrapper is still needed for encryption |
| 134 | self.service.key_encryption_key = KeyWrapper('key1') |
| 135 | self.service.put_message(queue_name, 'message1') |
| 136 | |
| 137 | # KeyResolver is used to resolve a key from its id. |
| 138 | # Its interface is defined in the get/peek messages documentation. |
| 139 | key_resolver = KeyResolver() |
| 140 | key_resolver.put_key(self.service.key_encryption_key) |
| 141 | self.service.key_resolver_function = key_resolver.resolve_key |
| 142 | self.service.peek_messages(queue_name) |
| 143 | messages = self.service.get_messages(queue_name) |
| 144 | self.service.update_message(queue_name, |
| 145 | messages[0].id, |
| 146 | messages[0].pop_receipt, |
| 147 | 0, |
| 148 | content='encrypted_message2') |
| 149 | |
| 150 | self.service.delete_queue(queue_name) |
| 151 | |
| 152 | def require_encryption(self): |
| 153 | queue_name = self._create_queue() |
no outgoing calls