diff --git a/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/ldap/LdapConfiguration.java b/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/ldap/LdapConfiguration.java index 6a62ad8d99df..4b67bd448806 100644 --- a/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/ldap/LdapConfiguration.java +++ b/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/ldap/LdapConfiguration.java @@ -239,7 +239,7 @@ public String getLastnameAttribute(final Long domainId) { public String getProviderUrl(final Long domainId) { final String protocol = getSSLStatus(domainId) == true ? "ldaps://" : "ldap://"; - final Pair, Integer> result = _ldapConfigurationDao.searchConfigurations(null, 0, domainId); + final Pair, Integer> result = _ldapConfigurationDao.searchConfigurations(null, 0, domainId, null, null); final StringBuilder providerUrls = new StringBuilder(); String delim = ""; for (final LdapConfigurationVO resource : result.first()) { diff --git a/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/ldap/LdapManagerImpl.java b/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/ldap/LdapManagerImpl.java index 05b8578bb420..c73744bb48c1 100644 --- a/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/ldap/LdapManagerImpl.java +++ b/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/ldap/LdapManagerImpl.java @@ -377,7 +377,7 @@ public Pair, Integer> listConfigurations(fin final int port = cmd.getPort(); final Long domainId = cmd.getDomainId(); final boolean listAll = cmd.listAll(); - final Pair, Integer> result = _ldapConfigurationDao.searchConfigurations(hostname, port, domainId, listAll); + final Pair, Integer> result = _ldapConfigurationDao.searchConfigurations(hostname, port, domainId, listAll, cmd.getStartIndex(), cmd.getPageSizeVal()); return new Pair, Integer>(result.first(), result.second()); } diff --git a/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/ldap/dao/LdapConfigurationDao.java b/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/ldap/dao/LdapConfigurationDao.java index af774b685ed6..30d05c5a6f21 100644 --- a/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/ldap/dao/LdapConfigurationDao.java +++ b/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/ldap/dao/LdapConfigurationDao.java @@ -39,7 +39,7 @@ public interface LdapConfigurationDao extends GenericDao, Integer> searchConfigurations(String hostname, int port, Long domainId); + Pair, Integer> searchConfigurations(String hostname, int port, Long domainId, Long offset, Long limit); - Pair, Integer> searchConfigurations(String hostname, int port, Long domainId, boolean listAll); + Pair, Integer> searchConfigurations(String hostname, int port, Long domainId, boolean listAll, Long offset, Long limit); } diff --git a/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/ldap/dao/LdapConfigurationDaoImpl.java b/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/ldap/dao/LdapConfigurationDaoImpl.java index c053e87b6bf6..33fe98993d18 100644 --- a/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/ldap/dao/LdapConfigurationDaoImpl.java +++ b/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/ldap/dao/LdapConfigurationDaoImpl.java @@ -19,6 +19,7 @@ import java.util.List; +import com.cloud.utils.db.Filter; import org.springframework.stereotype.Component; import org.apache.cloudstack.ldap.LdapConfigurationVO; @@ -63,29 +64,29 @@ public LdapConfigurationVO findByHostname(final String hostname) { @Override public LdapConfigurationVO find(String hostname, int port, Long domainId) { - SearchCriteria sc = getSearchCriteria(hostname, port, domainId, false); + SearchCriteria sc = getSearchCriteria(hostname, port, domainId, false, null, null); return findOneBy(sc); } @Override public LdapConfigurationVO find(String hostname, int port, Long domainId, boolean listAll) { - SearchCriteria sc = getSearchCriteria(hostname, port, domainId, listAll); + SearchCriteria sc = getSearchCriteria(hostname, port, domainId, listAll, null, null); return findOneBy(sc); } @Override - public Pair, Integer> searchConfigurations(final String hostname, final int port, final Long domainId) { - SearchCriteria sc = getSearchCriteria(hostname, port, domainId, false); - return searchAndCount(sc, null); + public Pair, Integer> searchConfigurations(final String hostname, final int port, final Long domainId, Long offset, Long limit) { + SearchCriteria sc = getSearchCriteria(hostname, port, domainId, false, offset, limit); + return searchAndCount(sc, new Filter(LdapConfigurationVO.class, "id", true, offset, limit)); } @Override - public Pair, Integer> searchConfigurations(final String hostname, final int port, final Long domainId, final boolean listAll) { - SearchCriteria sc = getSearchCriteria(hostname, port, domainId, listAll); - return searchAndCount(sc, null); + public Pair, Integer> searchConfigurations(final String hostname, final int port, final Long domainId, final boolean listAll, Long offset, Long limit) { + SearchCriteria sc = getSearchCriteria(hostname, port, domainId, listAll, offset, limit); + return searchAndCount(sc, new Filter(LdapConfigurationVO.class, "id", true, offset, limit)); } - private SearchCriteria getSearchCriteria(String hostname, int port, Long domainId,boolean listAll) { + private SearchCriteria getSearchCriteria(String hostname, int port, Long domainId,boolean listAll, Long offset, Long limit) { SearchCriteria sc; if (domainId != null) { // If domainid is present, ignore listall diff --git a/plugins/user-authenticators/ldap/src/test/java/org/apache/cloudstack/ldap/LdapDirectoryServerConnectionTest.java b/plugins/user-authenticators/ldap/src/test/java/org/apache/cloudstack/ldap/LdapDirectoryServerConnectionTest.java index a216084aa3a0..53afba0a34f1 100644 --- a/plugins/user-authenticators/ldap/src/test/java/org/apache/cloudstack/ldap/LdapDirectoryServerConnectionTest.java +++ b/plugins/user-authenticators/ldap/src/test/java/org/apache/cloudstack/ldap/LdapDirectoryServerConnectionTest.java @@ -90,7 +90,7 @@ public void setup() throws Exception { lenient().when(userManagerFactory.getInstance(LdapUserManager.Provider.OPENLDAP)).thenReturn(new OpenLdapUserManagerImpl(configuration)); // construct an elaborate structure around a single object Pair, Integer> vos = new Pair, Integer>( Collections.singletonList(configurationVO),1); - lenient().when(configurationDao.searchConfigurations(null, 0, 1L)).thenReturn(vos); + lenient().when(configurationDao.searchConfigurations(null, 0, 1L, 1L, 20L)).thenReturn(vos); contextFactory = new LdapContextFactory(configuration); ldapManager = new LdapManagerImpl(configurationDao, contextFactory, userManagerFactory, configuration); diff --git a/ui/src/components/view/ListView.vue b/ui/src/components/view/ListView.vue index eca99dc03469..c1aab15135b9 100644 --- a/ui/src/components/view/ListView.vue +++ b/ui/src/components/view/ListView.vue @@ -21,7 +21,7 @@ :loading="loading" :columns="isOrderUpdatable() ? columns : columns.filter(x => x.dataIndex !== 'order')" :dataSource="items" - :rowKey="(record, idx) => record.id || record.name || record.usageType || idx + '-' + Math.random()" + :rowKey="(record, idx) => hasNoUniqueKey() ? (idx + '-' + Math.random()) : (record.id || record.name || record.usageType || idx + '-' + Math.random())" :pagination="false" :rowSelection="explicitlyAllowRowSelection || enableGroupAction() || $route.name === 'event' ? {selectedRowKeys: selectedRowKeys, onChange: onSelectChange, columnWidth: 30} : null" :rowClassName="getRowClassName" @@ -742,6 +742,9 @@ export default { 'webhook', 'webhookdeliveries', 'sharedfs', 'ipv4subnets', 'asnumbers' ].includes(this.$route.name) }, + hasNoUniqueKey () { + return ['/ldapsetting'].some(prefix => this.$route.path.startsWith(prefix)) + }, getDateAtTimeZone (date, timezone) { return date ? moment(date).tz(timezone).format('YYYY-MM-DD HH:mm:ss') : null },