diff options
author | Simo Sorce <simo@redhat.com> | 2015-05-26 18:00:24 -0400 |
---|---|---|
committer | Simo Sorce <simo@redhat.com> | 2015-05-26 18:04:19 -0400 |
commit | c242f5bb58d3bb4546372b18fa7b00c081b586e6 (patch) | |
tree | 2ab6b06e8e6a9ecdb05b99d138e6ab9307130684 /custodia | |
parent | 0050d9d6e7dadfbceb1dd684fea74710d694fd61 (diff) | |
download | custodia-c242f5bb58d3bb4546372b18fa7b00c081b586e6.tar.gz custodia-c242f5bb58d3bb4546372b18fa7b00c081b586e6.tar.xz custodia-c242f5bb58d3bb4546372b18fa7b00c081b586e6.zip |
Properly handle inputs from a query string
parse_qs will always return lists even for single-valued parameters,
check for it in the Validator and properly handle the case.
Signed-off-by: Simo Sorce <simo@redhat.com>
Diffstat (limited to 'custodia')
-rw-r--r-- | custodia/message/formats.py | 30 |
1 files changed, 21 insertions, 9 deletions
diff --git a/custodia/message/formats.py b/custodia/message/formats.py index 48d5955..00845a3 100644 --- a/custodia/message/formats.py +++ b/custodia/message/formats.py @@ -22,9 +22,7 @@ class Validator(object): :param allowed: list of allowed message types (optional) """ self.allowed = allowed or default_types - self.types = dict() - for t in self.allowed: - self.types[t] = key_types[t] + self.types = key_types.copy() def add_types(self, types): self.types.update(types) @@ -36,16 +34,30 @@ class Validator(object): if 'type' not in msg: raise InvalidMessage('The type is missing') + if isinstance(msg['type'], list): + if len(msg['type']) != 1: + raise InvalidMessage('Type is multivalued: %s' % msg['type']) + msg_type = msg['type'][0] + else: + msg_type = msg['type'] + if 'value' not in msg: raise InvalidMessage('The value is missing') - if msg['type'] not in list(self.types.keys()): - raise UnknownMessageType("Type '%s' is unknown" % msg['type']) + if isinstance(msg['value'], list): + if len(msg['value']) != 1: + raise InvalidMessage('Value is multivalued: %s' % msg['value']) + msg_value = msg['value'][0] + else: + msg_value = msg['value'] + + if msg_type not in list(self.types.keys()): + raise UnknownMessageType("Type '%s' is unknown" % msg_type) - if msg['type'] not in self.allowed: + if msg_type not in self.allowed: raise UnallowedMessage("Message type '%s' not allowed" % ( - msg['type'],)) + msg_type,)) - handler = self.types[msg['type']](request) - handler.parse(msg['value']) + handler = self.types[msg_type](request) + handler.parse(msg_value) return handler |