Skip to content

Commit

Permalink
Merge pull request Kozea#225 from deronnax/well-known
Browse files Browse the repository at this point in the history
Support "well known" URLs
  • Loading branch information
liZe committed Oct 21, 2014
2 parents 124cf3f + 8ec00f0 commit 4e59d73
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 0 deletions.
4 changes: 4 additions & 0 deletions config
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,10 @@ request = utf-8
# Encoding for storing local collections
stock = utf-8

[well-known]
caldav = '/%(user)s/caldav/'
carddav = '/%(user)s/carddav/'


[auth]
# Authentication method
Expand Down
21 changes: 21 additions & 0 deletions radicale/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
import socket
import ssl
import wsgiref.simple_server
import re
# Manage Python2/3 different modules
# pylint: disable=F0401,E0611
try:
Expand All @@ -55,6 +56,7 @@
# Standard "not allowed" response that is returned when an authenticated user
# tries to access information they don't have rights to
NOT_ALLOWED = (client.FORBIDDEN, {}, None)
WELLKNOWNRE = re.compile(r'/.well-known/(carddav|caldav)/?')


class HTTPServer(wsgiref.simple_server.WSGIServer, object):
Expand Down Expand Up @@ -277,6 +279,25 @@ def __call__(self, environ, start_response):
user = environ.get("REMOTE_USER")
password = None

wkfragment = WELLKNOWNRE.match(path)
if wkfragment:
if not user: del user
redirect = config.get("well-known", wkfragment.group(1))
try:
redirect = redirect % locals()
status = client.SEE_OTHER
log.LOGGER.info("/.well-known/ redirection to: %s" % redirect)
headers = {"Location": redirect.encode('utf8')}
except KeyError:
status = client.UNAUTHORIZED
headers = {
"WWW-Authenticate":
"Basic realm=\"%s\"" % config.get("server", "realm")}
log.LOGGER.info("refused /.well-known/ redirection to anonymous user")
status = "%i %s" % (status, client.responses.get(status, "Unknown"))
start_response(status, headers.items())
return []

is_authenticated = auth.is_authenticated(user, password)
is_valid_user = is_authenticated or not user

Expand Down
3 changes: 3 additions & 0 deletions radicale/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,9 @@
"base_prefix": "/",
"can_skip_base_prefix": "False",
"realm": "Radicale - Password Required"},
"well-known": {
"caldav": "/%(user)s/caldav/",
"carddav": "/%(user)s/carddav/"},
"encoding": {
"request": "utf-8",
"stock": "utf-8"},
Expand Down

0 comments on commit 4e59d73

Please sign in to comment.