From 983214d23b1bf42872529e6c1f4ca83ca0f2d1e1 Mon Sep 17 00:00:00 2001 From: rfc2822 Date: Mon, 6 Jan 2014 05:28:28 +0100 Subject: [PATCH] Bug fixes * optimise URL repairs: don't replace "[", "]", ":" in host names, allowing IP address literals (closes #98) * SyncManager: minor refactoring --- src/at/bitfire/davdroid/ArrayUtils.java | 10 +++ src/at/bitfire/davdroid/Constants.java | 5 +- .../bitfire/davdroid/LoggingInputStream.java | 10 +++ src/at/bitfire/davdroid/MainActivity.java | 10 +++ src/at/bitfire/davdroid/URIUtils.java | 74 ++++++++++++++----- .../davdroid/resource/CalDavCalendar.java | 5 +- .../davdroid/resource/CardDavAddressBook.java | 5 +- src/at/bitfire/davdroid/resource/Event.java | 5 +- .../davdroid/resource/LocalCalendar.java | 5 +- .../davdroid/resource/LocalCollection.java | 5 +- .../resource/LocalStorageException.java | 10 +++ .../resource/RecordNotFoundException.java | 10 +++ .../davdroid/resource/RemoteCollection.java | 5 +- .../bitfire/davdroid/resource/Resource.java | 5 +- .../AccountAuthenticatorService.java | 5 +- .../syncadapter/AccountDetailsFragment.java | 10 +++ .../syncadapter/AddAccountActivity.java | 5 +- .../CalendarsSyncAdapterService.java | 5 +- .../ContactsSyncAdapterService.java | 5 +- .../davdroid/syncadapter/DavSyncAdapter.java | 14 +++- .../syncadapter/EnterCredentialsFragment.java | 7 +- .../QueryServerDialogFragment.java | 5 +- .../syncadapter/SelectCollectionsAdapter.java | 5 +- .../SelectCollectionsFragment.java | 5 +- .../davdroid/syncadapter/ServerInfo.java | 5 +- .../davdroid/syncadapter/SyncManager.java | 31 +++++--- .../syncadapter/WebDavResourceAdapter.java | 5 +- .../webdav/DavAddressbookMultiget.java | 5 +- .../davdroid/webdav/DavCalendarMultiget.java | 5 +- .../bitfire/davdroid/webdav/DavException.java | 10 +++ src/at/bitfire/davdroid/webdav/DavHref.java | 5 +- .../davdroid/webdav/DavHttpClient.java | 10 +++ .../webdav/DavIncapableException.java | 5 +- .../bitfire/davdroid/webdav/DavMultiget.java | 5 +- .../davdroid/webdav/DavMultistatus.java | 5 +- .../webdav/DavNoContentException.java | 10 +++ .../webdav/DavNoMultiStatusException.java | 10 +++ src/at/bitfire/davdroid/webdav/DavProp.java | 5 +- .../bitfire/davdroid/webdav/DavPropfind.java | 5 +- .../bitfire/davdroid/webdav/DavPropstat.java | 5 +- .../bitfire/davdroid/webdav/DavResponse.java | 5 +- .../webdav/GzipDecompressingEntity.java | 5 +- .../bitfire/davdroid/webdav/HttpPropfind.java | 5 +- .../bitfire/davdroid/webdav/HttpReport.java | 5 +- .../davdroid/webdav/NotFoundException.java | 5 +- .../webdav/PreconditionFailedException.java | 5 +- .../webdav/PreemptiveAuthInterceptor.java | 5 +- .../davdroid/webdav/TlsSniSocketFactory.java | 10 +++ .../davdroid/webdav/WebDavResource.java | 5 +- .../bitfire/davdroid/test/URIUtilsTest.java | 32 ++++---- 50 files changed, 355 insertions(+), 83 deletions(-) diff --git a/src/at/bitfire/davdroid/ArrayUtils.java b/src/at/bitfire/davdroid/ArrayUtils.java index de95b366..8e85a352 100644 --- a/src/at/bitfire/davdroid/ArrayUtils.java +++ b/src/at/bitfire/davdroid/ArrayUtils.java @@ -1,3 +1,13 @@ +/******************************************************************************* + * Copyright (c) 2014 Richard Hirner (bitfire web engineering). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * Richard Hirner (bitfire web engineering) - initial API and implementation + ******************************************************************************/ package at.bitfire.davdroid; import java.lang.reflect.Array; diff --git a/src/at/bitfire/davdroid/Constants.java b/src/at/bitfire/davdroid/Constants.java index c2cceb92..d10d5bfc 100644 --- a/src/at/bitfire/davdroid/Constants.java +++ b/src/at/bitfire/davdroid/Constants.java @@ -1,9 +1,12 @@ /******************************************************************************* - * Copyright (c) 2013 Richard Hirner (bitfire web engineering). + * Copyright (c) 2014 Richard Hirner (bitfire web engineering). * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * Richard Hirner (bitfire web engineering) - initial API and implementation ******************************************************************************/ package at.bitfire.davdroid; diff --git a/src/at/bitfire/davdroid/LoggingInputStream.java b/src/at/bitfire/davdroid/LoggingInputStream.java index 12ed2db5..8796e0d9 100644 --- a/src/at/bitfire/davdroid/LoggingInputStream.java +++ b/src/at/bitfire/davdroid/LoggingInputStream.java @@ -1,3 +1,13 @@ +/******************************************************************************* + * Copyright (c) 2014 Richard Hirner (bitfire web engineering). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * Richard Hirner (bitfire web engineering) - initial API and implementation + ******************************************************************************/ package at.bitfire.davdroid; import java.io.ByteArrayOutputStream; diff --git a/src/at/bitfire/davdroid/MainActivity.java b/src/at/bitfire/davdroid/MainActivity.java index 6b64b483..348f9585 100644 --- a/src/at/bitfire/davdroid/MainActivity.java +++ b/src/at/bitfire/davdroid/MainActivity.java @@ -1,3 +1,13 @@ +/******************************************************************************* + * Copyright (c) 2014 Richard Hirner (bitfire web engineering). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * Richard Hirner (bitfire web engineering) - initial API and implementation + ******************************************************************************/ package at.bitfire.davdroid; import android.app.Activity; diff --git a/src/at/bitfire/davdroid/URIUtils.java b/src/at/bitfire/davdroid/URIUtils.java index 4eb3a039..34fde76e 100644 --- a/src/at/bitfire/davdroid/URIUtils.java +++ b/src/at/bitfire/davdroid/URIUtils.java @@ -1,5 +1,18 @@ +/******************************************************************************* + * Copyright (c) 2014 Richard Hirner (bitfire web engineering). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * Richard Hirner (bitfire web engineering) - initial API and implementation + ******************************************************************************/ package at.bitfire.davdroid; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + import android.annotation.SuppressLint; import android.util.Log; @@ -10,25 +23,48 @@ public class URIUtils { // handles invalid URLs/paths as good as possible public static String sanitize(String original) { - String url = original; + Pattern p = Pattern.compile("^((https?:)?//([^/]+))?(.*)", Pattern.CASE_INSENSITIVE); + // $1: "http://hostname" or "https://hostname" or "//hostname" or empty (hostname may end with":port") + // $2: "http:" or "https:" or empty + // $3: hostname (may end with ":port") or empty + // $4: path or empty - // ":" is reserved as scheme/port separator, but we assume http:// and https:// URLs only - // and will encode ":" in URLs without one of these schemata - if (!url.toLowerCase().startsWith("http://") && // ":" is valid scheme separator - !url.toLowerCase().startsWith("https://") && // ":" is valid scheme separator - !url.startsWith("//")) // ":" may be valid port separator - url = url.replace(":", "%3A"); // none of these -> ":" is not used for reserved purpose -> must be encoded - - // rewrite reserved characters: - // "@" should be used for user name/password, but this case shouldn't appear in our URLs - // rewrite unsafe characters, too: - // " ", "<", ">", """, "#", "{", "}", "|", "\", "^", "~", "["], "]", "`" - // do not rewrite "%" because we assume that URLs should be already encoded correctly - for (char c : new char[] { '@', ' ', '<', '>', '"', '#', '{', '}', '|', '\\', '^', '~', '[', ']', '`' }) - url = url.replace(String.valueOf(c), "%" + Integer.toHexString(c)); - - if (!url.equals(original)) - Log.w(TAG, "Trying to repair invalid URL: " + original + " -> " + url); - return url; + Matcher m = p.matcher(original); + if (m.find()) { + String schema = m.group(2), + host = m.group(3), + path = m.group(4); + + if (host != null) + // sanitize host name (don't replace "[", "]", ":" for IP address literals and port numbers) + // "@" should be used for user name/password, but this case shouldn't appear in our URLs + for (char c : new char[] { '@', ' ', '<', '>', '"', '#', '{', '}', '|', '\\', '^', '~', '`' }) + host = host.replace(String.valueOf(c), "%" + Integer.toHexString(c)); + + if (path != null) + // rewrite reserved characters: + // ":" and "@" may be used in the host part but not in the path + // rewrite unsafe characters: + // " ", "<", ">", """, "#", "{", "}", "|", "\", "^", "~", "["], "]", "`" + // do not rewrite "%" because we assume that URLs should be already encoded correctly + for (char c : new char[] { ':', '@', ' ', '<', '>', '"', '#', '{', '}', '|', '\\', '^', '~', '[', ']', '`' }) + path = path.replace(String.valueOf(c), "%" + Integer.toHexString(c)); + + String url = (schema != null) ? schema : ""; + if (host != null) + url = url + "//" + host; + if (path != null) + url = url + path; + + if (!url.equals(original)) + Log.w(TAG, "Trying to repair invalid URL: " + original + " -> " + url); + return url; + + } else { + + Log.w(TAG, "Couldn't sanitize URL: " + original); + return original; + + } } } diff --git a/src/at/bitfire/davdroid/resource/CalDavCalendar.java b/src/at/bitfire/davdroid/resource/CalDavCalendar.java index 5074206a..1368bb79 100644 --- a/src/at/bitfire/davdroid/resource/CalDavCalendar.java +++ b/src/at/bitfire/davdroid/resource/CalDavCalendar.java @@ -1,9 +1,12 @@ /******************************************************************************* - * Copyright (c) 2013 Richard Hirner (bitfire web engineering). + * Copyright (c) 2014 Richard Hirner (bitfire web engineering). * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * Richard Hirner (bitfire web engineering) - initial API and implementation ******************************************************************************/ package at.bitfire.davdroid.resource; diff --git a/src/at/bitfire/davdroid/resource/CardDavAddressBook.java b/src/at/bitfire/davdroid/resource/CardDavAddressBook.java index 62644d30..52d7ec3d 100644 --- a/src/at/bitfire/davdroid/resource/CardDavAddressBook.java +++ b/src/at/bitfire/davdroid/resource/CardDavAddressBook.java @@ -1,9 +1,12 @@ /******************************************************************************* - * Copyright (c) 2013 Richard Hirner (bitfire web engineering). + * Copyright (c) 2014 Richard Hirner (bitfire web engineering). * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * Richard Hirner (bitfire web engineering) - initial API and implementation ******************************************************************************/ package at.bitfire.davdroid.resource; diff --git a/src/at/bitfire/davdroid/resource/Event.java b/src/at/bitfire/davdroid/resource/Event.java index 599651fc..06b719ee 100644 --- a/src/at/bitfire/davdroid/resource/Event.java +++ b/src/at/bitfire/davdroid/resource/Event.java @@ -1,9 +1,12 @@ /******************************************************************************* - * Copyright (c) 2013 Richard Hirner (bitfire web engineering). + * Copyright (c) 2014 Richard Hirner (bitfire web engineering). * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * Richard Hirner (bitfire web engineering) - initial API and implementation ******************************************************************************/ package at.bitfire.davdroid.resource; diff --git a/src/at/bitfire/davdroid/resource/LocalCalendar.java b/src/at/bitfire/davdroid/resource/LocalCalendar.java index b9ce851a..9ffe5b79 100644 --- a/src/at/bitfire/davdroid/resource/LocalCalendar.java +++ b/src/at/bitfire/davdroid/resource/LocalCalendar.java @@ -1,9 +1,12 @@ /******************************************************************************* - * Copyright (c) 2013 Richard Hirner (bitfire web engineering). + * Copyright (c) 2014 Richard Hirner (bitfire web engineering). * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * Richard Hirner (bitfire web engineering) - initial API and implementation ******************************************************************************/ package at.bitfire.davdroid.resource; diff --git a/src/at/bitfire/davdroid/resource/LocalCollection.java b/src/at/bitfire/davdroid/resource/LocalCollection.java index 9ca4ed9b..ad58586f 100644 --- a/src/at/bitfire/davdroid/resource/LocalCollection.java +++ b/src/at/bitfire/davdroid/resource/LocalCollection.java @@ -1,9 +1,12 @@ /******************************************************************************* - * Copyright (c) 2013 Richard Hirner (bitfire web engineering). + * Copyright (c) 2014 Richard Hirner (bitfire web engineering). * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * Richard Hirner (bitfire web engineering) - initial API and implementation ******************************************************************************/ package at.bitfire.davdroid.resource; diff --git a/src/at/bitfire/davdroid/resource/LocalStorageException.java b/src/at/bitfire/davdroid/resource/LocalStorageException.java index f4c6f22b..777e6e54 100644 --- a/src/at/bitfire/davdroid/resource/LocalStorageException.java +++ b/src/at/bitfire/davdroid/resource/LocalStorageException.java @@ -1,3 +1,13 @@ +/******************************************************************************* + * Copyright (c) 2014 Richard Hirner (bitfire web engineering). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * Richard Hirner (bitfire web engineering) - initial API and implementation + ******************************************************************************/ package at.bitfire.davdroid.resource; public class LocalStorageException extends Exception { diff --git a/src/at/bitfire/davdroid/resource/RecordNotFoundException.java b/src/at/bitfire/davdroid/resource/RecordNotFoundException.java index d110d62c..200d8fc0 100644 --- a/src/at/bitfire/davdroid/resource/RecordNotFoundException.java +++ b/src/at/bitfire/davdroid/resource/RecordNotFoundException.java @@ -1,3 +1,13 @@ +/******************************************************************************* + * Copyright (c) 2014 Richard Hirner (bitfire web engineering). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * Richard Hirner (bitfire web engineering) - initial API and implementation + ******************************************************************************/ package at.bitfire.davdroid.resource; public class RecordNotFoundException extends LocalStorageException { diff --git a/src/at/bitfire/davdroid/resource/RemoteCollection.java b/src/at/bitfire/davdroid/resource/RemoteCollection.java index c0dbeaa0..d26914e5 100644 --- a/src/at/bitfire/davdroid/resource/RemoteCollection.java +++ b/src/at/bitfire/davdroid/resource/RemoteCollection.java @@ -1,9 +1,12 @@ /******************************************************************************* - * Copyright (c) 2013 Richard Hirner (bitfire web engineering). + * Copyright (c) 2014 Richard Hirner (bitfire web engineering). * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * Richard Hirner (bitfire web engineering) - initial API and implementation ******************************************************************************/ package at.bitfire.davdroid.resource; diff --git a/src/at/bitfire/davdroid/resource/Resource.java b/src/at/bitfire/davdroid/resource/Resource.java index 82eb571c..ff37b9fc 100644 --- a/src/at/bitfire/davdroid/resource/Resource.java +++ b/src/at/bitfire/davdroid/resource/Resource.java @@ -1,9 +1,12 @@ /******************************************************************************* - * Copyright (c) 2013 Richard Hirner (bitfire web engineering). + * Copyright (c) 2014 Richard Hirner (bitfire web engineering). * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * Richard Hirner (bitfire web engineering) - initial API and implementation ******************************************************************************/ package at.bitfire.davdroid.resource; diff --git a/src/at/bitfire/davdroid/syncadapter/AccountAuthenticatorService.java b/src/at/bitfire/davdroid/syncadapter/AccountAuthenticatorService.java index 5ad83bd5..c2898e19 100644 --- a/src/at/bitfire/davdroid/syncadapter/AccountAuthenticatorService.java +++ b/src/at/bitfire/davdroid/syncadapter/AccountAuthenticatorService.java @@ -1,9 +1,12 @@ /******************************************************************************* - * Copyright (c) 2013 Richard Hirner (bitfire web engineering). + * Copyright (c) 2014 Richard Hirner (bitfire web engineering). * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * Richard Hirner (bitfire web engineering) - initial API and implementation ******************************************************************************/ package at.bitfire.davdroid.syncadapter; diff --git a/src/at/bitfire/davdroid/syncadapter/AccountDetailsFragment.java b/src/at/bitfire/davdroid/syncadapter/AccountDetailsFragment.java index 9eda82e1..01b11558 100644 --- a/src/at/bitfire/davdroid/syncadapter/AccountDetailsFragment.java +++ b/src/at/bitfire/davdroid/syncadapter/AccountDetailsFragment.java @@ -1,3 +1,13 @@ +/******************************************************************************* + * Copyright (c) 2014 Richard Hirner (bitfire web engineering). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * Richard Hirner (bitfire web engineering) - initial API and implementation + ******************************************************************************/ package at.bitfire.davdroid.syncadapter; import android.accounts.Account; diff --git a/src/at/bitfire/davdroid/syncadapter/AddAccountActivity.java b/src/at/bitfire/davdroid/syncadapter/AddAccountActivity.java index ec8b3a27..af6a0b2c 100644 --- a/src/at/bitfire/davdroid/syncadapter/AddAccountActivity.java +++ b/src/at/bitfire/davdroid/syncadapter/AddAccountActivity.java @@ -1,9 +1,12 @@ /******************************************************************************* - * Copyright (c) 2013 Richard Hirner (bitfire web engineering). + * Copyright (c) 2014 Richard Hirner (bitfire web engineering). * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * Richard Hirner (bitfire web engineering) - initial API and implementation ******************************************************************************/ package at.bitfire.davdroid.syncadapter; diff --git a/src/at/bitfire/davdroid/syncadapter/CalendarsSyncAdapterService.java b/src/at/bitfire/davdroid/syncadapter/CalendarsSyncAdapterService.java index f950635d..6226d9d3 100644 --- a/src/at/bitfire/davdroid/syncadapter/CalendarsSyncAdapterService.java +++ b/src/at/bitfire/davdroid/syncadapter/CalendarsSyncAdapterService.java @@ -1,9 +1,12 @@ /******************************************************************************* - * Copyright (c) 2013 Richard Hirner (bitfire web engineering). + * Copyright (c) 2014 Richard Hirner (bitfire web engineering). * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * Richard Hirner (bitfire web engineering) - initial API and implementation ******************************************************************************/ package at.bitfire.davdroid.syncadapter; diff --git a/src/at/bitfire/davdroid/syncadapter/ContactsSyncAdapterService.java b/src/at/bitfire/davdroid/syncadapter/ContactsSyncAdapterService.java index eb7fb966..45fc690a 100644 --- a/src/at/bitfire/davdroid/syncadapter/ContactsSyncAdapterService.java +++ b/src/at/bitfire/davdroid/syncadapter/ContactsSyncAdapterService.java @@ -1,9 +1,12 @@ /******************************************************************************* - * Copyright (c) 2013 Richard Hirner (bitfire web engineering). + * Copyright (c) 2014 Richard Hirner (bitfire web engineering). * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * Richard Hirner (bitfire web engineering) - initial API and implementation ******************************************************************************/ package at.bitfire.davdroid.syncadapter; diff --git a/src/at/bitfire/davdroid/syncadapter/DavSyncAdapter.java b/src/at/bitfire/davdroid/syncadapter/DavSyncAdapter.java index 2da23bc4..b2cac728 100644 --- a/src/at/bitfire/davdroid/syncadapter/DavSyncAdapter.java +++ b/src/at/bitfire/davdroid/syncadapter/DavSyncAdapter.java @@ -1,3 +1,13 @@ +/******************************************************************************* + * Copyright (c) 2014 Richard Hirner (bitfire web engineering). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * Richard Hirner (bitfire web engineering) - initial API and implementation + ******************************************************************************/ package at.bitfire.davdroid.syncadapter; import java.io.IOException; @@ -52,15 +62,13 @@ public abstract class DavSyncAdapter extends AbstractThreadedSyncAdapter { // set class loader for iCal4j ResourceLoader Thread.currentThread().setContextClassLoader(getContext().getClassLoader()); - SyncManager syncManager = new SyncManager(); - Map, RemoteCollection> syncCollections = getSyncPairs(account, provider); if (syncCollections == null) Log.i(TAG, "Nothing to synchronize"); else try { for (Map.Entry, RemoteCollection> entry : syncCollections.entrySet()) - syncManager.synchronize(entry.getKey(), entry.getValue(), extras.containsKey(ContentResolver.SYNC_EXTRAS_MANUAL), syncResult); + new SyncManager(entry.getKey(), entry.getValue()).synchronize(extras.containsKey(ContentResolver.SYNC_EXTRAS_MANUAL), syncResult); } catch (AuthenticationException ex) { syncResult.stats.numAuthExceptions++; diff --git a/src/at/bitfire/davdroid/syncadapter/EnterCredentialsFragment.java b/src/at/bitfire/davdroid/syncadapter/EnterCredentialsFragment.java index 2eadbc04..34c95da0 100644 --- a/src/at/bitfire/davdroid/syncadapter/EnterCredentialsFragment.java +++ b/src/at/bitfire/davdroid/syncadapter/EnterCredentialsFragment.java @@ -1,9 +1,12 @@ /******************************************************************************* - * Copyright (c) 2013 Richard Hirner (bitfire web engineering). + * Copyright (c) 2014 Richard Hirner (bitfire web engineering). * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * Richard Hirner (bitfire web engineering) - initial API and implementation ******************************************************************************/ package at.bitfire.davdroid.syncadapter; @@ -125,7 +128,7 @@ public class EnterCredentialsFragment extends Fragment implements TextWatcher { // check host name try { - URL url = new URL(protocol + editBaseURL.getText().toString()); + URL url = new URL(URIUtils.sanitize(protocol + editBaseURL.getText().toString())); if (url.getHost() == null || url.getHost().isEmpty()) ok = false; } catch (MalformedURLException e) { diff --git a/src/at/bitfire/davdroid/syncadapter/QueryServerDialogFragment.java b/src/at/bitfire/davdroid/syncadapter/QueryServerDialogFragment.java index 30e44704..93d9aaf4 100644 --- a/src/at/bitfire/davdroid/syncadapter/QueryServerDialogFragment.java +++ b/src/at/bitfire/davdroid/syncadapter/QueryServerDialogFragment.java @@ -1,9 +1,12 @@ /******************************************************************************* - * Copyright (c) 2013 Richard Hirner (bitfire web engineering). + * Copyright (c) 2014 Richard Hirner (bitfire web engineering). * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * Richard Hirner (bitfire web engineering) - initial API and implementation ******************************************************************************/ package at.bitfire.davdroid.syncadapter; diff --git a/src/at/bitfire/davdroid/syncadapter/SelectCollectionsAdapter.java b/src/at/bitfire/davdroid/syncadapter/SelectCollectionsAdapter.java index ca7e6899..b81d788f 100644 --- a/src/at/bitfire/davdroid/syncadapter/SelectCollectionsAdapter.java +++ b/src/at/bitfire/davdroid/syncadapter/SelectCollectionsAdapter.java @@ -1,9 +1,12 @@ /******************************************************************************* - * Copyright (c) 2013 Richard Hirner (bitfire web engineering). + * Copyright (c) 2014 Richard Hirner (bitfire web engineering). * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * Richard Hirner (bitfire web engineering) - initial API and implementation ******************************************************************************/ package at.bitfire.davdroid.syncadapter; diff --git a/src/at/bitfire/davdroid/syncadapter/SelectCollectionsFragment.java b/src/at/bitfire/davdroid/syncadapter/SelectCollectionsFragment.java index 2a3de201..d903a98a 100644 --- a/src/at/bitfire/davdroid/syncadapter/SelectCollectionsFragment.java +++ b/src/at/bitfire/davdroid/syncadapter/SelectCollectionsFragment.java @@ -1,9 +1,12 @@ /******************************************************************************* - * Copyright (c) 2013 Richard Hirner (bitfire web engineering). + * Copyright (c) 2014 Richard Hirner (bitfire web engineering). * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * Richard Hirner (bitfire web engineering) - initial API and implementation ******************************************************************************/ package at.bitfire.davdroid.syncadapter; diff --git a/src/at/bitfire/davdroid/syncadapter/ServerInfo.java b/src/at/bitfire/davdroid/syncadapter/ServerInfo.java index 50cac503..2e4b59f1 100644 --- a/src/at/bitfire/davdroid/syncadapter/ServerInfo.java +++ b/src/at/bitfire/davdroid/syncadapter/ServerInfo.java @@ -1,9 +1,12 @@ /******************************************************************************* - * Copyright (c) 2013 Richard Hirner (bitfire web engineering). + * Copyright (c) 2014 Richard Hirner (bitfire web engineering). * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * Richard Hirner (bitfire web engineering) - initial API and implementation ******************************************************************************/ package at.bitfire.davdroid.syncadapter; diff --git a/src/at/bitfire/davdroid/syncadapter/SyncManager.java b/src/at/bitfire/davdroid/syncadapter/SyncManager.java index ab3d7094..20a07b7e 100644 --- a/src/at/bitfire/davdroid/syncadapter/SyncManager.java +++ b/src/at/bitfire/davdroid/syncadapter/SyncManager.java @@ -31,12 +31,21 @@ public class SyncManager { private static final int MAX_MULTIGET_RESOURCES = 35; + protected LocalCollection local; + protected RemoteCollection remote; + + + public SyncManager(LocalCollection local, RemoteCollection remote) { + this.local = local; + this.remote = remote; + } - public static void synchronize(LocalCollection local, RemoteCollection remote, boolean manualSync, SyncResult syncResult) throws LocalStorageException, IOException, HttpException { + + public void synchronize(boolean manualSync, SyncResult syncResult) throws LocalStorageException, IOException, HttpException { // PHASE 1: push local changes to server - int deletedRemotely = pushDeleted(local, remote), - addedRemotely = pushNew(local, remote), - updatedRemotely = pushDirty(local, remote); + int deletedRemotely = pushDeleted(), + addedRemotely = pushNew(), + updatedRemotely = pushDirty(); syncResult.stats.numEntries = deletedRemotely + addedRemotely + updatedRemotely; @@ -70,8 +79,8 @@ public class SyncManager { } // PHASE 3: pull remote changes from server - syncResult.stats.numInserts = pullNew(local, remote, remotelyAdded.toArray(new Resource[0])); - syncResult.stats.numUpdates = pullChanged(local, remote, remotelyUpdated.toArray(new Resource[0])); + syncResult.stats.numInserts = pullNew(remotelyAdded.toArray(new Resource[0])); + syncResult.stats.numUpdates = pullChanged(remotelyUpdated.toArray(new Resource[0])); syncResult.stats.numEntries += syncResult.stats.numInserts + syncResult.stats.numUpdates; Log.i(TAG, "Removing non-dirty resources that are not present remotely anymore"); @@ -85,7 +94,7 @@ public class SyncManager { } - private static int pushDeleted(LocalCollection local, RemoteCollection remote) throws LocalStorageException, IOException, HttpException { + private int pushDeleted() throws LocalStorageException, IOException, HttpException { int count = 0; long[] deletedIDs = local.findDeleted(); @@ -111,7 +120,7 @@ public class SyncManager { return count; } - private static int pushNew(LocalCollection local, RemoteCollection remote) throws LocalStorageException, IOException, HttpException { + private int pushNew() throws LocalStorageException, IOException, HttpException { int count = 0; long[] newIDs = local.findNew(); Log.i(TAG, "Uploading " + newIDs.length + " new resource(s) (if not existing)"); @@ -135,7 +144,7 @@ public class SyncManager { return count; } - private static int pushDirty(LocalCollection local, RemoteCollection remote) throws LocalStorageException, IOException, HttpException { + private int pushDirty() throws LocalStorageException, IOException, HttpException { int count = 0; long[] dirtyIDs = local.findDirty(); Log.i(TAG, "Uploading " + dirtyIDs.length + " modified resource(s) (if not changed)"); @@ -160,7 +169,7 @@ public class SyncManager { return count; } - private static int pullNew(LocalCollection local, RemoteCollection remote, Resource[] resourcesToAdd) throws LocalStorageException, IOException, HttpException { + private int pullNew(Resource[] resourcesToAdd) throws LocalStorageException, IOException, HttpException { int count = 0; Log.i(TAG, "Fetching " + resourcesToAdd.length + " new remote resource(s)"); @@ -177,7 +186,7 @@ public class SyncManager { return count; } - private static int pullChanged(LocalCollection local, RemoteCollection remote, Resource[] resourcesToUpdate) throws LocalStorageException, IOException, HttpException { + private int pullChanged(Resource[] resourcesToUpdate) throws LocalStorageException, IOException, HttpException { int count = 0; Log.i(TAG, "Fetching " + resourcesToUpdate.length + " updated remote resource(s)"); diff --git a/src/at/bitfire/davdroid/syncadapter/WebDavResourceAdapter.java b/src/at/bitfire/davdroid/syncadapter/WebDavResourceAdapter.java index eefb1759..49b6ab4d 100644 --- a/src/at/bitfire/davdroid/syncadapter/WebDavResourceAdapter.java +++ b/src/at/bitfire/davdroid/syncadapter/WebDavResourceAdapter.java @@ -1,9 +1,12 @@ /******************************************************************************* - * Copyright (c) 2013 Richard Hirner (bitfire web engineering). + * Copyright (c) 2014 Richard Hirner (bitfire web engineering). * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * Richard Hirner (bitfire web engineering) - initial API and implementation ******************************************************************************/ package at.bitfire.davdroid.syncadapter; diff --git a/src/at/bitfire/davdroid/webdav/DavAddressbookMultiget.java b/src/at/bitfire/davdroid/webdav/DavAddressbookMultiget.java index 8e41bc61..6eff7173 100644 --- a/src/at/bitfire/davdroid/webdav/DavAddressbookMultiget.java +++ b/src/at/bitfire/davdroid/webdav/DavAddressbookMultiget.java @@ -1,9 +1,12 @@ /******************************************************************************* - * Copyright (c) 2013 Richard Hirner (bitfire web engineering). + * Copyright (c) 2014 Richard Hirner (bitfire web engineering). * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * Richard Hirner (bitfire web engineering) - initial API and implementation ******************************************************************************/ package at.bitfire.davdroid.webdav; diff --git a/src/at/bitfire/davdroid/webdav/DavCalendarMultiget.java b/src/at/bitfire/davdroid/webdav/DavCalendarMultiget.java index cae3b76e..946b8b39 100644 --- a/src/at/bitfire/davdroid/webdav/DavCalendarMultiget.java +++ b/src/at/bitfire/davdroid/webdav/DavCalendarMultiget.java @@ -1,9 +1,12 @@ /******************************************************************************* - * Copyright (c) 2013 Richard Hirner (bitfire web engineering). + * Copyright (c) 2014 Richard Hirner (bitfire web engineering). * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * Richard Hirner (bitfire web engineering) - initial API and implementation ******************************************************************************/ package at.bitfire.davdroid.webdav; diff --git a/src/at/bitfire/davdroid/webdav/DavException.java b/src/at/bitfire/davdroid/webdav/DavException.java index f6121bcf..c8de8417 100644 --- a/src/at/bitfire/davdroid/webdav/DavException.java +++ b/src/at/bitfire/davdroid/webdav/DavException.java @@ -1,3 +1,13 @@ +/******************************************************************************* + * Copyright (c) 2014 Richard Hirner (bitfire web engineering). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * Richard Hirner (bitfire web engineering) - initial API and implementation + ******************************************************************************/ package at.bitfire.davdroid.webdav; import org.apache.http.HttpException; diff --git a/src/at/bitfire/davdroid/webdav/DavHref.java b/src/at/bitfire/davdroid/webdav/DavHref.java index 17f2c3e1..1908a3c2 100644 --- a/src/at/bitfire/davdroid/webdav/DavHref.java +++ b/src/at/bitfire/davdroid/webdav/DavHref.java @@ -1,9 +1,12 @@ /******************************************************************************* - * Copyright (c) 2013 Richard Hirner (bitfire web engineering). + * Copyright (c) 2014 Richard Hirner (bitfire web engineering). * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * Richard Hirner (bitfire web engineering) - initial API and implementation ******************************************************************************/ package at.bitfire.davdroid.webdav; diff --git a/src/at/bitfire/davdroid/webdav/DavHttpClient.java b/src/at/bitfire/davdroid/webdav/DavHttpClient.java index 38ad3dad..d925a9f3 100644 --- a/src/at/bitfire/davdroid/webdav/DavHttpClient.java +++ b/src/at/bitfire/davdroid/webdav/DavHttpClient.java @@ -1,3 +1,13 @@ +/******************************************************************************* + * Copyright (c) 2014 Richard Hirner (bitfire web engineering). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * Richard Hirner (bitfire web engineering) - initial API and implementation + ******************************************************************************/ package at.bitfire.davdroid.webdav; import org.apache.http.client.params.HttpClientParams; diff --git a/src/at/bitfire/davdroid/webdav/DavIncapableException.java b/src/at/bitfire/davdroid/webdav/DavIncapableException.java index 127e9ddb..f864a441 100644 --- a/src/at/bitfire/davdroid/webdav/DavIncapableException.java +++ b/src/at/bitfire/davdroid/webdav/DavIncapableException.java @@ -1,9 +1,12 @@ /******************************************************************************* - * Copyright (c) 2013 Richard Hirner (bitfire web engineering). + * Copyright (c) 2014 Richard Hirner (bitfire web engineering). * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * Richard Hirner (bitfire web engineering) - initial API and implementation ******************************************************************************/ package at.bitfire.davdroid.webdav; diff --git a/src/at/bitfire/davdroid/webdav/DavMultiget.java b/src/at/bitfire/davdroid/webdav/DavMultiget.java index 76d8faf1..e3bc43a6 100644 --- a/src/at/bitfire/davdroid/webdav/DavMultiget.java +++ b/src/at/bitfire/davdroid/webdav/DavMultiget.java @@ -1,9 +1,12 @@ /******************************************************************************* - * Copyright (c) 2013 Richard Hirner (bitfire web engineering). + * Copyright (c) 2014 Richard Hirner (bitfire web engineering). * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * Richard Hirner (bitfire web engineering) - initial API and implementation ******************************************************************************/ package at.bitfire.davdroid.webdav; diff --git a/src/at/bitfire/davdroid/webdav/DavMultistatus.java b/src/at/bitfire/davdroid/webdav/DavMultistatus.java index 396ed690..5ac5ec2f 100644 --- a/src/at/bitfire/davdroid/webdav/DavMultistatus.java +++ b/src/at/bitfire/davdroid/webdav/DavMultistatus.java @@ -1,9 +1,12 @@ /******************************************************************************* - * Copyright (c) 2013 Richard Hirner (bitfire web engineering). + * Copyright (c) 2014 Richard Hirner (bitfire web engineering). * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * Richard Hirner (bitfire web engineering) - initial API and implementation ******************************************************************************/ package at.bitfire.davdroid.webdav; diff --git a/src/at/bitfire/davdroid/webdav/DavNoContentException.java b/src/at/bitfire/davdroid/webdav/DavNoContentException.java index a852728c..dbfe36fc 100644 --- a/src/at/bitfire/davdroid/webdav/DavNoContentException.java +++ b/src/at/bitfire/davdroid/webdav/DavNoContentException.java @@ -1,3 +1,13 @@ +/******************************************************************************* + * Copyright (c) 2014 Richard Hirner (bitfire web engineering). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * Richard Hirner (bitfire web engineering) - initial API and implementation + ******************************************************************************/ package at.bitfire.davdroid.webdav; public class DavNoContentException extends DavException { diff --git a/src/at/bitfire/davdroid/webdav/DavNoMultiStatusException.java b/src/at/bitfire/davdroid/webdav/DavNoMultiStatusException.java index 7c3e450f..7619c8dc 100644 --- a/src/at/bitfire/davdroid/webdav/DavNoMultiStatusException.java +++ b/src/at/bitfire/davdroid/webdav/DavNoMultiStatusException.java @@ -1,3 +1,13 @@ +/******************************************************************************* + * Copyright (c) 2014 Richard Hirner (bitfire web engineering). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * Richard Hirner (bitfire web engineering) - initial API and implementation + ******************************************************************************/ package at.bitfire.davdroid.webdav; public class DavNoMultiStatusException extends DavException { diff --git a/src/at/bitfire/davdroid/webdav/DavProp.java b/src/at/bitfire/davdroid/webdav/DavProp.java index fc0c7156..5e3dcf06 100644 --- a/src/at/bitfire/davdroid/webdav/DavProp.java +++ b/src/at/bitfire/davdroid/webdav/DavProp.java @@ -1,9 +1,12 @@ /******************************************************************************* - * Copyright (c) 2013 Richard Hirner (bitfire web engineering). + * Copyright (c) 2014 Richard Hirner (bitfire web engineering). * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * Richard Hirner (bitfire web engineering) - initial API and implementation ******************************************************************************/ package at.bitfire.davdroid.webdav; diff --git a/src/at/bitfire/davdroid/webdav/DavPropfind.java b/src/at/bitfire/davdroid/webdav/DavPropfind.java index 24a58211..51430541 100644 --- a/src/at/bitfire/davdroid/webdav/DavPropfind.java +++ b/src/at/bitfire/davdroid/webdav/DavPropfind.java @@ -1,9 +1,12 @@ /******************************************************************************* - * Copyright (c) 2013 Richard Hirner (bitfire web engineering). + * Copyright (c) 2014 Richard Hirner (bitfire web engineering). * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * Richard Hirner (bitfire web engineering) - initial API and implementation ******************************************************************************/ package at.bitfire.davdroid.webdav; diff --git a/src/at/bitfire/davdroid/webdav/DavPropstat.java b/src/at/bitfire/davdroid/webdav/DavPropstat.java index f8bc34d2..f3c07ba1 100644 --- a/src/at/bitfire/davdroid/webdav/DavPropstat.java +++ b/src/at/bitfire/davdroid/webdav/DavPropstat.java @@ -1,9 +1,12 @@ /******************************************************************************* - * Copyright (c) 2013 Richard Hirner (bitfire web engineering). + * Copyright (c) 2014 Richard Hirner (bitfire web engineering). * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * Richard Hirner (bitfire web engineering) - initial API and implementation ******************************************************************************/ package at.bitfire.davdroid.webdav; diff --git a/src/at/bitfire/davdroid/webdav/DavResponse.java b/src/at/bitfire/davdroid/webdav/DavResponse.java index 68d77c18..249a00d5 100644 --- a/src/at/bitfire/davdroid/webdav/DavResponse.java +++ b/src/at/bitfire/davdroid/webdav/DavResponse.java @@ -1,9 +1,12 @@ /******************************************************************************* - * Copyright (c) 2013 Richard Hirner (bitfire web engineering). + * Copyright (c) 2014 Richard Hirner (bitfire web engineering). * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * Richard Hirner (bitfire web engineering) - initial API and implementation ******************************************************************************/ package at.bitfire.davdroid.webdav; diff --git a/src/at/bitfire/davdroid/webdav/GzipDecompressingEntity.java b/src/at/bitfire/davdroid/webdav/GzipDecompressingEntity.java index c21df543..61df027f 100644 --- a/src/at/bitfire/davdroid/webdav/GzipDecompressingEntity.java +++ b/src/at/bitfire/davdroid/webdav/GzipDecompressingEntity.java @@ -1,9 +1,12 @@ /******************************************************************************* - * Copyright (c) 2013 Richard Hirner (bitfire web engineering). + * Copyright (c) 2014 Richard Hirner (bitfire web engineering). * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * Richard Hirner (bitfire web engineering) - initial API and implementation ******************************************************************************/ package at.bitfire.davdroid.webdav; diff --git a/src/at/bitfire/davdroid/webdav/HttpPropfind.java b/src/at/bitfire/davdroid/webdav/HttpPropfind.java index 779dcbce..c2ced249 100644 --- a/src/at/bitfire/davdroid/webdav/HttpPropfind.java +++ b/src/at/bitfire/davdroid/webdav/HttpPropfind.java @@ -1,9 +1,12 @@ /******************************************************************************* - * Copyright (c) 2013 Richard Hirner (bitfire web engineering). + * Copyright (c) 2014 Richard Hirner (bitfire web engineering). * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * Richard Hirner (bitfire web engineering) - initial API and implementation ******************************************************************************/ package at.bitfire.davdroid.webdav; diff --git a/src/at/bitfire/davdroid/webdav/HttpReport.java b/src/at/bitfire/davdroid/webdav/HttpReport.java index bc1bb8f3..e68af91f 100644 --- a/src/at/bitfire/davdroid/webdav/HttpReport.java +++ b/src/at/bitfire/davdroid/webdav/HttpReport.java @@ -1,9 +1,12 @@ /******************************************************************************* - * Copyright (c) 2013 Richard Hirner (bitfire web engineering). + * Copyright (c) 2014 Richard Hirner (bitfire web engineering). * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * Richard Hirner (bitfire web engineering) - initial API and implementation ******************************************************************************/ package at.bitfire.davdroid.webdav; diff --git a/src/at/bitfire/davdroid/webdav/NotFoundException.java b/src/at/bitfire/davdroid/webdav/NotFoundException.java index 0511d9ee..4668bc84 100644 --- a/src/at/bitfire/davdroid/webdav/NotFoundException.java +++ b/src/at/bitfire/davdroid/webdav/NotFoundException.java @@ -1,9 +1,12 @@ /******************************************************************************* - * Copyright (c) 2013 Richard Hirner (bitfire web engineering). + * Copyright (c) 2014 Richard Hirner (bitfire web engineering). * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * Richard Hirner (bitfire web engineering) - initial API and implementation ******************************************************************************/ package at.bitfire.davdroid.webdav; diff --git a/src/at/bitfire/davdroid/webdav/PreconditionFailedException.java b/src/at/bitfire/davdroid/webdav/PreconditionFailedException.java index bb2454b1..6f7bb8d2 100644 --- a/src/at/bitfire/davdroid/webdav/PreconditionFailedException.java +++ b/src/at/bitfire/davdroid/webdav/PreconditionFailedException.java @@ -1,9 +1,12 @@ /******************************************************************************* - * Copyright (c) 2013 Richard Hirner (bitfire web engineering). + * Copyright (c) 2014 Richard Hirner (bitfire web engineering). * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * Richard Hirner (bitfire web engineering) - initial API and implementation ******************************************************************************/ package at.bitfire.davdroid.webdav; diff --git a/src/at/bitfire/davdroid/webdav/PreemptiveAuthInterceptor.java b/src/at/bitfire/davdroid/webdav/PreemptiveAuthInterceptor.java index 6e7843e4..28af72e3 100644 --- a/src/at/bitfire/davdroid/webdav/PreemptiveAuthInterceptor.java +++ b/src/at/bitfire/davdroid/webdav/PreemptiveAuthInterceptor.java @@ -1,9 +1,12 @@ /******************************************************************************* - * Copyright (c) 2013 Richard Hirner (bitfire web engineering). + * Copyright (c) 2014 Richard Hirner (bitfire web engineering). * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * Richard Hirner (bitfire web engineering) - initial API and implementation ******************************************************************************/ package at.bitfire.davdroid.webdav; diff --git a/src/at/bitfire/davdroid/webdav/TlsSniSocketFactory.java b/src/at/bitfire/davdroid/webdav/TlsSniSocketFactory.java index 58aae648..771b24f5 100644 --- a/src/at/bitfire/davdroid/webdav/TlsSniSocketFactory.java +++ b/src/at/bitfire/davdroid/webdav/TlsSniSocketFactory.java @@ -1,3 +1,13 @@ +/******************************************************************************* + * Copyright (c) 2014 Richard Hirner (bitfire web engineering). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * Richard Hirner (bitfire web engineering) - initial API and implementation + ******************************************************************************/ package at.bitfire.davdroid.webdav; import java.io.IOException; diff --git a/src/at/bitfire/davdroid/webdav/WebDavResource.java b/src/at/bitfire/davdroid/webdav/WebDavResource.java index 10cce1fa..4bb2b213 100644 --- a/src/at/bitfire/davdroid/webdav/WebDavResource.java +++ b/src/at/bitfire/davdroid/webdav/WebDavResource.java @@ -1,9 +1,12 @@ /******************************************************************************* - * Copyright (c) 2013 Richard Hirner (bitfire web engineering). + * Copyright (c) 2014 Richard Hirner (bitfire web engineering). * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * Richard Hirner (bitfire web engineering) - initial API and implementation ******************************************************************************/ package at.bitfire.davdroid.webdav; diff --git a/test/src/at/bitfire/davdroid/test/URIUtilsTest.java b/test/src/at/bitfire/davdroid/test/URIUtilsTest.java index 28ceae0b..28e5d43f 100644 --- a/test/src/at/bitfire/davdroid/test/URIUtilsTest.java +++ b/test/src/at/bitfire/davdroid/test/URIUtilsTest.java @@ -1,23 +1,27 @@ package at.bitfire.davdroid.test; -import java.net.URI; - -import android.test.InstrumentationTestCase; +import junit.framework.TestCase; import at.bitfire.davdroid.URIUtils; -public class URIUtilsTest extends InstrumentationTestCase { - final static String - ROOT_URI = "http://server/", - BASE_URI = ROOT_URI + "dir/"; - URI baseURI; - - @Override - protected void setUp() throws Exception { - baseURI = new URI(BASE_URI); - } +public class URIUtilsTest extends TestCase { public void testSanitize() { + // escape "@" + assertEquals("https://my%40server/my%40email.com/dir", URIUtils.sanitize("https://my@server/my@email.com/dir")); + assertEquals("http://my%40server/my%40email.com/dir", URIUtils.sanitize("http://my@server/my@email.com/dir")); + assertEquals("//my%40server/my%40email.com/dir", URIUtils.sanitize("//my@server/my@email.com/dir")); assertEquals("/my%40email.com/dir", URIUtils.sanitize("/my@email.com/dir")); - assertEquals("my%3Afile.vcf", URIUtils.sanitize("my:file.vcf")); + assertEquals("my%40email.com/dir", URIUtils.sanitize("my@email.com/dir")); + + // escape ":" in path but not as port separator + assertEquals("https://www.test.at:80/my%3afile.vcf", URIUtils.sanitize("https://www.test.at:80/my:file.vcf")); + assertEquals("http://www.test.at:80/my%3afile.vcf", URIUtils.sanitize("http://www.test.at:80/my:file.vcf")); + assertEquals("//www.test.at:80/my%3afile.vcf", URIUtils.sanitize("//www.test.at:80/my:file.vcf")); + assertEquals("/my%3afile.vcf", URIUtils.sanitize("/my:file.vcf")); + assertEquals("my%3afile.vcf", URIUtils.sanitize("my:file.vcf")); + + // keep literal IPv6 addresses (only in host name) + assertEquals("https://[1:2::1]/", URIUtils.sanitize("https://[1:2::1]/")); + assertEquals("/%5b1%3a2%3a%3a1%5d/", URIUtils.sanitize("/[1:2::1]/")); } }