From 6c043a0eb0d922ecd9984af932e1429dabb22487 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Claus-Peter=20H=C3=BCbner?= Date: Wed, 30 Nov 2022 01:57:40 +0100 Subject: [PATCH] rework PR comments --- backend/src/federation/index.ts | 84 ++++++++++++++------------------- 1 file changed, 36 insertions(+), 48 deletions(-) diff --git a/backend/src/federation/index.ts b/backend/src/federation/index.ts index 6b6d4e5ba..39d298448 100644 --- a/backend/src/federation/index.ts +++ b/backend/src/federation/index.ts @@ -15,7 +15,6 @@ const POLLTIME = 20000 const SUCCESSTIME = 120000 const ERRORTIME = 240000 const ANNOUNCETIME = 30000 -const nodeURL = CONFIG.FEDERATION_COMMUNITY_URL || 'not configured' enum ApiVersionType { V1_0 = 'v1_0', @@ -23,30 +22,6 @@ enum ApiVersionType { V2_0 = 'v2_0', } -type CommunityApi = { - api: string - url: string -} -type CommunityApiList = { - apiVersions: CommunityApi[] -} - -const prepareCommunityApiList = (): CommunityApiList => { - /* - const communityApiArray = Object.values(ApiVersionType) - const communityApiArray = new Array() - apiEnumList.forEach((apiEnum) => { - const communityApi = { api: apiEnum, url: nodeURL } - communityApiArray.push(communityApi) - }) - */ - return { - apiVersions: Object.values(ApiVersionType).map(function (apiEnum) { - return { api: apiEnum, url: nodeURL } - }), - } -} - export const startDHT = async ( // connection: Connection, topic: string, @@ -57,7 +32,11 @@ export const startDHT = async ( logger.info(`keyPairDHT: publicKey=${keyPair.publicKey.toString('hex')}`) logger.debug(`keyPairDHT: secretKey=${keyPair.secretKey.toString('hex')}`) - const apiList = prepareCommunityApiList() + const apiList = { + apiVersions: Object.values(ApiVersionType).map(function (apiEnum) { + return { api: apiEnum, url: CONFIG.FEDERATION_COMMUNITY_URL } + }), + } logger.debug(`ApiList: ${JSON.stringify(apiList)}`) const node = new DHT({ keyPair }) @@ -71,31 +50,40 @@ export const startDHT = async ( // console.log("Local public key", noiseSocket.publicKey.toString("hex")); // same as keyPair.publicKey socket.on('data', async (data: Buffer) => { - logger.info(`data: ${data.toString('ascii')}`) - const json = JSON.parse(data.toString('ascii')) + try { + logger.info(`data: ${data.toString('ascii')}`) + const json = JSON.parse(data.toString('ascii')) + if ( + json.apiVersions && + Object.prototype.toString.call(json.apiVersions) === '[object Array]' && + json.apiVersions.length > 0 && + Object.prototype.toString.call(json.apiVersions[0].api) === '[object String]' && + Object.prototype.toString.call(json.apiVersions[0].url) === '[object String]' + ) { + const communities = new Array() - if (json.apiVersions && json.apiVersions.length > 0) { - const communities = new Array() - - for (let i = 0; i < json.apiVersions.length; i++) { - const apiVersion = json.apiVersions[i] - let community = await DbCommunity.findOne({ - publicKey: socket.remotePublicKey.toString('hex'), - apiVersion: apiVersion.api, - }) - if (!community) { - community = DbCommunity.create() - logger.debug(`new federation community...`) + for (let i = 0; i < json.apiVersions.length; i++) { + const apiVersion = json.apiVersions[i] + let community = await DbCommunity.findOne({ + publicKey: socket.remotePublicKey.toString('hex'), + apiVersion: apiVersion.api, + }) + if (!community) { + community = DbCommunity.create() + logger.debug(`new federation community...`) + } + community.apiVersion = apiVersion.api + community.endPoint = apiVersion.url + community.publicKey = socket.remotePublicKey.toString('hex') + community.lastAnnouncedAt = new Date() + communities.push(community) } - community.apiVersion = apiVersion.api - community.endPoint = apiVersion.url - community.publicKey = socket.remotePublicKey.toString('hex') - community.lastAnnouncedAt = new Date() - communities.push(community) - } - await DbCommunity.save(communities) - logger.debug(`federation communities stored: ${JSON.stringify(communities)}`) + await DbCommunity.save(communities) + logger.debug(`federation communities stored: ${JSON.stringify(communities)}`) + } + } catch (e) { + logger.error(`Error on receiving data from socket: ${JSON.stringify(e)}`) } }) // process.stdin.pipe(noiseSocket).pipe(process.stdout);