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.
This commit is contained in:
2016-06-29 13:05:04 +02:00
parent 7b6a42f3e7
commit a98986a261
2 changed files with 30 additions and 0 deletions

View File

@@ -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)

View File

@@ -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'ประเทศไทย'))