Skip to content

Commit

Permalink
updated test case
Browse files Browse the repository at this point in the history
  • Loading branch information
ANKUR DWIVEDI authored and ANKUR DWIVEDI committed Mar 5, 2024
1 parent 3ab2d0b commit 7195b31
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 18 deletions.
9 changes: 7 additions & 2 deletions libs/url/builder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,12 @@ const hasMoreThanAscii = (str: string) => {
return str.split('').some((char) => char.charCodeAt(0) > 127);
}

const customEncodeURI = (str: string) => {
return str.includes("?") ? `${encodeURI(str.split("?")[0])}?${str.split("?")[1]}` : encodeURI(str);
};

export const encodeStringIfRequired = (str: string) => {
return hasMoreThanAscii(str) ? new URL(str).toString() : str;
return hasMoreThanAscii(str) ? customEncodeURI(str) : str;
}

const buildURL = function (opts: FinalUrlOptions): string {
Expand Down Expand Up @@ -107,7 +111,7 @@ const buildURL = function (opts: FinalUrlOptions): string {

var urlSignature = getSignature({
privateKey: opts.privateKey,
url: encodeStringIfRequired(intermediateURL),
url: intermediateURL,
urlEndpoint: opts.urlEndpoint,
expiryTimestamp: expiryTimestamp,
});
Expand Down Expand Up @@ -172,6 +176,7 @@ function getSignatureTimestamp(seconds: number): string {
export function getSignature(opts: any) {
if (!opts.privateKey || !opts.url || !opts.urlEndpoint) return "";
var stringToSign = opts.url.replace(urlFormatter.addTrailingSlash(opts.urlEndpoint), "") + opts.expiryTimestamp;
stringToSign = encodeStringIfRequired(stringToSign);
return crypto.createHmac("sha1", opts.privateKey).update(stringToSign).digest("hex");
}

Expand Down
32 changes: 16 additions & 16 deletions tests/url-generation.js
Original file line number Diff line number Diff line change
Expand Up @@ -61,45 +61,46 @@ describe("URL generation", function () {
});

it("Signed URL with é in filename", function () {
const encodedUrl = encodeStringIfRequired("https://ik.imagekit.io/test_url_endpoint/test_é_path_alt.jpg");
const testURL = "https://ik.imagekit.io/test_url_endpoint/test_é_path_alt.jpg";
const encodedUrl = encodeStringIfRequired(testURL);
expect(encodedUrl).equal("https://ik.imagekit.io/test_url_endpoint/test_%C3%A9_path_alt.jpg");
const signature = getSignature({
privateKey: "test_private_key",
url: encodedUrl,
url: testURL,
urlEndpoint: "https://ik.imagekit.io/test_url_endpoint",
expiryTimestamp: "9999999999",
});
const url = imagekit.url({
path: "/test_é_path_alt.jpg",
signed: true,
});
expect(url).equal(`https://ik.imagekit.io/test_url_endpoint/test_é_path_alt.jpg?ik-s=09a329f06a5106a8b9c43de8fb6a64948fff7c59`);
expect(url).includes(`ik-s=${signature}`);
expect(url).equal(`https://ik.imagekit.io/test_url_endpoint/test_é_path_alt.jpg?ik-s=${signature}`);
});

it("Signed URL with é in filename and path", function () {
const encodedUrl = encodeStringIfRequired("https://ik.imagekit.io/test_url_endpoint/aéb/test_é_path_alt.jpg");
const testURL = "https://ik.imagekit.io/test_url_endpoint/aéb/test_é_path_alt.jpg";
const encodedUrl = encodeStringIfRequired(testURL);
expect(encodedUrl).equal("https://ik.imagekit.io/test_url_endpoint/a%C3%A9b/test_%C3%A9_path_alt.jpg");
const signature = getSignature({
privateKey: "test_private_key",
url: encodedUrl,
url: testURL,
urlEndpoint: "https://ik.imagekit.io/test_url_endpoint",
expiryTimestamp: "9999999999",
});
const url = imagekit.url({
path: "/aéb/test_é_path_alt.jpg",
signed: true,
});
expect(url).equal(`https://ik.imagekit.io/test_url_endpoint/aéb/test_é_path_alt.jpg?ik-s=fca91582138ac65694425d52f0710b7ae2c3d7cf`);
expect(url).includes(`ik-s=${signature}`);
expect(url).equal(`https://ik.imagekit.io/test_url_endpoint/aéb/test_é_path_alt.jpg?ik-s=${signature}`);
});

it("Signed URL with é in filename, path and transformation as path", function () {
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");
const testURL = "https://ik.imagekit.io/test_url_endpoint/tr:l-text,i-Imagekité,fs-50,l-end/aéb/test_é_path_alt.jpg";
const encodedUrl = encodeStringIfRequired(testURL);
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");
const signature = getSignature({
privateKey: "test_private_key",
url: encodedUrl,
url: testURL,
urlEndpoint: "https://ik.imagekit.io/test_url_endpoint",
expiryTimestamp: "9999999999",
});
Expand All @@ -111,17 +112,17 @@ describe("URL generation", function () {
transformationPosition: "path",
});
expect(url).equal(
`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`
`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}`
);
expect(url).includes(`ik-s=${signature}`);
});

it("Signed URL with é in filename, path and transformation as query", function () {
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");
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";
const encodedUrl = encodeStringIfRequired(testURL);
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");
const signature = getSignature({
privateKey: "test_private_key",
url: encodedUrl,
url: testURL,
urlEndpoint: "https://ik.imagekit.io/test_url_endpoint",
expiryTimestamp: "9999999999",
});
Expand All @@ -132,9 +133,8 @@ describe("URL generation", function () {
transformationPosition: "query",
});
expect(url).equal(
`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`
`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}`
);
expect(url).includes(`ik-s=${signature}`);
});


Expand Down

0 comments on commit 7195b31

Please sign in to comment.