mirror of
https://github.com/IT4Change/gradido.git
synced 2026-02-06 09:56:05 +00:00
Merge branch 'dlt_export_federated_communities_node_server' into dlt_connector_direct_usage
This commit is contained in:
commit
65c1669712
@ -43,6 +43,7 @@ const DLT_CONNECTOR_PORT = process.env.DLT_CONNECTOR_PORT ?? 6010
|
||||
const dltConnector = {
|
||||
DLT_CONNECTOR: process.env.DLT_CONNECTOR === 'true' || false,
|
||||
DLT_CONNECTOR_URL: process.env.DLT_CONNECTOR_URL ?? `${COMMUNITY_URL}:${DLT_CONNECTOR_PORT}`,
|
||||
DLT_GRADIDO_NODE_SERVER_HOME_FOLDER: process.env.DLT_GRADIDO_NODE_SERVER_HOME_FOLDER ?? '~/.gradido',
|
||||
}
|
||||
|
||||
const community = {
|
||||
|
||||
@ -79,6 +79,10 @@ export const schema = Joi.object({
|
||||
.when('DLT_CONNECTOR', { is: true, then: Joi.required() })
|
||||
.description('The URL for GDT API endpoint'),
|
||||
|
||||
DLT_GRADIDO_NODE_SERVER_HOME_FOLDER: Joi.string()
|
||||
.default('~/.gradido')
|
||||
.description('The home folder for the gradido dlt node server'),
|
||||
|
||||
EMAIL: Joi.boolean()
|
||||
.default(false)
|
||||
.description('Enable or disable email functionality')
|
||||
|
||||
@ -4,4 +4,5 @@ export interface PublicCommunityInfo {
|
||||
creationDate: Date
|
||||
publicKey: string
|
||||
publicJwtKey: string
|
||||
hieroTopicId: string | null
|
||||
}
|
||||
|
||||
@ -2,6 +2,7 @@ import {
|
||||
Community as DbCommunity,
|
||||
FederatedCommunity as DbFederatedCommunity,
|
||||
getHomeCommunity,
|
||||
getReachableCommunities,
|
||||
} from 'database'
|
||||
import { IsNull } from 'typeorm'
|
||||
|
||||
@ -15,6 +16,9 @@ import { getLogger } from 'log4js'
|
||||
import { startCommunityAuthentication } from './authenticateCommunities'
|
||||
import { PublicCommunityInfoLoggingView } from './client/1_0/logging/PublicCommunityInfoLogging.view'
|
||||
import { ApiVersionType } from 'core'
|
||||
import { CONFIG } from '@/config'
|
||||
import * as path from 'node:path'
|
||||
import * as fs from 'node:fs'
|
||||
|
||||
const logger = getLogger(`${LOG4JS_BASE_CATEGORY_NAME}.federation.validateCommunities`)
|
||||
|
||||
@ -83,6 +87,8 @@ export async function validateCommunities(): Promise<void> {
|
||||
logger.error(`Error:`, err)
|
||||
}
|
||||
}
|
||||
// export communities for gradido dlt node server
|
||||
await exportCommunitiesToDltNodeServer()
|
||||
}
|
||||
|
||||
export async function writeJwtKeyPairInHomeCommunity(): Promise<DbCommunity> {
|
||||
@ -138,6 +144,52 @@ async function writeForeignCommunity(
|
||||
com.publicKey = dbCom.publicKey
|
||||
com.publicJwtKey = pubInfo.publicJwtKey
|
||||
com.url = dbCom.endPoint
|
||||
com.hieroTopicId = pubInfo.hieroTopicId
|
||||
await DbCommunity.save(com)
|
||||
}
|
||||
}
|
||||
|
||||
// prototype, later add api call to gradido dlt node server for adding/updating communities
|
||||
type CommunityForDltNodeServer = {
|
||||
communityId: string
|
||||
hieroTopicId: string
|
||||
alias: string
|
||||
folder: string
|
||||
}
|
||||
async function exportCommunitiesToDltNodeServer(): Promise<void> {
|
||||
if (!CONFIG.DLT_CONNECTOR) {
|
||||
return Promise.resolve()
|
||||
}
|
||||
const folder = CONFIG.DLT_GRADIDO_NODE_SERVER_HOME_FOLDER
|
||||
try {
|
||||
fs.accessSync(folder, fs.constants.R_OK | fs.constants.W_OK)
|
||||
} catch (err) {
|
||||
logger.error(`Error: home folder for DLT Gradido Node Server ${folder} does not exist`)
|
||||
return
|
||||
}
|
||||
|
||||
const dbComs = await getReachableCommunities(CONFIG.FEDERATION_VALIDATE_COMMUNITY_TIMER * 4)
|
||||
const communitiesForDltNodeServer: CommunityForDltNodeServer[] = []
|
||||
// make sure communityName is unique
|
||||
const communityName = new Set<string>()
|
||||
dbComs.forEach((com) => {
|
||||
if (!com.communityUuid || !com.hieroTopicId) {
|
||||
return
|
||||
}
|
||||
let alias = com.name
|
||||
if (!alias || communityName.has(alias)) {
|
||||
alias = com.communityUuid
|
||||
}
|
||||
communityName.add(alias)
|
||||
communitiesForDltNodeServer.push({
|
||||
communityId: com.communityUuid,
|
||||
hieroTopicId: com.hieroTopicId,
|
||||
alias,
|
||||
// use only alpha-numeric chars for folder name
|
||||
folder: alias.replace(/[^a-zA-Z0-9]/g, '_')
|
||||
})
|
||||
})
|
||||
const dltNodeServerCommunitiesFile = path.join(folder, 'communities.json')
|
||||
fs.writeFileSync(dltNodeServerCommunitiesFile, JSON.stringify(communitiesForDltNodeServer, null, 2))
|
||||
logger.debug(`Written communitiesForDltNodeServer to ${dltNodeServerCommunitiesFile}`)
|
||||
}
|
||||
|
||||
@ -88,6 +88,7 @@ GDT_ACTIVE=false
|
||||
# DLT-Connector (still in develop)
|
||||
DLT_CONNECTOR=false
|
||||
DLT_CONNECTOR_PORT=6010
|
||||
DLT_GRADIDO_NODE_SERVER_HOME_FOLDER=/home/gradido/.gradido
|
||||
|
||||
# used for combining a newsletter on klicktipp with this gradido community
|
||||
# if used, user will be subscribed on register and can unsubscribe in his account
|
||||
|
||||
@ -12,6 +12,7 @@ export class GetPublicCommunityInfoResult {
|
||||
this.name = dbCom.name
|
||||
this.description = dbCom.description
|
||||
this.creationDate = dbCom.creationDate
|
||||
this.hieroTopicId = dbCom.hieroTopicId
|
||||
}
|
||||
|
||||
@Field(() => String)
|
||||
@ -28,4 +29,7 @@ export class GetPublicCommunityInfoResult {
|
||||
|
||||
@Field(() => String)
|
||||
publicJwtKey: string
|
||||
|
||||
@Field(() => String)
|
||||
hieroTopicId: string | null
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user