add ".well-known" addresses feature (closes #126)

This commit is contained in:
deronnax 2014-10-20 17:03:23 +02:00
parent a6884492a2
commit b863e8390e
3 changed files with 26 additions and 0 deletions

4
config
View File

@ -46,6 +46,10 @@ request = utf-8
# Encoding for storing local collections # Encoding for storing local collections
stock = utf-8 stock = utf-8
[well-known]
caldav = '/%(user)s/caldav/'
carddav = '/%(user)s/carddav/'
[auth] [auth]
# Authentication method # Authentication method

View File

@ -286,6 +286,25 @@ class Application(object):
user = environ.get("REMOTE_USER") user = environ.get("REMOTE_USER")
password = None password = None
if path.startswith('/.well-known/'):
fragment = path.rstrip("/").rsplit('/', 1)[-1]
redirect = config.get("well-known", fragment)
if redirect:
if not user and "%(user)s" in redirect:
status = client.UNAUTHORIZED
headers = {
"WWW-Authenticate":
"Basic realm=\"%s\"" % config.get("server", "realm")}
log.LOGGER.info("refused /.well-known/ redirection to anonymous user")
else:
redirect = redirect % locals()
status = client.SEE_OTHER
log.LOGGER.info("/.well-known/ redirection to: %s" % redirect)
headers = {"Location": redirect.encode('utf8')}
status = "%i %s" % (status, client.responses.get(status, "Unknown"))
start_response(status, headers.items())
return []
is_authenticated = auth.is_authenticated(user, password) is_authenticated = auth.is_authenticated(user, password)
is_valid_user = is_authenticated or not user is_valid_user = is_authenticated or not user

View File

@ -51,6 +51,9 @@ INITIAL_CONFIG = {
"base_prefix": "/", "base_prefix": "/",
"can_skip_base_prefix": "False", "can_skip_base_prefix": "False",
"realm": "Radicale - Password Required"}, "realm": "Radicale - Password Required"},
"well-known": {
"caldav": "/%(user)s/caldav/",
"carddav": "/%(user)s/carddav/"},
"encoding": { "encoding": {
"request": "utf-8", "request": "utf-8",
"stock": "utf-8"}, "stock": "utf-8"},