mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-08-26 13:24:48 +02:00
fix(importer-curl): keep an = inside --url-query and form values (#606)
This commit is contained in:
@@ -359,7 +359,9 @@ function importCommand(parseEntries: string[], workspaceId: string) {
|
|||||||
if (typeof p !== "string") {
|
if (typeof p !== "string") {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
const [name, value] = p.split("=");
|
// splitOnce: a query value may itself contain "=" (a base64 payload, a
|
||||||
|
// nested filter), and only the first one separates name from value.
|
||||||
|
const [name, value] = splitOnce(p, "=");
|
||||||
urlParameters.push({
|
urlParameters.push({
|
||||||
name: name ?? "",
|
name: name ?? "",
|
||||||
value: value ?? "",
|
value: value ?? "",
|
||||||
@@ -475,7 +477,9 @@ function importCommand(parseEntries: string[], workspaceId: string) {
|
|||||||
...((flagsByName.form as string[] | undefined) || []),
|
...((flagsByName.form as string[] | undefined) || []),
|
||||||
...((flagsByName.F as string[] | undefined) || []),
|
...((flagsByName.F as string[] | undefined) || []),
|
||||||
].map((str) => {
|
].map((str) => {
|
||||||
const parts = str.split("=");
|
// splitOnce for the same reason as --url-query above: base64 padding
|
||||||
|
// ("...==") and any value containing "=" must survive intact.
|
||||||
|
const parts = splitOnce(str, "=");
|
||||||
const name = parts[0] ?? "";
|
const name = parts[0] ?? "";
|
||||||
const value = parts[1] ?? "";
|
const value = parts[1] ?? "";
|
||||||
const item: { name: string; value?: string; file?: string; enabled: boolean } = {
|
const item: { name: string; value?: string; file?: string; enabled: boolean } = {
|
||||||
|
|||||||
@@ -942,6 +942,23 @@ describe("importer-curl", () => {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
test("Keeps an = inside a --url-query value", () => {
|
||||||
|
const imported = convertCurl(
|
||||||
|
'curl --url-query "filter=type=book" --url-query "t=eyJhIjoxfQ==" https://yaak.app',
|
||||||
|
);
|
||||||
|
expect(imported.resources.httpRequests?.[0]?.urlParameters).toEqual([
|
||||||
|
{ enabled: true, name: "filter", value: "type=book" },
|
||||||
|
{ enabled: true, name: "t", value: "eyJhIjoxfQ==" },
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
|
||||||
|
test("Keeps an = inside a form value", () => {
|
||||||
|
const imported = convertCurl('curl -F "t=eyJhIjoxfQ==" -F "q=a=b" https://yaak.app');
|
||||||
|
expect(imported.resources.httpRequests?.[0]?.body?.form).toEqual([
|
||||||
|
{ enabled: true, name: "t", value: "eyJhIjoxfQ==" },
|
||||||
|
{ enabled: true, name: "q", value: "a=b" },
|
||||||
|
]);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
const idCount: Partial<Record<string, number>> = {};
|
const idCount: Partial<Record<string, number>> = {};
|
||||||
|
|||||||
Reference in New Issue
Block a user