mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-02 12:05:57 +01:00
feat: activitypub actor endpoint for user accounts
This commit is contained in:
42
src/activitypub.js
Normal file
42
src/activitypub.js
Normal 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 };
|
||||
}
|
||||
Reference in New Issue
Block a user