From 2307d8cda77b0b533d1c485e57360d2d677628e7 Mon Sep 17 00:00:00 2001 From: Github Actions <> Date: Fri, 22 Aug 2025 04:16:29 +0000 Subject: [PATCH] Generate documentation --- master.html | 231 +++++++++++++++++++++++++++++++--------------------- 1 file changed, 136 insertions(+), 95 deletions(-) diff --git a/master.html b/master.html index 99353f7f..4b81db9a 100644 --- a/master.html +++ b/master.html @@ -191,6 +191,7 @@ with the WSGI server
  • logging
  • headers
  • hook
  • +
  • updated_event_template
  • reporting
  • @@ -1644,10 +1645,12 @@ authentication (e.g. using local mail server).

    disabled, send one email per attendee email address.

    Default: False

    -
    -
    added_template
    +
    +
    new_or_added_to_event_template

    (>= 3.5.5)

    -

    Template to use for added/updated event email body.

    +

    Template to use for added/updated event email body (sent to an +attendee when the event is created or they are added to a pre-existing +event).

    The following placeholders will be replaced:

    -
    -
    removed_template
    +
    +
    deleted_or_removed_from_event_template

    (>= 3.5.5)

    -

    Template to use for deleted event email body.

    +

    Template to use for deleted/removed event email body (sent to an +attendee when the event is deleted or they are removed from the +event).

    The following placeholders will be replaced:

    • $organizer_name: Name of the organizer, or "Unknown @@ -1702,7 +1707,7 @@ will result in an error.

      Default:

      Hello $attendee_name,
       
      -You have been removed as an attendee from the following calendar event.
      +The following event has been deleted.
       
           $event_title
           $event_start_time - $event_end_time
      @@ -1711,6 +1716,42 @@ You have been removed as an attendee from the following calendar event.
       This is an automated message. Please do not reply.
    +
    +

    updated_event_template

    +

    (>= 3.5.5)

    +

    Template to use for updated event email body (sent to an attendee +when non-attendee-related details of the event are updated).

    +

    Existing attendees will NOT be notified of a modified event if the +only changes are adding/removing other attendees.

    +

    The following placeholders will be replaced:

    + +

    Providing any words prefixed with $ not included in the list above +will result in an error.

    +

    Default:

    +
    Hello $attendee_name,
    +            
    +The following event has been updated.
    +
    +    $event_title
    +    $event_start_time - $event_end_time
    +    $event_location
    +    
    +This is an automated message. Please do not reply.
    +

    reporting

    @@ -1822,47 +1863,47 @@ InfCloud.

    calendars and address books. Use Radicale's web interface or a client with support for it (e.g. DAVx⁵).

    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>'
    -

    To create a new address book run something like:

    -
    $ curl -u user -X MKCOL 'http://localhost:5232/user/addressbook' --data \
    +
    $ curl -u user -X MKCOL 'http://localhost:5232/user/calendar' --data \
     '<?xml version="1.0" encoding="UTF-8" ?>
    -<create xmlns="DAV:" xmlns:CR="urn:ietf:params:xml:ns:carddav">
    +<create xmlns="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav" xmlns:I="http://apple.com/ns/ical/">
       <set>
         <prop>
           <resourcetype>
             <collection />
    -        <CR:addressbook />
    +        <C:calendar />
           </resourcetype>
    -      <displayname>Address book</displayname>
    -      <CR:addressbook-description>Example address book</CR:addressbook-description>
    -    </prop>
    -  </set>
    -</create>'
    + <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>'

    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

    @@ -1878,24 +1919,24 @@ to calendars and address books outside the home directory of users collections and will not show them to the user. This is only useful if you access calendars and address books directly via URL.

    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 @@ -1982,10 +2023,10 @@ system. The storage is locked with exclusive access while the

    Linux shell scripts

    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
    Linux and MacOS
    @@ -2010,11 +2051,11 @@ folder in the file system storage (e.g. clients that the collection is a calendar, you have to create the file .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 @@ -2144,49 +2185,49 @@ password.

    modules is Distutils. For a minimal setup create the file setup.py with the following content in an empty folder:

    -
    #!/usr/bin/env python3
    -
    -from distutils.core import setup
    -
    -setup(name="radicale_static_password_auth",
    -      packages=["radicale_static_password_auth"])
    +
    #!/usr/bin/env python3
    +
    +from distutils.core import setup
    +
    +setup(name="radicale_static_password_auth",
    +      packages=["radicale_static_password_auth"])

    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
    -
    -PLUGIN_CONFIG_SCHEMA = {"auth": {
    -    "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
    -        static_password = self.configuration.get("auth", "password")
    -        # Check authentication
    -        logger.info("Login attempt by %r with password %r",
    -                    login, password)
    -        if password == static_password:
    -            return login
    -        return ""
    +
    from radicale.auth import BaseAuth
    +from radicale.log import logger
    +
    +PLUGIN_CONFIG_SCHEMA = {"auth": {
    +    "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
    +        static_password = self.configuration.get("auth", "password")
    +        # Check authentication
    +        logger.info("Login attempt by %r with password %r",
    +                    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

    Authentication plugins

    @@ -2245,14 +2286,14 @@ you want to add new features, fix bugs or update the documentation.

    PyPI

    Radicale is available on PyPI. To install, just type as superuser:

    -
    python3 -m pip install --upgrade radicale
    +
    python3 -m pip install --upgrade radicale

    Git Repository

    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.

    @@ -2264,7 +2305,7 @@ GitHub, or install it directly with:

    Radicale is available as a Docker image for platforms linux/amd64 and linux/arm64. To install the latest version, run:

    -
    docker pull ghcr.io/kozea/radicale:latest
    +
    docker pull ghcr.io/kozea/radicale:latest

    An example docker-compose.yml and detailed instructions will soon be updated.