package com.l7tech.server.identity.ldap;

import com.l7tech.identity.ldap.LdapGroup;
import com.l7tech.identity.ldap.LdapIdentityProviderConfig;
import com.l7tech.identity.ldap.LdapUser;
import com.l7tech.identity.ldap.MemberStrategy;
import com.l7tech.objectmodel.IdentityHeader;
import com.l7tech.server.identity.ListableIdentityProvider;
import java.util.Collection;
import javax.naming.NamingException;
import javax.naming.directory.Attributes;
import javax.naming.directory.DirContext;
import javax.naming.directory.SearchResult;

public interface LdapIdentityProvider extends ListableIdentityProvider<LdapUser, LdapGroup, LdapUserManager, LdapGroupManager>, LdapUrlProvider {
   int DEFAULT_LDAP_CONNECTION_TIMEOUT = 5000;
   int DEFAULT_LDAP_READ_TIMEOUT = 30000;
   int LDAP_POOL_IDLE_TIMEOUT = 30000;
   String DESCRIPTION_ATTRIBUTE_NAME = "description";
   String OBJECTCLASS_ATTRIBUTE_NAME = "objectclass";

   LdapIdentityProviderConfig getConfig();

   String userSearchFilterWithParam(String var1);

   String groupSearchFilterWithParam(String var1, MemberStrategy... var2);

   DirContext getBrowseContext() throws NamingException;

   DirContext getPaginatedSearchContext() throws NamingException;

   Collection<String> getReturningAttributes();

   IdentityHeader searchResultToHeader(SearchResult var1);

   boolean isValidEntryBasedOnUserAccountControlAttribute(String var1, Attributes var2);

   boolean checkExpiredMSADAccount(String var1, Attributes var2);
}
