firefish/packages/backend/test/ap-request.ts

76 lines
1.9 KiB
TypeScript

import * as assert from "assert";
import httpSignature from "@joinfirefish/http-signature";
import { genRsaKeyPair } from "../src/misc/gen-key-pair.js";
import {
createSignedPost,
createSignedGet,
} from "../src/remote/activitypub/ap-request.js";
export const buildParsedSignature = (
signingString: string,
signature: string,
algorithm: string,
) => {
return {
scheme: "Signature",
params: {
keyId: "KeyID", // dummy, not used for verify
algorithm: algorithm,
headers: ["(request-target)", "date", "host", "digest"], // dummy, not used for verify
signature: signature,
},
signingString: signingString,
algorithm: algorithm.toUpperCase(),
keyId: "KeyID", // dummy, not used for verify
};
};
describe("ap-request", () => {
it("createSignedPost with verify", async () => {
const keypair = await genRsaKeyPair();
const key = { keyId: "x", privateKeyPem: keypair.privateKey };
const url = "https://example.com/inbox";
const activity = { a: 1 };
const body = JSON.stringify(activity);
const headers = {
"User-Agent": "UA",
};
const req = createSignedPost({
key,
url,
body,
additionalHeaders: headers,
});
const parsed = buildParsedSignature(
req.signingString,
req.signature,
"rsa-sha256",
);
const result = httpSignature.verifySignature(parsed, keypair.publicKey);
assert.deepStrictEqual(result, true);
});
it("createSignedGet with verify", async () => {
const keypair = await genRsaKeyPair();
const key = { keyId: "x", privateKeyPem: keypair.privateKey };
const url = "https://example.com/outbox";
const headers = {
"User-Agent": "UA",
};
const req = createSignedGet({ key, url, additionalHeaders: headers });
const parsed = buildParsedSignature(
req.signingString,
req.signature,
"rsa-sha256",
);
const result = httpSignature.verifySignature(parsed, keypair.publicKey);
assert.deepStrictEqual(result, true);
});
});