diff options
| author | P. Christeas <p_christ@hol.gr> | 2010-11-23 20:53:43 +0200 |
|---|---|---|
| committer | P. Christeas <p_christ@hol.gr> | 2010-11-23 20:53:43 +0200 |
| commit | 2bdc61232ecfb0fc7b55d48fd1eaaea8184f2d3a (patch) | |
| tree | 7f7530df551173c40aa16a6f876c031e409cdfd0 /addons/document_webdav/webdav_server.py | |
| parent | 8f2e8ff36fc3eb03b8cd28d5fc43be2dd69d6e76 (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.py | 31 |
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 |
