Allow tempurl to be used to sign /info requests

Change-Id: I1f9d26541e9c8f5aec7a6790c87df397d178efe6
This commit is contained in:
Tim Burke 2022-07-22 21:38:57 -07:00
parent 662e530d8d
commit f4e62191bc
2 changed files with 37 additions and 3 deletions

View File

@ -173,7 +173,11 @@ def generate_temp_url(path, seconds, key, method, absolute=False,
raise ValueError('digest must be one of sha1, sha256, or sha512')
parts = path_for_body.split('/', 4)
if len(parts) != 5 or parts[0] or not all(parts[1:(4 if prefix else 5)]):
if path_for_body == '/info':
# /info signatures do not support prefixes or ip ranges
prefix = False
ip_range = None
elif len(parts) != 5 or parts[0] or not all(parts[1:(4 if prefix else 5)]):
if prefix:
raise ValueError('path must at least contain /v1/a/c/')
else:
@ -220,8 +224,12 @@ def generate_temp_url(path, seconds, key, method, absolute=False,
expiration = time.strftime(
EXPIRES_ISO8601_FORMAT, time.gmtime(expiration))
temp_url = '{path}?temp_url_sig={sig}&temp_url_expires={exp}'.format(
path=path_for_body, sig=sig, exp=expiration)
if path_for_body == '/info':
temp_url = '{path}?swiftinfo_sig={sig}&swiftinfo_expires={exp}'.format(
path=path_for_body, sig=sig, exp=expiration)
else:
temp_url = '{path}?temp_url_sig={sig}&temp_url_expires={exp}'.format(
path=path_for_body, sig=sig, exp=expiration)
if ip_range:
temp_url += '&temp_url_ip_range={}'.format(ip_range)

View File

@ -508,6 +508,32 @@ class TestTempURLBytesPathAndNonUtf8Key(TestTempURL):
])
class TestTempURLInfoPath(TestTempURL):
url = '/info'.encode('utf-8')
expected_body = b'\n'.join([
b'GET',
b'1400003600',
url,
])
@property
def expected_url(self):
if isinstance(self.url, bytes):
return self.url + (b'?swiftinfo_sig=temp_url_signature'
b'&swiftinfo_expires=1400003600')
return self.url + (u'?swiftinfo_sig=temp_url_signature'
u'&swiftinfo_expires=1400003600')
@property
def expected_sha512_url(self):
if isinstance(self.url, bytes):
return self.url + (
b'?swiftinfo_sig=sha512:dGVtcF91cmxfc2lnbmF0dXJl'
b'&swiftinfo_expires=1400003600')
return self.url + (u'?swiftinfo_sig=sha512:dGVtcF91cmxfc2lnbmF0dXJl'
u'&swiftinfo_expires=1400003600')
class TestReadableToIterable(unittest.TestCase):
def test_iter(self):