diff options
Diffstat (limited to 'radicale_infcloud')
-rw-r--r-- | radicale_infcloud/__init__.py | 52 | ||||
-rw-r--r-- | radicale_infcloud/web/config.js | 4 |
2 files changed, 12 insertions, 44 deletions
diff --git a/radicale_infcloud/__init__.py b/radicale_infcloud/__init__.py index 8dc04df..409ef28 100644 --- a/radicale_infcloud/__init__.py +++ b/radicale_infcloud/__init__.py @@ -1,5 +1,5 @@ # RadicaleWeb web interface for Radicale. -# Copyright © 2017-2018, 2020 Unrud <unrud@outlook.com> +# Copyright © 2017-2018, 2020, 2022 Unrud <unrud@outlook.com> # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -14,14 +14,9 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. -import os -import posixpath -import time from http import client -from radicale import httputils, pathutils -from radicale.log import logger +from radicale import httputils from radicale.web import internal -from radicale.web.internal import MIMETYPES, FALLBACK_MIMETYPE import pkg_resources @@ -34,42 +29,17 @@ class Web(internal.Web): self.infcloud_folder = pkg_resources.resource_filename(__name__, "web") def get(self, environ, base_prefix, path, user): - if not path.startswith("/.web/infcloud/") and path != "/.web/infcloud": - status, headers, answer = super().get(environ, base_prefix, path, - user) - if status == client.OK and path in ("/.web/", "/.web/index.html"): - answer = answer.replace(b"""\ + if path == "/.web/infcloud/" or path.startswith("/.web/infcloud"): + status, headers, answer = httputils.serve_folder( + self.infcloud_folder, base_prefix, path, "/.web/infcloud") + else: + status, headers, answer = super().get( + environ, base_prefix, path, user) + if status == client.OK and path in ("/.web/", "/.web/index.html"): + answer = answer.replace(b"""\ <nav> <ul>""", b"""\ <nav> <ul> <li><a href="infcloud">InfCloud</a></li>""") - return status, headers, answer - assert pathutils.sanitize_path(path) == path - try: - filesystem_path = pathutils.path_to_filesystem( - self.infcloud_folder, path[len("/.web/infcloud"):].strip("/")) - except ValueError as e: - logger.debug("Web content with unsafe path %r requested: %s", - path, e, exc_info=True) - return httputils.NOT_FOUND - if os.path.isdir(filesystem_path) and not path.endswith("/"): - location = posixpath.basename(path) + "/" - return (client.FOUND, - {"Location": location, "Content-Type": "text/plain"}, - "Redirected to %s" % location) - if os.path.isdir(filesystem_path): - filesystem_path = os.path.join(filesystem_path, "index.html") - if not os.path.isfile(filesystem_path): - return httputils.NOT_FOUND - content_type = MIMETYPES.get( - os.path.splitext(filesystem_path)[1].lower(), FALLBACK_MIMETYPE) - with open(filesystem_path, "rb") as f: - answer = f.read() - last_modified = time.strftime( - "%a, %d %b %Y %H:%M:%S GMT", - time.gmtime(os.fstat(f.fileno()).st_mtime)) - headers = { - "Content-Type": content_type, - "Last-Modified": last_modified} - return client.OK, headers, answer + return status, headers, answer diff --git a/radicale_infcloud/web/config.js b/radicale_infcloud/web/config.js index 560c1d1..ca1badf 100644 --- a/radicale_infcloud/web/config.js +++ b/radicale_infcloud/web/config.js @@ -337,9 +337,7 @@ var globalEnableDevelBuilds=true; // port, ... (client installed into Davical "htdocs" subdirectory; // works "out of the box", no additional setup required): var globalNetworkCheckSettings={ - href: location.protocol+'//'+location.hostname+ - (location.port ? ':'+location.port: '')+ - location.pathname.replace(RegExp('(/+[^/]+/*){2}(index\.html)?$'),'')+'/', + href: (new URL('../..', location.href)).href, timeOut: 90000, lockTimeOut: 10000, checkContentType: true, |