diff --git a/gitea-to-ics.py b/gitea-caldav.py similarity index 72% rename from gitea-to-ics.py rename to gitea-caldav.py index 1a7b4bf..b616b76 100644 --- a/gitea-to-ics.py +++ b/gitea-caldav.py @@ -8,6 +8,7 @@ from subprocess import run import cherrypy +from defusedxml.ElementTree import fromstring from icalendar import Calendar, Todo GITEA_REPO_URL="https://git.bitmessage.org/api/v1" @@ -57,7 +58,7 @@ def get_token(input_token): class Root: @cherrypy.expose - def todo(self): + def index(self): cherrypy.response.headers['WWW-Authenticate'] = \ 'Basic realm="ICS access"' authorization = cherrypy.request.headers.get('Authorization', ':') @@ -71,8 +72,34 @@ class Root: raise cherrypy.HTTPError(401, 'Unauthorized') return(process_combined(combined)) +class Dav: + exposed = True + #@cherrypy.expose + @cherrypy.tools.accept(media='application/xml') + def PROPFIND(self): + cl = cherrypy.request.headers['Content-Length'] + rawbody = cherrypy.request.body.read(size=int(cl)) + et = fromstring(rawbody) + for child in et: + if child.tag == '{DAV:}prop': + for x in child: + print("T:", x.tag, "; A:", x.attrib) + #print(et) + print(f"BODY {rawbody}") + + if __name__ == '__main__': + conf = { + '/dav': { + 'request.dispatch': cherrypy.dispatch.MethodDispatcher(), + 'request.methods_with_bodies': ('POST', + 'PUT', + 'PROPFIND'), + } + } cherrypy.config.update({'server.socket_host': '0.0.0.0', 'server.socket_port': 8080, }) - cherrypy.quickstart(Root(), '/') + webapp = Root() + webapp.dav = Dav() + cherrypy.quickstart(webapp, '/', conf) diff --git a/requirements.txt b/requirements.txt index c18433f..026e028 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,3 @@ cherrypy +defusedxml icalendar