Exemple #1
0
 def set_policy(self, vhost, policy_name, policy):
     vhost = urlquote(vhost, '')
     policy_name = urlquote(policy_name, '')
     self._do_request(
         requests.put,
         'policies/{vhost}/{policy_name}'.format(
             vhost=vhost,
             policy_name=policy_name,
         ),
         json=policy,
     )
Exemple #2
0
 def get_broker_url(agent):
     broker_ip = agent['broker_ip']
     broker_user = agent.get('broker_user', 'guest')
     broker_pass = agent.get('broker_pass', 'guest')
     broker_vhost = agent.get('broker_vhost', '/')
     if agent.get('broker_ssl_enabled'):
         broker_port = BROKER_PORT_SSL
     else:
         broker_port = BROKER_PORT_NO_SSL
     return defaults.BROKER_URL.format(username=urlquote(broker_user),
                                       password=urlquote(broker_pass),
                                       host=broker_ip,
                                       vhost=broker_vhost,
                                       port=broker_port)
Exemple #3
0
def validate_inputs(input_dict, len_input_value=256, err_prefix=None,
                    validate_value_begins_with_letter=True):
    for input_name, input_value in input_dict.items():
        prefix = err_prefix or 'The `{0}` argument'.format(input_name)

        if not input_value:
            raise manager_exceptions.BadParametersError(
                '{0} is empty'.format(prefix)
            )

        if len(input_value) > len_input_value:
            raise manager_exceptions.BadParametersError(
                '{0} is too long. Maximum allowed length is {1} '
                'characters'.format(prefix, len_input_value)
            )

        # urllib.quote changes all chars except alphanumeric chars and _-.
        quoted_value = urlquote(input_value, safe='')
        if quoted_value != input_value:
            raise manager_exceptions.BadParametersError(
                '{0} contains illegal characters. Only letters, digits and the'
                ' characters "-", "." and "_" are allowed'.format(prefix)
            )

        if validate_value_begins_with_letter and \
                input_value[0] not in ascii_letters:
            raise manager_exceptions.BadParametersError(
                '{0} must begin with a letter'.format(prefix)
            )
 def put(self, resource_path, data=None, query_params=None):
     url = self._version_url(resource_path)
     result = self.app.put(urlquote(url),
                           content_type='application/json',
                           data=json.dumps(data) if data else None,
                           query_string=build_query_string(query_params))
     return result
 def put_file(self, resource_path, file_path, query_params=None):
     url = self._version_url(resource_path)
     with open(file_path, 'rb') as f:
         result = self.app.put(urlquote(url),
                               data=f.read(),
                               query_string=build_query_string(
                                   query_params))
         return result
Exemple #6
0
 def create_vhost(self, vhost, copy_policies=True):
     vhost = urlquote(vhost, '')
     self._do_request(requests.put, 'vhosts/{0}'.format(vhost))
     if copy_policies:
         default_policies = self.get_policies('/')
         for policy in default_policies:
             name = policy.pop('name')
             policy.pop('vhost')
             self.set_policy(vhost, name, policy)
Exemple #7
0
 def set_vhost_permissions(self,
                           vhost,
                           username,
                           configure='',
                           write='',
                           read=''):
     vhost = urlquote(vhost, '')
     self._do_request(requests.put,
                      'permissions/{0}/{1}'.format(vhost, username),
                      json={
                          'configure': configure,
                          'write': write,
                          'read': read
                      })
Exemple #8
0
def parse_label(label_key, label_value):
    if ((not isinstance(label_key, text_type)) or
            (not isinstance(label_value, text_type))):
        raise BadLabelsList()

    if len(label_key) > 256 or len(label_value) > 256:
        raise manager_exceptions.BadParametersError(
            'The key or value is too long. Maximum allowed length is '
            '256 characters'
        )

    if urlquote(label_key, safe='') != label_key:
        raise manager_exceptions.BadParametersError(
            f'The key `{label_key}` contains illegal characters. '
            f'Only letters, digits and the characters `-`, `.` and '
            f'`_` are allowed'
        )

    if any(unicodedata.category(char)[0] == 'C' or char == '"'
           for char in label_value):
        raise manager_exceptions.BadParametersError(
            f'The value `{label_value}` contains illegal characters. '
            f'Control characters and `"` are not allowed.'
        )

    parsed_label_key = label_key.lower()
    parsed_label_value = normalize_value(label_value)

    if (parsed_label_key.startswith(RESERVED_PREFIX) and
            parsed_label_key not in RESERVED_LABELS):
        allowed_cfy_labels = ', '.join(RESERVED_LABELS)
        raise manager_exceptions.BadParametersError(
            f'All labels with a `{RESERVED_PREFIX}` prefix are reserved for '
            f'internal use. Allowed `{RESERVED_PREFIX}` prefixed labels '
            f'are: {allowed_cfy_labels}')

    return parsed_label_key, parsed_label_value
Exemple #9
0
 def delete_vhost(self, vhost):
     vhost = urlquote(vhost, '')
     self._do_request(requests.delete, 'vhosts/{0}'.format(vhost))
Exemple #10
0
 def get_policies(self, vhost):
     vhost = urlquote(vhost, '')
     return self._do_request(requests.get,
                             'policies/{vhost}'.format(vhost=vhost)).json()
Exemple #11
0
 def delete(self, resource_path, query_params=None):
     url = self._version_url(resource_path)
     result = self.app.delete(urlquote(url),
                              query_string=build_query_string(query_params))
     return result
Exemple #12
0
 def head(self, resource_path):
     url = self._version_url(resource_path)
     result = self.app.head(urlquote(url))
     return result
Exemple #13
0
 def get(self, resource_path, query_params=None, headers=None):
     url = self._version_url(resource_path)
     result = self.app.get(urlquote(url),
                           headers=headers,
                           query_string=build_query_string(query_params))
     return result
Exemple #14
0
 def patch(self, resource_path, data):
     url = self._version_url(resource_path)
     result = self.app.patch(urlquote(url),
                             content_type='application/json',
                             data=json.dumps(data))
     return result