Skip to content
This repository was archived by the owner on Feb 25, 2022. It is now read-only.
Open
24 changes: 12 additions & 12 deletions app/src/main/java/de/wikilab/android/ldapsync/client/Contact.java
Original file line number Diff line number Diff line change
Expand Up @@ -127,14 +127,14 @@ public static Contact valueOf(ReadOnlyEntry user, SharedPreferences preferences)
Contact c = new Contact();
try {
c.setDn(user.getDN());
c.setFirstName(getAttributevalue(user, preferences, "first_name"));
c.setLastName(getAttributevalue(user, preferences, "last_name"));
if (getAttributevalue(user, preferences, "last_name") == null || getAttributevalue(user, preferences, "first_name") == null) {
c.setFirstName(getAttributeValue(user, preferences, "first_name"));
c.setLastName(getAttributeValue(user, preferences, "last_name"));
if (getAttributeValue(user, preferences, "last_name") == null || getAttributeValue(user, preferences, "first_name") == null) {
return null;
}
c.setWorkPhone(getAttributevalue(user, preferences, "office_phone"));
c.setCellWorkPhone(getAttributevalue(user, preferences, "cell_phone"));
c.setHomePhone(getAttributevalue(user, preferences, "home_phone"));
c.setWorkPhone(getAttributeValue(user, preferences, "office_phone"));
c.setCellWorkPhone(getAttributeValue(user, preferences, "cell_phone"));
c.setHomePhone(getAttributeValue(user, preferences, "home_phone"));
c.setEmails(
user.hasAttribute(preferences.getString("email", ""))
? user.getAttributeValues(preferences.getString("email", ""))
Expand Down Expand Up @@ -163,11 +163,11 @@ public static Contact valueOf(ReadOnlyEntry user, SharedPreferences preferences)
|| user.hasAttribute(preferences.getString("state", "")) || user.hasAttribute(preferences.getString("postalCode", ""))
|| user.hasAttribute(preferences.getString("country", ""))) {
Address a = new Address();
a.setStreet(getAttributevalue(user, preferences, "street"));
a.setCity(getAttributevalue(user, preferences, "city"));
a.setState(getAttributevalue(user, preferences, "state"));
a.setZip(getAttributevalue(user, preferences, "postalCode"));
a.setCountry(getAttributevalue(user, preferences, "country"));
a.setStreet(getAttributeValue(user, preferences, "street"));
a.setCity(getAttributeValue(user, preferences, "city"));
a.setState(getAttributeValue(user, preferences, "state"));
a.setZip(getAttributeValue(user, preferences, "postalCode"));
a.setCountry(getAttributeValue(user, preferences, "country"));
c.setAddress(a);
}
} catch (final Exception ex) {
Expand All @@ -176,7 +176,7 @@ public static Contact valueOf(ReadOnlyEntry user, SharedPreferences preferences)
return c;
}

private static String getAttributevalue(ReadOnlyEntry user, SharedPreferences preferences, String field) {
private static String getAttributeValue(ReadOnlyEntry user, SharedPreferences preferences, String field) {
return user.hasAttribute(preferences.getString(field, "")) ? user.getAttributeValue(preferences.getString(field, "")) : null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,16 @@
import android.text.TextUtils;
import android.util.Log;

import com.unboundid.asn1.ASN1OctetString;
import com.unboundid.ldap.sdk.LDAPConnection;
import com.unboundid.ldap.sdk.LDAPException;
import com.unboundid.ldap.sdk.LDAPSearchException;
import com.unboundid.ldap.sdk.RootDSE;
import com.unboundid.ldap.sdk.SearchRequest;
import com.unboundid.ldap.sdk.SearchResult;
import com.unboundid.ldap.sdk.SearchResultEntry;
import com.unboundid.ldap.sdk.SearchScope;
import com.unboundid.ldap.sdk.controls.SimplePagedResultsControl;

import de.wikilab.android.ldapsync.R;
import de.wikilab.android.ldapsync.activity.SyncErrorActivity;
Expand Down Expand Up @@ -119,15 +123,35 @@ public static List<Contact> fetchContacts(final LDAPServerInstance ldapServer, f
LDAPConnection connection = null;
try {
connection = ldapServer.getConnection();
SearchResult searchResult = connection.search(baseDN, SearchScope.SUB, searchFilter, getUsedAttributes(preferences));
Log.i(TAG, searchResult.getEntryCount() + " entries returned.");

for (SearchResultEntry e : searchResult.getSearchEntries()) {
Contact u = Contact.valueOf(e, preferences);
if (u != null) {
friendList.add(u);
SearchRequest searchRequest = new SearchRequest(baseDN, SearchScope.SUB, searchFilter, getUsedAttributes(preferences));
ASN1OctetString resumeCookie = null;
int numSearches = 0;
int numEntries = 0;
while (true) {
searchRequest.setControls(new SimplePagedResultsControl(500, resumeCookie));
SearchResult searchResult = connection.search(searchRequest);
numSearches++;
numEntries += searchResult.getEntryCount();
for (SearchResultEntry e : searchResult.getSearchEntries()) {
Contact u = Contact.valueOf(e, preferences);
if (u != null) {
friendList.add(u);
}
}
SimplePagedResultsControl responseControl = SimplePagedResultsControl.get(searchResult);
if (responseControl.moreResultsToReturn()) {
resumeCookie = responseControl.getCookie();
} else {
break;
}
}
Log.i(TAG, numEntries + " entries returned from " + numSearches + " result loops");

return friendList;
} catch (LDAPSearchException se) {
Log.v(TAG, "LDAPSearchException on fetching contacts", se);
showErrorNotification(context, se);
return null;
} catch (LDAPException e) {
Log.v(TAG, "LDAPException on fetching contacts", e);
showErrorNotification(context, e);
Expand All @@ -138,7 +162,6 @@ public static List<Contact> fetchContacts(final LDAPServerInstance ldapServer, f
}
}

return friendList;
}

private static void showErrorNotification(Context context, Throwable e) {
Expand All @@ -162,11 +185,11 @@ private static void showErrorNotification(Context context, Throwable e) {

private static String[] getUsedAttributes(SharedPreferences preferences) {
ArrayList<String> ldapAttributes = new ArrayList<String>();
String[] ldapArray = new String[preferences.getAll().size()];
for (String key : preferences.getAll().keySet()) {
if (!(key.equals("baseDN") || key.equals("searchFilter")))
ldapAttributes.add(preferences.getString(key, ""));
}
String[] ldapArray = new String[ldapAttributes.size()];
ldapArray = ldapAttributes.toArray(ldapArray);
return ldapArray;
}
Expand Down