diff --git a/backend/src/apis/humhub/ImportUsers.ts b/backend/src/apis/humhub/ImportUsers.ts index de33ba779..8a40d480d 100644 --- a/backend/src/apis/humhub/ImportUsers.ts +++ b/backend/src/apis/humhub/ImportUsers.ts @@ -24,7 +24,7 @@ function getUsersPage(page: number, limit: number): Promise<[User[], number]> { /** * @param client - * @returns user map indiced with email + * @returns user map indices with email */ async function loadUsersFromHumHub(client: HumHubClient): Promise> { const start = new Date().getTime() diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts index 436c0aa83..33a351730 100644 --- a/backend/src/graphql/resolver/UserResolver.ts +++ b/backend/src/graphql/resolver/UserResolver.ts @@ -79,6 +79,7 @@ import { getKlicktippState } from './util/getKlicktippState' import { Location2Point } from './util/Location2Point' import { setUserRole, deleteUserRole } from './util/modifyUserRole' import { sendUserToGms } from './util/sendUserToGms' +import { syncHumhub } from './util/syncHumhub' import { validateAlias } from './util/validateAlias' const LANGUAGES = ['de', 'en', 'es', 'fr', 'nl'] @@ -670,6 +671,9 @@ export class UserResolver { logger.debug(`gms-user update successfully.`) } } + if (CONFIG.HUMHUB_ACTIVE) { + await syncHumhub(updateUserInfosArgs, user) + } return true } diff --git a/backend/src/graphql/resolver/util/syncHumhub.ts b/backend/src/graphql/resolver/util/syncHumhub.ts new file mode 100644 index 000000000..1ed1af7ab --- /dev/null +++ b/backend/src/graphql/resolver/util/syncHumhub.ts @@ -0,0 +1,42 @@ +import { User } from '@entity/User' + +import { HumHubClient } from '@/apis/humhub/HumHubClient' +import { GetUser } from '@/apis/humhub/model/GetUser' +import { syncUser } from '@/apis/humhub/syncUser' +import { UpdateUserInfosArgs } from '@/graphql/arg/UpdateUserInfosArgs' +import { backendLogger as logger } from '@/server/logger' + +export async function syncHumhub( + updateUserInfosArg: UpdateUserInfosArgs, + user: User, +): Promise { + // check for humhub relevant changes + if ( + !updateUserInfosArg.alias && + !updateUserInfosArg.firstName && + !updateUserInfosArg.lastName && + !updateUserInfosArg.humhubAllowed && + !updateUserInfosArg.humhubPublishName && + !updateUserInfosArg.language + ) { + return + } + logger.debug('changed user-settings relevant for humhub-user update...') + const humhubClient = HumHubClient.getInstance() + if (!humhubClient) { + return + } + logger.debug('retrieve user from humhub') + const humhubUser = await humhubClient.userByEmail(user.emailContact.email) + const humhubUsers = new Map() + if (humhubUser) { + humhubUsers.set(user.emailContact.email, humhubUser) + } + logger.debug('update user at humhub') + const result = await syncUser(user, humhubUsers) + logger.info('finished sync user with humhub', { + localId: user.id, + externId: humhubUser?.id, + result, + }) +}