def put(self, key, **kwargs): """ Create a new secret or update an existing secret if the flag update_if_exists is set to true """ secret_params = self._get_secret_params(key) encrypted_value = self._encrypt_secret_value(secret_params['value']) sm = get_storage_manager() timestamp = utils.get_formatted_timestamp() try: new_secret = models.Secret( id=key, value=encrypted_value, created_at=timestamp, updated_at=timestamp, visibility=secret_params['visibility'], is_hidden_value=secret_params['is_hidden_value']) return sm.put(new_secret) except ConflictError: secret = sm.get(models.Secret, key) if secret and secret_params['update_if_exists']: get_resource_manager().validate_modification_permitted(secret) secret.value = encrypted_value secret.updated_at = timestamp return sm.update(secret) raise
def _make_secret(self, id, value): # these tests are using secrets, but they could just as well # use any other model, we just need to create _something_ in the db now = datetime.now() return models.Secret(id=id, value=value, created_at=now, updated_at=now, visibility=VisibilityState.TENANT)
def put(self, key): """ Create a new secret """ key, value = self._validate_secret_inputs(key) return get_storage_manager().put( models.Secret(id=key, value=value, created_at=utils.get_formatted_timestamp(), updated_at=utils.get_formatted_timestamp()))
def test_all_results_query(self): now = utils.get_formatted_timestamp() for i in range(1, 1002): secret = models.Secret(id='secret_{}'.format(i), value='value', created_at=now, updated_at=now, visibility=VisibilityState.TENANT) self.sm.put(secret) secret_list = self.sm.list(models.Secret, include=['id', 'created_at'], get_all_results=True) self.assertEquals(1000, len(secret_list))
def test_all_results_query(self): now = utils.get_formatted_timestamp() for i in range(1, 1002): secret = models.Secret(id='secret_{}'.format(i), value='value', created_at=now, updated_at=now, visibility=VisibilityState.TENANT) self.sm.put(secret) error_message = '^Response size .*? bigger than max allowed .*?' \ 'please use pagination.$' self.assertRaisesRegexp(IllegalActionError, error_message, self.sm.list, models.Secret, include=['id', 'created_at']) secret_list = self.sm.list(models.Secret, include=['id', 'created_at'], get_all_results=True) self.assertEquals(1001, len(secret_list))
def put(self, key, **kwargs): """ Create a new secret """ request_dict = rest_utils.get_json_and_verify_params({ 'value': { 'type': unicode, }, 'update_if_exists': { 'optional': True, } }) value = request_dict['value'] update_if_exists = rest_utils.verify_and_convert_bool( 'update_if_exists', request_dict.get('update_if_exists', False), ) rest_utils.validate_inputs({'key': key}) sm = get_storage_manager() timestamp = utils.get_formatted_timestamp() try: new_secret = models.Secret( id=key, value=value, created_at=timestamp, updated_at=timestamp, ) return sm.put(new_secret) except ConflictError: secret = sm.get(models.Secret, key) if secret and update_if_exists: get_resource_manager().validate_modification_permitted(secret) secret.value = value secret.updated_at = timestamp return sm.update(secret) raise