Merge "Updated based on review comments."
This commit is contained in:
		
							
								
								
									
										15
									
								
								cloudcafe/cloudkeep/barbican/verifications/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								cloudcafe/cloudkeep/barbican/verifications/__init__.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,15 @@
 | 
			
		||||
"""
 | 
			
		||||
Copyright 2013 Rackspace
 | 
			
		||||
 | 
			
		||||
Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
you may not use this file except in compliance with the License.
 | 
			
		||||
You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
    http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
See the License for the specific language governing permissions and
 | 
			
		||||
limitations under the License.
 | 
			
		||||
"""
 | 
			
		||||
							
								
								
									
										146
									
								
								cloudcafe/cloudkeep/barbican/verifications/behaviors.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										146
									
								
								cloudcafe/cloudkeep/barbican/verifications/behaviors.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,146 @@
 | 
			
		||||
"""
 | 
			
		||||
Copyright 2013 Rackspace
 | 
			
		||||
 | 
			
		||||
Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
you may not use this file except in compliance with the License.
 | 
			
		||||
You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
    http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
See the License for the specific language governing permissions and
 | 
			
		||||
limitations under the License.
 | 
			
		||||
"""
 | 
			
		||||
from httplib import BadStatusLine
 | 
			
		||||
from requests.exceptions import ConnectionError
 | 
			
		||||
from cloudcafe.cloudkeep.common.responses import CloudkeepResponse
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class VerificationsBehavior(object):
 | 
			
		||||
 | 
			
		||||
    def __init__(self, verifications_client, config):
 | 
			
		||||
        super(VerificationsBehavior, self).__init__()
 | 
			
		||||
        self.verifications_client = verifications_client
 | 
			
		||||
        self.config = config
 | 
			
		||||
        self.created_verifications = []
 | 
			
		||||
 | 
			
		||||
    def create_and_check_verification(self, resource_type=None,
 | 
			
		||||
                                      resource_ref=None,
 | 
			
		||||
                                      resource_action=None,
 | 
			
		||||
                                      impersonation_allowed=False):
 | 
			
		||||
        """Creates verification, gets verification."""
 | 
			
		||||
        resp = self.create_verification_overriding_cfg(
 | 
			
		||||
            resource_type=resource_type, resource_ref=resource_ref,
 | 
			
		||||
            resource_action=resource_action,
 | 
			
		||||
            impersonation_allowed=impersonation_allowed)
 | 
			
		||||
 | 
			
		||||
        get_verification_resp = self.verifications_client.get_verification(
 | 
			
		||||
            verification_id=resp.id)
 | 
			
		||||
        behavior_response = CloudkeepResponse(resp=resp.create_resp,
 | 
			
		||||
                                              get_resp=get_verification_resp)
 | 
			
		||||
        return behavior_response
 | 
			
		||||
 | 
			
		||||
    def create_verification_from_config(self):
 | 
			
		||||
        """Creates verification from configuration."""
 | 
			
		||||
 | 
			
		||||
        resp = self.create_verification(
 | 
			
		||||
            resource_type=self.config.resource_type,
 | 
			
		||||
            resource_ref=self.config.resource_ref,
 | 
			
		||||
            resource_action=self.config.resource_action,
 | 
			
		||||
            impersonation_allowed=self.config.impersonation_allowed)
 | 
			
		||||
        return resp
 | 
			
		||||
 | 
			
		||||
    def create_verification_overriding_cfg(self, resource_type=None,
 | 
			
		||||
                                           resource_ref=None,
 | 
			
		||||
                                           resource_action=None,
 | 
			
		||||
                                           impersonation_allowed=False):
 | 
			
		||||
        """Creates verification using provided parameters or default
 | 
			
		||||
        configurations. Allows for testing individual parameters on creation.
 | 
			
		||||
        """
 | 
			
		||||
        if impersonation_allowed is None:
 | 
			
		||||
            imp_allowed = False
 | 
			
		||||
        else:
 | 
			
		||||
            imp_allowed = impersonation_allowed
 | 
			
		||||
 | 
			
		||||
        resp = self.create_verification(
 | 
			
		||||
            resource_type=resource_type or self.config.resource_type,
 | 
			
		||||
            resource_ref=resource_ref or self.config.resource_ref,
 | 
			
		||||
            resource_action=resource_action or self.config.resource_action,
 | 
			
		||||
            impersonation_allowed=imp_allowed)
 | 
			
		||||
 | 
			
		||||
        return resp
 | 
			
		||||
 | 
			
		||||
    def create_verification(self,
 | 
			
		||||
                            resource_type=None,
 | 
			
		||||
                            resource_ref=None,
 | 
			
		||||
                            resource_action=None,
 | 
			
		||||
                            impersonation_allowed=False):
 | 
			
		||||
        try:
 | 
			
		||||
            resp = self.verifications_client.create_verification(
 | 
			
		||||
                resource_type=resource_type,
 | 
			
		||||
                resource_ref=resource_ref,
 | 
			
		||||
                resource_action=resource_action,
 | 
			
		||||
                impersonation_allowed=impersonation_allowed)
 | 
			
		||||
        except ConnectionError as e:
 | 
			
		||||
            # Gracefully handling when Falcon doesn't properly handle our req
 | 
			
		||||
            if type(e.message.reason) is BadStatusLine:
 | 
			
		||||
                return {'status_code': 0}
 | 
			
		||||
            raise e
 | 
			
		||||
 | 
			
		||||
        behavior_response = CloudkeepResponse(resp=resp)
 | 
			
		||||
        verification_id = behavior_response.id
 | 
			
		||||
        if verification_id is not None:
 | 
			
		||||
            self.created_verifications.append(behavior_response.id)
 | 
			
		||||
        return behavior_response
 | 
			
		||||
 | 
			
		||||
    def delete_verification(self, verification_id):
 | 
			
		||||
        resp = self.verifications_client.delete_verification(verification_id)
 | 
			
		||||
        if verification_id in self.created_verifications:
 | 
			
		||||
            self.created_verifications.remove(verification_id)
 | 
			
		||||
        return resp
 | 
			
		||||
 | 
			
		||||
    def delete_all_verifications_in_db(self):
 | 
			
		||||
        verification_group = \
 | 
			
		||||
            self.verifications_client.get_verifications().entity
 | 
			
		||||
        found_ids = []
 | 
			
		||||
        found_ids.extend(verification_group.get_ids())
 | 
			
		||||
 | 
			
		||||
        while verification_group.next is not None:
 | 
			
		||||
            query = verification_group.get_next_query_data()
 | 
			
		||||
            verification_group = self.verifications_client.get_verifications(
 | 
			
		||||
                limit=query.get('limit'),
 | 
			
		||||
                offset=query.get('offset')).entity
 | 
			
		||||
            found_ids.extend(verification_group.get_ids())
 | 
			
		||||
 | 
			
		||||
        for verification_id in found_ids:
 | 
			
		||||
            self.delete_verification(verification_id)
 | 
			
		||||
 | 
			
		||||
    def delete_all_created_verifications(self):
 | 
			
		||||
        for verification_id in list(self.created_verifications):
 | 
			
		||||
            self.delete_verification(verification_id)
 | 
			
		||||
        self.created_verifications = []
 | 
			
		||||
 | 
			
		||||
    def remove_from_created_verifications(self, verification_id):
 | 
			
		||||
        if verification_id in self.created_verifications:
 | 
			
		||||
            self.created_verifications.remove(verification_id)
 | 
			
		||||
 | 
			
		||||
    def find_verification(self, verification_id):
 | 
			
		||||
        verification_group = \
 | 
			
		||||
            self.verifications_client.get_verifications().entity
 | 
			
		||||
 | 
			
		||||
        ids = verification_group.get_ids()
 | 
			
		||||
        while verification_id not in ids and \
 | 
			
		||||
                verification_group.next is not None:
 | 
			
		||||
            query = verification_group.get_next_query_data()
 | 
			
		||||
            verification_group = self.verifications_client.get_verifications(
 | 
			
		||||
                limit=query.get('limit'),
 | 
			
		||||
                offset=query.get('offset')).entity
 | 
			
		||||
            ids = verification_group.get_ids()
 | 
			
		||||
 | 
			
		||||
        for verification in verification_group.verifications:
 | 
			
		||||
            if verification.get_id() == verification_id:
 | 
			
		||||
                return verification
 | 
			
		||||
        else:
 | 
			
		||||
            return None
 | 
			
		||||
							
								
								
									
										86
									
								
								cloudcafe/cloudkeep/barbican/verifications/client.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								cloudcafe/cloudkeep/barbican/verifications/client.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,86 @@
 | 
			
		||||
"""
 | 
			
		||||
Copyright 2013 Rackspace
 | 
			
		||||
 | 
			
		||||
Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
you may not use this file except in compliance with the License.
 | 
			
		||||
You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
    http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
See the License for the specific language governing permissions and
 | 
			
		||||
limitations under the License.
 | 
			
		||||
"""
 | 
			
		||||
from cloudcafe.cloudkeep.barbican.client import BarbicanRestClient
 | 
			
		||||
from cloudcafe.cloudkeep.barbican.verifications.models.verification \
 | 
			
		||||
    import Verification, VerificationRequest, \
 | 
			
		||||
    VerificationRef, VerificationGroup
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class VerificationsClient(BarbicanRestClient):
 | 
			
		||||
 | 
			
		||||
    def __init__(self, url, api_version, tenant_id, token=None,
 | 
			
		||||
                 serialize_format=None, deserialize_format=None):
 | 
			
		||||
        super(VerificationsClient, self).__init__(
 | 
			
		||||
            token=token, serialize_format=serialize_format,
 | 
			
		||||
            deserialize_format=deserialize_format)
 | 
			
		||||
        self.url = url
 | 
			
		||||
        self.api_version = api_version
 | 
			
		||||
        self.tenant_id = tenant_id
 | 
			
		||||
 | 
			
		||||
    def _get_base_url(self):
 | 
			
		||||
        return '{base}/{api_version}/{tenant_id}/verifications'.format(
 | 
			
		||||
            base=self.url,
 | 
			
		||||
            api_version=self.api_version,
 | 
			
		||||
            tenant_id=self.tenant_id)
 | 
			
		||||
 | 
			
		||||
    def _get_verification_url(self, verification_id):
 | 
			
		||||
        return '{base}/{verification_id}'.format(
 | 
			
		||||
            base=self._get_base_url(), verification_id=verification_id)
 | 
			
		||||
 | 
			
		||||
    def create_verification(self, resource_type=None, resource_ref=None,
 | 
			
		||||
                            resource_action=None, impersonation_allowed=False):
 | 
			
		||||
        """
 | 
			
		||||
        POST http://.../v1/{tenant_id}/verifications
 | 
			
		||||
        Creates a request to verify a resource
 | 
			
		||||
        """
 | 
			
		||||
        remote_url = self._get_base_url()
 | 
			
		||||
        req_obj = VerificationRequest(resource_type=resource_type,
 | 
			
		||||
                                      resource_ref=resource_ref,
 | 
			
		||||
                                      resource_action=resource_action,
 | 
			
		||||
                                      impersonation_allowed=
 | 
			
		||||
                                      impersonation_allowed)
 | 
			
		||||
 | 
			
		||||
        resp = self.request('POST', remote_url, request_entity=req_obj,
 | 
			
		||||
                            response_entity_type=VerificationRef)
 | 
			
		||||
        return resp
 | 
			
		||||
 | 
			
		||||
    def get_verification(self, verification_id=None, ref=None):
 | 
			
		||||
        """
 | 
			
		||||
        GET http://.../v1/{tenant_id}/verifications/{verification_uuid}
 | 
			
		||||
        Retrieves a verification
 | 
			
		||||
        """
 | 
			
		||||
        remote_url = ref or self._get_verification_url(verification_id)
 | 
			
		||||
        return self.request('GET', remote_url,
 | 
			
		||||
                            response_entity_type=Verification)
 | 
			
		||||
 | 
			
		||||
    def delete_verification(self, verification_id):
 | 
			
		||||
        """
 | 
			
		||||
        DELETE http://.../v1/{tenant_id}/verifications/{verification_uuid}
 | 
			
		||||
        Cancels a verification
 | 
			
		||||
        """
 | 
			
		||||
        return self.request('DELETE',
 | 
			
		||||
                            self._get_verification_url(verification_id))
 | 
			
		||||
 | 
			
		||||
    def get_verifications(self, limit=None, offset=None, ref=None):
 | 
			
		||||
        """
 | 
			
		||||
        GET http://.../v1/verifications?limit={limit}&offset={offset} or {ref}
 | 
			
		||||
        Gets a list of verifications
 | 
			
		||||
        """
 | 
			
		||||
        remote_url = ref or self._get_base_url()
 | 
			
		||||
        resp = self.request('GET', remote_url,
 | 
			
		||||
                            params={'limit': limit, 'offset': offset},
 | 
			
		||||
                            response_entity_type=VerificationGroup)
 | 
			
		||||
        return resp
 | 
			
		||||
@@ -0,0 +1,15 @@
 | 
			
		||||
"""
 | 
			
		||||
Copyright 2013 Rackspace
 | 
			
		||||
 | 
			
		||||
Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
you may not use this file except in compliance with the License.
 | 
			
		||||
You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
    http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
See the License for the specific language governing permissions and
 | 
			
		||||
limitations under the License.
 | 
			
		||||
"""
 | 
			
		||||
@@ -0,0 +1,175 @@
 | 
			
		||||
"""
 | 
			
		||||
Copyright 2013 Rackspace
 | 
			
		||||
 | 
			
		||||
Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
you may not use this file except in compliance with the License.
 | 
			
		||||
You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
    http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
See the License for the specific language governing permissions and
 | 
			
		||||
limitations under the License.
 | 
			
		||||
"""
 | 
			
		||||
import re
 | 
			
		||||
from os import path
 | 
			
		||||
from json import dumps as dict_to_str, loads as str_to_dict
 | 
			
		||||
 | 
			
		||||
from cafe.engine.models.base import AutoMarshallingModel
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class VerificationRequest(AutoMarshallingModel):
 | 
			
		||||
 | 
			
		||||
    def __init__(self,
 | 
			
		||||
                 resource_action=None,
 | 
			
		||||
                 resource_ref=None,
 | 
			
		||||
                 impersonation_allowed=False,
 | 
			
		||||
                 resource_type=None):
 | 
			
		||||
        super(VerificationRequest, self).__init__()
 | 
			
		||||
        self.resource_action = resource_action
 | 
			
		||||
        self.resource_ref = resource_ref
 | 
			
		||||
        self.impersonation_allowed = impersonation_allowed
 | 
			
		||||
        self.resource_type = resource_type
 | 
			
		||||
 | 
			
		||||
    def get_id_from_ref(self, ref):
 | 
			
		||||
        """Returns id from reference."""
 | 
			
		||||
        ref_id = None
 | 
			
		||||
        if ref is not None and len(ref) > 0:
 | 
			
		||||
            ref_id = path.split(ref)[1]
 | 
			
		||||
        return ref_id
 | 
			
		||||
 | 
			
		||||
    def get_id(self):
 | 
			
		||||
        """Returns verification id."""
 | 
			
		||||
        return self.get_id_from_ref(ref=self.verification_ref)
 | 
			
		||||
 | 
			
		||||
    def _obj_to_json(self):
 | 
			
		||||
        the_dict = {
 | 
			
		||||
            'resource_action': self.resource_action,
 | 
			
		||||
            'resource_ref': self.resource_ref,
 | 
			
		||||
            'impersonation_allowed': self.impersonation_allowed,
 | 
			
		||||
            'resource_type': self.resource_type
 | 
			
		||||
        }
 | 
			
		||||
        return dict_to_str(the_dict)
 | 
			
		||||
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def _json_to_obj(cls, serialized_str):
 | 
			
		||||
        json_dict = str_to_dict(serialized_str)
 | 
			
		||||
        return cls._dict_to_obj(json_dict)
 | 
			
		||||
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def _dict_to_obj(cls, json_dict):
 | 
			
		||||
        args = {
 | 
			
		||||
            'resource_action': json_dict.get('resource_action'),
 | 
			
		||||
            'resource_ref': json_dict.get('resource_ref'),
 | 
			
		||||
            'impersonation_allowed': json_dict.get('impersonation_allowed'),
 | 
			
		||||
            'resource_type': json_dict.get('resource_type')
 | 
			
		||||
        }
 | 
			
		||||
        return Verification(**args)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Verification(AutoMarshallingModel):
 | 
			
		||||
 | 
			
		||||
    def __init__(self, status=None, updated=None, created=None,
 | 
			
		||||
                 resource_action=None, resource_ref=None,
 | 
			
		||||
                 impersonation_allowed=False, verification_ref=None,
 | 
			
		||||
                 is_verified=None, resource_type=None):
 | 
			
		||||
        super(Verification, self).__init__()
 | 
			
		||||
        self.status = status
 | 
			
		||||
        self.updated = updated
 | 
			
		||||
        self.created = created
 | 
			
		||||
        self.resource_action = resource_action
 | 
			
		||||
        self.resource_ref = resource_ref
 | 
			
		||||
        self.impersonation_allowed = impersonation_allowed
 | 
			
		||||
        self.verification_ref = verification_ref
 | 
			
		||||
        self.is_verified = is_verified
 | 
			
		||||
        self.resource_type = resource_type
 | 
			
		||||
 | 
			
		||||
    def get_id_from_ref(self, ref):
 | 
			
		||||
        """Returns id from reference."""
 | 
			
		||||
        ref_id = None
 | 
			
		||||
        if ref is not None and len(ref) > 0:
 | 
			
		||||
            ref_id = path.split(ref)[1]
 | 
			
		||||
        return ref_id
 | 
			
		||||
 | 
			
		||||
    def get_id(self):
 | 
			
		||||
        """Returns verification id."""
 | 
			
		||||
        return self.get_id_from_ref(ref=self.verification_ref)
 | 
			
		||||
 | 
			
		||||
    def _obj_to_json(self):
 | 
			
		||||
        return dict_to_str(self._obj_to_dict())
 | 
			
		||||
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def _json_to_obj(cls, serialized_str):
 | 
			
		||||
        json_dict = str_to_dict(serialized_str)
 | 
			
		||||
        return cls._dict_to_obj(json_dict)
 | 
			
		||||
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def _dict_to_obj(cls, json_dict):
 | 
			
		||||
        args = {
 | 
			
		||||
            'status': json_dict.get('status'),
 | 
			
		||||
            'updated': json_dict.get('updated'),
 | 
			
		||||
            'created': json_dict.get('created'),
 | 
			
		||||
            'resource_action': json_dict.get('resource_action'),
 | 
			
		||||
            'resource_ref': json_dict.get('resource_ref'),
 | 
			
		||||
            'impersonation_allowed': json_dict.get('impersonation_allowed'),
 | 
			
		||||
            'verification_ref': json_dict.get('verification_ref'),
 | 
			
		||||
            'is_verified': json_dict.get('is_verified'),
 | 
			
		||||
            'resource_type': json_dict.get('resource_type')
 | 
			
		||||
        }
 | 
			
		||||
        return Verification(**args)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class VerificationRef(AutoMarshallingModel):
 | 
			
		||||
 | 
			
		||||
    def __init__(self, reference):
 | 
			
		||||
        super(VerificationRef, self).__init__()
 | 
			
		||||
        self.reference = reference
 | 
			
		||||
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def _json_to_obj(cls, serialized_str):
 | 
			
		||||
        json_dict = str_to_dict(serialized_str)
 | 
			
		||||
        return cls._dict_to_obj(json_dict)
 | 
			
		||||
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def _dict_to_obj(cls, json_dict):
 | 
			
		||||
        return VerificationRef(reference=json_dict.get('verification_ref'))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class VerificationGroup(AutoMarshallingModel):
 | 
			
		||||
 | 
			
		||||
    def __init__(self, verifications, next_list=None, previous_list=None):
 | 
			
		||||
        super(VerificationGroup, self).__init__()
 | 
			
		||||
 | 
			
		||||
        self.verifications = verifications
 | 
			
		||||
        self.next = next_list
 | 
			
		||||
        self.previous = previous_list
 | 
			
		||||
 | 
			
		||||
    def get_ids(self):
 | 
			
		||||
        return [verification.get_id() for verification in self.verifications]
 | 
			
		||||
 | 
			
		||||
    def get_next_query_data(self):
 | 
			
		||||
        matches = re.search('.*\?(.*?)\=(\d*)&(.*?)\=(\d*)', self.next)
 | 
			
		||||
        return {
 | 
			
		||||
            'limit': matches.group(2),
 | 
			
		||||
            'offset': matches.group(4)
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def _json_to_obj(cls, serialized_str):
 | 
			
		||||
        json_dict = str_to_dict(serialized_str)
 | 
			
		||||
        return cls._dict_to_obj(json_dict)
 | 
			
		||||
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def _dict_to_obj(cls, json_dict):
 | 
			
		||||
        verifications, next_list, prev_list = [], None, None
 | 
			
		||||
 | 
			
		||||
        for verification_dict in json_dict.get('verifications'):
 | 
			
		||||
            verifications.append(Verification._dict_to_obj(verification_dict))
 | 
			
		||||
 | 
			
		||||
        if 'next' in json_dict:
 | 
			
		||||
            next_list = json_dict.get('next')
 | 
			
		||||
        if 'previous' in json_dict:
 | 
			
		||||
            prev_list = json_dict.get('previous')
 | 
			
		||||
        return VerificationGroup(verifications, next_list, prev_list)
 | 
			
		||||
@@ -22,3 +22,7 @@ class SecretsStates(object):
 | 
			
		||||
 | 
			
		||||
class OrdersStates(SecretsStates):
 | 
			
		||||
    PENDING = "PENDING"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class VerificationsStates(SecretsStates):
 | 
			
		||||
    PENDING = "PENDING"
 | 
			
		||||
 
 | 
			
		||||
@@ -123,3 +123,23 @@ class CloudKeepRBACRoleConfig(ConfigSectionInterface):
 | 
			
		||||
    @property
 | 
			
		||||
    def audit(self):
 | 
			
		||||
        return self.get('audit')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class CloudKeepVerificationsConfig(ConfigSectionInterface):
 | 
			
		||||
    SECTION_NAME = 'cloudkeep-verifications'
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def resource_type(self):
 | 
			
		||||
        return self.get("resource_type")
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def resource_ref(self):
 | 
			
		||||
        return self.get("resource_ref")
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def resource_action(self):
 | 
			
		||||
        return self.get("resource_action")
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def impersonation_allowed(self):
 | 
			
		||||
        return self.get("impersonation_allowed")
 | 
			
		||||
 
 | 
			
		||||
@@ -34,6 +34,12 @@ payload=testdata
 | 
			
		||||
payload_content_type=application/octet-stream
 | 
			
		||||
payload_content_encoding=base64
 | 
			
		||||
 | 
			
		||||
[cloudkeep-verifications]
 | 
			
		||||
resource_ref=<resource_ref>
 | 
			
		||||
resource_type=image
 | 
			
		||||
resource_action=vm_attach
 | 
			
		||||
impersonation_allowed=False
 | 
			
		||||
 | 
			
		||||
[cloudkeep-orders]
 | 
			
		||||
name=secretname
 | 
			
		||||
algorithm=aes
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user