summaryrefslogtreecommitdiff
path: root/addons/document_webdav/webdav_server.py
diff options
context:
space:
mode:
authorP. Christeas <p_christ@hol.gr>2010-11-23 20:53:43 +0200
committerP. Christeas <p_christ@hol.gr>2010-11-23 20:53:43 +0200
commit2bdc61232ecfb0fc7b55d48fd1eaaea8184f2d3a (patch)
tree7f7530df551173c40aa16a6f876c031e409cdfd0 /addons/document_webdav/webdav_server.py
parent8f2e8ff36fc3eb03b8cd28d5fc43be2dd69d6e76 (diff)
doc webdav: principals redirect feature, for i-things
iPhones etc. are preset to look into /principals/users/xx , so let's provide that path to them. bzr revid: p_christ@hol.gr-20101123185343-n1k1szxojdmcpekz
Diffstat (limited to 'addons/document_webdav/webdav_server.py')
-rw-r--r--addons/document_webdav/webdav_server.py31
1 files changed, 30 insertions, 1 deletions
diff --git a/addons/document_webdav/webdav_server.py b/addons/document_webdav/webdav_server.py
index f2a230858bf..3dae8f9f21f 100644
--- a/addons/document_webdav/webdav_server.py
+++ b/addons/document_webdav/webdav_server.py
@@ -471,9 +471,38 @@ def init_well_known():
if http_server.reg_http_service(HTTPDir('/.well-known', RedirectHTTPHandler)):
logging.getLogger("web-services").info("Registered HTTP redirect handler at /.well-known" )
-
init_well_known()
+class PrincipalsRedirect(RedirectHTTPHandler):
+ redirect_paths = {}
+
+ def _find_redirect(self):
+ for b, r in self.redirect_paths.items():
+ if self.path.startswith(b):
+ return r + self.path[len(b):]
+ return False
+
+def init_principals_redirect():
+ """ Some devices like the iPhone will look under /principals/users/xxx for
+ the user's properties. In OpenERP we _cannot_ have a stray /principals/...
+ working path, since we have a database path and the /webdav/ component. So,
+ the best solution is to redirect the url with 301. Luckily, it does work in
+ the device. The trick is that we need to hard-code the database to use, either
+ the one centrally defined in the config, or a "forced" one in the webdav
+ section.
+ """
+ dbname = config.get_misc('webdav', 'principal_dbname', False)
+ if (not dbname) and not config.get_misc('webdav', 'no_principals_redirect', False):
+ dbname = config.get('db_name', False)
+ if dbname:
+ PrincipalsRedirect.redirect_paths[''] = '/webdav/%s/principals' % dbname
+ reg_http_service(HTTPDir('/principals', PrincipalsRedirect))
+ logging.getLogger("web-services").info(
+ "Registered HTTP redirect handler for /principals to the %s db.",
+ dbname)
+
+init_principals_redirect()
+
#eof