diff --git a/app/diagnostics.go b/app/diagnostics.go index 863af16592..ac7203156d 100644 --- a/app/diagnostics.go +++ b/app/diagnostics.go @@ -487,6 +487,7 @@ func (a *App) trackConfig() { "isempty_group_filter": isDefault(*cfg.LdapSettings.GroupFilter, ""), "isdefault_group_display_name_attribute": isDefault(*cfg.LdapSettings.GroupDisplayNameAttribute, model.LDAP_SETTINGS_DEFAULT_GROUP_DISPLAY_NAME_ATTRIBUTE), "isdefault_group_id_attribute": isDefault(*cfg.LdapSettings.GroupIdAttribute, model.LDAP_SETTINGS_DEFAULT_GROUP_ID_ATTRIBUTE), + "isempty_guest_filter": isDefault(*cfg.LdapSettings.GuestFilter, ""), }) a.SendDiagnostic(TRACK_CONFIG_COMPLIANCE, map[string]interface{}{ diff --git a/i18n/en.json b/i18n/en.json index f8841befc4..fa03c92154 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -3954,6 +3954,10 @@ "id": "ent.ldap.validate_filter.app_error", "translation": "Invalid AD/LDAP Filter" }, + { + "id": "ent.ldap.validate_guest_filter.app_error", + "translation": "Invalid AD/LDAP Guest Filter" + }, { "id": "ent.ldap_groups.group_search_error", "translation": "error retrieving ldap group" diff --git a/model/config.go b/model/config.go index 016477a3ab..ce7a4766e4 100644 --- a/model/config.go +++ b/model/config.go @@ -1687,6 +1687,7 @@ type LdapSettings struct { // Filtering UserFilter *string GroupFilter *string + GuestFilter *string // Group Mapping GroupDisplayNameAttribute *string @@ -1758,6 +1759,10 @@ func (s *LdapSettings) SetDefaults() { s.UserFilter = NewString("") } + if s.GuestFilter == nil { + s.GuestFilter = NewString("") + } + if s.GroupFilter == nil { s.GroupFilter = NewString("") } @@ -2784,6 +2789,12 @@ func (ls *LdapSettings) isValid() *AppError { return NewAppError("ValidateFilter", "ent.ldap.validate_filter.app_error", nil, err.Error(), http.StatusBadRequest) } } + + if *ls.GuestFilter != "" { + if _, err := ldap.CompileFilter(*ls.GuestFilter); err != nil { + return NewAppError("LdapSettings.isValid", "ent.ldap.validate_guest_filter.app_error", nil, err.Error(), http.StatusBadRequest) + } + } } return nil diff --git a/model/config_test.go b/model/config_test.go index 743b6a58ba..990ffa13dd 100644 --- a/model/config_test.go +++ b/model/config_test.go @@ -1018,6 +1018,105 @@ func TestLdapSettingsIsValid(t *testing.T) { }, ExpectError: true, }, + + { + Name: "valid guest filter #1", + LdapSettings: LdapSettings{ + Enable: NewBool(true), + LdapServer: NewString("server"), + BaseDN: NewString("basedn"), + EmailAttribute: NewString("email"), + UsernameAttribute: NewString("username"), + IdAttribute: NewString("id"), + LoginIdAttribute: NewString("loginid"), + GuestFilter: NewString("(property=value)"), + }, + ExpectError: false, + }, + { + Name: "invalid guest filter #1", + LdapSettings: LdapSettings{ + Enable: NewBool(true), + LdapServer: NewString("server"), + BaseDN: NewString("basedn"), + EmailAttribute: NewString("email"), + UsernameAttribute: NewString("username"), + IdAttribute: NewString("id"), + LoginIdAttribute: NewString("loginid"), + GuestFilter: NewString("("), + }, + ExpectError: true, + }, + { + Name: "invalid guest filter #2", + LdapSettings: LdapSettings{ + Enable: NewBool(true), + LdapServer: NewString("server"), + BaseDN: NewString("basedn"), + EmailAttribute: NewString("email"), + UsernameAttribute: NewString("username"), + IdAttribute: NewString("id"), + LoginIdAttribute: NewString("loginid"), + GuestFilter: NewString("()"), + }, + ExpectError: true, + }, + { + Name: "valid guest filter #2", + LdapSettings: LdapSettings{ + Enable: NewBool(true), + LdapServer: NewString("server"), + BaseDN: NewString("basedn"), + EmailAttribute: NewString("email"), + UsernameAttribute: NewString("username"), + IdAttribute: NewString("id"), + LoginIdAttribute: NewString("loginid"), + GuestFilter: NewString("(&(property=value)(otherthing=othervalue))"), + }, + ExpectError: false, + }, + { + Name: "valid guest filter #3", + LdapSettings: LdapSettings{ + Enable: NewBool(true), + LdapServer: NewString("server"), + BaseDN: NewString("basedn"), + EmailAttribute: NewString("email"), + UsernameAttribute: NewString("username"), + IdAttribute: NewString("id"), + LoginIdAttribute: NewString("loginid"), + GuestFilter: NewString("(&(property=value)(|(otherthing=othervalue)(other=thing)))"), + }, + ExpectError: false, + }, + { + Name: "invalid guest filter #3", + LdapSettings: LdapSettings{ + Enable: NewBool(true), + LdapServer: NewString("server"), + BaseDN: NewString("basedn"), + EmailAttribute: NewString("email"), + UsernameAttribute: NewString("username"), + IdAttribute: NewString("id"), + LoginIdAttribute: NewString("loginid"), + GuestFilter: NewString("(&(property=value)(|(otherthing=othervalue)(other=thing))"), + }, + ExpectError: true, + }, + { + Name: "invalid guest filter #4", + LdapSettings: LdapSettings{ + Enable: NewBool(true), + LdapServer: NewString("server"), + BaseDN: NewString("basedn"), + EmailAttribute: NewString("email"), + UsernameAttribute: NewString("username"), + IdAttribute: NewString("id"), + LoginIdAttribute: NewString("loginid"), + GuestFilter: NewString("(&(property=value)((otherthing=othervalue)(other=thing)))"), + }, + ExpectError: true, + }, } { t.Run(test.Name, func(t *testing.T) { test.LdapSettings.SetDefaults()