Don't reuse httpclient when locating home set

pull/935/head
Alex Baker 6 years ago
parent 4aa3882ce1
commit 46ee03d9bd

@ -17,9 +17,12 @@ import at.bitfire.dav4jvm.XmlUtils;
import at.bitfire.dav4jvm.exception.DavException; import at.bitfire.dav4jvm.exception.DavException;
import at.bitfire.dav4jvm.exception.HttpException; import at.bitfire.dav4jvm.exception.HttpException;
import at.bitfire.dav4jvm.property.CalendarHomeSet; import at.bitfire.dav4jvm.property.CalendarHomeSet;
import at.bitfire.dav4jvm.property.CalendarProxyReadFor;
import at.bitfire.dav4jvm.property.CalendarProxyWriteFor;
import at.bitfire.dav4jvm.property.CurrentUserPrincipal; import at.bitfire.dav4jvm.property.CurrentUserPrincipal;
import at.bitfire.dav4jvm.property.DisplayName; import at.bitfire.dav4jvm.property.DisplayName;
import at.bitfire.dav4jvm.property.GetCTag; import at.bitfire.dav4jvm.property.GetCTag;
import at.bitfire.dav4jvm.property.GroupMembership;
import at.bitfire.dav4jvm.property.ResourceType; import at.bitfire.dav4jvm.property.ResourceType;
import at.bitfire.dav4jvm.property.SupportedCalendarComponentSet; import at.bitfire.dav4jvm.property.SupportedCalendarComponentSet;
import com.todoroo.astrid.helper.UUIDHelper; import com.todoroo.astrid.helper.UUIDHelper;
@ -58,6 +61,7 @@ public class CaldavClient {
private final OkHttpClient httpClient; private final OkHttpClient httpClient;
private final HttpUrl httpUrl; private final HttpUrl httpUrl;
private final Context context; private final Context context;
private final BasicDigestAuthHandler basicDigestAuthHandler;
private boolean foreground; private boolean foreground;
@Inject @Inject
@ -72,6 +76,7 @@ public class CaldavClient {
this.interceptor = interceptor; this.interceptor = interceptor;
httpClient = null; httpClient = null;
httpUrl = null; httpUrl = null;
basicDigestAuthHandler = null;
} }
private CaldavClient( private CaldavClient(
@ -95,8 +100,7 @@ public class CaldavClient {
SSLContext sslContext = SSLContext.getInstance("TLS"); SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, new TrustManager[] { customCertManager }, null); sslContext.init(null, new TrustManager[] { customCertManager }, null);
BasicDigestAuthHandler basicDigestAuthHandler = basicDigestAuthHandler = new BasicDigestAuthHandler(null, username, password);
new BasicDigestAuthHandler(null, username, password);
Builder builder = Builder builder =
new OkHttpClient() new OkHttpClient()
.newBuilder() .newBuilder()
@ -107,7 +111,9 @@ public class CaldavClient {
.followSslRedirects(true) .followSslRedirects(true)
.sslSocketFactory(sslContext.getSocketFactory(), customCertManager) .sslSocketFactory(sslContext.getSocketFactory(), customCertManager)
.hostnameVerifier(hostnameVerifier) .hostnameVerifier(hostnameVerifier)
.readTimeout(30, TimeUnit.SECONDS); .connectTimeout(15, TimeUnit.SECONDS)
.writeTimeout(30, TimeUnit.SECONDS)
.readTimeout(120, TimeUnit.SECONDS);
if (preferences.isFlipperEnabled()) { if (preferences.isFlipperEnabled()) {
interceptor.add(builder); interceptor.add(builder);
} }
@ -150,7 +156,7 @@ public class CaldavClient {
return null; return null;
} }
private String findHomeset(HttpUrl httpUrl) throws DavException, IOException { private String findHomeset() throws DavException, IOException {
DavResource davResource = new DavResource(httpClient, httpUrl); DavResource davResource = new DavResource(httpClient, httpUrl);
ResponseList responses = new ResponseList(); ResponseList responses = new ResponseList();
davResource.propfind(0, new Name[] {CalendarHomeSet.NAME}, responses); davResource.propfind(0, new Name[] {CalendarHomeSet.NAME}, responses);
@ -170,7 +176,8 @@ public class CaldavClient {
return davResource.getLocation().resolve(homeSet).toString(); return davResource.getLocation().resolve(homeSet).toString();
} }
String getHomeSet() throws IOException, DavException { String getHomeSet()
throws IOException, DavException, NoSuchAlgorithmException, KeyManagementException {
String principal = null; String principal = null;
try { try {
principal = tryFindPrincipal("/.well-known/caldav"); principal = tryFindPrincipal("/.well-known/caldav");
@ -184,7 +191,11 @@ public class CaldavClient {
if (principal == null) { if (principal == null) {
principal = tryFindPrincipal(""); principal = tryFindPrincipal("");
} }
return findHomeset(isEmpty(principal) ? httpUrl : httpUrl.resolve(principal)); return forUrl(
(isEmpty(principal) ? this.httpUrl : httpUrl.resolve(principal)).toString(),
basicDigestAuthHandler.getUsername(),
basicDigestAuthHandler.getPassword())
.findHomeset();
} }
public List<Response> getCalendars() throws IOException, DavException { public List<Response> getCalendars() throws IOException, DavException {

Loading…
Cancel
Save