aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md14
-rw-r--r--radicale_infcloud/__init__.py52
-rw-r--r--radicale_infcloud/web/config.js4
-rwxr-xr-xsetup.py4
4 files changed, 23 insertions, 51 deletions
diff --git a/README.md b/README.md
index 43f6d78..9b2e289 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,7 @@
# InfCloud for Radicale
-Integrate [InfCloud](https://www.inf-it.com/open-source/clients/infcloud/) into [Radicale](http://radicale.org/)'s web interface.
+Integrate [InfCloud](https://www.inf-it.com/open-source/clients/infcloud/) into
+[Radicale](http://radicale.org/)'s web interface.
InfCloud allows you to to manage appointments, tasks and contacts in the browser.
@@ -10,12 +11,12 @@ for InfCloud to work properly. Otherwise the "Refresh" button is broken.
## Installation
```shell
-$ python3 -m pip install --upgrade https://github.com/Unrud/RadicaleInfCloud/archive/master.tar.gz
+python3 -m pip install --upgrade https://github.com/Unrud/RadicaleInfCloud/archive/master.tar.gz
```
## Configuration
-Set the configuration option `type` in the `web` section to ``radicale_infcloud``.
+Set the configuration option `type` in the `web` section to `radicale_infcloud`.
```ini
[web]
@@ -24,6 +25,9 @@ type = radicale_infcloud
## License
-[AGPL-3.0](https://github.com/Unrud/RadicaleWeb/blob/master/COPYING) because [InfCloud](https://github.com/Unrud/RadicaleInfCloud/blob/master/radicale_infcloud/web/) is included.
+[AGPL-3.0](https://github.com/Unrud/RadicaleWeb/blob/master/COPYING) because
+[InfCloud](https://github.com/Unrud/RadicaleInfCloud/blob/master/radicale_infcloud/web/)
+is included.
-[GPL-3.0](https://github.com/Unrud/RadicaleWeb/blob/master/COPYING_GPL) for `radicale_infcloud/__init__.py`
+[GPL-3.0](https://github.com/Unrud/RadicaleWeb/blob/master/COPYING_GPL)
+for `radicale_infcloud/__init__.py`
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,
diff --git a/setup.py b/setup.py
index 0e1bf2a..2c8c88a 100755
--- a/setup.py
+++ b/setup.py
@@ -4,7 +4,7 @@ import os
from setuptools import setup
-VERSION = "3.0.0"
+VERSION = "3.1.1"
os.chdir("radicale_infcloud")
web_data = sum(([os.path.join(root, f) for f in files
@@ -23,4 +23,4 @@ setup(
platforms="Any",
packages=["radicale_infcloud"],
package_data={"radicale_infcloud": web_data},
- install_requires=["radicale>=3.0.0"])
+ install_requires=["radicale>=3.1.1"])
bgstack15