From 719a9481346a6d156738f0d25b5902550df99020 Mon Sep 17 00:00:00 2001 From: Faruk AYDIN Date: Fri, 4 Mar 2022 15:16:09 +0300 Subject: [PATCH] fix: Introduce formattedData for connections to separate types --- .../src/graphql/mutations/create-auth-data.ts | 8 ++++---- .../src/graphql/mutations/create-connection.ts | 7 ++++--- .../src/graphql/mutations/reset-connection.ts | 2 +- .../src/graphql/mutations/update-connection.ts | 9 +++++---- .../src/graphql/mutations/verify-connection.ts | 6 +++--- .../backend/src/graphql/queries/test-connection.ts | 4 ++-- packages/backend/src/graphql/types/connection.ts | 2 +- packages/backend/src/models/connection.ts | 13 ++++++++----- 8 files changed, 28 insertions(+), 23 deletions(-) diff --git a/packages/backend/src/graphql/mutations/create-auth-data.ts b/packages/backend/src/graphql/mutations/create-auth-data.ts index 68e6d8e6..85f7b28d 100644 --- a/packages/backend/src/graphql/mutations/create-auth-data.ts +++ b/packages/backend/src/graphql/mutations/create-auth-data.ts @@ -22,15 +22,15 @@ const createAuthDataResolver = async ( const appData = App.findOneByKey(connection.key); const appInstance = new appClass(appData, { - consumerKey: connection.data.consumerKey, - consumerSecret: connection.data.consumerSecret, + consumerKey: connection.formattedData.consumerKey, + consumerSecret: connection.formattedData.consumerSecret, }); const authLink = await appInstance.authenticationClient.createAuthData(); await connection.$query().patch({ - data: { - ...connection.data, + formattedData: { + ...connection.formattedData, ...authLink, }, }); diff --git a/packages/backend/src/graphql/mutations/create-connection.ts b/packages/backend/src/graphql/mutations/create-connection.ts index 0ac12fd1..bb46d56a 100644 --- a/packages/backend/src/graphql/mutations/create-connection.ts +++ b/packages/backend/src/graphql/mutations/create-connection.ts @@ -4,10 +4,11 @@ import connectionType from '../types/connection'; import availableAppsEnumType from '../types/available-apps-enum-type'; import RequestWithCurrentUser from '../../types/express/request-with-current-user'; import { GraphQLJSONObject } from 'graphql-type-json'; +import { IJSONObject } from '@automatisch/types'; type Params = { key: string; - data: object; + formattedData: IJSONObject; }; const createConnectionResolver = async ( params: Params, @@ -17,7 +18,7 @@ const createConnectionResolver = async ( const connection = await req.currentUser.$relatedQuery('connections').insert({ key: params.key, - data: params.data, + formattedData: params.formattedData, }); return { @@ -30,7 +31,7 @@ const createConnection = { type: connectionType, args: { key: { type: GraphQLNonNull(availableAppsEnumType) }, - data: { type: GraphQLNonNull(GraphQLJSONObject) }, + formattedData: { type: GraphQLNonNull(GraphQLJSONObject) }, }, resolve: (_: any, params: Params, req: RequestWithCurrentUser) => createConnectionResolver(params, req), diff --git a/packages/backend/src/graphql/mutations/reset-connection.ts b/packages/backend/src/graphql/mutations/reset-connection.ts index 12aab03b..2c52dbfb 100644 --- a/packages/backend/src/graphql/mutations/reset-connection.ts +++ b/packages/backend/src/graphql/mutations/reset-connection.ts @@ -18,7 +18,7 @@ const resetConnectionResolver = async ( .throwIfNotFound(); connection = await connection.$query().patchAndFetch({ - data: { screenName: connection.data.screenName }, + formattedData: { screenName: connection.formattedData.screenName }, }); return connection; diff --git a/packages/backend/src/graphql/mutations/update-connection.ts b/packages/backend/src/graphql/mutations/update-connection.ts index c07d9348..d5f34c53 100644 --- a/packages/backend/src/graphql/mutations/update-connection.ts +++ b/packages/backend/src/graphql/mutations/update-connection.ts @@ -2,10 +2,11 @@ import { GraphQLString, GraphQLNonNull } from 'graphql'; import { GraphQLJSONObject } from 'graphql-type-json'; import connectionType from '../types/connection'; import RequestWithCurrentUser from '../../types/express/request-with-current-user'; +import { IJSONObject } from '@automatisch/types'; type Params = { id: string; - data: object; + formattedData: IJSONObject; }; const updateConnectionResolver = async ( @@ -20,9 +21,9 @@ const updateConnectionResolver = async ( .throwIfNotFound(); connection = await connection.$query().patchAndFetch({ - data: { - ...connection.data, - ...params.data, + formattedData: { + ...connection.formattedData, + ...params.formattedData, }, }); diff --git a/packages/backend/src/graphql/mutations/verify-connection.ts b/packages/backend/src/graphql/mutations/verify-connection.ts index a8dfea15..118f6bdc 100644 --- a/packages/backend/src/graphql/mutations/verify-connection.ts +++ b/packages/backend/src/graphql/mutations/verify-connection.ts @@ -21,13 +21,13 @@ const verifyConnectionResolver = async ( const appClass = (await import(`../../apps/${connection.key}`)).default; const appData = App.findOneByKey(connection.key); - const appInstance = new appClass(appData, connection.data); + const appInstance = new appClass(appData, connection.formattedData); const verifiedCredentials = await appInstance.authenticationClient.verifyCredentials(); connection = await connection.$query().patchAndFetch({ - data: { - ...connection.data, + formattedData: { + ...connection.formattedData, ...verifiedCredentials, }, verified: true, diff --git a/packages/backend/src/graphql/queries/test-connection.ts b/packages/backend/src/graphql/queries/test-connection.ts index 7420db20..6c991a82 100644 --- a/packages/backend/src/graphql/queries/test-connection.ts +++ b/packages/backend/src/graphql/queries/test-connection.ts @@ -21,12 +21,12 @@ const testConnectionResolver = async ( const appClass = (await import(`../../apps/${connection.key}`)).default; const appData = App.findOneByKey(connection.key); - const appInstance = new appClass(appData, connection.data); + const appInstance = new appClass(appData, connection.formattedData); const isStillVerified = await appInstance.authenticationClient.isStillVerified(); connection = await connection.$query().patchAndFetch({ - data: connection.data, + formattedData: connection.formattedData, verified: isStillVerified, }); diff --git a/packages/backend/src/graphql/types/connection.ts b/packages/backend/src/graphql/types/connection.ts index e9093cb9..9567176a 100644 --- a/packages/backend/src/graphql/types/connection.ts +++ b/packages/backend/src/graphql/types/connection.ts @@ -10,7 +10,7 @@ const connectionType = new GraphQLObjectType({ return { id: { type: GraphQLString }, key: { type: GraphQLString }, - data: { type: connectionDataType }, + formattedData: { type: connectionDataType }, verified: { type: GraphQLBoolean }, app: { type: appType }, createdAt: { type: GraphQLString }, diff --git a/packages/backend/src/models/connection.ts b/packages/backend/src/models/connection.ts index 997a2b33..a0a173ae 100644 --- a/packages/backend/src/models/connection.ts +++ b/packages/backend/src/models/connection.ts @@ -4,11 +4,13 @@ import { AES, enc } from 'crypto-js'; import Base from './base'; import User from './user'; import appConfig from '../config/app'; +import { IJSONObject } from '@automatisch/types'; class Connection extends Base { id!: string; key!: string; - data!: any; + data: string; + formattedData!: IJSONObject; userId!: string; verified: boolean; count: number; @@ -22,7 +24,8 @@ class Connection extends Base { properties: { id: { type: 'string', format: 'uuid' }, key: { type: 'string', minLength: 1, maxLength: 255 }, - data: { type: 'object' }, + data: { type: 'string' }, + formattedData: { type: 'object' }, userId: { type: 'string', format: 'uuid' }, verified: { type: 'boolean' }, }, @@ -42,20 +45,20 @@ class Connection extends Base { encryptData(): void { if (!this.eligibleForEncryption()) return; this.data = AES.encrypt( - JSON.stringify(this.data), + JSON.stringify(this.formattedData), appConfig.encryptionKey ).toString(); } decryptData(): void { if (!this.eligibleForEncryption()) return; - this.data = JSON.parse( + this.formattedData = JSON.parse( AES.decrypt(this.data, appConfig.encryptionKey).toString(enc.Utf8) ); } eligibleForEncryption(): boolean { - return this.data ? true : false; + return this.formattedData ? true : false; } // TODO: Make another abstraction like beforeSave instead of using