Skip to content

Commit 7195b31

Browse files
ANKUR DWIVEDIANKUR DWIVEDI
authored andcommitted
updated test case
1 parent 3ab2d0b commit 7195b31

File tree

2 files changed

+23
-18
lines changed

2 files changed

+23
-18
lines changed

libs/url/builder.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,12 @@ const hasMoreThanAscii = (str: string) => {
2929
return str.split('').some((char) => char.charCodeAt(0) > 127);
3030
}
3131

32+
const customEncodeURI = (str: string) => {
33+
return str.includes("?") ? `${encodeURI(str.split("?")[0])}?${str.split("?")[1]}` : encodeURI(str);
34+
};
35+
3236
export const encodeStringIfRequired = (str: string) => {
33-
return hasMoreThanAscii(str) ? new URL(str).toString() : str;
37+
return hasMoreThanAscii(str) ? customEncodeURI(str) : str;
3438
}
3539

3640
const buildURL = function (opts: FinalUrlOptions): string {
@@ -107,7 +111,7 @@ const buildURL = function (opts: FinalUrlOptions): string {
107111

108112
var urlSignature = getSignature({
109113
privateKey: opts.privateKey,
110-
url: encodeStringIfRequired(intermediateURL),
114+
url: intermediateURL,
111115
urlEndpoint: opts.urlEndpoint,
112116
expiryTimestamp: expiryTimestamp,
113117
});
@@ -172,6 +176,7 @@ function getSignatureTimestamp(seconds: number): string {
172176
export function getSignature(opts: any) {
173177
if (!opts.privateKey || !opts.url || !opts.urlEndpoint) return "";
174178
var stringToSign = opts.url.replace(urlFormatter.addTrailingSlash(opts.urlEndpoint), "") + opts.expiryTimestamp;
179+
stringToSign = encodeStringIfRequired(stringToSign);
175180
return crypto.createHmac("sha1", opts.privateKey).update(stringToSign).digest("hex");
176181
}
177182

tests/url-generation.js

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -61,45 +61,46 @@ describe("URL generation", function () {
6161
});
6262

6363
it("Signed URL with é in filename", function () {
64-
const encodedUrl = encodeStringIfRequired("https://ik.imagekit.io/test_url_endpoint/test_é_path_alt.jpg");
64+
const testURL = "https://ik.imagekit.io/test_url_endpoint/test_é_path_alt.jpg";
65+
const encodedUrl = encodeStringIfRequired(testURL);
6566
expect(encodedUrl).equal("https://ik.imagekit.io/test_url_endpoint/test_%C3%A9_path_alt.jpg");
6667
const signature = getSignature({
6768
privateKey: "test_private_key",
68-
url: encodedUrl,
69+
url: testURL,
6970
urlEndpoint: "https://ik.imagekit.io/test_url_endpoint",
7071
expiryTimestamp: "9999999999",
7172
});
7273
const url = imagekit.url({
7374
path: "/test_é_path_alt.jpg",
7475
signed: true,
7576
});
76-
expect(url).equal(`https://ik.imagekit.io/test_url_endpoint/test_é_path_alt.jpg?ik-s=09a329f06a5106a8b9c43de8fb6a64948fff7c59`);
77-
expect(url).includes(`ik-s=${signature}`);
77+
expect(url).equal(`https://ik.imagekit.io/test_url_endpoint/test_é_path_alt.jpg?ik-s=${signature}`);
7878
});
7979

8080
it("Signed URL with é in filename and path", function () {
81-
const encodedUrl = encodeStringIfRequired("https://ik.imagekit.io/test_url_endpoint/aéb/test_é_path_alt.jpg");
81+
const testURL = "https://ik.imagekit.io/test_url_endpoint/aéb/test_é_path_alt.jpg";
82+
const encodedUrl = encodeStringIfRequired(testURL);
8283
expect(encodedUrl).equal("https://ik.imagekit.io/test_url_endpoint/a%C3%A9b/test_%C3%A9_path_alt.jpg");
8384
const signature = getSignature({
8485
privateKey: "test_private_key",
85-
url: encodedUrl,
86+
url: testURL,
8687
urlEndpoint: "https://ik.imagekit.io/test_url_endpoint",
8788
expiryTimestamp: "9999999999",
8889
});
8990
const url = imagekit.url({
9091
path: "/aéb/test_é_path_alt.jpg",
9192
signed: true,
9293
});
93-
expect(url).equal(`https://ik.imagekit.io/test_url_endpoint/aéb/test_é_path_alt.jpg?ik-s=fca91582138ac65694425d52f0710b7ae2c3d7cf`);
94-
expect(url).includes(`ik-s=${signature}`);
94+
expect(url).equal(`https://ik.imagekit.io/test_url_endpoint/aéb/test_é_path_alt.jpg?ik-s=${signature}`);
9595
});
9696

9797
it("Signed URL with é in filename, path and transformation as path", function () {
98-
const encodedUrl = encodeStringIfRequired("https://ik.imagekit.io/test_url_endpoint/tr:l-text,i-Imagekité,fs-50,l-end/aéb/test_é_path_alt.jpg");
98+
const testURL = "https://ik.imagekit.io/test_url_endpoint/tr:l-text,i-Imagekité,fs-50,l-end/aéb/test_é_path_alt.jpg";
99+
const encodedUrl = encodeStringIfRequired(testURL);
99100
expect(encodedUrl).equal("https://ik.imagekit.io/test_url_endpoint/tr:l-text,i-Imagekit%C3%A9,fs-50,l-end/a%C3%A9b/test_%C3%A9_path_alt.jpg");
100101
const signature = getSignature({
101102
privateKey: "test_private_key",
102-
url: encodedUrl,
103+
url: testURL,
103104
urlEndpoint: "https://ik.imagekit.io/test_url_endpoint",
104105
expiryTimestamp: "9999999999",
105106
});
@@ -111,17 +112,17 @@ describe("URL generation", function () {
111112
transformationPosition: "path",
112113
});
113114
expect(url).equal(
114-
`https://ik.imagekit.io/test_url_endpoint/tr:l-text,i-Imagekité,fs-50,l-end/aéb/test_é_path_alt.jpg?ik-s=d7f5aec0b7a766556dfc280bdf2e3466877d025f`
115+
`https://ik.imagekit.io/test_url_endpoint/tr:l-text,i-Imagekité,fs-50,l-end/aéb/test_é_path_alt.jpg?ik-s=${signature}`
115116
);
116-
expect(url).includes(`ik-s=${signature}`);
117117
});
118118

119119
it("Signed URL with é in filename, path and transformation as query", function () {
120-
const encodedUrl = encodeStringIfRequired("https://ik.imagekit.io/test_url_endpoint/aéb/test_é_path_alt.jpg?tr=l-text%2Ci-Imagekité%2Cfs-50%2Cl-end");
120+
const testURL = "https://ik.imagekit.io/test_url_endpoint/aéb/test_é_path_alt.jpg?tr=l-text%2Ci-Imagekit%C3%A9%2Cfs-50%2Cl-end";
121+
const encodedUrl = encodeStringIfRequired(testURL);
121122
expect(encodedUrl).equal("https://ik.imagekit.io/test_url_endpoint/a%C3%A9b/test_%C3%A9_path_alt.jpg?tr=l-text%2Ci-Imagekit%C3%A9%2Cfs-50%2Cl-end");
122123
const signature = getSignature({
123124
privateKey: "test_private_key",
124-
url: encodedUrl,
125+
url: testURL,
125126
urlEndpoint: "https://ik.imagekit.io/test_url_endpoint",
126127
expiryTimestamp: "9999999999",
127128
});
@@ -132,9 +133,8 @@ describe("URL generation", function () {
132133
transformationPosition: "query",
133134
});
134135
expect(url).equal(
135-
`https://ik.imagekit.io/test_url_endpoint/aéb/test_é_path_alt.jpg?tr=l-text%2Ci-Imagekit%C3%A9%2Cfs-50%2Cl-end&ik-s=0b0107144b34e3b33264c0cec1d29ec98d46cbbb`
136+
`https://ik.imagekit.io/test_url_endpoint/aéb/test_é_path_alt.jpg?tr=l-text%2Ci-Imagekit%C3%A9%2Cfs-50%2Cl-end&ik-s=${signature}`
136137
);
137-
expect(url).includes(`ik-s=${signature}`);
138138
});
139139

140140

0 commit comments

Comments
 (0)