From 6be999714f62f22ec5d8ab82f91f7fc5a2b55c4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E0=A4=95=E0=A4=BE=E0=A4=B0=E0=A4=A4=E0=A5=8B=E0=A4=AB?= =?UTF-8?q?=E0=A5=8D=E0=A4=AB=E0=A5=87=E0=A4=B2=E0=A4=B8=E0=A5=8D=E0=A4=95?= =?UTF-8?q?=E0=A5=8D=E0=A4=B0=E0=A4=BF=E0=A4=AA=E0=A5=8D=E0=A4=9F=E2=84=A2?= Date: Mon, 5 Sep 2022 09:03:05 +0200 Subject: [PATCH] feat(cli): add external hooks for when members are added or deleted (#3988) --- packages/cli/src/UserManagement/routes/me.ts | 2 +- packages/cli/src/UserManagement/routes/users.ts | 7 +++++++ packages/cli/test/integration/shared/utils.ts | 6 +++++- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/packages/cli/src/UserManagement/routes/me.ts b/packages/cli/src/UserManagement/routes/me.ts index 78ff4eca49..a527a55c44 100644 --- a/packages/cli/src/UserManagement/routes/me.ts +++ b/packages/cli/src/UserManagement/routes/me.ts @@ -66,7 +66,7 @@ export function meNamespace(this: N8nApp): void { user_id: req.user.id, fields_changed: updatedkeys, }); - await this.externalHooks.run('user.profile.update', [currentEmail, req.body]); + await this.externalHooks.run('user.profile.update', [currentEmail, sanitizeUser(user)]); return sanitizeUser(user); }, diff --git a/packages/cli/src/UserManagement/routes/users.ts b/packages/cli/src/UserManagement/routes/users.ts index 72e0cc5e2d..56b8e685d2 100644 --- a/packages/cli/src/UserManagement/routes/users.ts +++ b/packages/cli/src/UserManagement/routes/users.ts @@ -214,6 +214,8 @@ export function usersNamespace(this: N8nApp): void { }), ); + await this.externalHooks.run('user.invited', [usersToSetUp]); + Logger.debug( usersPendingSetup.length > 1 ? `Sent ${usersPendingSetup.length} invite emails successfully` @@ -363,6 +365,9 @@ export function usersNamespace(this: N8nApp): void { user_id: invitee.id, }); + await this.externalHooks.run('user.profile.update', [invitee.email, sanitizeUser(invitee)]); + await this.externalHooks.run('user.password.update', [invitee.email, invitee.password]); + return sanitizeUser(updatedUser); }), ); @@ -478,6 +483,8 @@ export function usersNamespace(this: N8nApp): void { void InternalHooksManager.getInstance().onUserDeletion(req.user.id, telemetryData, false); + await this.externalHooks.run('user.deleted', [sanitizeUser(userToDelete)]); + return { success: true }; }), ); diff --git a/packages/cli/test/integration/shared/utils.ts b/packages/cli/test/integration/shared/utils.ts index 9a4f2e996b..b3faaf8b0b 100644 --- a/packages/cli/test/integration/shared/utils.ts +++ b/packages/cli/test/integration/shared/utils.ts @@ -98,7 +98,11 @@ export async function initTestServer({ if (!endpointGroups) return testServer.app; - if (endpointGroups.includes('credentials') || endpointGroups.includes('me')) { + if ( + endpointGroups.includes('credentials') || + endpointGroups.includes('me') || + endpointGroups.includes('users') + ) { testServer.externalHooks = ExternalHooks(); }