Skip to content

Commit 781e721

Browse files
committed
fix(cloudfront-signer): add test cases to verify both dateLessThan and dateGreaterThan parameters
1 parent 7e2a860 commit 781e721

File tree

1 file changed

+97
-0
lines changed

1 file changed

+97
-0
lines changed

packages/cloudfront-signer/src/sign.spec.ts

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -607,8 +607,11 @@ describe("getSignedCookies", () => {
607607

608608
describe("getSignedUrl- when signing a URL with a date range", () => {
609609
const dateString = "2024-05-17T12:30:45.000Z";
610+
const dateGreaterThanString = "2024-05-16T12:30:45.000Z";
610611
const dateNumber = 1125674245900;
612+
const dateGreaterThanNumber = 1716034245000;
611613
const dateObject = new Date(dateString);
614+
const dateGreaterThanObject = new Date(dateGreaterThanString);
612615
it("allows string input compatible with Date constructor", () => {
613616
const epochDateLessThan = Math.round(new Date(dateString).getTime() / 1000);
614617
const resultUrl = getSignedUrl({
@@ -670,4 +673,98 @@ describe("getSignedUrl- when signing a URL with a date range", () => {
670673
expect(resultUrl).toContain(`Expires=${epochDateLessThan}`);
671674
expect(resultCookies["CloudFront-Expires"]).toBe(epochDateLessThan);
672675
});
676+
it("allows string input for date range", () => {
677+
const result = getSignedUrl({
678+
url,
679+
keyPairId,
680+
dateLessThan: dateString,
681+
dateGreaterThan: dateGreaterThanString,
682+
privateKey,
683+
passphrase,
684+
});
685+
686+
const policyStr = JSON.stringify({
687+
Statement: [
688+
{
689+
Resource: url,
690+
Condition: {
691+
DateLessThan: {
692+
"AWS:EpochTime": Math.round(new Date(dateString).getTime() / 1000),
693+
},
694+
DateGreaterThan: {
695+
"AWS:EpochTime": Math.round(new Date(dateGreaterThanString).getTime() / 1000),
696+
},
697+
},
698+
},
699+
],
700+
});
701+
702+
const parsedUrl = parseUrl(result);
703+
expect(parsedUrl).toBeDefined();
704+
const signatureQueryParam = denormalizeBase64(parsedUrl.query!["Signature"] as string);
705+
expect(verifySignature(signatureQueryParam, policyStr)).toBeTruthy();
706+
});
707+
708+
it("allows number input for date range", () => {
709+
const result = getSignedUrl({
710+
url,
711+
keyPairId,
712+
dateLessThan: dateNumber as unknown as string,
713+
dateGreaterThan: dateGreaterThanNumber as unknown as string,
714+
privateKey,
715+
passphrase,
716+
});
717+
718+
const policyStr = JSON.stringify({
719+
Statement: [
720+
{
721+
Resource: url,
722+
Condition: {
723+
DateLessThan: {
724+
"AWS:EpochTime": Math.round(dateNumber / 1000),
725+
},
726+
DateGreaterThan: {
727+
"AWS:EpochTime": Math.round(dateGreaterThanNumber / 1000),
728+
},
729+
},
730+
},
731+
],
732+
});
733+
734+
const parsedUrl = parseUrl(result);
735+
expect(parsedUrl).toBeDefined();
736+
const signatureQueryParam = denormalizeBase64(parsedUrl.query!["Signature"] as string);
737+
expect(verifySignature(signatureQueryParam, policyStr)).toBeTruthy();
738+
});
739+
it("allows Date object input for date range", () => {
740+
const result = getSignedUrl({
741+
url,
742+
keyPairId,
743+
dateLessThan: dateObject as unknown as string,
744+
dateGreaterThan: dateGreaterThanObject as unknown as string,
745+
privateKey,
746+
passphrase,
747+
});
748+
749+
const policyStr = JSON.stringify({
750+
Statement: [
751+
{
752+
Resource: url,
753+
Condition: {
754+
DateLessThan: {
755+
"AWS:EpochTime": Math.round(dateObject.getTime() / 1000),
756+
},
757+
DateGreaterThan: {
758+
"AWS:EpochTime": Math.round(dateGreaterThanObject.getTime() / 1000),
759+
},
760+
},
761+
},
762+
],
763+
});
764+
765+
const parsedUrl = parseUrl(result);
766+
expect(parsedUrl).toBeDefined();
767+
const signatureQueryParam = denormalizeBase64(parsedUrl.query!["Signature"] as string);
768+
expect(verifySignature(signatureQueryParam, policyStr)).toBeTruthy();
769+
});
673770
});

0 commit comments

Comments
 (0)