Skip to content

Commit c951a7a

Browse files
committed
fixed the expiration time was incorrect
1 parent 85efc46 commit c951a7a

File tree

2 files changed

+56
-1
lines changed

2 files changed

+56
-1
lines changed

alibabacloud_oss_v2/signer/v4.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ def _auth_query(self, signing_ctx: SigningContext) -> None:
119119

120120
datetime_now_iso8601 = datetime_now.strftime('%Y%m%dT%H%M%SZ')
121121
date_now_iso8601 = datetime_now_iso8601[:8]
122-
expires = (expiration_time - datetime_now).seconds
122+
expires = int((expiration_time - datetime_now).total_seconds())
123123

124124
# Scope
125125
region = signing_ctx.region or ''

tests/unit/signer/test_v4.py

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -421,6 +421,61 @@ def test_auth_query_with_additional_headers(self) -> None:
421421
self.assertEqual('abc%3Bzabc', queries.get(
422422
'x-oss-additional-headers', ''))
423423

424+
def test_auth_query_long_expiration(self) -> None:
425+
provider = StaticCredentialsProvider("ak", "sk")
426+
cred = provider.get_credentials()
427+
request = HttpRequest(
428+
"PUT", "http://bucket.oss-cn-hangzhou.aliyuncs.com")
429+
request.headers.update(
430+
{
431+
'x-oss-head1': 'value',
432+
'abc': 'value',
433+
'ZAbc': 'value',
434+
'XYZ': 'value',
435+
'content-type': 'application/octet-stream',
436+
}
437+
)
438+
439+
context = SigningContext(
440+
bucket='bucket',
441+
key='1234+-/123/1.txt',
442+
request=request,
443+
credentials=cred,
444+
product='oss',
445+
region='cn-hangzhou',
446+
signing_time=datetime.datetime.fromtimestamp(1702781677),
447+
)
448+
context.expiration_time = datetime.datetime.fromtimestamp(1702781677 + 5*24*60*60)
449+
context.auth_method_query = True
450+
451+
parameters = {
452+
'param1': 'value1',
453+
'+param1': 'value3',
454+
'|param1': 'value4',
455+
'+param2': '',
456+
'|param2': '',
457+
'param2': '',
458+
}
459+
query = urlencode(parameters, quote_via=quote)
460+
461+
request.url = request.url + "?" + query
462+
463+
signer = SignerV4()
464+
465+
signer.sign(context)
466+
467+
queries = _get_url_query(request.url)
468+
469+
self.assertEqual('OSS4-HMAC-SHA256',
470+
queries.get('x-oss-signature-version'))
471+
self.assertEqual('432000', queries.get('x-oss-expires'))
472+
self.assertEqual(
473+
'ak%2F20231217%2Fcn-hangzhou%2Foss%2Faliyun_v4_request',
474+
queries.get('x-oss-credential'))
475+
self.assertEqual(
476+
'31029123dc7732d2d2cfd4006ea4fdb6cf86da6478f813e2bf8f87877c7b9fec',
477+
queries.get('x-oss-signature'))
478+
self.assertEqual('', queries.get('x-oss-additional-headers', ''))
424479

425480
def _get_url_query(url: str):
426481
encoded_pairs = {}

0 commit comments

Comments
 (0)