mirror of
https://github.com/IT4Change/gradido.git
synced 2026-02-06 09:56:05 +00:00
generate asymmetric keypair and store them in database
This commit is contained in:
parent
8fccf12964
commit
582fc6c58c
@ -40,7 +40,7 @@ export const schema = Joi.object({
|
||||
OPENAI_ACTIVE,
|
||||
PRODUCTION,
|
||||
|
||||
COMMUNITY_REDEEM_URL: Joi.string()
|
||||
COMMUNITY_REDEEM_URL: Joi.string()
|
||||
.uri({ scheme: ['http', 'https'] })
|
||||
.description('The url for redeeming link transactions, must start with frontend base url')
|
||||
.default('http://0.0.0.0/redeem/')
|
||||
|
||||
@ -14,6 +14,9 @@ import { backendLogger as logger } from '@/server/logger'
|
||||
import { startCommunityAuthentication } from './authenticateCommunities'
|
||||
import { PublicCommunityInfoLoggingView } from './client/1_0/logging/PublicCommunityInfoLogging.view'
|
||||
import { ApiVersionType } from './enum/apiVersionType'
|
||||
import { generateKeyPair, exportSPKI, exportPKCS8 } from 'jose'
|
||||
|
||||
// import { CONFIG } from '@/config/'
|
||||
|
||||
export async function startValidateCommunities(timerInterval: number): Promise<void> {
|
||||
if (Number.isNaN(timerInterval) || timerInterval <= 0) {
|
||||
@ -83,6 +86,40 @@ export async function validateCommunities(): Promise<void> {
|
||||
}
|
||||
}
|
||||
|
||||
export async function writeJwtKeyPairInHomeCommunity(): Promise<DbCommunity> {
|
||||
logger.debug(`Federation: writeJwtKeyPairInHomeCommunity`)
|
||||
try {
|
||||
// check for existing homeCommunity entry
|
||||
let homeCom = await DbCommunity.findOne({ where: { foreign: false } })
|
||||
if (homeCom) {
|
||||
if (!homeCom.publicJwtKey && !homeCom.privateJwtKey) {
|
||||
// Generate key pair using jose library
|
||||
const keyPair = await generateKeyPair('RS256');
|
||||
logger.debug(`Federation: writeJwtKeyPairInHomeCommunity generated keypair=`, keyPair);
|
||||
|
||||
// Convert keys to PEM format
|
||||
const publicKeyPem = await exportSPKI(keyPair.publicKey);
|
||||
const privateKeyPem = await exportPKCS8(keyPair.privateKey);
|
||||
|
||||
logger.debug(`Federation: writeJwtKeyPairInHomeCommunity publicKey=`, publicKeyPem);
|
||||
logger.debug(`Federation: writeJwtKeyPairInHomeCommunity privateKey=`, privateKeyPem);
|
||||
|
||||
homeCom.publicJwtKey = Buffer.from(publicKeyPem);
|
||||
logger.debug(`Federation: writeJwtKeyPairInHomeCommunity publicJwtKey.length=`, homeCom.publicJwtKey.length);
|
||||
homeCom.privateJwtKey = Buffer.from(privateKeyPem);
|
||||
logger.debug(`Federation: writeJwtKeyPairInHomeCommunity privateJwtKey.length=`, homeCom.privateJwtKey.length);
|
||||
await DbCommunity.save(homeCom)
|
||||
logger.debug(`Federation: writeJwtKeyPairInHomeCommunity done`)
|
||||
}
|
||||
} else {
|
||||
throw new Error(`Error! A HomeCommunity-Entry still not exist! Please start the DHT-Modul first.`)
|
||||
}
|
||||
return homeCom
|
||||
} catch (err) {
|
||||
throw new Error(`Error writing JwtKeyPair in HomeCommunity-Entry: ${err}`)
|
||||
}
|
||||
}
|
||||
|
||||
async function writeForeignCommunity(
|
||||
dbCom: DbFederatedCommunity,
|
||||
pubInfo: PublicCommunityInfo,
|
||||
|
||||
@ -2,6 +2,7 @@ import 'reflect-metadata'
|
||||
import { CONFIG } from './config'
|
||||
import { startValidateCommunities } from './federation/validateCommunities'
|
||||
import { createServer } from './server/createServer'
|
||||
import { writeJwtKeyPairInHomeCommunity } from './federation/validateCommunities'
|
||||
|
||||
async function main() {
|
||||
const { app } = await createServer()
|
||||
@ -14,6 +15,7 @@ async function main() {
|
||||
console.log(`GraphIQL available at http://localhost:${CONFIG.PORT}`)
|
||||
}
|
||||
})
|
||||
await writeJwtKeyPairInHomeCommunity()
|
||||
await startValidateCommunities(Number(CONFIG.FEDERATION_VALIDATE_COMMUNITY_TIMER))
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user