Radicale 2.1.12__tar.gz → 3.dev0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. radicale-3.dev0/CHANGELOG.md +592 -0
  2. radicale-3.dev0/COPYING.md +675 -0
  3. radicale-3.dev0/DOCUMENTATION.md +1690 -0
  4. radicale-3.dev0/MANIFEST.in +3 -0
  5. radicale-3.dev0/PKG-INFO +71 -0
  6. radicale-3.dev0/README.md +28 -0
  7. radicale-3.dev0/Radicale.egg-info/PKG-INFO +71 -0
  8. radicale-3.dev0/Radicale.egg-info/SOURCES.txt +87 -0
  9. {Radicale-2.1.12 → radicale-3.dev0}/Radicale.egg-info/entry_points.txt +0 -1
  10. radicale-3.dev0/Radicale.egg-info/requires.txt +17 -0
  11. {Radicale-2.1.12 → radicale-3.dev0}/config +66 -52
  12. radicale-3.dev0/radicale/__init__.py +78 -0
  13. radicale-3.dev0/radicale/__main__.py +213 -0
  14. radicale-3.dev0/radicale/app/__init__.py +325 -0
  15. radicale-3.dev0/radicale/app/base.py +140 -0
  16. radicale-3.dev0/radicale/app/delete.py +100 -0
  17. radicale-3.dev0/radicale/app/get.py +109 -0
  18. radicale-3.dev0/radicale/app/head.py +31 -0
  19. radicale-3.dev0/radicale/app/mkcalendar.py +76 -0
  20. radicale-3.dev0/radicale/app/mkcol.py +81 -0
  21. radicale-3.dev0/radicale/app/move.py +115 -0
  22. radicale-3.dev0/radicale/app/options.py +35 -0
  23. radicale-3.dev0/radicale/app/post.py +32 -0
  24. radicale-3.dev0/radicale/app/propfind.py +411 -0
  25. radicale-3.dev0/radicale/app/proppatch.py +113 -0
  26. radicale-3.dev0/radicale/app/put.py +250 -0
  27. radicale-3.dev0/radicale/app/report.py +438 -0
  28. radicale-3.dev0/radicale/auth/__init__.py +94 -0
  29. Radicale-2.1.12/radicale.wsgi → radicale-3.dev0/radicale/auth/denyall.py +12 -6
  30. radicale-3.dev0/radicale/auth/htpasswd.py +163 -0
  31. radicale-3.dev0/radicale/auth/http_x_remote_user.py +39 -0
  32. Radicale-2.1.12/radicale.py → radicale-3.dev0/radicale/auth/none.py +9 -8
  33. radicale-3.dev0/radicale/auth/remote_user.py +38 -0
  34. radicale-3.dev0/radicale/config.py +514 -0
  35. radicale-3.dev0/radicale/hook/__init__.py +60 -0
  36. radicale-3.dev0/radicale/hook/none.py +6 -0
  37. radicale-3.dev0/radicale/hook/rabbitmq/__init__.py +50 -0
  38. radicale-3.dev0/radicale/httputils.py +218 -0
  39. radicale-3.dev0/radicale/item/__init__.py +472 -0
  40. radicale-3.dev0/radicale/item/filter.py +562 -0
  41. radicale-3.dev0/radicale/log.py +238 -0
  42. radicale-3.dev0/radicale/pathutils.py +316 -0
  43. radicale-3.dev0/radicale/py.typed +0 -0
  44. radicale-3.dev0/radicale/rights/__init__.py +80 -0
  45. radicale-3.dev0/radicale/rights/authenticated.py +41 -0
  46. radicale-3.dev0/radicale/rights/from_file.py +87 -0
  47. radicale-3.dev0/radicale/rights/owner_only.py +42 -0
  48. radicale-3.dev0/radicale/rights/owner_write.py +44 -0
  49. radicale-3.dev0/radicale/server.py +353 -0
  50. radicale-3.dev0/radicale/storage/__init__.py +352 -0
  51. radicale-3.dev0/radicale/storage/multifilesystem/__init__.py +91 -0
  52. radicale-3.dev0/radicale/storage/multifilesystem/base.py +126 -0
  53. radicale-3.dev0/radicale/storage/multifilesystem/cache.py +117 -0
  54. radicale-3.dev0/radicale/storage/multifilesystem/create_collection.py +74 -0
  55. radicale-3.dev0/radicale/storage/multifilesystem/delete.py +55 -0
  56. radicale-3.dev0/radicale/storage/multifilesystem/discover.py +104 -0
  57. radicale-3.dev0/radicale/storage/multifilesystem/get.py +153 -0
  58. radicale-3.dev0/radicale/storage/multifilesystem/history.py +95 -0
  59. radicale-3.dev0/radicale/storage/multifilesystem/lock.py +101 -0
  60. radicale-3.dev0/radicale/storage/multifilesystem/meta.py +67 -0
  61. radicale-3.dev0/radicale/storage/multifilesystem/move.py +63 -0
  62. radicale-3.dev0/radicale/storage/multifilesystem/sync.py +124 -0
  63. radicale-3.dev0/radicale/storage/multifilesystem/upload.py +112 -0
  64. radicale-3.dev0/radicale/storage/multifilesystem/verify.py +90 -0
  65. radicale-3.dev0/radicale/storage/multifilesystem_nolock.py +114 -0
  66. radicale-3.dev0/radicale/types.py +61 -0
  67. radicale-3.dev0/radicale/utils.py +57 -0
  68. radicale-3.dev0/radicale/web/__init__.py +78 -0
  69. radicale-3.dev0/radicale/web/internal.py +39 -0
  70. radicale-3.dev0/radicale/web/internal_data/css/icons/delete.svg +1 -0
  71. radicale-3.dev0/radicale/web/internal_data/css/icons/download.svg +1 -0
  72. radicale-3.dev0/radicale/web/internal_data/css/icons/edit.svg +1 -0
  73. radicale-3.dev0/radicale/web/internal_data/css/icons/new.svg +1 -0
  74. radicale-3.dev0/radicale/web/internal_data/css/icons/upload.svg +1 -0
  75. radicale-3.dev0/radicale/web/internal_data/css/loading.svg +72 -0
  76. radicale-3.dev0/radicale/web/internal_data/css/logo.svg +10 -0
  77. radicale-3.dev0/radicale/web/internal_data/css/main.css +428 -0
  78. radicale-3.dev0/radicale/web/internal_data/fn.js +1396 -0
  79. radicale-3.dev0/radicale/web/internal_data/index.html +192 -0
  80. radicale-3.dev0/radicale/web/none.py +35 -0
  81. radicale-3.dev0/radicale/xmlutils.py +197 -0
  82. radicale-3.dev0/radicale.wsgi +6 -0
  83. radicale-3.dev0/rights +111 -0
  84. radicale-3.dev0/setup.cfg +54 -0
  85. radicale-3.dev0/setup.py +80 -0
  86. Radicale-2.1.12/COPYING +0 -674
  87. Radicale-2.1.12/DOCUMENTATION.md +0 -2863
  88. Radicale-2.1.12/MANIFEST.in +0 -3
  89. Radicale-2.1.12/NEWS.md +0 -427
  90. Radicale-2.1.12/PKG-INFO +0 -46
  91. Radicale-2.1.12/README.md +0 -7
  92. Radicale-2.1.12/Radicale.egg-info/PKG-INFO +0 -46
  93. Radicale-2.1.12/Radicale.egg-info/SOURCES.txt +0 -32
  94. Radicale-2.1.12/Radicale.egg-info/requires.txt +0 -15
  95. Radicale-2.1.12/logging +0 -52
  96. Radicale-2.1.12/radicale/__init__.py +0 -1017
  97. Radicale-2.1.12/radicale/__main__.py +0 -291
  98. Radicale-2.1.12/radicale/auth.py +0 -274
  99. Radicale-2.1.12/radicale/config.py +0 -259
  100. Radicale-2.1.12/radicale/log.py +0 -75
  101. Radicale-2.1.12/radicale/rights.py +0 -176
  102. Radicale-2.1.12/radicale/storage.py +0 -1710
  103. Radicale-2.1.12/radicale/web/css/main.css +0 -1
  104. Radicale-2.1.12/radicale/web/fn.js +0 -1003
  105. Radicale-2.1.12/radicale/web/index.html +0 -105
  106. Radicale-2.1.12/radicale/web.py +0 -124
  107. Radicale-2.1.12/radicale/xmlutils.py +0 -1331
  108. Radicale-2.1.12/radicale.fcgi +0 -33
  109. Radicale-2.1.12/rights +0 -48
  110. Radicale-2.1.12/setup.cfg +0 -14
  111. Radicale-2.1.12/setup.py +0 -91
  112. {Radicale-2.1.12 → radicale-3.dev0}/Radicale.egg-info/dependency_links.txt +0 -0
  113. {Radicale-2.1.12 → radicale-3.dev0}/Radicale.egg-info/top_level.txt +0 -0
  114. {Radicale-2.1.12/radicale/web → radicale-3.dev0/radicale/web/internal_data}/css/icon.png +0 -0
@@ -0,0 +1,592 @@
1
+ # Changelog
2
+
3
+ ## 3.dev
4
+
5
+ ## 3.2.2
6
+ * Enhancement: add support for auth.type=denyall (will be default for security reasons in upcoming releases)
7
+ * Enhancement: display warning in case only default config is active
8
+ * Enhancement: display warning in case no user authentication is active
9
+ * Enhancement: add option to skip broken item to avoid triggering exception (default: enabled)
10
+ * Enhancement: add support for predefined collections for new users
11
+ * Enhancement: add options to enable several parts in debug log like backtrace, request_header, request_content, response_content (default: disabled)
12
+ * Enhancement: rights/from_file: display resulting permission of a match in debug log
13
+ * Enhancement: add Apache config file example (see contrib directory)
14
+ * Fix: "verify-collection" skips non-collection directories, logging improved
15
+
16
+ ## 3.2.1
17
+
18
+ * Enhancement: add option for logging bad PUT request content
19
+ * Enhancement: extend logging with step where bad PUT request failed
20
+ * Fix: support for recurrence "full day"
21
+ * Fix: list of web_files related to HTML pages
22
+ * Test: update/adjustments for workflows (pytest>=7, typeguard<4.3)
23
+
24
+ ## 3.2.0
25
+
26
+ * Enhancement: add hook support for event changes+deletion hooks (initial support: "rabbitmq")
27
+ * Dependency: pika >= 1.1.0
28
+ * Enhancement: add support for webcal subscriptions
29
+ * Enhancement: major update of WebUI (design+features)
30
+ * Adjust: change default loglevel to "info"
31
+ * Enhancement: support "expand-property" on REPORT request
32
+ * Drop: support for Python 3.7 (EOSL, can't be tested anymore)
33
+ * Fix: allow quoted-printable encoding for vObjects
34
+
35
+ ## 3.1.9
36
+
37
+ * Add: support for Python 3.11 + 3.12
38
+ * Drop: support for Python 3.6
39
+ * Fix: MOVE in case listen on non-standard ports or behind reverse proxy
40
+ * Fix: stricter requirements of Python 3.11
41
+ * Fix: HTML pages
42
+ * Fix: Main Component is missing when only recurrence id exists
43
+ * Fix: passlib don't support bcrypt>=4.1
44
+ * Fix: web login now proper encodes passwords containing %XX (hexdigits)
45
+ * Enhancement: user-selectable log formats
46
+ * Enhancement: autodetect logging to systemd journal
47
+ * Enhancement: test code
48
+ * Enhancement: option for global permit to delete collection
49
+ * Enhancement: auth type 'htpasswd' supports now 'htpasswd_encryption' sha256/sha512 and "autodetect" for smooth transition
50
+ * Improve: Dockerfiles
51
+ * Improve: server socket listen code + address format in log
52
+ * Update: documentations + examples
53
+ * Dependency: limit typegard version < 3
54
+ * General: code cosmetics
55
+
56
+ ## 3.1.8
57
+
58
+ * Fix setuptools requirement if installing wheel
59
+ * Tests: Switch from `python setup.py test` to `tox`
60
+ * Small changes to build system configuration and tests
61
+
62
+ ## 3.1.7
63
+
64
+ * Fix random href fallback
65
+
66
+ ## 3.1.6
67
+
68
+ * Ignore `Not a directory` error for optional config paths
69
+ * Fix upload of whole address book/calendar with UIDs that collide on
70
+ case-insensitive filesystem
71
+ * Remove runtime dependency on setuptools for Python>=3.9
72
+ * Windows: Block ADS paths
73
+
74
+ ## 3.1.5
75
+
76
+ * Ignore configuration file if access is denied
77
+ * Use F_FULLFSYNC with PyPy on MacOS
78
+ * Fallback if F_FULLFSYNC is not supported by the filesystem
79
+
80
+ ## 3.1.4
81
+
82
+ * Fallback if RENAME_EXCHANGE is not supported by the filesystem
83
+ * Assume POSIX compatibility if `sys.platform` is not `win32`
84
+
85
+ ## 3.1.3
86
+
87
+ * Redirect '…/.well-known/caldav' and '…/.well-known/carddav' to base prefix
88
+ * Warning instead of error when base prefix ends with '/'
89
+
90
+ ## 3.1.2
91
+
92
+ * Verify that base prefix starts with '/' but doesn't end with '/'
93
+ * Improve base prefix log message
94
+ * Never send body for HEAD requests (again)
95
+
96
+ ## 3.1.1
97
+
98
+ * Workaround for contact photo bug in InfCloud
99
+ * Redirect GET and HEAD requests under `/.web` to sanitized path
100
+ * Set `Content-Length` header for HEAD requests
101
+ * Never send body for HEAD requests
102
+ * Improve error messages for `from_file` rights backend
103
+ * Don't sanitize WSGI script name
104
+
105
+ ## 3.1.0
106
+
107
+ * Single `<D:propstat>` element in PROPPATCH response
108
+ * Allow multiple `<D:set>` and `<D:remove>` elements
109
+ * Improve log messages
110
+ * Fix date filter
111
+ * Improve sanitization of collection properties
112
+ * Cancel mkcalendar request on error
113
+ * Use **renameat2** on Linux for atomic overwriting of collections
114
+ * Command Line Parser
115
+ * Disallow abbreviated arguments
116
+ * Support backend specific options and HTTP headers
117
+ * Optional argument for boolean options
118
+ * Load no config file for `--config` without argument
119
+ * Allow float for server->timeout setting
120
+ * Fix **is-not-defined** filter in **addressbook-query** report
121
+ * Add python type hints
122
+ * Add **multifilesystem_nolock** storage
123
+ * Add support for Python 3.9 and 3.10
124
+ * Drop support for Python 3.5
125
+ * Fix compatibility with Evolution (Exceptions from recurrence rules)
126
+
127
+ ## 3.0.6
128
+
129
+ * Allow web plugins to handle POST requests
130
+
131
+ ## 3.0.5
132
+
133
+ * Start storage hook in own process group
134
+ * Kill storage hook on error or exit
135
+ * Try to kill child processes of storage hook
136
+ * Internal Server: Exit immediately when signal is received
137
+ (do not wait for clients or storage hook to finish)
138
+
139
+ ## 3.0.4
140
+
141
+ * Fix internal server on FreeBSD
142
+
143
+ ## 3.0.3
144
+
145
+ * Fix internal server on OpenBSD
146
+
147
+ ## 3.0.2
148
+
149
+ * Use 403 response for supported-report and valid-sync-token errors
150
+ * Internal server: Handle missing IPv6 support
151
+
152
+ ## 3.0.1
153
+
154
+ * Fix XML error messages
155
+
156
+ ## 3.0.0
157
+
158
+ This release is incompatible with previous releases.
159
+ See the upgrade checklist below.
160
+
161
+ * Parallel write requests
162
+ * Support PyPy
163
+ * Protect against XML denial-of-service attacks
164
+ * Check for duplicated UIDs in calendars/address books
165
+ * Only add missing UIDs for uploaded whole calendars/address books
166
+ * Switch from md5 to sha256 for UIDs and tokens
167
+ * Code cleanup:
168
+ * All plugin interfaces were simplified and are incompatible with
169
+ old plugins
170
+ * Major refactor
171
+ * Never sanitize paths multiple times (check if they are sanitized)
172
+ * Config
173
+ * Multiple configuration files separated by `:` (resp. `;`
174
+ on Windows)
175
+ * Optional configuration files by prepending file path with `?`
176
+ * Check validity of every configuration file and command line
177
+ arguments separately
178
+ * Report the source of invalid configuration parameters in
179
+ error messages
180
+ * Code cleanup:
181
+ * Store configuration as parsed values
182
+ * Use Schema that describes configuration and allow plugins to apply
183
+ their own schemas
184
+ * Mark internal settings with `_`
185
+ * Internal server
186
+ * Bind to IPv4 and IPv6 address, when both are available for hostname
187
+ * Set default address to `localhost:5232`
188
+ * Remove settings for SSL ciphers and protocol versions (enforce safe
189
+ defaults instead)
190
+ * Remove settings for file locking because they are of little use
191
+ * Remove daemonization (should be handled by service managers)
192
+ * Logging
193
+ * Replace complex Python logger configuration with simple
194
+ `logging.level` setting
195
+ * Write PID and `threadName` instead of cryptic id's in log messages
196
+ * Use `wsgi.errors` for logging (as required by the WSGI spec)
197
+ * Code cleanup:
198
+ * Don't pass logger object around (use `logging.getLogger()`
199
+ instead)
200
+ * Auth
201
+ * Use `md5` as default for `htpasswd_encryption` setting
202
+ * Move setting `realm` from section `server` to `auth`
203
+ * Rights
204
+ * Use permissions `RW` for non-leaf collections and `rw` for
205
+ address books/calendars
206
+ * New permission `i` that only allows access with HTTP method GET
207
+ (CalDAV/CardDAV is susceptible to expensive search requests)
208
+ * Web
209
+ * Add upload dialog for calendars/address books from file
210
+ * Show startup loading message
211
+ * Show warning if JavaScript is disabled
212
+ * Pass HTML Validator
213
+ * Storage
214
+ * Check for missing UIDs in items
215
+ * Check for child collections in address books and calendars
216
+ * Code cleanup:
217
+ * Split BaseCollection in BaseStorage and BaseCollection
218
+
219
+ ## Upgrade checklist
220
+
221
+ * Config
222
+ * Some settings were removed
223
+ * The default of `auth.htpasswd_encryption` changed to `md5`
224
+ * The setting `server.realm` moved to `auth.realm`
225
+ * The setting `logging.debug` was replaced by `logging.level`
226
+ * The format of the `rights.file` configuration file changed:
227
+ * Permission `r` replaced by `Rr`
228
+ * Permission `w` replaced by `Ww`
229
+ * New permission `i` added as subset of `r`
230
+ * Replaced variable `%(login)s` by `{user}`
231
+ * Removed variable `%(path)s`
232
+ * `{` must be escaped as `{{` and `}` as `}}` in regexes
233
+ * File system storage
234
+ * The storage format is compatible with Radicale 2.x.x
235
+ * Run `radicale --verify-storage` to check for errors
236
+ * Custom plugins:
237
+ * `auth` and `web` plugins require minor adjustments
238
+ * `rights` plugins must be adapted to the new permission model
239
+ * `storage` plugins require major changes
240
+
241
+ ## 2.1.10 - Wild Radish
242
+
243
+ This release is compatible with version 2.0.0.
244
+
245
+ * Update required versions for dependencies
246
+ * Get `RADICALE_CONFIG` from WSGI environ
247
+ * Improve HTTP status codes
248
+ * Fix race condition in storage lock creation
249
+ * Raise default limits for content length and timeout
250
+ * Log output from hook
251
+
252
+ ## 2.1.9 - Wild Radish
253
+
254
+ This release is compatible with version 2.0.0.
255
+
256
+ * Specify versions for dependencies
257
+ * Move WSGI initialization into module
258
+ * Check if `REPORT` method is actually supported
259
+ * Include `rights` file in source distribution
260
+ * Specify `md5` and `bcrypt` as extras
261
+ * Improve logging messages
262
+ * Windows: Fix crash when item path is a directory
263
+
264
+ ## 2.1.8 - Wild Radish
265
+
266
+ This release is compatible with version 2.0.0.
267
+
268
+ * Flush files before fsync'ing
269
+
270
+ ## 2.1.7 - Wild Radish
271
+
272
+ This release is compatible with version 2.0.0.
273
+
274
+ * Don't print warning when cache format changes
275
+ * Add documentation for `BaseAuth`
276
+ * Add `is_authenticated2(login, user, password)` to `BaseAuth`
277
+ * Fix names of custom properties in PROPFIND requests with
278
+ `D:propname` or `D:allprop`
279
+ * Return all properties in PROPFIND requests with `D:propname` or
280
+ `D:allprop`
281
+ * Allow `D:displayname` property on all collections
282
+ * Answer with `D:unauthenticated` for `D:current-user-principal` property
283
+ when not logged in
284
+ * Remove non-existing `ICAL:calendar-color` and `C:calendar-timezone`
285
+ properties from PROPFIND requests with `D:propname` or `D:allprop`
286
+ * Add `D:owner` property to calendar and address book objects
287
+ * Remove `D:getetag` and `D:getlastmodified` properties from regular
288
+ collections
289
+
290
+ ## 2.1.6 - Wild Radish
291
+
292
+ This release is compatible with version 2.0.0.
293
+
294
+ * Fix content-type of VLIST
295
+ * Specify correct COMPONENT in content-type of VCALENDAR
296
+ * Cache COMPONENT of calendar objects (improves speed with some clients)
297
+ * Stricter parsing of filters
298
+ * Improve support for CardDAV filter
299
+ * Fix some smaller bugs in CalDAV filter
300
+ * Add X-WR-CALNAME and X-WR-CALDESC to calendars downloaded via HTTP/WebDAV
301
+ * Use X-WR-CALNAME and X-WR-CALDESC from calendars published via WebDAV
302
+
303
+ ## 2.1.5 - Wild Radish
304
+
305
+ This release is compatible with version 2.0.0.
306
+
307
+ * Add `--verify-storage` command-line argument
308
+ * Allow comments in the htpasswd file
309
+ * Don't strip whitespaces from user names and passwords in the htpasswd file
310
+ * Remove cookies from logging output
311
+ * Allow uploads of whole collections with many components
312
+ * Show warning message if server.timeout is used with Python < 3.5.2
313
+
314
+ ## 2.1.4 - Wild Radish
315
+
316
+ This release is compatible with version 2.0.0.
317
+
318
+ * Fix incorrect time range matching and calculation for some edge-cases with
319
+ rescheduled recurrences
320
+ * Fix owner property
321
+
322
+ ## 2.1.3 - Wild Radish
323
+
324
+ This release is compatible with version 2.0.0.
325
+
326
+ * Enable timeout for SSL handshakes and move them out of the main thread
327
+ * Create cache entries during upload of items
328
+ * Stop built-in server on Windows when Ctrl+C is pressed
329
+ * Prevent slow down when multiple requests hit a collection during cache warm-up
330
+
331
+ ## 2.1.2 - Wild Radish
332
+
333
+ This release is compatible with version 2.0.0.
334
+
335
+ * Remove workarounds for bugs in VObject < 0.9.5
336
+ * Error checking of collection tags and associated components
337
+ * Improve error checking of uploaded collections and components
338
+ * Don't delete empty collection properties implicitly
339
+ * Improve logging of VObject serialization
340
+
341
+ ## 2.1.1 - Wild Radish Again
342
+
343
+ This release is compatible with version 2.0.0.
344
+
345
+ * Add missing UIDs instead of failing
346
+ * Improve error checking of calendar and address book objects
347
+ * Fix upload of whole address books
348
+
349
+ ## 2.1.0 - Wild Radish
350
+
351
+ This release is compatible with version 2.0.0.
352
+
353
+ * Built-in web interface for creating and managing address books and calendars
354
+ * can be extended with web plugins
355
+ * Much faster storage backend
356
+ * Significant reduction in memory usage
357
+ * Improved logging
358
+ * Include paths (of invalid items / requests) in log messages
359
+ * Include configuration values causing problems in log messages
360
+ * Log warning message for invalid requests by clients
361
+ * Log error message for invalid files in the storage backend
362
+ * No stack traces unless debugging is enabled
363
+ * Time range filter also regards overwritten recurrences
364
+ * Items that couldn't be filtered because of bugs in VObject are always
365
+ returned (and a warning message is logged)
366
+ * Basic error checking of configuration files
367
+ * File system locking isn't disabled implicitly anymore, instead a new
368
+ configuration option gets introduced
369
+ * The permissions of the lock file are not changed anymore
370
+ * Support for sync-token
371
+ * Support for client-side SSL certificates
372
+ * Rights plugins can decide if access to an item is granted explicitly
373
+ * Respond with 403 instead of 404 for principal collections of non-existing
374
+ users when `owner_only` plugin is used (information leakage)
375
+ * Authentication plugins can provide the login and password from the
376
+ environment
377
+ * new `remote_user` plugin, that gets the login from the `REMOTE_USER`
378
+ environment variable (for WSGI server)
379
+ * new `http_x_remote_user` plugin, that gets the login from the
380
+ `X-Remote-User` HTTP header (for reverse proxies)
381
+
382
+ ## 2.0.0 - Little Big Radish
383
+
384
+ This feature is not compatible with the 1.x.x versions. Follow our
385
+ [migration guide](https://radicale.org/2.1.html#documentation/migration-from-1xx-to-2xx)
386
+ if you want to switch from 1.x.x to 2.0.0.
387
+
388
+ * Support Python 3.3+ only, Python 2 is not supported anymore
389
+ * Keep only one simple filesystem-based storage system
390
+ * Remove built-in Git support
391
+ * Remove built-in authentication modules
392
+ * Keep the WSGI interface, use Python HTTP server by default
393
+ * Use a real iCal parser, rely on the "vobject" external module
394
+ * Add a solid calendar discovery
395
+ * Respect the difference between "files" and "folders", don't rely on slashes
396
+ * Remove the calendar creation with GET requests
397
+ * Be stateless
398
+ * Use a file locker
399
+ * Add threading
400
+ * Get atomic writes
401
+ * Support new filters
402
+ * Support read-only permissions
403
+ * Allow External plugins for authentication, rights management, storage and
404
+ version control
405
+
406
+ ## 1.1.4 - Fifth Law of Nature
407
+
408
+ * Use `shutil.move` for `--export-storage`
409
+
410
+ ## 1.1.3 - Fourth Law of Nature
411
+
412
+ * Add a `--export-storage=FOLDER` command-line argument (by Unrud, see #606)
413
+
414
+ ## 1.1.2 - Third Law of Nature
415
+
416
+ * **Security fix**: Add a random timer to avoid timing oracles and simple
417
+ bruteforce attacks when using the htpasswd authentication method.
418
+ * Various minor fixes.
419
+
420
+ ## 1.1.1 - Second Law of Nature
421
+
422
+ * Fix the owner_write rights rule
423
+
424
+ ## 1.1 - Law of Nature
425
+
426
+ One feature in this release is **not backward compatible**:
427
+
428
+ * Use the first matching section for rights (inspired from daald)
429
+
430
+ Now, the first section matching the path and current user in your custom rights
431
+ file is used. In the previous versions, the most permissive rights of all the
432
+ matching sections were applied. This new behaviour gives a simple way to make
433
+ specific rules at the top of the file independant from the generic ones.
434
+
435
+ Many **improvements in this release are related to security**, you should
436
+ upgrade Radicale as soon as possible:
437
+
438
+ * Improve the regex used for well-known URIs (by Unrud)
439
+ * Prevent regex injection in rights management (by Unrud)
440
+ * Prevent crafted HTTP request from calling arbitrary functions (by Unrud)
441
+ * Improve URI sanitation and conversion to filesystem path (by Unrud)
442
+ * Decouple the daemon from its parent environment (by Unrud)
443
+
444
+ Some bugs have been fixed and little enhancements have been added:
445
+
446
+ * Assign new items to corret key (by Unrud)
447
+ * Avoid race condition in PID file creation (by Unrud)
448
+ * Improve the docker version (by cdpb)
449
+ * Encode message and commiter for git commits
450
+ * Test with Python 3.5
451
+
452
+ ## 1.0.1 - Sunflower Again
453
+
454
+ * Update the version because of a **stupid** "feature"™ of PyPI
455
+
456
+ ## 1.0 - Sunflower
457
+
458
+ * Enhanced performances (by Mathieu Dupuy)
459
+ * Add MD5-APR1 and BCRYPT for htpasswd-based authentication (by Jan-Philip Gehrcke)
460
+ * Use PAM service (by Stephen Paul Weber)
461
+ * Don't discard PROPPATCH on empty collections (by Markus Unterwaditzer)
462
+ * Write the path of the collection in the git message (by Matthew Monaco)
463
+ * Tests launched on Travis
464
+
465
+ ## 0.10 - Lovely Endless Grass
466
+
467
+ * Support well-known URLs (by Mathieu Dupuy)
468
+ * Fix collection discovery (by Markus Unterwaditzer)
469
+ * Reload logger config on SIGHUP (by Élie Bouttier)
470
+ * Remove props files when deleting a collection (by Vincent Untz)
471
+ * Support salted SHA1 passwords (by Marc Kleine-Budde)
472
+ * Don't spam the logs about non-SSL IMAP connections to localhost (by Giel van Schijndel)
473
+
474
+ ## 0.9 - Rivers
475
+
476
+ * Custom handlers for auth, storage and rights (by Sergey Fursov)
477
+ * 1-file-per-event storage (by Jean-Marc Martins)
478
+ * Git support for filesystem storages (by Jean-Marc Martins)
479
+ * DB storage working with PostgreSQL, MariaDB and SQLite (by Jean-Marc Martins)
480
+ * Clean rights manager based on regular expressions (by Sweil)
481
+ * Support of contacts for Apple's clients
482
+ * Support colors (by Jochen Sprickerhof)
483
+ * Decode URLs in XML (by Jean-Marc Martins)
484
+ * Fix PAM authentication (by Stepan Henek)
485
+ * Use consistent etags (by 9m66p93w)
486
+ * Use consistent sorting order (by Daniel Danner)
487
+ * Return 401 on unauthorized DELETE requests (by Eduard Braun)
488
+ * Move pid file creation in child process (by Mathieu Dupuy)
489
+ * Allow requests without base_prefix (by jheidemann)
490
+
491
+ ## 0.8 - Rainbow
492
+
493
+ * New authentication and rights management modules (by Matthias Jordan)
494
+ * Experimental database storage
495
+ * Command-line option for custom configuration file (by Mark Adams)
496
+ * Root URL not at the root of a domain (by Clint Adams, Fabrice Bellet, Vincent Untz)
497
+ * Improved support for iCal, CalDAVSync, CardDAVSync, CalDavZAP and CardDavMATE
498
+ * Empty PROPFIND requests handled (by Christoph Polcin)
499
+ * Colon allowed in passwords
500
+ * Configurable realm message
501
+
502
+ ## 0.7.1 - Waterfalls
503
+
504
+ * Many address books fixes
505
+ * New IMAP ACL (by Daniel Aleksandersen)
506
+ * PAM ACL fixed (by Daniel Aleksandersen)
507
+ * Courier ACL fixed (by Benjamin Frank)
508
+ * Always set display name to collections (by Oskari Timperi)
509
+ * Various DELETE responses fixed
510
+
511
+ ## 0.7 - Eternal Sunshine
512
+
513
+ * Repeating events
514
+ * Collection deletion
515
+ * Courier and PAM authentication methods
516
+ * CardDAV support
517
+ * Custom LDAP filters supported
518
+
519
+ ## 0.6.4 - Tulips
520
+
521
+ * Fix the installation with Python 3.1
522
+
523
+ ## 0.6.3 - Red Roses
524
+
525
+ * MOVE requests fixed
526
+ * Faster REPORT answers
527
+ * Executable script moved into the package
528
+
529
+ ## 0.6.2 - Seeds
530
+
531
+ * iPhone and iPad support fixed
532
+ * Backslashes replaced by slashes in PROPFIND answers on Windows
533
+ * PyPI archive set as default download URL
534
+
535
+ ## 0.6.1 - Growing Up
536
+
537
+ * Example files included in the tarball
538
+ * htpasswd support fixed
539
+ * Redirection loop bug fixed
540
+ * Testing message on GET requests
541
+
542
+ ## 0.6 - Sapling
543
+
544
+ * WSGI support
545
+ * IPv6 support
546
+ * Smart, verbose and configurable logs
547
+ * Apple iCal 4 and iPhone support (by Łukasz Langa)
548
+ * KDE KOrganizer support
549
+ * LDAP auth backend (by Corentin Le Bail)
550
+ * Public and private calendars (by René Neumann)
551
+ * PID file
552
+ * MOVE requests management
553
+ * Journal entries support
554
+ * Drop Python 2.5 support
555
+
556
+ ## 0.5 - Historical Artifacts
557
+
558
+ * Calendar depth
559
+ * MacOS and Windows support
560
+ * HEAD requests management
561
+ * htpasswd user from calendar path
562
+
563
+ ## 0.4 - Hot Days Back
564
+
565
+ * Personal calendars
566
+ * Last-Modified HTTP header
567
+ * `no-ssl` and `foreground` options
568
+ * Default configuration file
569
+
570
+ ## 0.3 - Dancing Flowers
571
+
572
+ * Evolution support
573
+ * Version management
574
+
575
+ ## 0.2 - Snowflakes
576
+
577
+ * Sunbird pre-1.0 support
578
+ * SSL connection
579
+ * Htpasswd authentication
580
+ * Daemon mode
581
+ * User configuration
582
+ * Twisted dependency removed
583
+ * Python 3 support
584
+ * Real URLs for PUT and DELETE
585
+ * Concurrent modification reported to users
586
+ * Many bugs fixed (by Roger Wenham)
587
+
588
+ ## 0.1 - Crazy Vegetables
589
+
590
+ * First release
591
+ * Lightning/Sunbird 0.9 compatibility
592
+ * Easy installer