unoffical wafrn mirror
wafrn.net
atproto
social-network
activitypub
1import { Job } from 'bullmq'
2import { User } from '../../models/index.js'
3import { generateKeyPairSync } from 'crypto'
4import { logger } from '../logger.js'
5
6// this funcion is cpu expensive, so we generate it asyncronously.
7// I mean this will take a few seconds at best,
8// user wont be ready to be activated and post at that time
9async function generateUserKeyPair(job: Job) {
10 const user = await User.scope('full').findByPk(job.data.userId)
11 if (user) {
12 const { publicKey, privateKey } = generateKeyPairSync('rsa', {
13 modulusLength: 4096,
14 publicKeyEncoding: {
15 type: 'spki',
16 format: 'pem'
17 },
18 privateKeyEncoding: {
19 type: 'pkcs8',
20 format: 'pem'
21 }
22 })
23 user.publicKey = publicKey
24 user.privateKey = privateKey
25
26 await user.save()
27 } else {
28 logger.error({
29 message: `OH NO user not found for generating keys`,
30 user: job.data.userId
31 })
32 throw new Error('User not found to generate keys!')
33 }
34}
35
36export { generateUserKeyPair }