Commit Graph

1422 Commits

Author SHA1 Message Date
Unrud
9ceae0a751 Make Radicale fast (#569)
* Change get_multi to also return missing items

get_multi is not used anywhere and this makes it easier to use.

* Use get_multi for report requests

* Add get_all to BaseCollection

This can be used for optimization on multifilesystem.

* Use iterator for files

* Remove unnecessary checks

This never happens and would be an error.

* Don't raise exception when calling get with colliding name

This behavior is wrong, it should be handled as if the file doesn't exist.

* Use get_all and get_multi to skip unnecessary checks

Collision checks are slow on big collections.

* Use exception instead of existence checks

It's a bit faster.

* Use os.scandir instead of os.listdir

It's faster and doesn't load all files at once.

* Cache metadata when storage is read-only

Metadata is queried a lot during a request. It's quiet slow to load and parse the file every time.

* Cache the etag when the storage is read-only

The etag is calculated twice for GET requests on collections.

* Add helper method for cleaning caches

* Use item etags to calculate collection etag

It's very slow and unnecessary to parse all files with VObject and serialize them again.

* Cache serialized collections in file system

Serialization is very slow for big collections. This caches the result in a file.

* Add helper function for prefilters

The simplify_prefilters functions converts XML filters to a simple tag and time range, which can be easily matched against the tag and time range that are extracted from vobject_items by the function find_tag_and_time_range.

* Add ability to cache etag and serialization of item

Parsing items with vobject is very slow and not required for many requests.
Caching can be used to speed it up.

* Cache metadata and serialization from items in file system

Store the serialized text and the tag and time range from vobject_items in the cache.
The metadata is used for prefilters.

* Remove the cache for the serialization of collections

* Serialize calendars without vobject

Merge the calendar components manually. This is much faster and requires less memory. Caching of the result is not required anymore.

* Allow pre_filtered_list to indicate that filters match

The storage backend can indicate that it evaluated the filters completely.

* Skip filtering with vobject if prefiltering is sufficient

``simplify_prefilters`` indicates if the simplified condition is identical to ``filters``.
This is used in the multifilesystem backend to detect if prefiltering is sufficient.

* Make constants global

* Use generator expressions

* Only extract elements from inside of VCALENDAR

This is unnecessary at the moment, the text representation should never contain anything but VCALENDAR.

* Improve comments

* restore backward compatiblity

* Small improvements for fastbackend
2017-06-02 14:14:55 +02:00
Unrud
78a62aee86 Merge pull request #565 from Unrud/synctoken
Support for sync-token and sync-collection
2017-06-02 13:01:54 +02:00
Unrud
7687afc4c6 Merge pull request #622 from Unrud/clientcertificate
Add option for CA certificate for validating clients
2017-06-02 12:59:35 +02:00
Unrud
5c50cae9f2 Merge pull request #621 from Unrud/small
Small improvements
2017-06-02 12:55:40 +02:00
Unrud
f633b48a7a Real sync-collection support for the multifilesystem backend 2017-06-02 12:53:37 +02:00
Unrud
0ffa97eca0 Allow opening binary files with _atomic_write 2017-06-02 12:44:36 +02:00
Unrud
1dee561692 Add helper method for cleaning caches 2017-06-02 12:44:34 +02:00
Unrud
3009ce5414 Test sync-token and sync-collection 2017-06-02 12:44:31 +02:00
Unrud
f2b415c4a6 Initial sync-token and sync-collection support
Use the etag of the collection as the sync token and tell the client that the token is invalid when the collection changed.
2017-06-02 12:44:23 +02:00
Unrud
428abf10de don't use REMOTE_USER in tests 2017-06-02 12:43:44 +02:00
Unrud
6edaf27a38 rename backend from "None" to "none" 2017-06-02 12:43:23 +02:00
Unrud
5d27265d5c fail when logging config file is not found 2017-06-02 12:43:03 +02:00
Unrud
1812aeb238 include expected type of config option in error 2017-06-02 12:42:40 +02:00
Unrud
881757815f Add simple range checking to config options 2017-06-02 12:42:19 +02:00
Unrud
95a8c7b903 use mapping api to set config options
Provides protection against typos in names
2017-06-02 12:41:47 +02:00
Unrud
3af5809d71 Add option for CA certificate for validating clients
This can be used to secure TCP traffic between Radicale and a reverse proxy
2017-06-02 12:41:03 +02:00
Unrud
6bb0e9d956 Merge pull request #620 from Unrud/fixes
Small fixes
2017-06-01 16:34:59 +02:00
Unrud
3bfac019a8 Close lock file when running tests
The name of configuration option was wrong.
2017-06-01 16:10:50 +02:00
Unrud
c400414b27 Don't turn off all locking with filesystem_locking 2017-06-01 16:10:34 +02:00
Unrud
b5fb56a31b Include files for web interface in package 2017-06-01 16:10:27 +02:00
Unrud
f715f0ba8a Remove font from web interface 2017-06-01 16:10:17 +02:00
Unrud
43ac218243 Merge pull request #618 from Unrud/config_file_wsgi
Fail when config file doesn't exist in WSGI and FCGI scripts
2017-06-01 12:55:53 +02:00
Unrud
ac230efa57 Merge pull request #619 from Unrud/log_unsafe_paths
Log unsafe paths
2017-06-01 12:55:45 +02:00
Unrud
efb20d994f Adjust imports for isort 2017-06-01 12:45:44 +02:00
Unrud
2178ba58be Log unsafe paths 2017-06-01 12:45:44 +02:00
Unrud
8528a4c3f8 Merge pull request #617 from Unrud/base_prefix
Fix absolute paths in web interface when SCRIPT_NAME is used
2017-06-01 12:37:07 +02:00
Unrud
f971ca0262 Fail when config file doesn't exist in WSGI and FCGI scripts 2017-06-01 12:26:33 +02:00
Unrud
8fed92dc24 Fix absolute paths in web interface when SCRIPT_NAME is used 2017-06-01 12:13:34 +02:00
Unrud
91e49986ee Merge pull request #616 from Unrud/locking
raise exception when locking the storage fails
2017-06-01 12:02:27 +02:00
Unrud
fd55bbce15 Adjust imports for isort 2017-06-01 11:54:04 +02:00
Unrud
a18874fc59 raise exception when locking the storage fails
Previously it was silently ignored, which is dangerous when multiple instances of Radicale are running.
A configuration option to disable locking was added.
2017-06-01 11:21:22 +02:00
Unrud
17d03be27b Merge pull request #484 from Unrud/webinterface
Web interface
2017-05-31 13:34:04 +02:00
Unrud
9585c0b048 Web interface for managing calendars and addressbooks 2017-05-31 13:18:42 +02:00
Unrud
ab9e9b2d7c Add web interface module 2017-05-31 13:18:40 +02:00
Unrud
0dd2ecdb0b Merge pull request #614 from Unrud/small
Small improvements
2017-05-31 12:23:21 +02:00
Unrud
eba6621f17 Rename backends from None to none
All other backend names are lower case.
2017-05-31 12:02:29 +02:00
Unrud
edaf21561d Don't strip SCRIPT_NAME from PATH_INFO 2017-05-31 12:01:37 +02:00
Unrud
5704b5021b PATH_INFO might not exist if it's empty 2017-05-31 12:01:35 +02:00
Unrud
f12dd31b4b Small improvements for auth tests 2017-05-31 12:01:33 +02:00
Unrud
b10599d07d Merge pull request #613 from Unrud/logging
Improve error handling
2017-05-31 11:44:11 +02:00
Unrud
c9664137a5 Improve error handling
* Check the configuration file for errors (check option names and basic type checking).
  * Perform basic type checking on command line arguments.
  * Only print stack traces in debug mode.
  * Include much more information in error messages (e.g. include the path of invalid files).
  * Send Bad Request to clients for invalid XML requests or iCalendar data.
  * Change the log level of some messages.
2017-05-31 11:31:54 +02:00
Unrud
824835bcd4 Merge pull request #612 from Unrud/auth
Allow auth backends to provide login and password
2017-05-31 02:16:41 +02:00
Unrud
c2387403dd Test the remote_user and http_x_remote user backends 2017-05-31 02:07:52 +02:00
Unrud
09bde14e50 Allow auth backends to provide login and password
This is used to implement an auth backend that takes the credentials from an HTTP header (e.g. accounts are managed by an reverse proxy)
2017-05-31 02:07:49 +02:00
Unrud
8bc45aeb24 Merge pull request #611 from Unrud/rights
Implement rights types directly and test them
2017-05-31 01:48:14 +02:00
Unrud
3e715a9aff Test rights management 2017-05-31 01:41:23 +02:00
Unrud
5ce2c62402 Implement rights types directly
This is faster and easier to understand.
2017-05-31 00:43:07 +02:00
Unrud
1bc53ec113 Merge pull request #610 from Unrud/emptypath
Preserve empty PATH_INFO from WSGI and strip base prefix from destination
2017-05-31 00:35:24 +02:00
Unrud
8536ffee44 Preserve empty PATH_INFO from WSGI and strip base prefix from destination 2017-05-30 22:58:57 +02:00
Unrud
0601b81aa7 Merge pull request #586 from Unrud/xmlrequestresponse
Improve handling of XML requests and responses
2017-05-30 09:28:05 +02:00