From fde951b543281fedf9f602abae26b50881e3d157 Mon Sep 17 00:00:00 2001 From: Elias Schneider Date: Tue, 25 Feb 2025 20:34:13 +0100 Subject: [PATCH] fix(ldap): sync error if LDAP user collides with an existing user --- backend/internal/service/ldap_service.go | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/backend/internal/service/ldap_service.go b/backend/internal/service/ldap_service.go index c03938e..963964d 100644 --- a/backend/internal/service/ldap_service.go +++ b/backend/internal/service/ldap_service.go @@ -4,6 +4,7 @@ import ( "bytes" "crypto/tls" "encoding/base64" + "errors" "fmt" "io" "log" @@ -94,7 +95,6 @@ func (s *LdapService) SyncGroups() error { ldapGroupIDs := make(map[string]bool) for _, value := range result.Entries { - var usersToAddDto dto.UserGroupUpdateUsersDto var membersUserId []string ldapId := value.GetAttributeValue(uniqueIdentifierAttribute) @@ -112,7 +112,16 @@ func (s *LdapService) SyncGroups() error { singleMember := strings.Split(strings.Split(member, "=")[1], ",")[0] var databaseUser model.User - s.db.Where("username = ?", singleMember).Where("ldap_id IS NOT NULL").First(&databaseUser) + err := s.db.Where("username = ? AND ldap_id IS NOT NULL", singleMember).First(&databaseUser).Error + if err != nil { + if errors.Is(err, gorm.ErrRecordNotFound) { + // The user collides with a non-LDAP user, so we skip it + continue + } else { + return err + } + + } membersUserId = append(membersUserId, databaseUser.ID) } @@ -123,7 +132,7 @@ func (s *LdapService) SyncGroups() error { LdapID: value.GetAttributeValue(uniqueIdentifierAttribute), } - usersToAddDto = dto.UserGroupUpdateUsersDto{ + usersToAddDto := dto.UserGroupUpdateUsersDto{ UserIDs: membersUserId, }