diff --git a/i18n/en.json b/i18n/en.json index cfc82f8569..3d433dae99 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -2531,6 +2531,14 @@ "id": "model.config.is_valid.ldap_sync_interval.app_error", "translation": "Invalid sync interval time. Must be at least one minute." }, + { + "id": "model.config.is_valid.ldap_required.app_error", + "translation": "Required LDAP field missing." + }, + { + "id": "model.config.is_valid.ldap_max_page_size.app_error", + "translation": "Invalid max page size value." + }, { "id": "model.config.is_valid.listen_address.app_error", "translation": "Invalid listen address for service settings Must be set." diff --git a/model/config.go b/model/config.go index 1d9e078b6d..e71a58a21a 100644 --- a/model/config.go +++ b/model/config.go @@ -208,6 +208,7 @@ type LdapSettings struct { // Advanced SkipCertificateVerification *bool QueryTimeout *int + MaxPageSize *int // Customization LoginFieldName *string @@ -526,6 +527,11 @@ func (o *Config) SetDefaults() { *o.LdapSettings.QueryTimeout = 60 } + if o.LdapSettings.MaxPageSize == nil { + o.LdapSettings.MaxPageSize = new(int) + *o.LdapSettings.MaxPageSize = 0 + } + if o.LdapSettings.LoginFieldName == nil { o.LdapSettings.LoginFieldName = new(string) *o.LdapSettings.LoginFieldName = "" @@ -724,6 +730,10 @@ func (o *Config) IsValid() *AppError { return NewLocAppError("Config.IsValid", "model.config.is_valid.ldap_sync_interval.app_error", nil, "") } + if *o.LdapSettings.MaxPageSize < 0 { + return NewLocAppError("Config.IsValid", "model.config.is_valid.ldap_max_page_size.app_error", nil, "") + } + if *o.LdapSettings.Enable { if *o.LdapSettings.LdapServer == "" || *o.LdapSettings.BaseDN == "" || diff --git a/webapp/components/admin_console/ldap_settings.jsx b/webapp/components/admin_console/ldap_settings.jsx index d362f1020b..53b3d23e66 100644 --- a/webapp/components/admin_console/ldap_settings.jsx +++ b/webapp/components/admin_console/ldap_settings.jsx @@ -38,6 +38,7 @@ export default class LdapSettings extends AdminSettings { syncIntervalMinutes: props.config.LdapSettings.SyncIntervalMinutes, skipCertificateVerification: props.config.LdapSettings.SkipCertificateVerification, queryTimeout: props.config.LdapSettings.QueryTimeout, + maxPageSize: props.config.LdapSettings.MaxPageSize, loginFieldName: props.config.LdapSettings.LoginFieldName }); } @@ -60,6 +61,7 @@ export default class LdapSettings extends AdminSettings { config.LdapSettings.SyncIntervalMinutes = this.parseIntNonZero(this.state.syncIntervalMinutes); config.LdapSettings.SkipCertificateVerification = this.state.skipCertificateVerification; config.LdapSettings.QueryTimeout = this.parseIntNonZero(this.state.queryTimeout); + config.LdapSettings.MaxPageSize = this.parseInt(this.state.maxPageSize); config.LdapSettings.LoginFieldName = this.state.loginFieldName; return config; @@ -386,6 +388,25 @@ export default class LdapSettings extends AdminSettings { onChange={this.handleChange} disabled={!this.state.enable} /> + + } + placeholder={Utils.localizeMessage('admin.ldap.maxPageSizeEx', 'Ex "2000"')} + helpText={ + + } + value={this.state.maxPageSize} + onChange={this.handleChange} + disabled={!this.state.enable} + />