diff --git a/backend/src/config/index.ts b/backend/src/config/index.ts index 744f1d3cc..c96f60d17 100644 --- a/backend/src/config/index.ts +++ b/backend/src/config/index.ts @@ -19,7 +19,7 @@ const constants = { LOG_LEVEL: process.env.LOG_LEVEL ?? 'info', CONFIG_VERSION: { DEFAULT: 'DEFAULT', - EXPECTED: 'v18.2023-07-10', + EXPECTED: 'v19.2023-09-01', CURRENT: '', }, } @@ -124,6 +124,8 @@ if ( const federation = { FEDERATION_VALIDATE_COMMUNITY_TIMER: Number(process.env.FEDERATION_VALIDATE_COMMUNITY_TIMER) || 60000, + FEDERATION_XCOM_SENDCOINS_ENABLED: + process.env.FEDERATION_XCOM_SENDCOINS_ENABLED === 'true' || false, } export const CONFIG = { diff --git a/backend/src/graphql/resolver/TransactionResolver.test.ts b/backend/src/graphql/resolver/TransactionResolver.test.ts index 0f4171dd4..ab5558048 100644 --- a/backend/src/graphql/resolver/TransactionResolver.test.ts +++ b/backend/src/graphql/resolver/TransactionResolver.test.ts @@ -58,6 +58,7 @@ let bob: User let peter: User let homeCom: DbCommunity +let foreignCom: DbCommunity describe('send coins', () => { beforeAll(async () => { diff --git a/backend/src/graphql/resolver/TransactionResolver.ts b/backend/src/graphql/resolver/TransactionResolver.ts index 57307cba4..558f2beb4 100644 --- a/backend/src/graphql/resolver/TransactionResolver.ts +++ b/backend/src/graphql/resolver/TransactionResolver.ts @@ -33,12 +33,13 @@ import { calculateBalance } from '@/util/validate' import { virtualLinkTransaction, virtualDecayTransaction } from '@/util/virtualTransactions' import { BalanceResolver } from './BalanceResolver' -import { isHomeCommunity } from './util/communities' +import { isCommunityAuthenticated, isHomeCommunity } from './util/communities' import { findUserByIdentifier } from './util/findUserByIdentifier' import { getLastTransaction } from './util/getLastTransaction' import { getTransactionList } from './util/getTransactionList' import { sendTransactionsToDltConnector } from './util/sendTransactionsToDltConnector' import { transactionLinkSummary } from './util/transactionLinkSummary' +import { CONFIG } from '@/config' export const executeTransaction = async ( amount: Decimal, @@ -484,6 +485,12 @@ export class TransactionResolver { } else { // processing a x-community sendCoins logger.debug('processing a x-community transaction...') + if (!CONFIG.FEDERATION_XCOM_SENDCOINS_ENABLED) { + throw new LogError('X-Community sendCoins disabled per configuration!') + } + if (!(await isCommunityAuthenticated(recipientCommunityIdentifier))) { + throw new LogError('recipient commuity is connected, but still not authenticated yet!') + } } return true } diff --git a/backend/src/graphql/resolver/util/communities.ts b/backend/src/graphql/resolver/util/communities.ts index e4ceeb54b..59e79f077 100644 --- a/backend/src/graphql/resolver/util/communities.ts +++ b/backend/src/graphql/resolver/util/communities.ts @@ -19,3 +19,18 @@ export async function getCommunityUrl(communityIdentifier: string): Promise { + const community = await DbCommunity.findOneOrFail({ + where: [ + { communityUuid: communityIdentifier }, + { name: communityIdentifier }, + { url: communityIdentifier }, + ], + }) + if (community.authenticatedAt) { + return true + } else { + return false + } +}