From a98986a2616a670f95333e413ea92df42287cb2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sybren=20A=2E=20St=C3=BCvel?= Date: Wed, 29 Jun 2016 13:05:04 +0200 Subject: [PATCH] Added pillarsdk.utils.is_valid_id(some_id) function. This allows Pillar-Web to check for ID validity before sending IDs from the URL to Pillar. --- pillarsdk/utils.py | 16 ++++++++++++++++ tests/test_utils.py | 14 ++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/pillarsdk/utils.py b/pillarsdk/utils.py index fcfcbe5..3c60c6a 100644 --- a/pillarsdk/utils.py +++ b/pillarsdk/utils.py @@ -161,3 +161,19 @@ def sanitize_filename(file_name): safe_name = ''.join(c for c in file_name if ord(c) > 31 and c not in badchars) return safe_name.strip(' .') + + +def is_valid_id(some_id, _valid_id_chars=frozenset(b'0123456789abcdef')): + """Returns True iff the ID has a valid form.""" + + if isinstance(some_id, text_type): + try: + some_id = some_id.encode('ascii') + except UnicodeEncodeError: + return False + + if len(some_id) != 24: + return False + + return all(char in _valid_id_chars + for char in some_id) diff --git a/tests/test_utils.py b/tests/test_utils.py index a09cabd..eda695b 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -77,3 +77,17 @@ class PillarUtilsTests(unittest.TestCase): self.assertEqual('abc......def', utils.sanitize_filename('././abc../..///..def')) self.assertEqual('Pad Thai is ผัดไทย', utils.sanitize_filename('Pad Thai is ผัดไทย')) self.assertEqual(u'Pad Thai is ผัดไทย', utils.sanitize_filename(u'Pad Thai is ผัดไทย')) + + def test_is_valid_id(self): + self.assertTrue(utils.is_valid_id(24 * 'a')) + self.assertTrue(utils.is_valid_id('55f35f7e2beb3300960bb074')) + self.assertTrue(utils.is_valid_id(u'55f35f7e2beb3300960bb074')) + + self.assertFalse(utils.is_valid_id(u'555f35f7e2beb3300960bb074')) + self.assertFalse(utils.is_valid_id(u'%2355f35f7e2beb3300960bb074')) + self.assertFalse(utils.is_valid_id(u'#55f35f7e2beb3300960bb074')) + self.assertFalse(utils.is_valid_id(u'a55f-35f7-e2be-b330-0960-bb07')) + self.assertFalse(utils.is_valid_id(u'a55f-35f7-e2be-b330-0960-bb07'[:24])) + + self.assertFalse(utils.is_valid_id(u'55f…')) + self.assertFalse(utils.is_valid_id(u'ประเทศไทย'))