From 943f88b8c15194c632062885a0b95babb9481b13 Mon Sep 17 00:00:00 2001 From: Github Actions <> Date: Fri, 4 Jul 2025 05:32:22 +0000 Subject: [PATCH] Generate documentation --- master.html | 304 ++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 212 insertions(+), 92 deletions(-) diff --git a/master.html b/master.html index f85acc42..496590fb 100644 --- a/master.html +++ b/master.html @@ -1541,6 +1541,8 @@ be specified.
none
: Disabled. Nothing will be notified.
rabbitmq
(>= 3.2.0) : Push the message to
the rabbitmq server.
email
(>= 3.5.5) : Send an email
+notification to event attendees.
Default: none
RabbitMQ queue type for the topic.
Default: classic
(>= 3.5.5)
+Address to connect to SMTP server.
+Default:
+(>= 3.5.5)
+Port to connect to SMTP server.
+Default:
+(>= 3.5.5)
+Use encryption on the SMTP connection. none, tls, starttls
+Default: none
+(>= 3.5.5)
+The certificate verification mode. Works for tls and starttls. NONE, +OPTIONAL or REQUIRED
+Default: REQUIRED
+(>= 3.5.5)
+Username to authenticate with SMTP server. Leave empty to disable +authentication (e.g. using local mail server).
+Default:
+(>= 3.5.5)
+Password to authenticate with SMTP server. Leave empty to disable +authentication (e.g. using local mail server).
+Default:
+(>= 3.5.5)
+Email address to use as sender in email notifications.
+Default:
+(>= 3.5.5)
+When enabled, send one email to all attendee email addresses. When +disabled, send one email per attendee email address.
+Default: False
(>= 3.5.5)
+Template to use for added/updated event email body.
+The following placeholders will be replaced:
+$organizer_name
: Name of the organizer, or "Unknown
+Organizer" if not set in event$from_email
: Email address the email is sent from$attendee_name
: Name of the attendee (email recipient),
+or "everyone" if mass email enabled.$event_name
: Name/summary of the event, or "No Title"
+if not set in event$event_start_time
: Start time of the event in ISO 8601
+format$event_end_time
: End time of the event in ISO 8601
+format, or "No End Time" if the event has no end time$event_location
: Location of the event, or "No Location
+Specified" if not set in eventProviding any words prefixed with $ not included in the list above +will result in an error.
+Default:
+Hello $attendee_name,
+
+You have been added as an attendee to the following calendar event.
+
+ $event_title
+ $event_start_time - $event_end_time
+ $event_location
+
+This is an automated message. Please do not reply.
+(>= 3.5.5)
+Template to use for deleted event email body.
+The following placeholders will be replaced:
+$organizer_name
: Name of the organizer, or "Unknown
+Organizer" if not set in event$from_email
: Email address the email is sent from$attendee_name
: Name of the attendee (email recipient),
+or "everyone" if mass email enabled.$event_name
: Name/summary of the event, or "No Title"
+if not set in event$event_start_time
: Start time of the event in ISO 8601
+format$event_end_time
: End time of the event in ISO 8601
+format, or "No End Time" if the event has no end time$event_location
: Location of the event, or "No Location
+Specified" if not set in eventProviding any words prefixed with $ not included in the list above +will result in an error.
+Default:
+Hello $attendee_name,
+
+You have been removed as an attendee from the following calendar event.
+
+ $event_title
+ $event_start_time - $event_end_time
+ $event_location
+
+This is an automated message. Please do not reply.
+To create a new calendar run something like:
-$ curl -u user -X MKCOL 'http://localhost:5232/user/calendar' --data \
-'<?xml version="1.0" encoding="UTF-8" ?>
-<create xmlns="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav" xmlns:I="http://apple.com/ns/ical/">
- <set>
- <prop>
- <resourcetype>
- <collection />
- <C:calendar />
- </resourcetype>
- <C:supported-calendar-component-set>
- <C:comp name="VEVENT" />
- <C:comp name="VJOURNAL" />
- <C:comp name="VTODO" />
- </C:supported-calendar-component-set>
- <displayname>Calendar</displayname>
- <C:calendar-description>Example calendar</C:calendar-description>
- <I:calendar-color>#ff0000ff</I:calendar-color>
- </prop>
- </set>
-</create>'
$ curl -u user -X MKCOL 'http://localhost:5232/user/calendar' --data \
+'<?xml version="1.0" encoding="UTF-8" ?>
+<create xmlns="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav" xmlns:I="http://apple.com/ns/ical/">
+ <set>
+ <prop>
+ <resourcetype>
+ <collection />
+ <C:calendar />
+ </resourcetype>
+ <C:supported-calendar-component-set>
+ <C:comp name="VEVENT" />
+ <C:comp name="VJOURNAL" />
+ <C:comp name="VTODO" />
+ </C:supported-calendar-component-set>
+ <displayname>Calendar</displayname>
+ <C:calendar-description>Example calendar</C:calendar-description>
+ <I:calendar-color>#ff0000ff</I:calendar-color>
+ </prop>
+ </set>
+</create>'
To create a new address book run something like:
-$ curl -u user -X MKCOL 'http://localhost:5232/user/addressbook' --data \
-'<?xml version="1.0" encoding="UTF-8" ?>
-<create xmlns="DAV:" xmlns:CR="urn:ietf:params:xml:ns:carddav">
- <set>
- <prop>
- <resourcetype>
- <collection />
- <CR:addressbook />
- </resourcetype>
- <displayname>Address book</displayname>
- <CR:addressbook-description>Example address book</CR:addressbook-description>
- </prop>
- </set>
-</create>'
$ curl -u user -X MKCOL 'http://localhost:5232/user/addressbook' --data \
+'<?xml version="1.0" encoding="UTF-8" ?>
+<create xmlns="DAV:" xmlns:CR="urn:ietf:params:xml:ns:carddav">
+ <set>
+ <prop>
+ <resourcetype>
+ <collection />
+ <CR:addressbook />
+ </resourcetype>
+ <displayname>Address book</displayname>
+ <CR:addressbook-description>Example address book</CR:addressbook-description>
+ </prop>
+ </set>
+</create>'
The collection /USERNAME
will be created automatically,
when the user authenticates to Radicale for the first time. Clients with
automatic discovery of collections will only show calendars and address
books that are direct children of the path /USERNAME/
.
Delete the collections by running something like:
-curl -u user -X DELETE 'http://localhost:5232/user/calendar'
curl -u user -X DELETE 'http://localhost:5232/user/calendar'
Note: requires config/option
permit_delete_collection = True
An example rights file:
-# Allow reading root collection for authenticated users
-[root]
-user: .+
-collection:
-permissions: R
-
-# Allow reading and writing principal collection (same as username)
-[principal]
-user: .+
-collection: {user}
-permissions: RW
-
-# Allow reading and writing calendars and address books that are direct
-# children of the principal collection
-[calendars]
-user: .+
-collection: {user}/[^/]+
-permissions: rw
# Allow reading root collection for authenticated users
+[root]
+user: .+
+collection:
+permissions: R
+
+# Allow reading and writing principal collection (same as username)
+[principal]
+user: .+
+collection: {user}
+permissions: RW
+
+# Allow reading and writing calendars and address books that are direct
+# children of the principal collection
+[calendars]
+user: .+
+collection: {user}/[^/]+
+permissions: rw
The titles of the sections are ignored (but must be unique). The keys
user
and collection
contain regular
expressions, that are matched against the username and the path of the
@@ -1829,10 +1949,10 @@ system. The storage is locked with exclusive access while the
Use the flock utility.
-# Exclusive
-$ flock --exclusive /path/to/storage/.Radicale.lock COMMAND
-# Shared
-$ flock --shared /path/to/storage/.Radicale.lock COMMAND
# Exclusive
+$ flock --exclusive /path/to/storage/.Radicale.lock COMMAND
+# Shared
+$ flock --shared /path/to/storage/.Radicale.lock COMMAND
.Radicale.props
with the following content in the
folder:
-{"tag": "VCALENDAR"}
{"tag": "VCALENDAR"}
The calendar is now available at the URL path
/user/calendar
. For address books the file must
contain:
{"tag": "VADDRESSBOOK"}
{"tag": "VADDRESSBOOK"}
Calendar and address book collections must not have any child collections. Clients with automatic discovery of collections will only show calendars and address books that are direct children of the path @@ -1991,49 +2111,49 @@ password.
modules is Distutils. For a minimal setup create the filesetup.py
with the
following content in an empty folder:
-#!/usr/bin/env python3
-
-from distutils.core import setup
-
-="radicale_static_password_auth",
- setup(name=["radicale_static_password_auth"]) packages
#!/usr/bin/env python3
+
+from distutils.core import setup
+
+="radicale_static_password_auth",
+ setup(name=["radicale_static_password_auth"]) packages
In the same folder create the sub-folder
radicale_static_password_auth
. The folder must have the
same name as specified in packages
above.
Create the file __init__.py
in the
radicale_static_password_auth
folder with the following
content:
from radicale.auth import BaseAuth
-from radicale.log import logger
-
-= {"auth": {
- PLUGIN_CONFIG_SCHEMA "password": {"value": "", "type": str}}}
-
-
-class Auth(BaseAuth):
-def __init__(self, configuration):
- super().__init__(configuration.copy(PLUGIN_CONFIG_SCHEMA))
-
-def _login(self, login, password):
- # Get password from configuration option
- = self.configuration.get("auth", "password")
- static_password # Check authentication
- "Login attempt by %r with password %r",
- logger.info(
- login, password)if password == static_password:
- return login
- return ""
from radicale.auth import BaseAuth
+from radicale.log import logger
+
+= {"auth": {
+ PLUGIN_CONFIG_SCHEMA "password": {"value": "", "type": str}}}
+
+
+class Auth(BaseAuth):
+def __init__(self, configuration):
+ super().__init__(configuration.copy(PLUGIN_CONFIG_SCHEMA))
+
+def _login(self, login, password):
+ # Get password from configuration option
+ = self.configuration.get("auth", "password")
+ static_password # Check authentication
+ "Login attempt by %r with password %r",
+ logger.info(
+ login, password)if password == static_password:
+ return login
+ return ""
Install the python module by running the following command in the
same folder as setup.py
:
python3 -m pip install .
python3 -m pip install .
To make use this great creation in Radicale, set the configuration
option type
in the auth
section to
radicale_static_password_auth
:
[auth]
-type = radicale_static_password_auth
-password = secret
[auth]
+type = radicale_static_password_auth
+password = secret
You can uninstall the module with:
-python3 -m pip uninstall radicale_static_password_auth
python3 -m pip uninstall radicale_static_password_auth
Radicale is available on PyPI. To install, just type as superuser:
-python3 -m pip install --upgrade radicale
python3 -m pip install --upgrade radicale
If you want the development version of Radicale, take a look at the git repository on GitHub, or install it directly with:
-python3 -m pip install --upgrade https://github.com/Kozea/Radicale/archive/master.tar.gz
python3 -m pip install --upgrade https://github.com/Kozea/Radicale/archive/master.tar.gz
You can also download the content of the repository as an archive.