From 48d72aa7a12ccc932ddc79b47c4bb8934af206fa Mon Sep 17 00:00:00 2001 From: Martin Zimmermann Date: Tue, 26 Jul 2016 21:49:17 +0200 Subject: [PATCH] fully resolve well-known URI (#481) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently, `find_dav` only resolves a single redirect. When using Baïkal behind a proxy with HTTPS, this becomes an issue: 1. dav.example.com/.well-known/caldav (Apache rewrite to http) 2. dav.example.com/dav.php (http) 3. dav.example.com/dav.php (https) The Apache configuration is provided by Baïkal, hence it is also possible to fix it server-side: -RewriteRule /.well-known/carddav /dav.php [R,L] +RewriteRule /.well-known/carddav https://dav.example.com/dav.php [R,L] -RewriteRule /.well-known/caldav /dav.php [R,L] +RewriteRule /.well-known/caldav https://dav.example.com/dav.php [R,L] --- vdirsyncer/storage/dav.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vdirsyncer/storage/dav.py b/vdirsyncer/storage/dav.py index a7b1c71..8ad0643 100644 --- a/vdirsyncer/storage/dav.py +++ b/vdirsyncer/storage/dav.py @@ -127,10 +127,10 @@ class Discover(object): def find_dav(self): try: response = self.session.request( - 'GET', self._well_known_uri, allow_redirects=False, + 'GET', self._well_known_uri, allow_redirects=True, headers=self.session.get_default_headers() ) - return response.headers.get('Location', '') + return response.url except (HTTPError, exceptions.Error): # The user might not have well-known URLs set up and instead points # vdirsyncer directly to the DAV server.