From 2abf228ca9f943f9f3e73c748f9526ffe7d651a3 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Thu, 4 May 2023 22:53:55 +0200 Subject: [PATCH 1/7] merge --- backend/src/federation/client/Client_1_0.ts | 26 ++++++----- backend/src/federation/validateCommunities.ts | 46 ++++++------------- 2 files changed, 30 insertions(+), 42 deletions(-) diff --git a/backend/src/federation/client/Client_1_0.ts b/backend/src/federation/client/Client_1_0.ts index 456196bcb..77a72cce8 100644 --- a/backend/src/federation/client/Client_1_0.ts +++ b/backend/src/federation/client/Client_1_0.ts @@ -26,21 +26,25 @@ export class Client_1_0 { } getPublicKey = async (): Promise => { - logger.info(`requestGetPublicKey with endpoint='${this.endpoint}'...`) + logger.info('Federation: getPublicKey from endpoint', this.endpoint) try { // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment - const { data, errors, headers, status } = await this.client.rawRequest(getPublicKey, {}) - logger.debug(`Response-Data:`, data, errors, headers, status) - if (data) { - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access - logger.debug(`Response-PublicKey:`, data.getPublicKey.publicKey) - logger.info(`requestGetPublicKey processed successfully`) - // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access - return data.getPublicKey.publicKey + const { data } = await this.client.rawRequest(getPublicKey, {}) + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + if (!data?.getPublicKey?.publicKey) { + logger.warn('Federation: getPublicKey without response data from endpoint', this.endpoint) + return } - logger.warn(`requestGetPublicKey processed without response data`) + logger.info( + 'Federation: getPublicKey successfull from endpoint', + this.endpoint, + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + data.getPublicKey.publicKey, + ) + // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access + return data.getPublicKey.publicKey } catch (err) { - throw new LogError(`Request-Error:`, err) + logger.warn('Federation: getPublicKey failed for endpoint', this.endpoint) } } } diff --git a/backend/src/federation/validateCommunities.ts b/backend/src/federation/validateCommunities.ts index 6879f98e7..fcce9d0d8 100644 --- a/backend/src/federation/validateCommunities.ts +++ b/backend/src/federation/validateCommunities.ts @@ -3,7 +3,6 @@ import { IsNull } from '@dbTools/typeorm' import { FederatedCommunity as DbFederatedCommunity } from '@entity/FederatedCommunity' -import { LogError } from '@/server/LogError' import { backendLogger as logger } from '@/server/logger' import { Client } from './client/Client' @@ -33,39 +32,24 @@ export async function validateCommunities(): Promise { logger.debug('Federation: dbCom', dbCom) const apiValueStrings: string[] = Object.values(ApiVersionType) logger.debug(`suppported ApiVersions=`, apiValueStrings) - if (apiValueStrings.includes(dbCom.apiVersion)) { - logger.debug( - `Federation: validate publicKey for dbCom: ${dbCom.id} with apiVersion=${dbCom.apiVersion}`, - ) - try { - const pubKey = await Client.getInstance(dbCom)?.getPublicKey() - logger.info( - 'Federation: received publicKey from endpoint', + if (!apiValueStrings.includes(dbCom.apiVersion)) { + logger.warn('Federation: dbCom with unsupported apiVersion', dbCom.endPoint, dbCom.apiVersion) + continue + } + try { + const client = Client.getInstance(dbCom) + const pubKey = await client?.getPublicKey() + if (pubKey && pubKey === dbCom.publicKey.toString()) { + await DbFederatedCommunity.update({ id: dbCom.id }, { verifiedAt: new Date() }) + } else { + logger.warn( + 'Federation: received not matching publicKey:', pubKey, - `${dbCom.endPoint}/${dbCom.apiVersion}`, + dbCom.publicKey.toString(), ) - if (pubKey && pubKey === dbCom.publicKey.toString()) { - logger.info(`Federation: matching publicKey: ${pubKey}`) - await DbFederatedCommunity.update({ id: dbCom.id }, { verifiedAt: new Date() }) - logger.debug(`Federation: updated dbCom: ${JSON.stringify(dbCom)}`) - } else { - logger.warn( - `Federation: received not matching publicKey -> received: ${ - pubKey || 'null' - }, expected: ${dbCom.publicKey.toString()} `, - ) - // DbCommunity.delete({ id: dbCom.id }) - } - } catch (err) { - if (!(err instanceof LogError)) { - logger.error(`Error:`, err) - } } - } else { - logger.warn( - `Federation: dbCom: ${dbCom.id} with unsupported apiVersion=${dbCom.apiVersion}; supported versions`, - apiValueStrings, - ) + } catch (err) { + logger.error(`Error:`, err) } } } From cd7cef4fbf0f022db1d7e7ac11099ddc176dc6a5 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Thu, 4 May 2023 12:09:12 +0200 Subject: [PATCH 2/7] typo --- backend/src/federation/client/Client_1_0.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/federation/client/Client_1_0.ts b/backend/src/federation/client/Client_1_0.ts index 77a72cce8..ad6641f1c 100644 --- a/backend/src/federation/client/Client_1_0.ts +++ b/backend/src/federation/client/Client_1_0.ts @@ -36,7 +36,7 @@ export class Client_1_0 { return } logger.info( - 'Federation: getPublicKey successfull from endpoint', + 'Federation: getPublicKey successful from endpoint', this.endpoint, // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access data.getPublicKey.publicKey, From 6c7243758f885282be5786ea851dfbedb9d64832 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Thu, 4 May 2023 12:26:11 +0200 Subject: [PATCH 3/7] fix tests --- .../federation/validateCommunities.test.ts | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/backend/src/federation/validateCommunities.test.ts b/backend/src/federation/validateCommunities.test.ts index ed4897e09..77d0cc2ad 100644 --- a/backend/src/federation/validateCommunities.test.ts +++ b/backend/src/federation/validateCommunities.test.ts @@ -84,7 +84,8 @@ describe('validate Communities', () => { }) it('logs requestGetPublicKey for community api 1_0 ', () => { expect(logger.info).toBeCalledWith( - `requestGetPublicKey with endpoint='http//localhost:5001/api/1_0/'...`, + 'Federation: getPublicKey from endpoint', + 'http//localhost:5001/api/1_0/', ) }) }) @@ -114,12 +115,14 @@ describe('validate Communities', () => { }) it('logs requestGetPublicKey for community api 1_0 ', () => { expect(logger.info).toBeCalledWith( - `requestGetPublicKey with endpoint='http//localhost:5001/api/1_0/'...`, + 'Federation: getPublicKey from endpoint', + 'http//localhost:5001/api/1_0/', ) }) it('logs requestGetPublicKey for community api 1_1 ', () => { expect(logger.info).toBeCalledWith( - `requestGetPublicKey with endpoint='http//localhost:5001/api/1_1/'...`, + 'Federation: getPublicKey from endpoint', + 'http//localhost:5001/api/1_1/', ) }) }) @@ -152,18 +155,21 @@ describe('validate Communities', () => { }) it('logs requestGetPublicKey for community api 1_0 ', () => { expect(logger.info).toBeCalledWith( - `requestGetPublicKey with endpoint='http//localhost:5001/api/1_0/'...`, + 'Federation: getPublicKey from endpoint', + 'http//localhost:5001/api/1_0/', ) }) it('logs requestGetPublicKey for community api 1_1 ', () => { expect(logger.info).toBeCalledWith( - `requestGetPublicKey with endpoint='http//localhost:5001/api/1_1/'...`, + 'Federation: getPublicKey from endpoint', + 'http//localhost:5001/api/1_1/', ) }) it('logs unsupported api for community with api 2_0 ', () => { expect(logger.warn).toBeCalledWith( - `Federation: dbCom: ${dbCom.id} with unsupported apiVersion=2_0; supported versions`, - ['1_0', '1_1'], + 'Federation: dbCom with unsupported apiVersion', + dbCom.endPoint, + '2_0', ) }) }) From 97b3a88065c6f7d899e745b309d991e664451eaa Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Thu, 4 May 2023 12:27:41 +0200 Subject: [PATCH 4/7] 86% line coverage --- backend/jest.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/jest.config.js b/backend/jest.config.js index ca12668fa..3b251916a 100644 --- a/backend/jest.config.js +++ b/backend/jest.config.js @@ -7,7 +7,7 @@ module.exports = { collectCoverageFrom: ['src/**/*.ts', '!**/node_modules/**', '!src/seeds/**', '!build/**'], coverageThreshold: { global: { - lines: 85, + lines: 86, }, }, setupFiles: ['/test/testSetup.ts'], From d3ba23e1e4c5da32cde11a39bea2070ffaf20f4a Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Thu, 4 May 2023 12:56:46 +0200 Subject: [PATCH 5/7] fix lint --- backend/src/federation/client/Client_1_0.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/backend/src/federation/client/Client_1_0.ts b/backend/src/federation/client/Client_1_0.ts index ad6641f1c..0c0d458c8 100644 --- a/backend/src/federation/client/Client_1_0.ts +++ b/backend/src/federation/client/Client_1_0.ts @@ -2,7 +2,6 @@ import { FederatedCommunity as DbFederatedCommunity } from '@entity/FederatedCom import { GraphQLClient } from 'graphql-request' import { getPublicKey } from '@/federation/query/getPublicKey' -import { LogError } from '@/server/LogError' import { backendLogger as logger } from '@/server/logger' // eslint-disable-next-line camelcase From 2bf839f36212216dc970f32381247c890b09e082 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Thu, 4 May 2023 13:51:08 +0200 Subject: [PATCH 6/7] lint fixes From e924d0bb97c67ae5b1e3192192149319aca11f7e Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Fri, 12 May 2023 15:35:22 +0200 Subject: [PATCH 7/7] log when a community is verified successfully --- backend/src/federation/validateCommunities.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/backend/src/federation/validateCommunities.ts b/backend/src/federation/validateCommunities.ts index fcce9d0d8..4b337eda9 100644 --- a/backend/src/federation/validateCommunities.ts +++ b/backend/src/federation/validateCommunities.ts @@ -41,6 +41,7 @@ export async function validateCommunities(): Promise { const pubKey = await client?.getPublicKey() if (pubKey && pubKey === dbCom.publicKey.toString()) { await DbFederatedCommunity.update({ id: dbCom.id }, { verifiedAt: new Date() }) + logger.info('Federation: verified community', dbCom) } else { logger.warn( 'Federation: received not matching publicKey:',