mirror of
https://github.com/Kozea/Radicale.git
synced 2025-08-04 18:22:26 +00:00
Generate documentation
This commit is contained in:
parent
c7f026b783
commit
943f88b8c1
1 changed files with 212 additions and 92 deletions
304
master.html
304
master.html
|
@ -1541,6 +1541,8 @@ be specified.</p>
|
||||||
<p><code>none</code> : Disabled. Nothing will be notified.</p>
|
<p><code>none</code> : Disabled. Nothing will be notified.</p>
|
||||||
<p><code>rabbitmq</code> <em>(>= 3.2.0)</em> : Push the message to
|
<p><code>rabbitmq</code> <em>(>= 3.2.0)</em> : Push the message to
|
||||||
the rabbitmq server.</p>
|
the rabbitmq server.</p>
|
||||||
|
<p><code>email</code> <em>(>= 3.5.5)</em> : Send an email
|
||||||
|
notification to event attendees.</p>
|
||||||
<p>Default: <code>none</code></p>
|
<p>Default: <code>none</code></p>
|
||||||
</section>
|
</section>
|
||||||
<section class="level5" id="rabbitmq_endpoint">
|
<section class="level5" id="rabbitmq_endpoint">
|
||||||
|
@ -1562,6 +1564,124 @@ amqp://user:password@localhost:5672/</p>
|
||||||
<p>RabbitMQ queue type for the topic.</p>
|
<p>RabbitMQ queue type for the topic.</p>
|
||||||
<p>Default: classic</p>
|
<p>Default: classic</p>
|
||||||
</section>
|
</section>
|
||||||
|
<section class="level5" id="smtp_server">
|
||||||
|
<h5>smtp_server <a class="headerlink" href="#smtp_server">¶</a></h5>
|
||||||
|
<p><em>(>= 3.5.5)</em></p>
|
||||||
|
<p>Address to connect to SMTP server.</p>
|
||||||
|
<p>Default:</p>
|
||||||
|
</section>
|
||||||
|
<section class="level5" id="smtp_port">
|
||||||
|
<h5>smtp_port <a class="headerlink" href="#smtp_port">¶</a></h5>
|
||||||
|
<p><em>(>= 3.5.5)</em></p>
|
||||||
|
<p>Port to connect to SMTP server.</p>
|
||||||
|
<p>Default:</p>
|
||||||
|
</section>
|
||||||
|
<section class="level5" id="smtp_security">
|
||||||
|
<h5>smtp_security <a class="headerlink" href="#smtp_security">¶</a></h5>
|
||||||
|
<p><em>(>= 3.5.5)</em></p>
|
||||||
|
<p>Use encryption on the SMTP connection. none, tls, starttls</p>
|
||||||
|
<p>Default: none</p>
|
||||||
|
</section>
|
||||||
|
<section class="level5" id="smtp_ssl_verify_mode">
|
||||||
|
<h5>smtp_ssl_verify_mode <a class="headerlink" href="#smtp_ssl_verify_mode">¶</a></h5>
|
||||||
|
<p><em>(>= 3.5.5)</em></p>
|
||||||
|
<p>The certificate verification mode. Works for tls and starttls. NONE,
|
||||||
|
OPTIONAL or REQUIRED</p>
|
||||||
|
<p>Default: REQUIRED</p>
|
||||||
|
</section>
|
||||||
|
<section class="level5" id="smtp_username">
|
||||||
|
<h5>smtp_username <a class="headerlink" href="#smtp_username">¶</a></h5>
|
||||||
|
<p><em>(>= 3.5.5)</em></p>
|
||||||
|
<p>Username to authenticate with SMTP server. Leave empty to disable
|
||||||
|
authentication (e.g. using local mail server).</p>
|
||||||
|
<p>Default:</p>
|
||||||
|
</section>
|
||||||
|
<section class="level5" id="smtp_password">
|
||||||
|
<h5>smtp_password <a class="headerlink" href="#smtp_password">¶</a></h5>
|
||||||
|
<p><em>(>= 3.5.5)</em></p>
|
||||||
|
<p>Password to authenticate with SMTP server. Leave empty to disable
|
||||||
|
authentication (e.g. using local mail server).</p>
|
||||||
|
<p>Default:</p>
|
||||||
|
</section>
|
||||||
|
<section class="level5" id="from_email">
|
||||||
|
<h5>from_email <a class="headerlink" href="#from_email">¶</a></h5>
|
||||||
|
<p><em>(>= 3.5.5)</em></p>
|
||||||
|
<p>Email address to use as sender in email notifications.</p>
|
||||||
|
<p>Default:</p>
|
||||||
|
</section>
|
||||||
|
<section class="level5" id="mass_email">
|
||||||
|
<h5>mass_email <a class="headerlink" href="#mass_email">¶</a></h5>
|
||||||
|
<p><em>(>= 3.5.5)</em></p>
|
||||||
|
<p>When enabled, send one email to all attendee email addresses. When
|
||||||
|
disabled, send one email per attendee email address.</p>
|
||||||
|
<p>Default: <code>False</code></p>
|
||||||
|
</section>
|
||||||
|
<section class="level5" id="added_template">
|
||||||
|
<h5>added_template <a class="headerlink" href="#added_template">¶</a></h5>
|
||||||
|
<p><em>(>= 3.5.5)</em></p>
|
||||||
|
<p>Template to use for added/updated event email body.</p>
|
||||||
|
<p>The following placeholders will be replaced:</p>
|
||||||
|
<ul>
|
||||||
|
<li><code>$organizer_name</code>: Name of the organizer, or "Unknown
|
||||||
|
Organizer" if not set in event</li>
|
||||||
|
<li><code>$from_email</code>: Email address the email is sent from</li>
|
||||||
|
<li><code>$attendee_name</code>: Name of the attendee (email recipient),
|
||||||
|
or "everyone" if mass email enabled.</li>
|
||||||
|
<li><code>$event_name</code>: Name/summary of the event, or "No Title"
|
||||||
|
if not set in event</li>
|
||||||
|
<li><code>$event_start_time</code>: Start time of the event in ISO 8601
|
||||||
|
format</li>
|
||||||
|
<li><code>$event_end_time</code>: End time of the event in ISO 8601
|
||||||
|
format, or "No End Time" if the event has no end time</li>
|
||||||
|
<li><code>$event_location</code>: Location of the event, or "No Location
|
||||||
|
Specified" if not set in event</li>
|
||||||
|
</ul>
|
||||||
|
<p>Providing any words prefixed with $ not included in the list above
|
||||||
|
will result in an error.</p>
|
||||||
|
<p>Default:</p>
|
||||||
|
<pre><code>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.</code></pre>
|
||||||
|
</section>
|
||||||
|
<section class="level5" id="removed_template">
|
||||||
|
<h5>removed_template <a class="headerlink" href="#removed_template">¶</a></h5>
|
||||||
|
<p><em>(>= 3.5.5)</em></p>
|
||||||
|
<p>Template to use for deleted event email body.</p>
|
||||||
|
<p>The following placeholders will be replaced:</p>
|
||||||
|
<ul>
|
||||||
|
<li><code>$organizer_name</code>: Name of the organizer, or "Unknown
|
||||||
|
Organizer" if not set in event</li>
|
||||||
|
<li><code>$from_email</code>: Email address the email is sent from</li>
|
||||||
|
<li><code>$attendee_name</code>: Name of the attendee (email recipient),
|
||||||
|
or "everyone" if mass email enabled.</li>
|
||||||
|
<li><code>$event_name</code>: Name/summary of the event, or "No Title"
|
||||||
|
if not set in event</li>
|
||||||
|
<li><code>$event_start_time</code>: Start time of the event in ISO 8601
|
||||||
|
format</li>
|
||||||
|
<li><code>$event_end_time</code>: End time of the event in ISO 8601
|
||||||
|
format, or "No End Time" if the event has no end time</li>
|
||||||
|
<li><code>$event_location</code>: Location of the event, or "No Location
|
||||||
|
Specified" if not set in event</li>
|
||||||
|
</ul>
|
||||||
|
<p>Providing any words prefixed with $ not included in the list above
|
||||||
|
will result in an error.</p>
|
||||||
|
<p>Default:</p>
|
||||||
|
<pre><code>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.</code></pre>
|
||||||
|
</section>
|
||||||
</section>
|
</section>
|
||||||
<section class="level4" id="reporting">
|
<section class="level4" id="reporting">
|
||||||
<h4>reporting <a class="headerlink" href="#reporting">¶</a></h4>
|
<h4>reporting <a class="headerlink" href="#reporting">¶</a></h4>
|
||||||
|
@ -1669,47 +1789,47 @@ InfCloud</a>.</p>
|
||||||
calendars and address books. Use Radicale's web interface or a client
|
calendars and address books. Use Radicale's web interface or a client
|
||||||
with support for it (e.g. <strong>DAVx⁵</strong>).</p>
|
with support for it (e.g. <strong>DAVx⁵</strong>).</p>
|
||||||
<p>To create a new calendar run something like:</p>
|
<p>To create a new calendar run something like:</p>
|
||||||
<div class="sourceCode" id="cb43"><pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb43-1"><a aria-hidden="true" href="#cb43-1" tabindex="-1"></a><span class="ex">$</span> curl <span class="at">-u</span> user <span class="at">-X</span> MKCOL <span class="st">'http://localhost:5232/user/calendar'</span> <span class="at">--data</span> <span class="dt">\</span></span>
|
<div class="sourceCode" id="cb45"><pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb45-1"><a aria-hidden="true" href="#cb45-1" tabindex="-1"></a><span class="ex">$</span> curl <span class="at">-u</span> user <span class="at">-X</span> MKCOL <span class="st">'http://localhost:5232/user/calendar'</span> <span class="at">--data</span> <span class="dt">\</span></span>
|
||||||
<span id="cb43-2"><a aria-hidden="true" href="#cb43-2" tabindex="-1"></a><span class="st">'<?xml version="1.0" encoding="UTF-8" ?></span></span>
|
<span id="cb45-2"><a aria-hidden="true" href="#cb45-2" tabindex="-1"></a><span class="st">'<?xml version="1.0" encoding="UTF-8" ?></span></span>
|
||||||
<span id="cb43-3"><a aria-hidden="true" href="#cb43-3" tabindex="-1"></a><span class="st"><create xmlns="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav" xmlns:I="http://apple.com/ns/ical/"></span></span>
|
<span id="cb45-3"><a aria-hidden="true" href="#cb45-3" tabindex="-1"></a><span class="st"><create xmlns="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav" xmlns:I="http://apple.com/ns/ical/"></span></span>
|
||||||
<span id="cb43-4"><a aria-hidden="true" href="#cb43-4" tabindex="-1"></a><span class="st"> <set></span></span>
|
<span id="cb45-4"><a aria-hidden="true" href="#cb45-4" tabindex="-1"></a><span class="st"> <set></span></span>
|
||||||
<span id="cb43-5"><a aria-hidden="true" href="#cb43-5" tabindex="-1"></a><span class="st"> <prop></span></span>
|
<span id="cb45-5"><a aria-hidden="true" href="#cb45-5" tabindex="-1"></a><span class="st"> <prop></span></span>
|
||||||
<span id="cb43-6"><a aria-hidden="true" href="#cb43-6" tabindex="-1"></a><span class="st"> <resourcetype></span></span>
|
<span id="cb45-6"><a aria-hidden="true" href="#cb45-6" tabindex="-1"></a><span class="st"> <resourcetype></span></span>
|
||||||
<span id="cb43-7"><a aria-hidden="true" href="#cb43-7" tabindex="-1"></a><span class="st"> <collection /></span></span>
|
<span id="cb45-7"><a aria-hidden="true" href="#cb45-7" tabindex="-1"></a><span class="st"> <collection /></span></span>
|
||||||
<span id="cb43-8"><a aria-hidden="true" href="#cb43-8" tabindex="-1"></a><span class="st"> <C:calendar /></span></span>
|
<span id="cb45-8"><a aria-hidden="true" href="#cb45-8" tabindex="-1"></a><span class="st"> <C:calendar /></span></span>
|
||||||
<span id="cb43-9"><a aria-hidden="true" href="#cb43-9" tabindex="-1"></a><span class="st"> </resourcetype></span></span>
|
<span id="cb45-9"><a aria-hidden="true" href="#cb45-9" tabindex="-1"></a><span class="st"> </resourcetype></span></span>
|
||||||
<span id="cb43-10"><a aria-hidden="true" href="#cb43-10" tabindex="-1"></a><span class="st"> <C:supported-calendar-component-set></span></span>
|
<span id="cb45-10"><a aria-hidden="true" href="#cb45-10" tabindex="-1"></a><span class="st"> <C:supported-calendar-component-set></span></span>
|
||||||
<span id="cb43-11"><a aria-hidden="true" href="#cb43-11" tabindex="-1"></a><span class="st"> <C:comp name="VEVENT" /></span></span>
|
<span id="cb45-11"><a aria-hidden="true" href="#cb45-11" tabindex="-1"></a><span class="st"> <C:comp name="VEVENT" /></span></span>
|
||||||
<span id="cb43-12"><a aria-hidden="true" href="#cb43-12" tabindex="-1"></a><span class="st"> <C:comp name="VJOURNAL" /></span></span>
|
<span id="cb45-12"><a aria-hidden="true" href="#cb45-12" tabindex="-1"></a><span class="st"> <C:comp name="VJOURNAL" /></span></span>
|
||||||
<span id="cb43-13"><a aria-hidden="true" href="#cb43-13" tabindex="-1"></a><span class="st"> <C:comp name="VTODO" /></span></span>
|
<span id="cb45-13"><a aria-hidden="true" href="#cb45-13" tabindex="-1"></a><span class="st"> <C:comp name="VTODO" /></span></span>
|
||||||
<span id="cb43-14"><a aria-hidden="true" href="#cb43-14" tabindex="-1"></a><span class="st"> </C:supported-calendar-component-set></span></span>
|
<span id="cb45-14"><a aria-hidden="true" href="#cb45-14" tabindex="-1"></a><span class="st"> </C:supported-calendar-component-set></span></span>
|
||||||
<span id="cb43-15"><a aria-hidden="true" href="#cb43-15" tabindex="-1"></a><span class="st"> <displayname>Calendar</displayname></span></span>
|
<span id="cb45-15"><a aria-hidden="true" href="#cb45-15" tabindex="-1"></a><span class="st"> <displayname>Calendar</displayname></span></span>
|
||||||
<span id="cb43-16"><a aria-hidden="true" href="#cb43-16" tabindex="-1"></a><span class="st"> <C:calendar-description>Example calendar</C:calendar-description></span></span>
|
<span id="cb45-16"><a aria-hidden="true" href="#cb45-16" tabindex="-1"></a><span class="st"> <C:calendar-description>Example calendar</C:calendar-description></span></span>
|
||||||
<span id="cb43-17"><a aria-hidden="true" href="#cb43-17" tabindex="-1"></a><span class="st"> <I:calendar-color>#ff0000ff</I:calendar-color></span></span>
|
<span id="cb45-17"><a aria-hidden="true" href="#cb45-17" tabindex="-1"></a><span class="st"> <I:calendar-color>#ff0000ff</I:calendar-color></span></span>
|
||||||
<span id="cb43-18"><a aria-hidden="true" href="#cb43-18" tabindex="-1"></a><span class="st"> </prop></span></span>
|
<span id="cb45-18"><a aria-hidden="true" href="#cb45-18" tabindex="-1"></a><span class="st"> </prop></span></span>
|
||||||
<span id="cb43-19"><a aria-hidden="true" href="#cb43-19" tabindex="-1"></a><span class="st"> </set></span></span>
|
<span id="cb45-19"><a aria-hidden="true" href="#cb45-19" tabindex="-1"></a><span class="st"> </set></span></span>
|
||||||
<span id="cb43-20"><a aria-hidden="true" href="#cb43-20" tabindex="-1"></a><span class="st"></create>'</span></span></code></pre></div>
|
<span id="cb45-20"><a aria-hidden="true" href="#cb45-20" tabindex="-1"></a><span class="st"></create>'</span></span></code></pre></div>
|
||||||
<p>To create a new address book run something like:</p>
|
<p>To create a new address book run something like:</p>
|
||||||
<div class="sourceCode" id="cb44"><pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb44-1"><a aria-hidden="true" href="#cb44-1" tabindex="-1"></a><span class="ex">$</span> curl <span class="at">-u</span> user <span class="at">-X</span> MKCOL <span class="st">'http://localhost:5232/user/addressbook'</span> <span class="at">--data</span> <span class="dt">\</span></span>
|
<div class="sourceCode" id="cb46"><pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb46-1"><a aria-hidden="true" href="#cb46-1" tabindex="-1"></a><span class="ex">$</span> curl <span class="at">-u</span> user <span class="at">-X</span> MKCOL <span class="st">'http://localhost:5232/user/addressbook'</span> <span class="at">--data</span> <span class="dt">\</span></span>
|
||||||
<span id="cb44-2"><a aria-hidden="true" href="#cb44-2" tabindex="-1"></a><span class="st">'<?xml version="1.0" encoding="UTF-8" ?></span></span>
|
<span id="cb46-2"><a aria-hidden="true" href="#cb46-2" tabindex="-1"></a><span class="st">'<?xml version="1.0" encoding="UTF-8" ?></span></span>
|
||||||
<span id="cb44-3"><a aria-hidden="true" href="#cb44-3" tabindex="-1"></a><span class="st"><create xmlns="DAV:" xmlns:CR="urn:ietf:params:xml:ns:carddav"></span></span>
|
<span id="cb46-3"><a aria-hidden="true" href="#cb46-3" tabindex="-1"></a><span class="st"><create xmlns="DAV:" xmlns:CR="urn:ietf:params:xml:ns:carddav"></span></span>
|
||||||
<span id="cb44-4"><a aria-hidden="true" href="#cb44-4" tabindex="-1"></a><span class="st"> <set></span></span>
|
<span id="cb46-4"><a aria-hidden="true" href="#cb46-4" tabindex="-1"></a><span class="st"> <set></span></span>
|
||||||
<span id="cb44-5"><a aria-hidden="true" href="#cb44-5" tabindex="-1"></a><span class="st"> <prop></span></span>
|
<span id="cb46-5"><a aria-hidden="true" href="#cb46-5" tabindex="-1"></a><span class="st"> <prop></span></span>
|
||||||
<span id="cb44-6"><a aria-hidden="true" href="#cb44-6" tabindex="-1"></a><span class="st"> <resourcetype></span></span>
|
<span id="cb46-6"><a aria-hidden="true" href="#cb46-6" tabindex="-1"></a><span class="st"> <resourcetype></span></span>
|
||||||
<span id="cb44-7"><a aria-hidden="true" href="#cb44-7" tabindex="-1"></a><span class="st"> <collection /></span></span>
|
<span id="cb46-7"><a aria-hidden="true" href="#cb46-7" tabindex="-1"></a><span class="st"> <collection /></span></span>
|
||||||
<span id="cb44-8"><a aria-hidden="true" href="#cb44-8" tabindex="-1"></a><span class="st"> <CR:addressbook /></span></span>
|
<span id="cb46-8"><a aria-hidden="true" href="#cb46-8" tabindex="-1"></a><span class="st"> <CR:addressbook /></span></span>
|
||||||
<span id="cb44-9"><a aria-hidden="true" href="#cb44-9" tabindex="-1"></a><span class="st"> </resourcetype></span></span>
|
<span id="cb46-9"><a aria-hidden="true" href="#cb46-9" tabindex="-1"></a><span class="st"> </resourcetype></span></span>
|
||||||
<span id="cb44-10"><a aria-hidden="true" href="#cb44-10" tabindex="-1"></a><span class="st"> <displayname>Address book</displayname></span></span>
|
<span id="cb46-10"><a aria-hidden="true" href="#cb46-10" tabindex="-1"></a><span class="st"> <displayname>Address book</displayname></span></span>
|
||||||
<span id="cb44-11"><a aria-hidden="true" href="#cb44-11" tabindex="-1"></a><span class="st"> <CR:addressbook-description>Example address book</CR:addressbook-description></span></span>
|
<span id="cb46-11"><a aria-hidden="true" href="#cb46-11" tabindex="-1"></a><span class="st"> <CR:addressbook-description>Example address book</CR:addressbook-description></span></span>
|
||||||
<span id="cb44-12"><a aria-hidden="true" href="#cb44-12" tabindex="-1"></a><span class="st"> </prop></span></span>
|
<span id="cb46-12"><a aria-hidden="true" href="#cb46-12" tabindex="-1"></a><span class="st"> </prop></span></span>
|
||||||
<span id="cb44-13"><a aria-hidden="true" href="#cb44-13" tabindex="-1"></a><span class="st"> </set></span></span>
|
<span id="cb46-13"><a aria-hidden="true" href="#cb46-13" tabindex="-1"></a><span class="st"> </set></span></span>
|
||||||
<span id="cb44-14"><a aria-hidden="true" href="#cb44-14" tabindex="-1"></a><span class="st"></create>'</span></span></code></pre></div>
|
<span id="cb46-14"><a aria-hidden="true" href="#cb46-14" tabindex="-1"></a><span class="st"></create>'</span></span></code></pre></div>
|
||||||
<p>The collection <code>/USERNAME</code> will be created automatically,
|
<p>The collection <code>/USERNAME</code> will be created automatically,
|
||||||
when the user authenticates to Radicale for the first time. Clients with
|
when the user authenticates to Radicale for the first time. Clients with
|
||||||
automatic discovery of collections will only show calendars and address
|
automatic discovery of collections will only show calendars and address
|
||||||
books that are direct children of the path <code>/USERNAME/</code>.</p>
|
books that are direct children of the path <code>/USERNAME/</code>.</p>
|
||||||
<p>Delete the collections by running something like:</p>
|
<p>Delete the collections by running something like:</p>
|
||||||
<div class="sourceCode" id="cb45"><pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb45-1"><a aria-hidden="true" href="#cb45-1" tabindex="-1"></a><span class="ex">curl</span> <span class="at">-u</span> user <span class="at">-X</span> DELETE <span class="st">'http://localhost:5232/user/calendar'</span></span></code></pre></div>
|
<div class="sourceCode" id="cb47"><pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb47-1"><a aria-hidden="true" href="#cb47-1" tabindex="-1"></a><span class="ex">curl</span> <span class="at">-u</span> user <span class="at">-X</span> DELETE <span class="st">'http://localhost:5232/user/calendar'</span></span></code></pre></div>
|
||||||
<p>Note: requires config/option
|
<p>Note: requires config/option
|
||||||
<code>permit_delete_collection = True</code></p>
|
<code>permit_delete_collection = True</code></p>
|
||||||
</section>
|
</section>
|
||||||
|
@ -1725,24 +1845,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
|
collections and will not show them to the user. This is only useful if
|
||||||
you access calendars and address books directly via URL.</p>
|
you access calendars and address books directly via URL.</p>
|
||||||
<p>An example rights file:</p>
|
<p>An example rights file:</p>
|
||||||
<div class="sourceCode" id="cb46"><pre class="sourceCode ini"><code class="sourceCode ini"><span id="cb46-1"><a aria-hidden="true" href="#cb46-1" tabindex="-1"></a><span class="co"># Allow reading root collection for authenticated users</span></span>
|
<div class="sourceCode" id="cb48"><pre class="sourceCode ini"><code class="sourceCode ini"><span id="cb48-1"><a aria-hidden="true" href="#cb48-1" tabindex="-1"></a><span class="co"># Allow reading root collection for authenticated users</span></span>
|
||||||
<span id="cb46-2"><a aria-hidden="true" href="#cb46-2" tabindex="-1"></a><span class="kw">[root]</span></span>
|
<span id="cb48-2"><a aria-hidden="true" href="#cb48-2" tabindex="-1"></a><span class="kw">[root]</span></span>
|
||||||
<span id="cb46-3"><a aria-hidden="true" href="#cb46-3" tabindex="-1"></a><span class="dt">user: .+</span></span>
|
<span id="cb48-3"><a aria-hidden="true" href="#cb48-3" tabindex="-1"></a><span class="dt">user: .+</span></span>
|
||||||
<span id="cb46-4"><a aria-hidden="true" href="#cb46-4" tabindex="-1"></a><span class="dt">collection:</span></span>
|
<span id="cb48-4"><a aria-hidden="true" href="#cb48-4" tabindex="-1"></a><span class="dt">collection:</span></span>
|
||||||
<span id="cb46-5"><a aria-hidden="true" href="#cb46-5" tabindex="-1"></a><span class="dt">permissions: R</span></span>
|
<span id="cb48-5"><a aria-hidden="true" href="#cb48-5" tabindex="-1"></a><span class="dt">permissions: R</span></span>
|
||||||
<span id="cb46-6"><a aria-hidden="true" href="#cb46-6" tabindex="-1"></a></span>
|
<span id="cb48-6"><a aria-hidden="true" href="#cb48-6" tabindex="-1"></a></span>
|
||||||
<span id="cb46-7"><a aria-hidden="true" href="#cb46-7" tabindex="-1"></a><span class="co"># Allow reading and writing principal collection (same as username)</span></span>
|
<span id="cb48-7"><a aria-hidden="true" href="#cb48-7" tabindex="-1"></a><span class="co"># Allow reading and writing principal collection (same as username)</span></span>
|
||||||
<span id="cb46-8"><a aria-hidden="true" href="#cb46-8" tabindex="-1"></a><span class="kw">[principal]</span></span>
|
<span id="cb48-8"><a aria-hidden="true" href="#cb48-8" tabindex="-1"></a><span class="kw">[principal]</span></span>
|
||||||
<span id="cb46-9"><a aria-hidden="true" href="#cb46-9" tabindex="-1"></a><span class="dt">user: .+</span></span>
|
<span id="cb48-9"><a aria-hidden="true" href="#cb48-9" tabindex="-1"></a><span class="dt">user: .+</span></span>
|
||||||
<span id="cb46-10"><a aria-hidden="true" href="#cb46-10" tabindex="-1"></a><span class="dt">collection: {user}</span></span>
|
<span id="cb48-10"><a aria-hidden="true" href="#cb48-10" tabindex="-1"></a><span class="dt">collection: {user}</span></span>
|
||||||
<span id="cb46-11"><a aria-hidden="true" href="#cb46-11" tabindex="-1"></a><span class="dt">permissions: RW</span></span>
|
<span id="cb48-11"><a aria-hidden="true" href="#cb48-11" tabindex="-1"></a><span class="dt">permissions: RW</span></span>
|
||||||
<span id="cb46-12"><a aria-hidden="true" href="#cb46-12" tabindex="-1"></a></span>
|
<span id="cb48-12"><a aria-hidden="true" href="#cb48-12" tabindex="-1"></a></span>
|
||||||
<span id="cb46-13"><a aria-hidden="true" href="#cb46-13" tabindex="-1"></a><span class="co"># Allow reading and writing calendars and address books that are direct</span></span>
|
<span id="cb48-13"><a aria-hidden="true" href="#cb48-13" tabindex="-1"></a><span class="co"># Allow reading and writing calendars and address books that are direct</span></span>
|
||||||
<span id="cb46-14"><a aria-hidden="true" href="#cb46-14" tabindex="-1"></a><span class="co"># children of the principal collection</span></span>
|
<span id="cb48-14"><a aria-hidden="true" href="#cb48-14" tabindex="-1"></a><span class="co"># children of the principal collection</span></span>
|
||||||
<span id="cb46-15"><a aria-hidden="true" href="#cb46-15" tabindex="-1"></a><span class="kw">[calendars]</span></span>
|
<span id="cb48-15"><a aria-hidden="true" href="#cb48-15" tabindex="-1"></a><span class="kw">[calendars]</span></span>
|
||||||
<span id="cb46-16"><a aria-hidden="true" href="#cb46-16" tabindex="-1"></a><span class="dt">user: .+</span></span>
|
<span id="cb48-16"><a aria-hidden="true" href="#cb48-16" tabindex="-1"></a><span class="dt">user: .+</span></span>
|
||||||
<span id="cb46-17"><a aria-hidden="true" href="#cb46-17" tabindex="-1"></a><span class="dt">collection: {user}/</span><span class="kw">[^/]</span><span class="dt">+</span></span>
|
<span id="cb48-17"><a aria-hidden="true" href="#cb48-17" tabindex="-1"></a><span class="dt">collection: {user}/</span><span class="kw">[^/]</span><span class="dt">+</span></span>
|
||||||
<span id="cb46-18"><a aria-hidden="true" href="#cb46-18" tabindex="-1"></a><span class="dt">permissions: rw</span></span></code></pre></div>
|
<span id="cb48-18"><a aria-hidden="true" href="#cb48-18" tabindex="-1"></a><span class="dt">permissions: rw</span></span></code></pre></div>
|
||||||
<p>The titles of the sections are ignored (but must be unique). The keys
|
<p>The titles of the sections are ignored (but must be unique). The keys
|
||||||
<code>user</code> and <code>collection</code> contain regular
|
<code>user</code> and <code>collection</code> contain regular
|
||||||
expressions, that are matched against the username and the path of the
|
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
|
||||||
<h5>Linux shell scripts <a class="headerlink" href="#linux-shell-scripts">¶</a></h5>
|
<h5>Linux shell scripts <a class="headerlink" href="#linux-shell-scripts">¶</a></h5>
|
||||||
<p>Use the <a href="https://manpages.debian.org/unstable/util-linux/flock.1.en.html">flock</a>
|
<p>Use the <a href="https://manpages.debian.org/unstable/util-linux/flock.1.en.html">flock</a>
|
||||||
utility.</p>
|
utility.</p>
|
||||||
<div class="sourceCode" id="cb47"><pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb47-1"><a aria-hidden="true" href="#cb47-1" tabindex="-1"></a><span class="co"># Exclusive</span></span>
|
<div class="sourceCode" id="cb49"><pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb49-1"><a aria-hidden="true" href="#cb49-1" tabindex="-1"></a><span class="co"># Exclusive</span></span>
|
||||||
<span id="cb47-2"><a aria-hidden="true" href="#cb47-2" tabindex="-1"></a><span class="ex">$</span> flock <span class="at">--exclusive</span> /path/to/storage/.Radicale.lock COMMAND</span>
|
<span id="cb49-2"><a aria-hidden="true" href="#cb49-2" tabindex="-1"></a><span class="ex">$</span> flock <span class="at">--exclusive</span> /path/to/storage/.Radicale.lock COMMAND</span>
|
||||||
<span id="cb47-3"><a aria-hidden="true" href="#cb47-3" tabindex="-1"></a><span class="co"># Shared</span></span>
|
<span id="cb49-3"><a aria-hidden="true" href="#cb49-3" tabindex="-1"></a><span class="co"># Shared</span></span>
|
||||||
<span id="cb47-4"><a aria-hidden="true" href="#cb47-4" tabindex="-1"></a><span class="ex">$</span> flock <span class="at">--shared</span> /path/to/storage/.Radicale.lock COMMAND</span></code></pre></div>
|
<span id="cb49-4"><a aria-hidden="true" href="#cb49-4" tabindex="-1"></a><span class="ex">$</span> flock <span class="at">--shared</span> /path/to/storage/.Radicale.lock COMMAND</span></code></pre></div>
|
||||||
</section>
|
</section>
|
||||||
<section class="level5" id="linux-and-macos">
|
<section class="level5" id="linux-and-macos">
|
||||||
<h5>Linux and MacOS <a class="headerlink" href="#linux-and-macos">¶</a></h5>
|
<h5>Linux and MacOS <a class="headerlink" href="#linux-and-macos">¶</a></h5>
|
||||||
|
@ -1857,11 +1977,11 @@ folder in the file system storage (e.g.
|
||||||
clients that the collection is a calendar, you have to create the file
|
clients that the collection is a calendar, you have to create the file
|
||||||
<code>.Radicale.props</code> with the following content in the
|
<code>.Radicale.props</code> with the following content in the
|
||||||
folder:</p>
|
folder:</p>
|
||||||
<div class="sourceCode" id="cb48"><pre class="sourceCode json"><code class="sourceCode json"><span id="cb48-1"><a aria-hidden="true" href="#cb48-1" tabindex="-1"></a><span class="fu">{</span><span class="dt">"tag"</span><span class="fu">:</span> <span class="st">"VCALENDAR"</span><span class="fu">}</span></span></code></pre></div>
|
<div class="sourceCode" id="cb50"><pre class="sourceCode json"><code class="sourceCode json"><span id="cb50-1"><a aria-hidden="true" href="#cb50-1" tabindex="-1"></a><span class="fu">{</span><span class="dt">"tag"</span><span class="fu">:</span> <span class="st">"VCALENDAR"</span><span class="fu">}</span></span></code></pre></div>
|
||||||
<p>The calendar is now available at the URL path
|
<p>The calendar is now available at the URL path
|
||||||
<code>/user/calendar</code>. For address books the file must
|
<code>/user/calendar</code>. For address books the file must
|
||||||
contain:</p>
|
contain:</p>
|
||||||
<div class="sourceCode" id="cb49"><pre class="sourceCode json"><code class="sourceCode json"><span id="cb49-1"><a aria-hidden="true" href="#cb49-1" tabindex="-1"></a><span class="fu">{</span><span class="dt">"tag"</span><span class="fu">:</span> <span class="st">"VADDRESSBOOK"</span><span class="fu">}</span></span></code></pre></div>
|
<div class="sourceCode" id="cb51"><pre class="sourceCode json"><code class="sourceCode json"><span id="cb51-1"><a aria-hidden="true" href="#cb51-1" tabindex="-1"></a><span class="fu">{</span><span class="dt">"tag"</span><span class="fu">:</span> <span class="st">"VADDRESSBOOK"</span><span class="fu">}</span></span></code></pre></div>
|
||||||
<p>Calendar and address book collections must not have any child
|
<p>Calendar and address book collections must not have any child
|
||||||
collections. Clients with automatic discovery of collections will only
|
collections. Clients with automatic discovery of collections will only
|
||||||
show calendars and address books that are direct children of the path
|
show calendars and address books that are direct children of the path
|
||||||
|
@ -1991,49 +2111,49 @@ password.</p>
|
||||||
modules is <a href="https://docs.python.org/3/distutils/setupscript.html">Distutils</a>.
|
modules is <a href="https://docs.python.org/3/distutils/setupscript.html">Distutils</a>.
|
||||||
For a minimal setup create the file <code>setup.py</code> with the
|
For a minimal setup create the file <code>setup.py</code> with the
|
||||||
following content in an empty folder:</p>
|
following content in an empty folder:</p>
|
||||||
<div class="sourceCode" id="cb50"><pre class="sourceCode python"><code class="sourceCode python"><span id="cb50-1"><a aria-hidden="true" href="#cb50-1" tabindex="-1"></a><span class="co">#!/usr/bin/env python3</span></span>
|
<div class="sourceCode" id="cb52"><pre class="sourceCode python"><code class="sourceCode python"><span id="cb52-1"><a aria-hidden="true" href="#cb52-1" tabindex="-1"></a><span class="co">#!/usr/bin/env python3</span></span>
|
||||||
<span id="cb50-2"><a aria-hidden="true" href="#cb50-2" tabindex="-1"></a></span>
|
<span id="cb52-2"><a aria-hidden="true" href="#cb52-2" tabindex="-1"></a></span>
|
||||||
<span id="cb50-3"><a aria-hidden="true" href="#cb50-3" tabindex="-1"></a><span class="im">from</span> distutils.core <span class="im">import</span> setup</span>
|
<span id="cb52-3"><a aria-hidden="true" href="#cb52-3" tabindex="-1"></a><span class="im">from</span> distutils.core <span class="im">import</span> setup</span>
|
||||||
<span id="cb50-4"><a aria-hidden="true" href="#cb50-4" tabindex="-1"></a></span>
|
<span id="cb52-4"><a aria-hidden="true" href="#cb52-4" tabindex="-1"></a></span>
|
||||||
<span id="cb50-5"><a aria-hidden="true" href="#cb50-5" tabindex="-1"></a>setup(name<span class="op">=</span><span class="st">"radicale_static_password_auth"</span>,</span>
|
<span id="cb52-5"><a aria-hidden="true" href="#cb52-5" tabindex="-1"></a>setup(name<span class="op">=</span><span class="st">"radicale_static_password_auth"</span>,</span>
|
||||||
<span id="cb50-6"><a aria-hidden="true" href="#cb50-6" tabindex="-1"></a> packages<span class="op">=</span>[<span class="st">"radicale_static_password_auth"</span>])</span></code></pre></div>
|
<span id="cb52-6"><a aria-hidden="true" href="#cb52-6" tabindex="-1"></a> packages<span class="op">=</span>[<span class="st">"radicale_static_password_auth"</span>])</span></code></pre></div>
|
||||||
<p>In the same folder create the sub-folder
|
<p>In the same folder create the sub-folder
|
||||||
<code>radicale_static_password_auth</code>. The folder must have the
|
<code>radicale_static_password_auth</code>. The folder must have the
|
||||||
same name as specified in <code>packages</code> above.</p>
|
same name as specified in <code>packages</code> above.</p>
|
||||||
<p>Create the file <code>__init__.py</code> in the
|
<p>Create the file <code>__init__.py</code> in the
|
||||||
<code>radicale_static_password_auth</code> folder with the following
|
<code>radicale_static_password_auth</code> folder with the following
|
||||||
content:</p>
|
content:</p>
|
||||||
<div class="sourceCode" id="cb51"><pre class="sourceCode python"><code class="sourceCode python"><span id="cb51-1"><a aria-hidden="true" href="#cb51-1" tabindex="-1"></a><span class="im">from</span> radicale.auth <span class="im">import</span> BaseAuth</span>
|
<div class="sourceCode" id="cb53"><pre class="sourceCode python"><code class="sourceCode python"><span id="cb53-1"><a aria-hidden="true" href="#cb53-1" tabindex="-1"></a><span class="im">from</span> radicale.auth <span class="im">import</span> BaseAuth</span>
|
||||||
<span id="cb51-2"><a aria-hidden="true" href="#cb51-2" tabindex="-1"></a><span class="im">from</span> radicale.log <span class="im">import</span> logger</span>
|
<span id="cb53-2"><a aria-hidden="true" href="#cb53-2" tabindex="-1"></a><span class="im">from</span> radicale.log <span class="im">import</span> logger</span>
|
||||||
<span id="cb51-3"><a aria-hidden="true" href="#cb51-3" tabindex="-1"></a></span>
|
<span id="cb53-3"><a aria-hidden="true" href="#cb53-3" tabindex="-1"></a></span>
|
||||||
<span id="cb51-4"><a aria-hidden="true" href="#cb51-4" tabindex="-1"></a>PLUGIN_CONFIG_SCHEMA <span class="op">=</span> {<span class="st">"auth"</span>: {</span>
|
<span id="cb53-4"><a aria-hidden="true" href="#cb53-4" tabindex="-1"></a>PLUGIN_CONFIG_SCHEMA <span class="op">=</span> {<span class="st">"auth"</span>: {</span>
|
||||||
<span id="cb51-5"><a aria-hidden="true" href="#cb51-5" tabindex="-1"></a> <span class="st">"password"</span>: {<span class="st">"value"</span>: <span class="st">""</span>, <span class="st">"type"</span>: <span class="bu">str</span>}}}</span>
|
<span id="cb53-5"><a aria-hidden="true" href="#cb53-5" tabindex="-1"></a> <span class="st">"password"</span>: {<span class="st">"value"</span>: <span class="st">""</span>, <span class="st">"type"</span>: <span class="bu">str</span>}}}</span>
|
||||||
<span id="cb51-6"><a aria-hidden="true" href="#cb51-6" tabindex="-1"></a></span>
|
<span id="cb53-6"><a aria-hidden="true" href="#cb53-6" tabindex="-1"></a></span>
|
||||||
<span id="cb51-7"><a aria-hidden="true" href="#cb51-7" tabindex="-1"></a></span>
|
<span id="cb53-7"><a aria-hidden="true" href="#cb53-7" tabindex="-1"></a></span>
|
||||||
<span id="cb51-8"><a aria-hidden="true" href="#cb51-8" tabindex="-1"></a><span class="kw">class</span> Auth(BaseAuth):</span>
|
<span id="cb53-8"><a aria-hidden="true" href="#cb53-8" tabindex="-1"></a><span class="kw">class</span> Auth(BaseAuth):</span>
|
||||||
<span id="cb51-9"><a aria-hidden="true" href="#cb51-9" tabindex="-1"></a> <span class="kw">def</span> <span class="fu">__init__</span>(<span class="va">self</span>, configuration):</span>
|
<span id="cb53-9"><a aria-hidden="true" href="#cb53-9" tabindex="-1"></a> <span class="kw">def</span> <span class="fu">__init__</span>(<span class="va">self</span>, configuration):</span>
|
||||||
<span id="cb51-10"><a aria-hidden="true" href="#cb51-10" tabindex="-1"></a> <span class="bu">super</span>().<span class="fu">__init__</span>(configuration.copy(PLUGIN_CONFIG_SCHEMA))</span>
|
<span id="cb53-10"><a aria-hidden="true" href="#cb53-10" tabindex="-1"></a> <span class="bu">super</span>().<span class="fu">__init__</span>(configuration.copy(PLUGIN_CONFIG_SCHEMA))</span>
|
||||||
<span id="cb51-11"><a aria-hidden="true" href="#cb51-11" tabindex="-1"></a></span>
|
<span id="cb53-11"><a aria-hidden="true" href="#cb53-11" tabindex="-1"></a></span>
|
||||||
<span id="cb51-12"><a aria-hidden="true" href="#cb51-12" tabindex="-1"></a> <span class="kw">def</span> _login(<span class="va">self</span>, login, password):</span>
|
<span id="cb53-12"><a aria-hidden="true" href="#cb53-12" tabindex="-1"></a> <span class="kw">def</span> _login(<span class="va">self</span>, login, password):</span>
|
||||||
<span id="cb51-13"><a aria-hidden="true" href="#cb51-13" tabindex="-1"></a> <span class="co"># Get password from configuration option</span></span>
|
<span id="cb53-13"><a aria-hidden="true" href="#cb53-13" tabindex="-1"></a> <span class="co"># Get password from configuration option</span></span>
|
||||||
<span id="cb51-14"><a aria-hidden="true" href="#cb51-14" tabindex="-1"></a> static_password <span class="op">=</span> <span class="va">self</span>.configuration.get(<span class="st">"auth"</span>, <span class="st">"password"</span>)</span>
|
<span id="cb53-14"><a aria-hidden="true" href="#cb53-14" tabindex="-1"></a> static_password <span class="op">=</span> <span class="va">self</span>.configuration.get(<span class="st">"auth"</span>, <span class="st">"password"</span>)</span>
|
||||||
<span id="cb51-15"><a aria-hidden="true" href="#cb51-15" tabindex="-1"></a> <span class="co"># Check authentication</span></span>
|
<span id="cb53-15"><a aria-hidden="true" href="#cb53-15" tabindex="-1"></a> <span class="co"># Check authentication</span></span>
|
||||||
<span id="cb51-16"><a aria-hidden="true" href="#cb51-16" tabindex="-1"></a> logger.info(<span class="st">"Login attempt by </span><span class="sc">%r</span><span class="st"> with password </span><span class="sc">%r</span><span class="st">"</span>,</span>
|
<span id="cb53-16"><a aria-hidden="true" href="#cb53-16" tabindex="-1"></a> logger.info(<span class="st">"Login attempt by </span><span class="sc">%r</span><span class="st"> with password </span><span class="sc">%r</span><span class="st">"</span>,</span>
|
||||||
<span id="cb51-17"><a aria-hidden="true" href="#cb51-17" tabindex="-1"></a> login, password)</span>
|
<span id="cb53-17"><a aria-hidden="true" href="#cb53-17" tabindex="-1"></a> login, password)</span>
|
||||||
<span id="cb51-18"><a aria-hidden="true" href="#cb51-18" tabindex="-1"></a> <span class="cf">if</span> password <span class="op">==</span> static_password:</span>
|
<span id="cb53-18"><a aria-hidden="true" href="#cb53-18" tabindex="-1"></a> <span class="cf">if</span> password <span class="op">==</span> static_password:</span>
|
||||||
<span id="cb51-19"><a aria-hidden="true" href="#cb51-19" tabindex="-1"></a> <span class="cf">return</span> login</span>
|
<span id="cb53-19"><a aria-hidden="true" href="#cb53-19" tabindex="-1"></a> <span class="cf">return</span> login</span>
|
||||||
<span id="cb51-20"><a aria-hidden="true" href="#cb51-20" tabindex="-1"></a> <span class="cf">return</span> <span class="st">""</span></span></code></pre></div>
|
<span id="cb53-20"><a aria-hidden="true" href="#cb53-20" tabindex="-1"></a> <span class="cf">return</span> <span class="st">""</span></span></code></pre></div>
|
||||||
<p>Install the python module by running the following command in the
|
<p>Install the python module by running the following command in the
|
||||||
same folder as <code>setup.py</code>:</p>
|
same folder as <code>setup.py</code>:</p>
|
||||||
<div class="sourceCode" id="cb52"><pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb52-1"><a aria-hidden="true" href="#cb52-1" tabindex="-1"></a><span class="ex">python3</span> <span class="at">-m</span> pip install .</span></code></pre></div>
|
<div class="sourceCode" id="cb54"><pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb54-1"><a aria-hidden="true" href="#cb54-1" tabindex="-1"></a><span class="ex">python3</span> <span class="at">-m</span> pip install .</span></code></pre></div>
|
||||||
<p>To make use this great creation in Radicale, set the configuration
|
<p>To make use this great creation in Radicale, set the configuration
|
||||||
option <code>type</code> in the <code>auth</code> section to
|
option <code>type</code> in the <code>auth</code> section to
|
||||||
<code>radicale_static_password_auth</code>:</p>
|
<code>radicale_static_password_auth</code>:</p>
|
||||||
<div class="sourceCode" id="cb53"><pre class="sourceCode ini"><code class="sourceCode ini"><span id="cb53-1"><a aria-hidden="true" href="#cb53-1" tabindex="-1"></a><span class="kw">[auth]</span></span>
|
<div class="sourceCode" id="cb55"><pre class="sourceCode ini"><code class="sourceCode ini"><span id="cb55-1"><a aria-hidden="true" href="#cb55-1" tabindex="-1"></a><span class="kw">[auth]</span></span>
|
||||||
<span id="cb53-2"><a aria-hidden="true" href="#cb53-2" tabindex="-1"></a><span class="dt">type </span><span class="ot">=</span><span class="st"> radicale_static_password_auth</span></span>
|
<span id="cb55-2"><a aria-hidden="true" href="#cb55-2" tabindex="-1"></a><span class="dt">type </span><span class="ot">=</span><span class="st"> radicale_static_password_auth</span></span>
|
||||||
<span id="cb53-3"><a aria-hidden="true" href="#cb53-3" tabindex="-1"></a><span class="dt">password </span><span class="ot">=</span><span class="st"> secret</span></span></code></pre></div>
|
<span id="cb55-3"><a aria-hidden="true" href="#cb55-3" tabindex="-1"></a><span class="dt">password </span><span class="ot">=</span><span class="st"> secret</span></span></code></pre></div>
|
||||||
<p>You can uninstall the module with:</p>
|
<p>You can uninstall the module with:</p>
|
||||||
<div class="sourceCode" id="cb54"><pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb54-1"><a aria-hidden="true" href="#cb54-1" tabindex="-1"></a><span class="ex">python3</span> <span class="at">-m</span> pip uninstall radicale_static_password_auth</span></code></pre></div>
|
<div class="sourceCode" id="cb56"><pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb56-1"><a aria-hidden="true" href="#cb56-1" tabindex="-1"></a><span class="ex">python3</span> <span class="at">-m</span> pip uninstall radicale_static_password_auth</span></code></pre></div>
|
||||||
</section>
|
</section>
|
||||||
<section class="level4" id="authentication-plugins">
|
<section class="level4" id="authentication-plugins">
|
||||||
<h4>Authentication plugins <a class="headerlink" href="#authentication-plugins">¶</a></h4>
|
<h4>Authentication plugins <a class="headerlink" href="#authentication-plugins">¶</a></h4>
|
||||||
|
@ -2092,14 +2212,14 @@ you want to add new features, fix bugs or update the documentation.</p>
|
||||||
<h4>PyPI <a class="headerlink" href="#pypi">¶</a></h4>
|
<h4>PyPI <a class="headerlink" href="#pypi">¶</a></h4>
|
||||||
<p>Radicale is <a href="https://pypi.python.org/pypi/Radicale/">available on PyPI</a>. To
|
<p>Radicale is <a href="https://pypi.python.org/pypi/Radicale/">available on PyPI</a>. To
|
||||||
install, just type as superuser:</p>
|
install, just type as superuser:</p>
|
||||||
<div class="sourceCode" id="cb55"><pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb55-1"><a aria-hidden="true" href="#cb55-1" tabindex="-1"></a><span class="ex">python3</span> <span class="at">-m</span> pip install <span class="at">--upgrade</span> radicale</span></code></pre></div>
|
<div class="sourceCode" id="cb57"><pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb57-1"><a aria-hidden="true" href="#cb57-1" tabindex="-1"></a><span class="ex">python3</span> <span class="at">-m</span> pip install <span class="at">--upgrade</span> radicale</span></code></pre></div>
|
||||||
</section>
|
</section>
|
||||||
<section class="level4" id="git-repository">
|
<section class="level4" id="git-repository">
|
||||||
<h4>Git Repository <a class="headerlink" href="#git-repository">¶</a></h4>
|
<h4>Git Repository <a class="headerlink" href="#git-repository">¶</a></h4>
|
||||||
<p>If you want the development version of Radicale, take a look at the
|
<p>If you want the development version of Radicale, take a look at the
|
||||||
<a href="https://github.com/Kozea/Radicale/">git repository on
|
<a href="https://github.com/Kozea/Radicale/">git repository on
|
||||||
GitHub</a>, or install it directly with:</p>
|
GitHub</a>, or install it directly with:</p>
|
||||||
<div class="sourceCode" id="cb56"><pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb56-1"><a aria-hidden="true" href="#cb56-1" tabindex="-1"></a><span class="ex">python3</span> <span class="at">-m</span> pip install <span class="at">--upgrade</span> https://github.com/Kozea/Radicale/archive/master.tar.gz</span></code></pre></div>
|
<div class="sourceCode" id="cb58"><pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb58-1"><a aria-hidden="true" href="#cb58-1" tabindex="-1"></a><span class="ex">python3</span> <span class="at">-m</span> pip install <span class="at">--upgrade</span> https://github.com/Kozea/Radicale/archive/master.tar.gz</span></code></pre></div>
|
||||||
<p>You can also download the content of the repository as an <a href="https://github.com/Kozea/Radicale/tarball/master">archive</a>.</p>
|
<p>You can also download the content of the repository as an <a href="https://github.com/Kozea/Radicale/tarball/master">archive</a>.</p>
|
||||||
</section>
|
</section>
|
||||||
<section class="level4" id="source-packages">
|
<section class="level4" id="source-packages">
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue