fix: Well-Known DAV - OPTIONS liefert jetzt korrekt DAV-Header
Flask hat trotz expliziter OPTIONS-Route Auto-OPTIONS generiert, wodurch der DAV-Header fehlte. DAVx5 sieht so keinen Calendar- Access und lehnt den Server ab. Konsolidiert zu einem Handler mit method-basiertem Dispatch und provide_automatic_options=False, damit Flask nicht dazwischenfunkt. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
3f0d823dbf
commit
3c762e1476
|
|
@ -97,22 +97,27 @@ def create_app(config_class=Config):
|
|||
# Well-known URLs for CalDAV/CardDAV auto-discovery (iOS, DAVx5, etc.).
|
||||
# 301-Redirect bei PROPFIND ist bei einigen Clients zickig, deshalb
|
||||
# delegieren wir intern direkt an die DAV-Handler, statt zu redirecten.
|
||||
from flask import request
|
||||
from app.dav.caldav import propfind as dav_propfind, options as dav_options
|
||||
|
||||
@app.route('/.well-known/caldav', methods=['GET', 'HEAD'])
|
||||
@app.route('/.well-known/carddav', methods=['GET', 'HEAD'])
|
||||
def wellknown_redirect():
|
||||
def _wellknown_dav():
|
||||
if request.method == 'PROPFIND':
|
||||
return dav_propfind(subpath='')
|
||||
if request.method == 'OPTIONS':
|
||||
return dav_options()
|
||||
return redirect('/dav/', code=301)
|
||||
|
||||
@app.route('/.well-known/caldav', methods=['PROPFIND'])
|
||||
@app.route('/.well-known/carddav', methods=['PROPFIND'])
|
||||
def wellknown_propfind():
|
||||
return dav_propfind(subpath='')
|
||||
|
||||
@app.route('/.well-known/caldav', methods=['OPTIONS'])
|
||||
@app.route('/.well-known/carddav', methods=['OPTIONS'])
|
||||
def wellknown_options():
|
||||
return dav_options()
|
||||
app.add_url_rule(
|
||||
'/.well-known/caldav', view_func=_wellknown_dav,
|
||||
methods=['GET', 'HEAD', 'PROPFIND', 'OPTIONS'],
|
||||
provide_automatic_options=False,
|
||||
)
|
||||
app.add_url_rule(
|
||||
'/.well-known/carddav', view_func=_wellknown_dav,
|
||||
endpoint='_wellknown_carddav',
|
||||
methods=['GET', 'HEAD', 'PROPFIND', 'OPTIONS'],
|
||||
provide_automatic_options=False,
|
||||
)
|
||||
|
||||
# iCal export (public, no auth)
|
||||
@app.route('/ical/<token>')
|
||||
|
|
|
|||
Loading…
Reference in New Issue