diff --git a/backend/src/federation/client/Client_1_0.ts b/backend/src/federation/client/1_0/FederationClient.ts similarity index 98% rename from backend/src/federation/client/Client_1_0.ts rename to backend/src/federation/client/1_0/FederationClient.ts index 0c0d458c8..bbd97300e 100644 --- a/backend/src/federation/client/Client_1_0.ts +++ b/backend/src/federation/client/1_0/FederationClient.ts @@ -5,7 +5,7 @@ import { getPublicKey } from '@/federation/query/getPublicKey' import { backendLogger as logger } from '@/server/logger' // eslint-disable-next-line camelcase -export class Client_1_0 { +export class FederationClient { dbCom: DbFederatedCommunity endpoint: string client: GraphQLClient diff --git a/backend/src/federation/client/1_1/FederationClient.ts b/backend/src/federation/client/1_1/FederationClient.ts new file mode 100644 index 000000000..b3401bd05 --- /dev/null +++ b/backend/src/federation/client/1_1/FederationClient.ts @@ -0,0 +1,5 @@ +// eslint-disable-next-line camelcase +import { FederationClient as Client_1_0 } from '@/federation/client/1_0/FederationClient' + +// eslint-disable-next-line camelcase +export class FederationClient extends Client_1_0 {} diff --git a/backend/src/federation/client/Client_1_1.ts b/backend/src/federation/client/Client_1_1.ts deleted file mode 100644 index 8525acc5d..000000000 --- a/backend/src/federation/client/Client_1_1.ts +++ /dev/null @@ -1,5 +0,0 @@ -// eslint-disable-next-line camelcase -import { Client_1_0 } from './Client_1_0' - -// eslint-disable-next-line camelcase -export class Client_1_1 extends Client_1_0 {} diff --git a/backend/src/federation/client/Client.ts b/backend/src/federation/client/FederationClientFactory.ts similarity index 61% rename from backend/src/federation/client/Client.ts rename to backend/src/federation/client/FederationClientFactory.ts index 98f63c127..d057ffd04 100644 --- a/backend/src/federation/client/Client.ts +++ b/backend/src/federation/client/FederationClientFactory.ts @@ -1,24 +1,23 @@ import { FederatedCommunity as DbFederatedCommunity } from '@entity/FederatedCommunity' +// eslint-disable-next-line camelcase +import { FederationClient as V1_0_FederationClient } from '@/federation/client/1_0/FederationClient' +// eslint-disable-next-line camelcase +import { FederationClient as V1_1_FederationClient } from '@/federation/client/1_1/FederationClient' import { ApiVersionType } from '@/federation/enum/apiVersionType' // eslint-disable-next-line camelcase -import { Client_1_0 } from './Client_1_0' -// eslint-disable-next-line camelcase -import { Client_1_1 } from './Client_1_1' +type FederationClient = V1_0_FederationClient | V1_1_FederationClient -// eslint-disable-next-line camelcase -type FederationClient = Client_1_0 | Client_1_1 - -interface ClientInstance { +interface FederationClientInstance { id: number // eslint-disable-next-line no-use-before-define client: FederationClient } // eslint-disable-next-line @typescript-eslint/no-extraneous-class -export class Client { - private static instanceArray: ClientInstance[] = [] +export class FederationClientFactory { + private static instanceArray: FederationClientInstance[] = [] /** * The Singleton's constructor should always be private to prevent direct @@ -30,9 +29,9 @@ export class Client { private static createFederationClient = (dbCom: DbFederatedCommunity) => { switch (dbCom.apiVersion) { case ApiVersionType.V1_0: - return new Client_1_0(dbCom) + return new V1_0_FederationClient(dbCom) case ApiVersionType.V1_1: - return new Client_1_1(dbCom) + return new V1_1_FederationClient(dbCom) default: return null } @@ -45,13 +44,18 @@ export class Client { * just one instance of each subclass around. */ public static getInstance(dbCom: DbFederatedCommunity): FederationClient | null { - const instance = Client.instanceArray.find((instance) => instance.id === dbCom.id) + const instance = FederationClientFactory.instanceArray.find( + (instance) => instance.id === dbCom.id, + ) if (instance) { return instance.client } - const client = Client.createFederationClient(dbCom) + const client = FederationClientFactory.createFederationClient(dbCom) if (client) { - Client.instanceArray.push({ id: dbCom.id, client } as ClientInstance) + FederationClientFactory.instanceArray.push({ + id: dbCom.id, + client, + } as FederationClientInstance) } return client } diff --git a/backend/src/federation/validateCommunities.ts b/backend/src/federation/validateCommunities.ts index 4b337eda9..8a73fd536 100644 --- a/backend/src/federation/validateCommunities.ts +++ b/backend/src/federation/validateCommunities.ts @@ -3,9 +3,11 @@ import { IsNull } from '@dbTools/typeorm' import { FederatedCommunity as DbFederatedCommunity } from '@entity/FederatedCommunity' +// eslint-disable-next-line camelcase +import { FederationClient as V1_0_FederationClient } from '@/federation/client/1_0/FederationClient' +import { FederationClientFactory } from '@/federation/client/FederationClientFactory' import { backendLogger as logger } from '@/server/logger' -import { Client } from './client/Client' import { ApiVersionType } from './enum/apiVersionType' export function startValidateCommunities(timerInterval: number): void { @@ -37,17 +39,20 @@ export async function validateCommunities(): Promise { 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() }) - logger.info('Federation: verified community', dbCom) - } else { - logger.warn( - 'Federation: received not matching publicKey:', - pubKey, - dbCom.publicKey.toString(), - ) + const client = FederationClientFactory.getInstance(dbCom) + // eslint-disable-next-line camelcase + if (client instanceof V1_0_FederationClient) { + 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:', + pubKey, + dbCom.publicKey.toString(), + ) + } } } catch (err) { logger.error(`Error:`, err)