diff --git a/cloudcafe/cloudkeep/barbican/orders/behaviors.py b/cloudcafe/cloudkeep/barbican/orders/behaviors.py index 2c54cf1e..0116c456 100644 --- a/cloudcafe/cloudkeep/barbican/orders/behaviors.py +++ b/cloudcafe/cloudkeep/barbican/orders/behaviors.py @@ -77,37 +77,45 @@ class OrdersBehavior(object): algorithm=self.config.algorithm, bit_length=self.config.bit_length, mode=self.config.mode, - expiration=expiration) + expiration=expiration, + order_type='key') return resp - def create_order_overriding_cfg(self, name=None, payload_content_type=None, - expiration=None, algorithm=None, - bit_length=None, mode=None, headers=None): + def create_order_overriding_cfg( + self, name=None, expiration=None, algorithm=None, bit_length=None, + payload_content_type=None, payload_content_encoding=None, + mode=None, headers=None, order_type='key'): """Creates order using provided parameters or default configurations. Allows for testing individual parameters on creation. """ + content_type = payload_content_type or self.config.payload_content_type resp = self.create_order( name=name or self.config.name, - payload_content_type= - payload_content_type or self.config.payload_content_type, + payload_content_type=content_type, + payload_content_encoding=payload_content_encoding, algorithm=algorithm or self.config.algorithm, bit_length=bit_length or self.config.bit_length, mode=mode or self.config.mode, - expiration=expiration, headers=headers) + expiration=expiration, + order_type=order_type, + headers=headers) return resp - def create_order(self, name=None, payload_content_type=None, - algorithm=None, bit_length=None, mode=None, - expiration=None, headers=None): + def create_order( + self, name=None, algorithm=None, bit_length=None, mode=None, + payload_content_type=None, payload_content_encoding=None, + expiration=None, headers=None, order_type='key'): try: resp = self.orders_client.create_order( name=name, payload_content_type=payload_content_type, + payload_content_encoding=payload_content_encoding, algorithm=algorithm, bit_length=bit_length, mode=mode, expiration=expiration, + order_type=order_type, headers=headers) except ConnectionError as e: # Gracefully handling when Falcon doesn't properly handle our req @@ -124,10 +132,10 @@ class OrdersBehavior(object): self.created_orders.append(behavior_response.id) return behavior_response - def create_order_w_payload(self, name=None, algorithm=None, - bit_length=None, mode=None, - payload_content_type=None, expiration=None, - payload=None): + def create_order_w_payload( + self, name=None, algorithm=None, bit_length=None, mode=None, + payload_content_type=None, payload_content_encoding=None, + expiration=None, payload=None, order_type='key'): """Creates an order with a plain_text value. Separate from standard create order method because it is used for negative testing only and is expected to fail. @@ -140,7 +148,9 @@ class OrdersBehavior(object): mode=mode or self.config.mode, expiration=expiration, payload_content_type=payload_content_type, - payload=payload) + payload_content_encoding=payload_content_encoding, + payload=payload, + order_type=order_type) except ConnectionError as e: # Gracefully handling when Falcon doesn't properly handle our req if type(e.message.reason) is BadStatusLine: diff --git a/cloudcafe/cloudkeep/barbican/orders/client.py b/cloudcafe/cloudkeep/barbican/orders/client.py index 70f1d92f..1690f0cf 100644 --- a/cloudcafe/cloudkeep/barbican/orders/client.py +++ b/cloudcafe/cloudkeep/barbican/orders/client.py @@ -38,8 +38,9 @@ class OrdersClient(BarbicanRestClient): return '{base}/{order_id}'.format(base=self._get_base_url(), order_id=order_id) - def create_order(self, name, payload_content_type, algorithm, - bit_length, mode, expiration, headers=None): + def create_order(self, name, algorithm, bit_length, mode, expiration, + order_type, payload_content_type, + payload_content_encoding, headers=None): """ POST http://.../v1/orders/{order_uuid} Creates an order to generate a secret @@ -47,18 +48,20 @@ class OrdersClient(BarbicanRestClient): remote_url = self._get_base_url() secret = Secret(name=name, payload_content_type=payload_content_type, + payload_content_encoding=payload_content_encoding, expiration=expiration, algorithm=algorithm, bit_length=bit_length, mode=mode) - req_obj = Order(secret=secret) + req_obj = Order(meta=secret, order_type=order_type) resp = self.request('POST', remote_url, request_entity=req_obj, response_entity_type=OrderRef, headers=headers) return resp - def create_order_w_payload(self, name, payload_content_type, algorithm, - bit_length, mode, expiration, payload): + def create_order_w_payload(self, name, algorithm, bit_length, mode, + expiration, payload, payload_content_type, + payload_content_encoding, order_type): """ POST http://.../v1/orders/{order_uuid} Creates an order to generate a secret with plain text. This is @@ -68,12 +71,13 @@ class OrdersClient(BarbicanRestClient): remote_url = self._get_base_url() secret = Secret(name=name, payload_content_type=payload_content_type, + payload_content_encoding=payload_content_encoding, expiration=expiration, algorithm=algorithm, bit_length=bit_length, mode=mode, payload=payload) - req_obj = Order(secret=secret) + req_obj = Order(meta=secret, order_type=order_type) resp = self.request('POST', remote_url, request_entity=req_obj, response_entity_type=OrderRef) diff --git a/cloudcafe/cloudkeep/barbican/orders/models/order.py b/cloudcafe/cloudkeep/barbican/orders/models/order.py index 70ae2939..7ca846fd 100644 --- a/cloudcafe/cloudkeep/barbican/orders/models/order.py +++ b/cloudcafe/cloudkeep/barbican/orders/models/order.py @@ -22,9 +22,11 @@ from cloudcafe.cloudkeep.barbican.secrets.models.secret import Secret class Order(AutoMarshallingModel): - def __init__(self, secret, secret_href=None, status=None, order_ref=None): + def __init__(self, meta=None, secret_href=None, status=None, + order_ref=None, order_type=None): super(Order, self).__init__() - self.secret = secret + self.order_type = order_type + self.meta = meta self.secret_href = secret_href self.status = status self.order_ref = order_ref @@ -45,8 +47,8 @@ class Order(AutoMarshallingModel): return self.get_id_from_ref(ref=self.secret_href) def _obj_to_json(self): - secret_dict = self.secret._obj_to_dict() - return dict_to_str({'secret': secret_dict}) + secret_dict = self.meta._obj_to_dict() + return dict_to_str({'type': self.order_type, 'meta': secret_dict}) @classmethod def _json_to_obj(cls, serialized_str): @@ -59,7 +61,8 @@ class Order(AutoMarshallingModel): 'order_ref': json_dict.get('order_ref'), 'status': json_dict.get('status'), 'secret_href': json_dict.get('secret_ref'), - 'secret': Secret._dict_to_obj(json_dict.get('secret')) + 'meta': Secret._dict_to_obj(json_dict.get('meta')), + 'order_type': json_dict.get('type') } return Order(**args) diff --git a/cloudcafe/cloudkeep/barbican/secrets/models/secret.py b/cloudcafe/cloudkeep/barbican/secrets/models/secret.py index 7f22815d..8cae384e 100644 --- a/cloudcafe/cloudkeep/barbican/secrets/models/secret.py +++ b/cloudcafe/cloudkeep/barbican/secrets/models/secret.py @@ -21,8 +21,9 @@ from cafe.engine.models.base import AutoMarshallingModel class Secret(AutoMarshallingModel): - def __init__(self, name, expiration, algorithm, bit_length, mode, - payload_content_type=None, payload=None, content_types=None, + def __init__(self, name=None, expiration=None, algorithm=None, + bit_length=None, mode=None, payload_content_type=None, + payload=None, content_types=None, payload_content_encoding=None): super(Secret, self).__init__()