feat: activitypub actor endpoint for user accounts

This commit is contained in:
Julian Lam
2023-05-17 13:13:30 -04:00
parent 51d8f3b195
commit 2dec357aee
8 changed files with 122 additions and 1 deletions

42
src/activitypub.js Normal file
View File

@@ -0,0 +1,42 @@
'use strict';
const { generateKeyPairSync } = require('crypto');
const winston = require('winston');
const db = require('./database');
const ActivityPub = module.exports;
ActivityPub.getPublicKey = async (uid) => {
let publicKey;
try {
({ publicKey } = await db.getObject(`uid:${uid}:keys`));
} catch (e) {
({ publicKey } = await generateKeys(uid));
}
return publicKey;
};
async function generateKeys(uid) {
winston.info(`[activitypub] Generating RSA key-pair for uid ${uid}`);
const {
publicKey,
privateKey,
} = generateKeyPairSync('rsa', {
modulusLength: 2048,
publicKeyEncoding: {
type: 'spki',
format: 'pem',
},
privateKeyEncoding: {
type: 'pkcs8',
format: 'pem',
},
});
await db.setObject(`uid:${uid}:keys`, { publicKey, privateKey });
return { publicKey, privateKey };
}