From b9d97a3b690b7f2c42626c8b818e3d0d4ef4608a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Claus-Peter=20H=C3=BCbner?= Date: Thu, 27 Apr 2023 03:12:07 +0200 Subject: [PATCH] Revert "add graphql-client and -endpoint for publicInfo of community" This reverts commit 8c5086e5cdb345216cf8fe6772bb5f14f67f79f4. --- .../federation/client/1_0/FederationClient.ts | 44 ++++++++++ .../client/1_0/FederationClientImpl.ts | 83 ------------------- .../federation/client/1_1/FederationClient.ts | 44 ++++++++++ .../client/1_1/FederationClientImpl.ts | 83 ------------------- .../src/federation/client/FederationClient.ts | 13 --- backend/src/federation/validateCommunities.ts | 55 +++--------- .../api/1_0/model/GetPublicInfoResult.ts | 26 ------ .../api/1_0/resolver/PublicInfoResolver.ts | 18 ---- 8 files changed, 99 insertions(+), 267 deletions(-) create mode 100644 backend/src/federation/client/1_0/FederationClient.ts delete mode 100644 backend/src/federation/client/1_0/FederationClientImpl.ts create mode 100644 backend/src/federation/client/1_1/FederationClient.ts delete mode 100644 backend/src/federation/client/1_1/FederationClientImpl.ts delete mode 100644 backend/src/federation/client/FederationClient.ts delete mode 100644 federation/src/graphql/api/1_0/model/GetPublicInfoResult.ts delete mode 100644 federation/src/graphql/api/1_0/resolver/PublicInfoResolver.ts diff --git a/backend/src/federation/client/1_0/FederationClient.ts b/backend/src/federation/client/1_0/FederationClient.ts new file mode 100644 index 000000000..743d17348 --- /dev/null +++ b/backend/src/federation/client/1_0/FederationClient.ts @@ -0,0 +1,44 @@ +/* eslint-disable @typescript-eslint/no-unsafe-member-access */ +/* eslint-disable @typescript-eslint/no-unsafe-return */ +/* eslint-disable @typescript-eslint/no-unsafe-assignment */ +import { FederatedCommunity as DbFederatedCommunity } from '@entity/FederatedCommunity' +import { gql } from 'graphql-request' + +import { GraphQLGetClient } from '@/federation/client/GraphQLGetClient' +import { LogError } from '@/server/LogError' +import { backendLogger as logger } from '@/server/logger' + +export async function requestGetPublicKey( + dbCom: DbFederatedCommunity, +): Promise { + let endpoint = dbCom.endPoint.endsWith('/') ? dbCom.endPoint : dbCom.endPoint + '/' + endpoint = `${endpoint}${dbCom.apiVersion}/` + logger.info(`requestGetPublicKey with endpoint='${endpoint}'...`) + + const graphQLClient = GraphQLGetClient.getInstance(endpoint) + logger.debug(`graphQLClient=${JSON.stringify(graphQLClient)}`) + const query = gql` + query { + getPublicKey { + publicKey + } + } + ` + const variables = {} + + try { + const { data, errors, extensions, headers, status } = await graphQLClient.rawRequest( + query, + variables, + ) + logger.debug(`Response-Data:`, data, errors, extensions, headers, status) + if (data) { + logger.debug(`Response-PublicKey:`, data.getPublicKey.publicKey) + logger.info(`requestGetPublicKey processed successfully`) + return data.getPublicKey.publicKey + } + logger.warn(`requestGetPublicKey processed without response data`) + } catch (err) { + throw new LogError(`Request-Error:`, err) + } +} diff --git a/backend/src/federation/client/1_0/FederationClientImpl.ts b/backend/src/federation/client/1_0/FederationClientImpl.ts deleted file mode 100644 index deb2c959f..000000000 --- a/backend/src/federation/client/1_0/FederationClientImpl.ts +++ /dev/null @@ -1,83 +0,0 @@ -/* eslint-disable @typescript-eslint/no-unsafe-member-access */ -/* eslint-disable @typescript-eslint/no-unsafe-return */ -/* eslint-disable @typescript-eslint/no-unsafe-assignment */ -import { FederatedCommunity as DbFederatedCommunity } from '@entity/FederatedCommunity' -import { gql } from 'graphql-request' - -import { GraphQLGetClient } from '@/federation/client/GraphQLGetClient' -import { LogError } from '@/server/LogError' -import { backendLogger as logger } from '@/server/logger' - -// eslint-disable-next-line import/no-relative-parent-imports -import { FederationClient, PublicInfo } from '../FederationClient' - -export class FederationClientImpl implements FederationClient { - public async requestGetPublicKey(dbCom: DbFederatedCommunity): Promise { - let endpoint = dbCom.endPoint.endsWith('/') ? dbCom.endPoint : dbCom.endPoint + '/' - endpoint = `${endpoint}${dbCom.apiVersion}/` - logger.info(`requestGetPublicKey with endpoint='${endpoint}'...`) - - const graphQLClient = GraphQLGetClient.getInstance(endpoint) - logger.debug(`graphQLClient=${JSON.stringify(graphQLClient)}`) - const query = gql` - query { - getPublicKey { - publicKey - } - } - ` - const variables = {} - - try { - const { data, errors, extensions, headers, status } = await graphQLClient.rawRequest( - query, - variables, - ) - logger.debug(`Response-Data:`, data, errors, extensions, headers, status) - if (data) { - logger.debug(`Response-PublicKey:`, data.getPublicKey.publicKey) - logger.info(`requestGetPublicKey processed successfully`) - return data.getPublicKey.publicKey - } - logger.warn(`requestGetPublicKey processed without response data`) - } catch (err) { - throw new LogError(`Request-Error:`, err) - } - } - - public async requestGetPublicInfo(dbCom: DbFederatedCommunity): Promise { - let endpoint = dbCom.endPoint.endsWith('/') ? dbCom.endPoint : dbCom.endPoint + '/' - endpoint = `${endpoint}${dbCom.apiVersion}/` - logger.info(`requestGetPublicInfo with endpoint='${endpoint}'...`) - - const graphQLClient = GraphQLGetClient.getInstance(endpoint) - logger.debug(`graphQLClient=${JSON.stringify(graphQLClient)}`) - const query = gql` - query { - getPublicInfo { - name - description - createdAt - publicKey - } - } - ` - const variables = {} - - try { - const { data, errors, extensions, headers, status } = await graphQLClient.rawRequest( - query, - variables, - ) - logger.debug(`Response-Data:`, data, errors, extensions, headers, status) - if (data) { - logger.debug(`Response-PublicInfo:`, data.getPublicInfo.publicInfo) - logger.info(`requestGetPublicInfo processed successfully`) - return data.getPublicInfo.publicInfo - } - logger.warn(`requestGetPublicInfo processed without response data`) - } catch (err) { - throw new LogError(`Request-Error:`, err) - } - } -} 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..35c88bf3b --- /dev/null +++ b/backend/src/federation/client/1_1/FederationClient.ts @@ -0,0 +1,44 @@ +/* eslint-disable @typescript-eslint/no-unsafe-return */ +/* eslint-disable @typescript-eslint/no-unsafe-assignment */ +/* eslint-disable @typescript-eslint/no-unsafe-member-access */ +import { FederatedCommunity as DbFederatedCommunity } from '@entity/FederatedCommunity' +import { gql } from 'graphql-request' + +import { GraphQLGetClient } from '@/federation/client/GraphQLGetClient' +import { LogError } from '@/server/LogError' +import { backendLogger as logger } from '@/server/logger' + +export async function requestGetPublicKey( + dbCom: DbFederatedCommunity, +): Promise { + let endpoint = dbCom.endPoint.endsWith('/') ? dbCom.endPoint : dbCom.endPoint + '/' + endpoint = `${endpoint}${dbCom.apiVersion}/` + logger.info(`requestGetPublicKey with endpoint='${endpoint}'...`) + + const graphQLClient = GraphQLGetClient.getInstance(endpoint) + logger.debug(`graphQLClient=${JSON.stringify(graphQLClient)}`) + const query = gql` + query { + getPublicKey { + publicKey + } + } + ` + const variables = {} + + try { + const { data, errors, extensions, headers, status } = await graphQLClient.rawRequest( + query, + variables, + ) + logger.debug(`Response-Data:`, data, errors, extensions, headers, status) + if (data) { + logger.debug(`Response-PublicKey:`, data.getPublicKey.publicKey) + logger.info(`requestGetPublicKey processed successfully`) + return data.getPublicKey.publicKey + } + logger.warn(`requestGetPublicKey processed without response data`) + } catch (err) { + throw new LogError(`Request-Error:`, err) + } +} diff --git a/backend/src/federation/client/1_1/FederationClientImpl.ts b/backend/src/federation/client/1_1/FederationClientImpl.ts deleted file mode 100644 index 472edcdbd..000000000 --- a/backend/src/federation/client/1_1/FederationClientImpl.ts +++ /dev/null @@ -1,83 +0,0 @@ -/* eslint-disable @typescript-eslint/no-unsafe-return */ -/* eslint-disable @typescript-eslint/no-unsafe-assignment */ -/* eslint-disable @typescript-eslint/no-unsafe-member-access */ -import { FederatedCommunity as DbFederatedCommunity } from '@entity/FederatedCommunity' -import { gql } from 'graphql-request' - -import { GraphQLGetClient } from '@/federation/client/GraphQLGetClient' -import { LogError } from '@/server/LogError' -import { backendLogger as logger } from '@/server/logger' - -// eslint-disable-next-line import/no-relative-parent-imports -import { FederationClient, PublicInfo } from '../FederationClient' - -export class FederationClientImpl implements FederationClient { - async requestGetPublicKey(dbCom: DbFederatedCommunity): Promise { - let endpoint = dbCom.endPoint.endsWith('/') ? dbCom.endPoint : dbCom.endPoint + '/' - endpoint = `${endpoint}${dbCom.apiVersion}/` - logger.info(`requestGetPublicKey with endpoint='${endpoint}'...`) - - const graphQLClient = GraphQLGetClient.getInstance(endpoint) - logger.debug(`graphQLClient=${JSON.stringify(graphQLClient)}`) - const query = gql` - query { - getPublicKey { - publicKey - } - } - ` - const variables = {} - - try { - const { data, errors, extensions, headers, status } = await graphQLClient.rawRequest( - query, - variables, - ) - logger.debug(`Response-Data:`, data, errors, extensions, headers, status) - if (data) { - logger.debug(`Response-PublicKey:`, data.getPublicKey.publicKey) - logger.info(`requestGetPublicKey processed successfully`) - return data.getPublicKey.publicKey - } - logger.warn(`requestGetPublicKey processed without response data`) - } catch (err) { - throw new LogError(`Request-Error:`, err) - } - } - - async requestGetPublicInfo(dbCom: DbFederatedCommunity): Promise { - let endpoint = dbCom.endPoint.endsWith('/') ? dbCom.endPoint : dbCom.endPoint + '/' - endpoint = `${endpoint}${dbCom.apiVersion}/` - logger.info(`requestGetPublicInfo with endpoint='${endpoint}'...`) - - const graphQLClient = GraphQLGetClient.getInstance(endpoint) - logger.debug(`graphQLClient=${JSON.stringify(graphQLClient)}`) - const query = gql` - query { - getPublicInfo { - name - description - createdAt - publicKey - } - } - ` - const variables = {} - - try { - const { data, errors, extensions, headers, status } = await graphQLClient.rawRequest( - query, - variables, - ) - logger.debug(`Response-Data:`, data, errors, extensions, headers, status) - if (data) { - logger.debug(`Response-PublicInfo:`, data.getPublicInfo.publicInfo) - logger.info(`requestGetPublicInfo processed successfully`) - return data.getPublicInfo.publicInfo - } - logger.warn(`requestGetPublicInfo processed without response data`) - } catch (err) { - throw new LogError(`Request-Error:`, err) - } - } -} diff --git a/backend/src/federation/client/FederationClient.ts b/backend/src/federation/client/FederationClient.ts deleted file mode 100644 index 3ddd80cfb..000000000 --- a/backend/src/federation/client/FederationClient.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { FederatedCommunity as DbFederatedCommunity } from '@entity/FederatedCommunity' - -export type PublicInfo = { - name: string - description: string - createdAt: Date - publicKey: string -} - -export interface FederationClient { - requestGetPublicKey(dbCom: DbFederatedCommunity): Promise - requestGetPublicInfo(dbCom: DbFederatedCommunity): Promise -} diff --git a/backend/src/federation/validateCommunities.ts b/backend/src/federation/validateCommunities.ts index da8484318..b38f38ee9 100644 --- a/backend/src/federation/validateCommunities.ts +++ b/backend/src/federation/validateCommunities.ts @@ -1,17 +1,15 @@ -/** eslint-disable @typescript-eslint/no-unsafe-assignment */ /** eslint-disable @typescript-eslint/no-unsafe-call */ +/** eslint-disable @typescript-eslint/no-unsafe-assignment */ import { IsNull } from '@dbTools/typeorm' -import { Community as DbCommunity } from '@entity/Community' import { FederatedCommunity as DbFederatedCommunity } from '@entity/FederatedCommunity' import { LogError } from '@/server/LogError' import { backendLogger as logger } from '@/server/logger' // eslint-disable-next-line camelcase -import { FederationClientImpl as V1_0_FederationClientImpl } from './client/1_0/FederationClientImpl' +import { requestGetPublicKey as v1_0_requestGetPublicKey } from './client/1_0/FederationClient' // eslint-disable-next-line camelcase -import { FederationClientImpl as V1_1_FederationClientImpl } from './client/1_1/FederationClientImpl' -import { FederationClient, PublicInfo } from './client/FederationClient' +import { requestGetPublicKey as v1_1_requestGetPublicKey } from './client/1_1/FederationClient' import { ApiVersionType } from './enum/apiVersionType' export function startValidateCommunities(timerInterval: number): void { @@ -43,10 +41,7 @@ export async function validateCommunities(): Promise { `Federation: validate publicKey for dbCom: ${dbCom.id} with apiVersion=${dbCom.apiVersion}`, ) try { - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access - const pubKey = await getVersionedFederationClient(dbCom.apiVersion).requestGetPublicKey( - dbCom, - ) + const pubKey = await invokeVersionedRequestGetPublicKey(dbCom) logger.info( 'Federation: received publicKey from endpoint', pubKey, @@ -56,17 +51,6 @@ export async function validateCommunities(): Promise { logger.info(`Federation: matching publicKey: ${pubKey}`) await DbFederatedCommunity.update({ id: dbCom.id }, { verifiedAt: new Date() }) logger.debug(`Federation: updated dbCom: ${JSON.stringify(dbCom)}`) - - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment - const pubInfo = await getVersionedFederationClient(dbCom.apiVersion).requestGetPublicInfo( - dbCom, - ) - logger.debug(`Federation: getPublicInfo pubInfo: ${JSON.stringify(pubInfo)}`) - if (pubInfo) { - logger.info(`Federation: write foreign community...`) - await writeForeignCommunity(dbCom, pubInfo) - logger.info(`Federation: write foreign community... successfully`) - } } else { logger.warn( `Federation: received not matching publicKey -> received: ${ @@ -89,36 +73,19 @@ export async function validateCommunities(): Promise { } } -async function writeForeignCommunity( - dbCom: DbFederatedCommunity, - pubInfo: PublicInfo, -): Promise { - if (dbCom && pubInfo) { - const foreignCom = DbCommunity.create() - foreignCom.foreign = true - foreignCom.publicKey = dbCom.publicKey - foreignCom.url = dbCom.endPoint - foreignCom.name = pubInfo.name - foreignCom.description = pubInfo.description - foreignCom.creationDate = pubInfo.createdAt - await DbCommunity.save(foreignCom) - } -} - function isLogError(err: unknown) { return err instanceof LogError } -function getVersionedFederationClient(apiVersion: string): FederationClient { - switch (apiVersion) { +async function invokeVersionedRequestGetPublicKey( + dbCom: DbFederatedCommunity, +): Promise { + switch (dbCom.apiVersion) { case ApiVersionType.V1_0: - // eslint-disable-next-line camelcase - return new V1_0_FederationClientImpl() + return v1_0_requestGetPublicKey(dbCom) case ApiVersionType.V1_1: - // eslint-disable-next-line camelcase - return new V1_1_FederationClientImpl() + return v1_1_requestGetPublicKey(dbCom) default: - // eslint-disable-next-line camelcase - return new V1_0_FederationClientImpl() + return undefined } } diff --git a/federation/src/graphql/api/1_0/model/GetPublicInfoResult.ts b/federation/src/graphql/api/1_0/model/GetPublicInfoResult.ts deleted file mode 100644 index 102f446ba..000000000 --- a/federation/src/graphql/api/1_0/model/GetPublicInfoResult.ts +++ /dev/null @@ -1,26 +0,0 @@ -// eslint-disable-next-line @typescript-eslint/no-unused-vars -import { Community as DbCommunity } from '@entity/Community' -import { Field, ObjectType } from 'type-graphql' - -@ObjectType() -// eslint-disable-next-line @typescript-eslint/no-unused-vars -export class GetPublicInfoResult { - constructor(dbCom: DbCommunity) { - this.publicKey = dbCom.publicKey.toString('hex') - this.name = dbCom.name - this.description = dbCom.description - this.createdAt = dbCom.creationDate - } - - @Field(() => String) - name: string | null - - @Field(() => String) - description: string | null - - @Field(() => Date) - createdAt: Date | null - - @Field(() => String) - publicKey: string -} diff --git a/federation/src/graphql/api/1_0/resolver/PublicInfoResolver.ts b/federation/src/graphql/api/1_0/resolver/PublicInfoResolver.ts deleted file mode 100644 index ad988670b..000000000 --- a/federation/src/graphql/api/1_0/resolver/PublicInfoResolver.ts +++ /dev/null @@ -1,18 +0,0 @@ -// eslint-disable-next-line @typescript-eslint/no-unused-vars -import { Query, Resolver } from 'type-graphql' -import { federationLogger as logger } from '@/server/logger' -import { Community as DbCommunity } from '@entity/Community' -import { GetPublicInfoResult } from '../model/GetPublicInfoResult' - -@Resolver() -// eslint-disable-next-line @typescript-eslint/no-unused-vars -export class PublicInfoResolver { - @Query(() => GetPublicInfoResult) - async getPublicInfo(): Promise { - logger.debug(`getPublicInfo() via apiVersion=1_0 ...`) - const homeCom = await DbCommunity.findOneOrFail({ foreign: false }) - const result = new GetPublicInfoResult(homeCom) - logger.info(`getPublicInfo()-1_0... return publicInfo=${result}`) - return result - } -}