misskey/packages/backend/test/unit/ap-request.ts

75 lines
2.4 KiB
TypeScript
Raw Normal View History

2024-03-01 07:36:19 +09:00
/*
* SPDX-FileCopyrightText: syuilo and misskey-project
* SPDX-License-Identifier: AGPL-3.0-only
*/
import * as assert from 'assert';
import { verifyDraftSignature, parseRequestSignature, genEd25519KeyPair, genRsaKeyPair } from '@misskey-dev/node-http-message-signatures';
2024-03-01 07:36:19 +09:00
import { createSignedGet, createSignedPost } from '@/core/activitypub/ApRequestService.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
};
};
async function getKeyPair(level: string) {
if (level === '00') {
return await genRsaKeyPair();
} else if (level === '01') {
return await genEd25519KeyPair();
}
throw new Error('Invalid level');
}
describe('ap-request', () => {
2024-03-01 07:57:10 +09:00
describe.each(['00', '01'])('createSignedPost with verify', (level) => {
test('pass', async () => {
const keypair = await getKeyPair(level);
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',
};
2024-03-01 07:36:19 +09:00
const req = await createSignedPost({ level, key, url, body, additionalHeaders: headers });
2024-03-01 07:36:19 +09:00
2024-03-01 07:57:10 +09:00
const parsed = parseRequestSignature(req.request);
expect(parsed?.version).toBe('draft');
if (!parsed) return;
const verify = await verifyDraftSignature(parsed.value, keypair.publicKey);
2024-03-01 07:57:10 +09:00
assert.deepStrictEqual(verify, true);
});
2024-03-01 07:36:19 +09:00
});
2024-03-01 07:57:10 +09:00
describe.each(['00', '01'])('createSignedGet with verify', (level) => {
test('pass', async () => {
const keypair = await getKeyPair(level);
const key = { keyId: 'x', 'privateKeyPem': keypair.privateKey };
const url = 'https://example.com/outbox';
const headers = {
'User-Agent': 'UA',
};
2024-03-01 07:36:19 +09:00
const req = await createSignedGet({ level, key, url, additionalHeaders: headers });
2024-03-01 07:36:19 +09:00
2024-03-01 07:57:10 +09:00
const parsed = parseRequestSignature(req.request);
expect(parsed?.version).toBe('draft');
if (!parsed) return;
const verify = await verifyDraftSignature(parsed.value, keypair.publicKey);
2024-03-01 07:57:10 +09:00
assert.deepStrictEqual(verify, true);
});
2024-03-01 07:36:19 +09:00
});
});