From cf13a9a7ecfadf3af71ad7acdaeebd7e19ad7053 Mon Sep 17 00:00:00 2001 From: Claus-Peter Huebner Date: Fri, 16 Feb 2024 21:50:49 +0100 Subject: [PATCH 1/7] first draft for update gmsUser --- backend/src/apis/gms/GmsClient.ts | 87 ++++++++++++++----- backend/src/apis/gms/model/GmsUser.ts | 1 + backend/src/graphql/resolver/UserResolver.ts | 16 ++++ .../util/compareGmsRelevantUserSettings.ts | 49 +++++++++++ 4 files changed, 129 insertions(+), 24 deletions(-) create mode 100644 backend/src/graphql/resolver/util/compareGmsRelevantUserSettings.ts diff --git a/backend/src/apis/gms/GmsClient.ts b/backend/src/apis/gms/GmsClient.ts index 46fa64006..87b4c0e95 100644 --- a/backend/src/apis/gms/GmsClient.ts +++ b/backend/src/apis/gms/GmsClient.ts @@ -117,30 +117,69 @@ export async function userByUuid(uuid: string): Promise { - const baseUrl = CONFIG.GMS_URL.endsWith('/') ? CONFIG.GMS_URL : CONFIG.GMS_URL.concat('/') - const service = 'community-user' - const config = { - headers: { - accept: 'application/json', - language: 'en', - timezone: 'UTC', - connection: 'keep-alive', - authorization: apiKey, - }, - } - try { - const result = await axios.post(baseUrl.concat(service), user, config) - logger.debug('POST-Response of community-user:', result) - if (result.status !== 200) { - throw new LogError('HTTP Status Error in community-user:', result.status, result.statusText) + if (CONFIG.GMS_ACTIVE) { + const baseUrl = CONFIG.GMS_URL.endsWith('/') ? CONFIG.GMS_URL : CONFIG.GMS_URL.concat('/') + const service = 'community-user' + const config = { + headers: { + accept: 'application/json', + language: 'en', + timezone: 'UTC', + connection: 'keep-alive', + authorization: apiKey, + }, } - logger.debug('responseData:', result.data.responseData) - // eslint-disable-next-line @typescript-eslint/no-unsafe-call - // const gmsUser = JSON.parse(result.data.responseData) - // logger.debug('gmsUser:', gmsUser) - return true - } catch (error: any) { - logger.error('Error in Get community-user:', error) - throw new LogError(error.message) + try { + const result = await axios.post(baseUrl.concat(service), user, config) + logger.debug('POST-Response of community-user:', result) + if (result.status !== 200) { + throw new LogError('HTTP Status Error in community-user:', result.status, result.statusText) + } + logger.debug('responseData:', result.data.responseData) + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + // const gmsUser = JSON.parse(result.data.responseData) + // logger.debug('gmsUser:', gmsUser) + return true + } catch (error: any) { + logger.error('Error in post community-user:', error) + throw new LogError(error.message) + } + } else { + logger.info('GMS-Communication disabled per ConfigKey GMS_ACTIVE=false!') + return false + } +} + +export async function updateGmsUser(apiKey: string, user: GmsUser): Promise { + if (CONFIG.GMS_ACTIVE) { + const baseUrl = CONFIG.GMS_URL.endsWith('/') ? CONFIG.GMS_URL : CONFIG.GMS_URL.concat('/') + const service = 'community-user' + const config = { + headers: { + accept: 'application/json', + language: 'en', + timezone: 'UTC', + connection: 'keep-alive', + authorization: apiKey, + }, + } + try { + const result = await axios.patch(baseUrl.concat(service), user, config) + logger.debug('PATCH-Response of community-user:', result) + if (result.status !== 200) { + throw new LogError('HTTP Status Error in community-user:', result.status, result.statusText) + } + logger.debug('responseData:', result.data.responseData) + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + // const gmsUser = JSON.parse(result.data.responseData) + // logger.debug('gmsUser:', gmsUser) + return true + } catch (error: any) { + logger.error('Error in patch community-user:', error) + throw new LogError(error.message) + } + } else { + logger.info('GMS-Communication disabled per ConfigKey GMS_ACTIVE=false!') + return false } } diff --git a/backend/src/apis/gms/model/GmsUser.ts b/backend/src/apis/gms/model/GmsUser.ts index 7f7db7660..0b16f00fb 100644 --- a/backend/src/apis/gms/model/GmsUser.ts +++ b/backend/src/apis/gms/model/GmsUser.ts @@ -8,6 +8,7 @@ export class GmsUser { constructor(user: dbUser) { this.userUuid = user.gradidoID // this.communityUuid = user.communityUuid + this.language = user.language this.email = this.getGmsEmail(user) this.countryCode = this.getGmsCountryCode(user) this.mobile = this.getGmsPhone(user) diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts index 3f70ce112..fa7f1582b 100644 --- a/backend/src/graphql/resolver/UserResolver.ts +++ b/backend/src/graphql/resolver/UserResolver.ts @@ -30,6 +30,8 @@ import { SearchAdminUsersResult } from '@model/AdminUser' import { User } from '@model/User' import { UserAdmin, SearchUsersResult } from '@model/UserAdmin' +import { updateGmsUser } from '@/apis/gms/GmsClient' +import { GmsUser } from '@/apis/gms/model/GmsUser' import { subscribe } from '@/apis/KlicktippController' import { encode } from '@/auth/JWT' import { RIGHTS } from '@/auth/RIGHTS' @@ -69,6 +71,7 @@ import { randombytes_random } from 'sodium-native' import { FULL_CREATION_AVAILABLE } from './const/const' import { getHomeCommunity } from './util/communities' +import { compareGmsRelevantUserSettings } from './util/compareGmsRelevantUserSettings' import { getUserCreations } from './util/creations' import { findUserByIdentifier } from './util/findUserByIdentifier' import { findUsers } from './util/findUsers' @@ -573,6 +576,8 @@ export class UserResolver { } const user = getUser(context) + const backupOriginalUser = user + // try { if (firstName) { user.firstName = firstName @@ -649,6 +654,17 @@ export class UserResolver { logger.info('updateUserInfos() successfully finished...') await EVENT_USER_INFO_UPDATE(user) + // validate if user settings are changed with relevance to update gms-user + if (compareGmsRelevantUserSettings(user, backupOriginalUser)) { + logger.debug(`changed user-settings relevant for gms-user update...`) + const homeCom = await getHomeCommunity() + if (homeCom.gmsApiKey !== null) { + logger.debug(`gms-user update...`, user) + await updateGmsUser(homeCom.gmsApiKey, new GmsUser(user)) + logger.debug(`gms-user update successfully.`) + } + } + return true } diff --git a/backend/src/graphql/resolver/util/compareGmsRelevantUserSettings.ts b/backend/src/graphql/resolver/util/compareGmsRelevantUserSettings.ts new file mode 100644 index 000000000..330086278 --- /dev/null +++ b/backend/src/graphql/resolver/util/compareGmsRelevantUserSettings.ts @@ -0,0 +1,49 @@ +import { Point } from '@dbTools/typeorm' +import { User as DbUser } from '@entity/User' + +import { LogError } from '@/server/LogError' +import { backendLogger as logger } from '@/server/logger' + +import { Point2Location } from './Location2Point' + +export function compareGmsRelevantUserSettings(orgUser: DbUser, changedUser: DbUser): boolean { + if (!orgUser && !changedUser) { + throw new LogError('comparison without any user is impossible') + } + logger.debug('compareGmsRelevantUserSettings:', orgUser, changedUser) + if (orgUser.alias !== changedUser.alias) { + return true + } + if (orgUser.firstName !== changedUser.firstName || orgUser.lastName !== changedUser.lastName) { + return true + } + if (orgUser.gmsAllowed !== changedUser.gmsAllowed) { + return true + } + if (orgUser.gmsPublishLocation !== changedUser.gmsPublishLocation) { + return true + } + if (orgUser.gmsPublishName !== changedUser.gmsPublishName) { + return true + } + if (orgUser.language !== changedUser.language) { + return true + } + if (orgUser.location === null && changedUser.location !== null) { + return true + } + if (orgUser.location !== null && changedUser.location === null) { + return true + } + if (orgUser.location !== null && changedUser.location !== null) { + const orgLocation = Point2Location(orgUser.location as Point) + const changedLocation = Point2Location(changedUser.location as Point) + if ( + orgLocation.latitude !== changedLocation.latitude || + orgLocation.longitude !== changedLocation.longitude + ) { + return true + } + } + return false +} From 8241907bc7df8ad05616d45ee25885e15d89d6b3 Mon Sep 17 00:00:00 2001 From: Claus-Peter Huebner Date: Wed, 21 Feb 2024 16:22:35 +0100 Subject: [PATCH 2/7] =?UTF-8?q?test=20workaround=20f=C3=BCr=20forgotPasswo?= =?UTF-8?q?rd?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/src/graphql/resolver/UserResolver.test.ts | 6 ++++++ backend/src/graphql/resolver/UserResolver.ts | 1 - backend/src/seeds/factory/user.ts | 8 ++++++-- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/backend/src/graphql/resolver/UserResolver.test.ts b/backend/src/graphql/resolver/UserResolver.test.ts index c570dbd9f..51d5b0694 100644 --- a/backend/src/graphql/resolver/UserResolver.test.ts +++ b/backend/src/graphql/resolver/UserResolver.test.ts @@ -1043,6 +1043,12 @@ describe('UserResolver', () => { describe('duration not expired', () => { it('throws an error', async () => { + // TODO: because of confusing time settings in user.createdAt and user.updatedAt increases duration a lot more than 10min necessary + // example: user directly created in userFactory for the testcase + // user.emailContacts.updatedAt=2024-02-21T12:18:30.000Z createdAt=2024-02-21T12:18:30.382Z + // timeElapsed = Date.now() - new Date(updatedAt).getTime() + // BUT HERE: Date.now=2024-02-21T13:18:30.889Z differs one hour from the user date settings !?!?!?!?!?!?! + CONFIG.EMAIL_CODE_REQUEST_TIME = 1000 await expect(mutate({ mutation: forgotPassword, variables })).resolves.toEqual( expect.objectContaining({ errors: [ diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts index fa7f1582b..607ef21a6 100644 --- a/backend/src/graphql/resolver/UserResolver.ts +++ b/backend/src/graphql/resolver/UserResolver.ts @@ -398,7 +398,6 @@ export class UserResolver { logger.warn(`no user found with ${email}`) return true } - if (!canEmailResend(user.emailContact.updatedAt || user.emailContact.createdAt)) { throw new LogError( `Email already sent less than ${printTimeDuration(CONFIG.EMAIL_CODE_REQUEST_TIME)} ago`, diff --git a/backend/src/seeds/factory/user.ts b/backend/src/seeds/factory/user.ts index 3ddddf336..f0bda3a3f 100644 --- a/backend/src/seeds/factory/user.ts +++ b/backend/src/seeds/factory/user.ts @@ -39,8 +39,12 @@ export const userFactory = async ( dbUser = await User.findOneOrFail({ where: { id }, relations: ['userRoles'] }) if (user.createdAt || user.deletedAt || user.role) { - if (user.createdAt) dbUser.createdAt = user.createdAt - if (user.deletedAt) dbUser.deletedAt = user.deletedAt + if (user.createdAt) { + dbUser.createdAt = user.createdAt + } + if (user.deletedAt) { + dbUser.deletedAt = user.deletedAt + } if (user.role && (user.role === RoleNames.ADMIN || user.role === RoleNames.MODERATOR)) { await setUserRole(dbUser, user.role) } From 15eccbb315894dc66bbd228b8a788942889437cc Mon Sep 17 00:00:00 2001 From: Claus-Peter Huebner Date: Wed, 21 Feb 2024 17:20:55 +0100 Subject: [PATCH 3/7] remove workaround for forgotPassword-test --- backend/src/graphql/resolver/UserResolver.test.ts | 6 ------ 1 file changed, 6 deletions(-) diff --git a/backend/src/graphql/resolver/UserResolver.test.ts b/backend/src/graphql/resolver/UserResolver.test.ts index 51d5b0694..c570dbd9f 100644 --- a/backend/src/graphql/resolver/UserResolver.test.ts +++ b/backend/src/graphql/resolver/UserResolver.test.ts @@ -1043,12 +1043,6 @@ describe('UserResolver', () => { describe('duration not expired', () => { it('throws an error', async () => { - // TODO: because of confusing time settings in user.createdAt and user.updatedAt increases duration a lot more than 10min necessary - // example: user directly created in userFactory for the testcase - // user.emailContacts.updatedAt=2024-02-21T12:18:30.000Z createdAt=2024-02-21T12:18:30.382Z - // timeElapsed = Date.now() - new Date(updatedAt).getTime() - // BUT HERE: Date.now=2024-02-21T13:18:30.889Z differs one hour from the user date settings !?!?!?!?!?!?! - CONFIG.EMAIL_CODE_REQUEST_TIME = 1000 await expect(mutate({ mutation: forgotPassword, variables })).resolves.toEqual( expect.objectContaining({ errors: [ From 4edb039e5207602057d04a8681ba410b8bf93ce1 Mon Sep 17 00:00:00 2001 From: Claus-Peter Huebner Date: Thu, 7 Mar 2024 14:12:24 +0100 Subject: [PATCH 4/7] adapt treatment of gms-attributes in updateUserInfo --- backend/src/graphql/resolver/UserResolver.ts | 13 +++-- .../util/compareGmsRelevantUserSettings.ts | 51 ++++++++++++++----- 2 files changed, 44 insertions(+), 20 deletions(-) diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts index b7eb947a0..2d33b8e42 100644 --- a/backend/src/graphql/resolver/UserResolver.ts +++ b/backend/src/graphql/resolver/UserResolver.ts @@ -541,8 +541,10 @@ export class UserResolver { @Authorized([RIGHTS.UPDATE_USER_INFOS]) @Mutation(() => Boolean) async updateUserInfos( - @Args() - { + @Args() updateUserInfosArgs: UpdateUserInfosArgs, + @Ctx() context: Context, + ): Promise { + const { firstName, lastName, alias, @@ -555,14 +557,11 @@ export class UserResolver { gmsPublishName, gmsLocation, gmsPublishLocation, - }: UpdateUserInfosArgs, - @Ctx() context: Context, - ): Promise { + } = updateUserInfosArgs logger.info( `updateUserInfos(${firstName}, ${lastName}, ${alias}, ${language}, ***, ***, ${hideAmountGDD}, ${hideAmountGDT}, ${gmsAllowed}, ${gmsPublishName}, ${gmsLocation}, ${gmsPublishLocation})...`, ) const user = getUser(context) - const backupOriginalUser = user // try { if (firstName) { @@ -646,7 +645,7 @@ export class UserResolver { await EVENT_USER_INFO_UPDATE(user) // validate if user settings are changed with relevance to update gms-user - if (compareGmsRelevantUserSettings(user, backupOriginalUser)) { + if (compareGmsRelevantUserSettings(user, updateUserInfosArgs)) { logger.debug(`changed user-settings relevant for gms-user update...`) const homeCom = await getHomeCommunity() if (homeCom.gmsApiKey !== null) { diff --git a/backend/src/graphql/resolver/util/compareGmsRelevantUserSettings.ts b/backend/src/graphql/resolver/util/compareGmsRelevantUserSettings.ts index 330086278..ac99aca29 100644 --- a/backend/src/graphql/resolver/util/compareGmsRelevantUserSettings.ts +++ b/backend/src/graphql/resolver/util/compareGmsRelevantUserSettings.ts @@ -1,43 +1,68 @@ import { Point } from '@dbTools/typeorm' import { User as DbUser } from '@entity/User' +import { UpdateUserInfosArgs } from '@/graphql/arg/UpdateUserInfosArgs' import { LogError } from '@/server/LogError' import { backendLogger as logger } from '@/server/logger' import { Point2Location } from './Location2Point' -export function compareGmsRelevantUserSettings(orgUser: DbUser, changedUser: DbUser): boolean { - if (!orgUser && !changedUser) { +export function compareGmsRelevantUserSettings( + orgUser: DbUser, + updateUserInfosArgs: UpdateUserInfosArgs, +): boolean { + if (!orgUser) { throw new LogError('comparison without any user is impossible') } - logger.debug('compareGmsRelevantUserSettings:', orgUser, changedUser) - if (orgUser.alias !== changedUser.alias) { + logger.debug('compareGmsRelevantUserSettings:', orgUser, updateUserInfosArgs) + if (updateUserInfosArgs.alias && orgUser.alias !== updateUserInfosArgs.alias) { return true } - if (orgUser.firstName !== changedUser.firstName || orgUser.lastName !== changedUser.lastName) { + if ( + (updateUserInfosArgs.firstName && orgUser.firstName !== updateUserInfosArgs.firstName) || + (updateUserInfosArgs.lastName && orgUser.lastName !== updateUserInfosArgs.lastName) + ) { return true } - if (orgUser.gmsAllowed !== changedUser.gmsAllowed) { + if (updateUserInfosArgs.gmsAllowed && orgUser.gmsAllowed !== updateUserInfosArgs.gmsAllowed) { return true } - if (orgUser.gmsPublishLocation !== changedUser.gmsPublishLocation) { + if ( + updateUserInfosArgs.gmsPublishLocation && + orgUser.gmsPublishLocation !== updateUserInfosArgs.gmsPublishLocation + ) { return true } - if (orgUser.gmsPublishName !== changedUser.gmsPublishName) { + if ( + updateUserInfosArgs.gmsPublishName && + orgUser.gmsPublishName !== updateUserInfosArgs.gmsPublishName + ) { return true } - if (orgUser.language !== changedUser.language) { + if (updateUserInfosArgs.language && orgUser.language !== updateUserInfosArgs.language) { return true } - if (orgUser.location === null && changedUser.location !== null) { + if ( + updateUserInfosArgs.gmsLocation && + orgUser.location === null && + updateUserInfosArgs.gmsLocation !== null + ) { return true } - if (orgUser.location !== null && changedUser.location === null) { + if ( + updateUserInfosArgs.gmsLocation && + orgUser.location !== null && + updateUserInfosArgs.gmsLocation === null + ) { return true } - if (orgUser.location !== null && changedUser.location !== null) { + if ( + updateUserInfosArgs.gmsLocation && + orgUser.location !== null && + updateUserInfosArgs.gmsLocation !== null + ) { const orgLocation = Point2Location(orgUser.location as Point) - const changedLocation = Point2Location(changedUser.location as Point) + const changedLocation = updateUserInfosArgs.gmsLocation if ( orgLocation.latitude !== changedLocation.latitude || orgLocation.longitude !== changedLocation.longitude From 58e4c072442219c1299b0461cd82880be1e92668 Mon Sep 17 00:00:00 2001 From: Claus-Peter Huebner Date: Thu, 7 Mar 2024 14:14:24 +0100 Subject: [PATCH 5/7] add configswitch GMS_ACTIVE before transfer to gms --- backend/src/graphql/resolver/UserResolver.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts index 2d33b8e42..eb2368e4e 100644 --- a/backend/src/graphql/resolver/UserResolver.ts +++ b/backend/src/graphql/resolver/UserResolver.ts @@ -645,7 +645,7 @@ export class UserResolver { await EVENT_USER_INFO_UPDATE(user) // validate if user settings are changed with relevance to update gms-user - if (compareGmsRelevantUserSettings(user, updateUserInfosArgs)) { + if (CONFIG.GMS_ACTIVE && compareGmsRelevantUserSettings(user, updateUserInfosArgs)) { logger.debug(`changed user-settings relevant for gms-user update...`) const homeCom = await getHomeCommunity() if (homeCom.gmsApiKey !== null) { From 6c75705cc3d9e22d3805e1d51484821dd1b16398 Mon Sep 17 00:00:00 2001 From: Claus-Peter Huebner Date: Tue, 12 Mar 2024 00:07:50 +0100 Subject: [PATCH 6/7] overwork update gms attributes, mocking gms still open --- backend/src/graphql/resolver/UserResolver.ts | 3 ++- .../util/compareGmsRelevantUserSettings.ts | 20 +++++++++++++++++-- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts index eb2368e4e..261d84caa 100644 --- a/backend/src/graphql/resolver/UserResolver.ts +++ b/backend/src/graphql/resolver/UserResolver.ts @@ -562,6 +562,7 @@ export class UserResolver { `updateUserInfos(${firstName}, ${lastName}, ${alias}, ${language}, ***, ***, ${hideAmountGDD}, ${hideAmountGDT}, ${gmsAllowed}, ${gmsPublishName}, ${gmsLocation}, ${gmsPublishLocation})...`, ) const user = getUser(context) + const updateUserInGMS = compareGmsRelevantUserSettings(user, updateUserInfosArgs) // try { if (firstName) { @@ -645,7 +646,7 @@ export class UserResolver { await EVENT_USER_INFO_UPDATE(user) // validate if user settings are changed with relevance to update gms-user - if (CONFIG.GMS_ACTIVE && compareGmsRelevantUserSettings(user, updateUserInfosArgs)) { + if (CONFIG.GMS_ACTIVE && updateUserInGMS) { logger.debug(`changed user-settings relevant for gms-user update...`) const homeCom = await getHomeCommunity() if (homeCom.gmsApiKey !== null) { diff --git a/backend/src/graphql/resolver/util/compareGmsRelevantUserSettings.ts b/backend/src/graphql/resolver/util/compareGmsRelevantUserSettings.ts index ac99aca29..e40cdcdfe 100644 --- a/backend/src/graphql/resolver/util/compareGmsRelevantUserSettings.ts +++ b/backend/src/graphql/resolver/util/compareGmsRelevantUserSettings.ts @@ -2,6 +2,7 @@ import { Point } from '@dbTools/typeorm' import { User as DbUser } from '@entity/User' import { UpdateUserInfosArgs } from '@/graphql/arg/UpdateUserInfosArgs' +import { GmsPublishNameType } from '@/graphql/enum/GmsPublishNameType' import { LogError } from '@/server/LogError' import { backendLogger as logger } from '@/server/logger' @@ -15,7 +16,18 @@ export function compareGmsRelevantUserSettings( throw new LogError('comparison without any user is impossible') } logger.debug('compareGmsRelevantUserSettings:', orgUser, updateUserInfosArgs) - if (updateUserInfosArgs.alias && orgUser.alias !== updateUserInfosArgs.alias) { + // nach GMS updaten, wenn alias gesetzt wird oder ist und PublishLevel die alias-Übermittlung erlaubt + if ( + updateUserInfosArgs.alias && + orgUser.alias !== updateUserInfosArgs.alias && + ((updateUserInfosArgs.gmsPublishName && + updateUserInfosArgs.gmsPublishName.valueOf === + GmsPublishNameType.GMS_PUBLISH_NAME_ALIAS_OR_INITALS.valueOf) || + (!updateUserInfosArgs.gmsPublishName && + orgUser.gmsPublishName && + orgUser.gmsPublishName.valueOf === + GmsPublishNameType.GMS_PUBLISH_NAME_ALIAS_OR_INITALS.valueOf)) + ) { return true } if ( @@ -24,7 +36,11 @@ export function compareGmsRelevantUserSettings( ) { return true } - if (updateUserInfosArgs.gmsAllowed && orgUser.gmsAllowed !== updateUserInfosArgs.gmsAllowed) { + if ( + updateUserInfosArgs.gmsAllowed !== undefined && + updateUserInfosArgs.gmsAllowed && + orgUser.gmsAllowed !== updateUserInfosArgs.gmsAllowed + ) { return true } if ( From 73382fce3d4a8647cd3f12709076198b8e8d376e Mon Sep 17 00:00:00 2001 From: Claus-Peter Huebner Date: Thu, 14 Mar 2024 02:07:16 +0100 Subject: [PATCH 7/7] add controls for gms-errors to log or throw --- backend/src/config/index.ts | 1 + backend/src/graphql/resolver/UserResolver.ts | 6 +++++- backend/src/graphql/resolver/util/sendUserToGms.ts | 7 ++++++- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/backend/src/config/index.ts b/backend/src/config/index.ts index 0dbc0ea5a..250a0f2ea 100644 --- a/backend/src/config/index.ts +++ b/backend/src/config/index.ts @@ -143,6 +143,7 @@ const federation = { const gms = { GMS_ACTIVE: process.env.GMS_ACTIVE === 'true' || false, + GMS_CREATE_USER_THROW_ERRORS: process.env.GMS_CREATE_USER_THROW_ERRORS === 'true' || false, // koordinates of Illuminz-instance of GMS GMS_URL: process.env.GMS_HOST ?? 'http://localhost:4044/', } diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts index 261d84caa..a1aca1f8a 100644 --- a/backend/src/graphql/resolver/UserResolver.ts +++ b/backend/src/graphql/resolver/UserResolver.ts @@ -376,7 +376,11 @@ export class UserResolver { await sendUserToGms(dbUser, homeCom) } } catch (err) { - logger.error('Error publishing new created user to GMS:', err) + if (CONFIG.GMS_CREATE_USER_THROW_ERRORS) { + throw new LogError('Error publishing new created user to GMS:', err) + } else { + logger.error('Error publishing new created user to GMS:', err) + } } } return new User(dbUser) diff --git a/backend/src/graphql/resolver/util/sendUserToGms.ts b/backend/src/graphql/resolver/util/sendUserToGms.ts index 335141ffe..c21550b91 100644 --- a/backend/src/graphql/resolver/util/sendUserToGms.ts +++ b/backend/src/graphql/resolver/util/sendUserToGms.ts @@ -3,6 +3,7 @@ import { User as DbUser } from '@entity/User' import { createGmsUser } from '@/apis/gms/GmsClient' import { GmsUser } from '@/apis/gms/model/GmsUser' +import { CONFIG } from '@/config' import { LogError } from '@/server/LogError' import { backendLogger as logger } from '@/server/logger' @@ -22,6 +23,10 @@ export async function sendUserToGms(user: DbUser, homeCom: DbCommunity): Promise logger.debug('mark user as gms published:', user) } } catch (err) { - logger.warn('publishing user fails with ', err) + if (CONFIG.GMS_CREATE_USER_THROW_ERRORS) { + throw new LogError('publishing user fails with ', err) + } else { + logger.warn('publishing user fails with ', err) + } } }