package connector; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.Hashtable; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.function.Function; import javax.naming.Context; import javax.naming.ContextNotEmptyException; import javax.naming.NamingEnumeration; import javax.naming.AuthenticationException; import javax.naming.AuthenticationNotSupportedException; import javax.naming.CommunicationException; import javax.naming.ConfigurationException; import javax.naming.NamingException; import javax.naming.NoInitialContextException; import javax.naming.NoPermissionException; import javax.naming.directory.DirContext; import javax.naming.directory.InitialDirContext; import javax.naming.directory.SearchControls; import javax.naming.directory.SearchResult; import javax.security.auth.login.AccountException; import javax.security.auth.login.AccountExpiredException; import javax.security.auth.login.AccountNotFoundException; import javax.naming.directory.Attribute; import javax.naming.directory.Attributes; import javax.naming.directory.BasicAttribute; import javax.naming.directory.BasicAttributes; import openconnector.AbstractConnector; import openconnector.Connector; import openconnector.ConnectorConfig; import openconnector.ConnectorException; import openconnector.ConnectorStateChangeListener; import openconnector.Filter; import openconnector.Filter.Conjunct; import openconnector.Filter.Operator; import openconnector.Item; import openconnector.JsonBuilder; import openconnector.Log; import openconnector.ObjectAlreadyExistsException; import openconnector.ObjectNotFoundException; import openconnector.Partition; import openconnector.Schema; import openconnector.SystemOutLog; import openconnector.Plan; import openconnector.Request; import openconnector.Result; import openconnector.Connector.Feature; import sailpoint.object.Application; import sailpoint.object.ProvisioningPlan; import sailpoint.object.ProvisioningPlan.AccountRequest; import sailpoint.object.ProvisioningResult; import sailpoint.tools.GeneralException; import com.google.gson.*; import org.json.JSONObject; public class CustomConnector extends AbstractConnector implements Connector { public static final String ATTR_USERNAME = "username"; public static final String ATTR_FIRSTNAME = "firstname"; public static final String ATTR_LASTNAME = "lastname"; public static final String ATTR_EMAIL = "email"; public static final String ATTR_GROUPS = "groups"; public static final String ATTR_PASSWORD = "MemoryConnector.password"; public CustomConnector() throws GeneralException { System.out.println("------------------------I AM CALLING MY CONSTRUCTOR333770------------------------" ); } @Override public Result create(String id, List items) throws ConnectorException, ObjectAlreadyExistsException, UnsupportedOperationException { // TODO Auto-generated method stub System.out.println("------------------------Inside create method------------------------" ); Result result1 = new Result(Result.Status.Committed); System.out.println("------------------------Inside create method1------------------------" ); Map object = new HashMap(); System.out.println("------------------------Inside create method2------------------------" ); for (Item item : items) { object.put(item.getName(), item.getValue()); } System.out.println("------------------------Inside create method3------------------------" ); System.out.println(object); System.out.println("------------------------Inside create method4------------------------" ); result1.setObject(object); System.out.println("------------------------Inside create method5------------------------" ); super.create(id, items); System.out.println("------------------------Inside create method6------------------------" ); return result1; } public static void main(String[] args){ System.out.println("----------------------------------INSIDE MAIN----------------------------"); } @Override public void provision(Plan arg0) throws ConnectorException, ObjectAlreadyExistsException, ObjectNotFoundException, UnsupportedOperationException { Result rs = new Result(); Result rs1 = new Result(); DirContext context; Attributes attributes = new BasicAttributes(); Attribute attribute = new BasicAttribute("objectClass"); attribute.add("inetOrgPerson"); attributes.put(attribute); if(this.config != null) { Hashtable lDapCredentials = new Hashtable(); lDapCredentials.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); lDapCredentials.put(Context.PROVIDER_URL, "ldap://"+this.config.getConfig().get("url")+":1389"); lDapCredentials.put(Context.SECURITY_AUTHENTICATION, "simple"); lDapCredentials.put(Context.SECURITY_PRINCIPAL, this.config.getConfig().get("user").toString()); lDapCredentials.put(Context.SECURITY_CREDENTIALS, this.config.getConfig().get("password").toString()); //lDapCredentials.put(Context., this.config.getConfig().get("password").toString()); try{ context = new InitialDirContext(lDapCredentials); System.out.println("Connected to LDAP"); System.out.println(arg0.getRequests()); String contextString = ""; System.out.println("---------------START OF PROVISION PLAN3------------------------"); HashMap userData = new HashMap(); for(int i=0;i object = new HashMap(); object.put(getIdentityAttribute(), userData.get("employeeNumber").toString()); object.put("First Name", userData.get("givenName").toString()); object.put("Last Name", userData.get("sn").toString()); object.put("Department", "Sales"); object.put("Designation", "Manager"); object.put("memberOf", "Default"); System.out.println(object); result.setObject(object); arg0.setResult(result); } catch(NamingException e){ System.out.println("------------------LINE INSIDE CATCH---------------------"); //log.error("Naming Exception while inserting records."+e); System.out.println("Naming Exception while inserting records."+e); } catch(NullPointerException e){ System.out.println("------------------LINE INSIDE CATCH1---------------------"); System.out.println("CATCH 1 Exception while inserting records. "+e); } catch(Exception e){ System.out.println("------------------LINE INSIDE CATCH1---------------------"); System.out.println("CATCH 1 Exception while inserting records. "+e); } } catch(AuthenticationNotSupportedException e){ System.out.println("AuthenticationNotSupportedException exception in LDAP "+e); } catch(AuthenticationException e){ System.out.println("AuthenticationException exception in LDAP "+e); } catch(NamingException e){ System.out.println("Naming exception in LDAP "+e); } } else { System.out.println("Config is null"); } //System.out.println(js); //super.provision(arg0); System.out.println("------------------END OF PROVISION PLAN METHOD---------------------"); } @Override public Result update(String id, List items) throws ConnectorException, ObjectNotFoundException, IllegalArgumentException, UnsupportedOperationException { // TODO Auto-generated method stub System.out.println("-----------------------INSIDE UPDATE METHOD------------------"); return super.update(id, items); } @Override public Result enable(String id, Map options) throws ConnectorException, ObjectNotFoundException, UnsupportedOperationException { // TODO Auto-generated method stub System.out.println("-----------------------INSIDE ENABLE METHOD------------------"); return super.enable(id, options); } @Override public Iterator> iterate(Filter arg0) throws ConnectorException, UnsupportedOperationException { ArrayList> accountsData = new ArrayList>(); Map oneAccount = new HashMap (); Iterator> itr = null; Map> accounts = new HashMap>(); System.out.println(" ------------------INSIDE THE aggregation method3113... ----------------"); System.out.println("-------------------------PRINTING THE ARG0 DATA-----------------"); System.out.println(arg0); if(this.config != null) { DirContext context; System.out.println(this.config.getConfig()); System.out.println("SearchDN "+this.config.getConfig().get("searchDN")); System.out.println("Host "+this.config.getConfig().get("url")); System.out.println("Port "+this.config.getConfig().get("port")); System.out.println("Username "+this.config.getConfig().get("user")); System.out.println("Password "+this.config.getConfig().get("password")); ConnectorConfig config = new ConnectorConfig(); String searchString = "ldap://"+this.config.getConfig().get("url")+":1389"; Hashtable lDapCredentials = new Hashtable(); System.out.println("SEARCH STRING IS "+searchString); lDapCredentials.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); lDapCredentials.put(Context.PROVIDER_URL, searchString); lDapCredentials.put(Context.SECURITY_AUTHENTICATION, "simple"); lDapCredentials.put(Context.SECURITY_PRINCIPAL, this.config.getConfig().get("user").toString()); lDapCredentials.put(Context.SECURITY_CREDENTIALS, this.config.getConfig().get("password").toString()); try{ System.out.println(" ------------------INSIDE THE try method21... ----------------"); context = new InitialDirContext(lDapCredentials); SearchControls searchControls = new SearchControls(); searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE); //searchControls.setCountLimit(10); NamingEnumeration namingEnumeration = context.search(this.config.getConfig().get("searchDN").toString(), "(cn=*)", new Object[]{}, searchControls); while (namingEnumeration.hasMore()) { SearchResult sr = namingEnumeration.next(); System.out.println("FirstName: " + sr.getAttributes().get("givenName").get()); System.out.println("SN: "+sr.getAttributes().get("sn").get()); System.out.println("UID: " + sr.getAttributes().get("employeeNumber").get()); oneAccount.put("First Name", sr.getAttributes().get("givenName").get()); oneAccount.put("Last Name", sr.getAttributes().get("sn").get()); oneAccount.put("Employee Number", sr.getAttributes().get("employeeNumber").get()); oneAccount.put("Department", "Sales"); oneAccount.put("Designation", "Manager"); oneAccount.put("memberOf", "Default"); accountsData.add(oneAccount); oneAccount = new HashMap (); System.out.println("---------------------------ADDED ONE ACCOUNT TO THE ALL ACCOUNTS DATA-----------------------------------"); System.out.println("---------------------------Total Accounts in accountsData-----------------------------------"); System.out.println(accountsData); System.out.println("---------------------------------------------------------------"); // accounts.put(sr.getAttributes().get("uid").toString(), sr.getObject()); } context.close(); System.out.println("Connected to LDAP"); } catch(AuthenticationNotSupportedException e){ System.out.println("AuthenticationNotSupportedException exception in LDAP "+e); } catch(AuthenticationException e){ System.out.println("AuthenticationException exception in LDAP "+e); } catch(NamingException e){ System.out.println("Naming exception in LDAP "+e); } catch(Exception e){ System.out.println("INSIDE NULL POINTER EXCEPTION ..."+e); } } else { System.out.println("Config is null"); } System.out.println(" ------------------END OF ITERATE METHOD... ----------------"); System.out.println("Total "+accountsData.size()); System.out.println("All accounts"); System.out.println(accountsData); System.out.println("Iterator data"); System.out.println(accountsData.iterator()); itr = accountsData.iterator(); //System.out.println("Total Iterator"+itr.); return accountsData.iterator(); } @Override public void testConnection(){ System.out.println(" ------------------INSIDE THE TEST CONNETION18 ----------------"); DirContext context; if(this.config != null) { System.out.println(this.config.getConfig()); System.out.println("SearchDN "+this.config.getConfig().get("searchDN")); System.out.println("Host "+this.config.getConfig().get("url")); System.out.println("Port "+this.config.getConfig().get("port")); System.out.println("Username "+this.config.getConfig().get("user")); System.out.println("Password "+this.config.getConfig().get("password")); ConnectorConfig config = new ConnectorConfig(); Hashtable lDapCredentials = new Hashtable(); lDapCredentials.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); lDapCredentials.put(Context.PROVIDER_URL, "ldap://"+this.config.getConfig().get("url")+":1389"); lDapCredentials.put(Context.SECURITY_AUTHENTICATION, "simple"); lDapCredentials.put(Context.SECURITY_PRINCIPAL, this.config.getConfig().get("user").toString()); lDapCredentials.put(Context.SECURITY_CREDENTIALS, this.config.getConfig().get("password").toString()); try{ context = new InitialDirContext(lDapCredentials); System.out.println("Connected to LDAP"); } catch(AuthenticationNotSupportedException e){ System.out.println("AuthenticationNotSupportedException exception in LDAP "+e); } catch(AuthenticationException e){ System.out.println("AuthenticationException exception in LDAP "+e); } catch(NamingException e){ System.out.println("Naming exception in LDAP "+e); } } else { System.out.println("Config is null"); } System.out.println(" ------------------INSIDE THE TEST CONNETION 1 ----------------"); } @Override public Map read(String arg0)throws ConnectorException, ObjectNotFoundException, java.lang.UnsupportedOperationException { System.out.println("-----------------------INSIDE THE READ METHOD-----------------"); System.out.println(arg0); return null; } @Override public Result checkStatus(String id) throws ConnectorException, UnsupportedOperationException { // TODO Auto-generated method stub System.out.println("------------------CALLING THE CHECK STATUS METHOD---------------"); return null; } }