From 7d8a69cc0c82580f652051984df8f0101cabf06b Mon Sep 17 00:00:00 2001 From: Maycon Santos Date: Tue, 17 Oct 2023 15:54:50 +0200 Subject: [PATCH] Use account creator as inviter as a fallback (#1225) When inviting a user using a service user PAT, we need to fall back to a known ID to get the user's email, which is used in the invite message. --- management/server/user.go | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/management/server/user.go b/management/server/user.go index 585872080..edb649340 100644 --- a/management/server/user.go +++ b/management/server/user.go @@ -228,10 +228,20 @@ func (am *DefaultAccountManager) inviteNewUser(accountID, userID string, invite return nil, status.Errorf(status.NotFound, "account %s doesn't exist", accountID) } - // initiator is the one who is inviting the new user - initiatorUser, err := am.lookupUserInCache(userID, account) + initiatorUser, err := account.FindUser(userID) if err != nil { - return nil, status.Errorf(status.NotFound, "user %s doesn't exist in IdP", userID) + return nil, status.Errorf(status.NotFound, "initiator user with ID %s doesn't exist", userID) + } + + inviterID := userID + if initiatorUser.IsServiceUser { + inviterID = account.CreatedBy + } + + // inviterUser is the one who is inviting the new user + inviterUser, err := am.lookupUserInCache(inviterID, account) + if err != nil || inviterUser == nil { + return nil, status.Errorf(status.NotFound, "inviter user with ID %s doesn't exist in IdP", inviterID) } // check if the user is already registered with this email => reject @@ -253,7 +263,7 @@ func (am *DefaultAccountManager) inviteNewUser(accountID, userID string, invite return nil, status.Errorf(status.UserAlreadyExists, "can't invite a user with an existing NetBird account") } - idpUser, err := am.idpManager.CreateUser(invite.Email, invite.Name, accountID, initiatorUser.Email) + idpUser, err := am.idpManager.CreateUser(invite.Email, invite.Name, accountID, inviterUser.Email) if err != nil { return nil, err }