<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <link>http://hg.omfa.de/prosody-hg/</link>
    <language>en-us</language>

    <title>prosody-hg: plugins/mod_http_file_share.lua history</title>
    <description>plugins/mod_http_file_share.lua revision history</description>
    <item>
    <title>mod_http_file_share: Support full Range requests</title>
    <link>http://hg.omfa.de/prosody-hg/log/c83aee2a0b11/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[mod_http_file_share: Support full Range requests<br/>
<br/>
This allows requesting smaller slices of a file, often done by video<br/>
players.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Fri, 13 Feb 2026 16:19:12 +0100</pubDate>
</item>
<item>
    <title>Merge 13.0-&gt;trunk</title>
    <link>http://hg.omfa.de/prosody-hg/log/b688908622a1/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[Merge 13.0-&gt;trunk]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Fri, 13 Feb 2026 15:22:46 +0100</pubDate>
</item>
<item>
    <title>mod_http_file_share: Improve handling of Range requests</title>
    <link>http://hg.omfa.de/prosody-hg/log/dfbc60d47668/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[mod_http_file_share: Improve handling of Range requests<br/>
<br/>
There were reports of clients always including the Range header, even<br/>
when not resuming a download. Since it is equivalent to a non-Range<br/>
request, better to simply send the whole file instead of an error.<br/>
<br/>
Range requests with units other than bytes are also ignored now.<br/>
<br/>
RFC 9110 states:<br/>
&gt; An origin server MUST ignore a Range header field that contains a<br/>
&gt; range unit it does not understand.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Fri, 13 Feb 2026 14:54:57 +0100</pubDate>
</item>
<item>
    <title>Merge 13.0-&gt;trunk</title>
    <link>http://hg.omfa.de/prosody-hg/log/eae7d0350a52/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[Merge 13.0-&gt;trunk]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Thu, 02 Oct 2025 21:09:51 +0200</pubDate>
</item>
<item>
    <title>mod_http_file_share: Split long line [luacheck]</title>
    <link>http://hg.omfa.de/prosody-hg/log/9974b210d620/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[mod_http_file_share: Split long line [luacheck]]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Thu, 02 Oct 2025 21:09:29 +0200</pubDate>
</item>
<item>
    <title>Merge 13.0-&gt;trunk</title>
    <link>http://hg.omfa.de/prosody-hg/log/1746a6bd4644/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[Merge 13.0-&gt;trunk]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Thu, 02 Oct 2025 21:08:15 +0200</pubDate>
</item>
<item>
    <title>mod_http_file_share: Improve debug logging around unexpected file sizes</title>
    <link>http://hg.omfa.de/prosody-hg/log/67b8f2ee41ed/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[mod_http_file_share: Improve debug logging around unexpected file sizes<br/>
<br/>
These didn't have any debug logging and it can be confusing that the<br/>
&quot;file too large&quot; is also used for a cut-off chunked upload.<br/>
Not sure if it is worth it to double those checks into &gt; and &lt; just for<br/>
this.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Thu, 02 Oct 2025 21:04:20 +0200</pubDate>
</item>
<item>
    <title>mod_http_file_share: Fix error when upload directory not created yet</title>
    <link>http://hg.omfa.de/prosody-hg/log/fc489086e09a/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[mod_http_file_share: Fix error when upload directory not created yet]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Sat, 20 Sep 2025 23:48:04 +0200</pubDate>
</item>
<item>
    <title>mod_http_file_share: Check for unexpected files in the upload directory</title>
    <link>http://hg.omfa.de/prosody-hg/log/0f482af5b882/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[mod_http_file_share: Check for unexpected files in the upload directory<br/>
<br/>
In case the metadata is lost or corrupted it can be handy to know what<br/>
files might have been left behind.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Sat, 04 Dec 2021 18:57:11 +0100</pubDate>
</item>
<item>
    <title>mod_http_file_share: Check that files are still there with correct size</title>
    <link>http://hg.omfa.de/prosody-hg/log/f5e8ab42c708/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[mod_http_file_share: Check that files are still there with correct size<br/>
<br/>
Failed uploads can leave behind unused slots. Files shouldn't change<br/>
size after they have been successfully uploaded, but might as well<br/>
double check it.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Sat, 04 Dec 2021 18:56:51 +0100</pubDate>
</item>
<item>
    <title>mod_http_file_share: Add media-src 'self' to Content-Security-Policy header</title>
    <link>http://hg.omfa.de/prosody-hg/log/0b01f40df0f9/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[mod_http_file_share: Add media-src 'self' to Content-Security-Policy header<br/>
<br/>
This allows certain media files to be loaded when navigated to directly in a<br/>
web browser.<br/>
<br/>
Note that in some browsers (Chrome), the media gets transformed<br/>
internally into a HTML page with some basic styles, but these are blocked due<br/>
to our default-src policy of 'none' Although this could be unblocked with<br/>
style-src unsafe-inline, it is not our plan to fix this, because this would<br/>
have negative security implications.<br/>
<br/>
The reason for our CSP is to prevent the file share service from being used to<br/>
host malicious HTML/CSS/JS. Yes, CSS can be malicious.<br/>
<br/>
Our file share service is for uploading and downloading files, it is not a<br/>
substitute for website/content hosting.]]></description>
    <author>&#77;&#97;&#116;&#116;&#104;&#101;&#119;&#32;&#87;&#105;&#108;&#100;&#32;&#60;&#109;&#119;&#105;&#108;&#100;&#49;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#62;</author>
    <pubDate>Fri, 18 Apr 2025 12:25:06 +0100</pubDate>
</item>
<item>
    <title>mod_http_file_share: Explicitly reject all unsupported ranges</title>
    <link>http://hg.omfa.de/prosody-hg/log/284b100acda1/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[mod_http_file_share: Explicitly reject all unsupported ranges<br/>
<br/>
Fail fast. Otherwise it sends the whole file.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Sun, 23 Mar 2025 12:36:47 +0100</pubDate>
</item>
<item>
    <title>mod_http_file_share: Fix off by one in Range response</title>
    <link>http://hg.omfa.de/prosody-hg/log/d7e54a2475cc/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[mod_http_file_share: Fix off by one in Range response<br/>
<br/>
See #1914]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Sun, 23 Mar 2025 12:21:19 +0100</pubDate>
</item>
<item>
    <title>mod_http_file_share: Improve error reporting by using util.error more</title>
    <link>http://hg.omfa.de/prosody-hg/log/977415e0122d/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[mod_http_file_share: Improve error reporting by using util.error more<br/>
<br/>
This should pass back the error message as well as the status code to<br/>
the client.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Sun, 16 Mar 2025 15:20:45 +0100</pubDate>
</item>
<item>
    <title>mod_http_file_share: Persist total storage usage when it increases (fixes #1891)</title>
    <link>http://hg.omfa.de/prosody-hg/log/4a687745bb51/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[mod_http_file_share: Persist total storage usage when it increases (fixes #1891)]]></description>
    <author>&#77;&#97;&#116;&#116;&#104;&#101;&#119;&#32;&#87;&#105;&#108;&#100;&#32;&#60;&#109;&#119;&#105;&#108;&#100;&#49;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#62;</author>
    <pubDate>Sat, 15 Feb 2025 17:10:30 +0000</pubDate>
</item>
<item>
    <title>mod_http_file_share: Revert 9c62ffbdf2ae</title>
    <link>http://hg.omfa.de/prosody-hg/log/7f05254fb042/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[mod_http_file_share: Revert 9c62ffbdf2ae<br/>
<br/>
No, that wasn't running in a thread, but in a next tick timer.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Sat, 02 Nov 2024 23:08:28 +0100</pubDate>
</item>
<item>
    <title>mod_http_file_share: Fix expiry disabled check for new config API</title>
    <link>http://hg.omfa.de/prosody-hg/log/fe7557cf31a6/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[mod_http_file_share: Fix expiry disabled check for new config API<br/>
<br/>
Similar to 26c30844cac6]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Mon, 08 Apr 2024 16:44:11 +0200</pubDate>
</item>
<item>
    <title>luacheckrc, mod_http_file_share: Update for module API change (once-&gt;on_ready)</title>
    <link>http://hg.omfa.de/prosody-hg/log/11e66ad894f0/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[luacheckrc, mod_http_file_share: Update for module API change (once-&gt;on_ready)]]></description>
    <author>&#77;&#97;&#116;&#116;&#104;&#101;&#119;&#32;&#87;&#105;&#108;&#100;&#32;&#60;&#109;&#119;&#105;&#108;&#100;&#49;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#62;</author>
    <pubDate>Thu, 30 Nov 2023 10:14:17 +0000</pubDate>
</item>
<item>
    <title>mod_http_file_share: Retrieve stored total in async-friendly way</title>
    <link>http://hg.omfa.de/prosody-hg/log/9c62ffbdf2ae/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[mod_http_file_share: Retrieve stored total in async-friendly way<br/>
<br/>
Does this run in a thread?]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Sat, 14 Oct 2023 22:43:39 +0200</pubDate>
</item>
<item>
    <title>mod_http_file_share: Switch to the new authz API (BC)</title>
    <link>http://hg.omfa.de/prosody-hg/log/9097149923ae/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[mod_http_file_share: Switch to the new authz API (BC)<br/>
<br/>
Behavior change: It becomes up to the authorization module whether to<br/>
allow requests. The default, mod_authz_internal, will allow users on the<br/>
*parent* host only, breaking use by some components.<br/>
<br/>
Remaining question is whether to deprecate the `http_file_share_access`<br/>
setting or leave as a way to complement/bypass access control?]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Sat, 16 Sep 2023 14:23:08 +0200</pubDate>
</item>
<item>
    <title>plugins: Handle how get_option_period returns &quot;never&quot;</title>
    <link>http://hg.omfa.de/prosody-hg/log/26c30844cac6/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[plugins: Handle how get_option_period returns &quot;never&quot;]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Fri, 21 Jul 2023 17:23:00 +0200</pubDate>
</item>
<item>
    <title>plugins: Use integer config API with interval specification where sensible</title>
    <link>http://hg.omfa.de/prosody-hg/log/50324f66ca2a/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[plugins: Use integer config API with interval specification where sensible<br/>
<br/>
Many of these fall into a few categories:<br/>
- util.cache size, must be &gt;= 1<br/>
- byte or item counts that logically can't be negative<br/>
- port numbers that should be in 1..0xffff]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Mon, 17 Jul 2023 01:38:54 +0200</pubDate>
</item>
<item>
    <title>plugins: Switch to :get_option_period() for time range options</title>
    <link>http://hg.omfa.de/prosody-hg/log/c8d949cf6b09/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[plugins: Switch to :get_option_period() for time range options<br/>
<br/>
Improves readability (&quot;1 day&quot; vs 86400) and centralizes validation.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Sun, 16 Jul 2023 20:49:33 +0200</pubDate>
</item>
<item>
    <title>mod_http_file_share: Put 'expires' back, thought it was unused</title>
    <link>http://hg.omfa.de/prosody-hg/log/0d1cd3185299/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[mod_http_file_share: Put 'expires' back, thought it was unused<br/>
<br/>
Removed in 536055476912 because it was not used anywhere else in the<br/>
file, but per the documentation it is meant to inform external upload<br/>
services of the expiry time of the upload itself.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Sun, 02 Jul 2023 14:31:00 +0200</pubDate>
</item>
<item>
    <title>mod_http_file_share: Set slot token TTL so util.jwt validates expiry</title>
    <link>http://hg.omfa.de/prosody-hg/log/536055476912/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[mod_http_file_share: Set slot token TTL so util.jwt validates expiry<br/>
<br/>
Overrides the util.jwt default of 1h with the intended TTL of 10<br/>
minutes. Because util.jwt now has its own expiry checks, so the 'expiry'<br/>
field is no longer used and can thus be removed.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Wed, 28 Jun 2023 17:17:20 +0200</pubDate>
</item>
<item>
    <title>mod_http_file_share: use util.human.io.parse_duration</title>
    <link>http://hg.omfa.de/prosody-hg/log/c38b1c63aa5c/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[mod_http_file_share: use util.human.io.parse_duration<br/>
<br/>
Updated by Zash, the original patch by Jonas had put the duration<br/>
parsing function in util.datetime but MattJ later did the same thing but<br/>
differently in f4d7fe919969]]></description>
    <author>&#74;&#111;&#110;&#97;&#115;&#32;&#83;&#99;&#104;&#228;&#102;&#101;&#114;&#32;&#60;&#106;&#111;&#110;&#97;&#115;&#64;&#119;&#105;&#101;&#108;&#105;&#99;&#107;&#105;&#46;&#110;&#97;&#109;&#101;&#62;</author>
    <pubDate>Thu, 28 Apr 2022 20:40:59 +0200</pubDate>
</item>
<item>
    <title>plugins: Prefix module imports with prosody namespace</title>
    <link>http://hg.omfa.de/prosody-hg/log/74b9e05af71e/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[plugins: Prefix module imports with prosody namespace]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Fri, 24 Mar 2023 13:15:28 +0100</pubDate>
</item>
<item>
    <title>mod_http_file_share: Use correct variable name (thanks riau.sni)</title>
    <link>http://hg.omfa.de/prosody-hg/log/cd993fd7b60d/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[mod_http_file_share: Use correct variable name (thanks riau.sni)]]></description>
    <author>&#77;&#97;&#116;&#116;&#104;&#101;&#119;&#32;&#87;&#105;&#108;&#100;&#32;&#60;&#109;&#119;&#105;&#108;&#100;&#49;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#62;</author>
    <pubDate>Sun, 04 Sep 2022 10:01:57 +0100</pubDate>
</item>
<item>
    <title>mod_http_file_share: Switch to new util.jwt API</title>
    <link>http://hg.omfa.de/prosody-hg/log/9953ac7b0c15/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[mod_http_file_share: Switch to new util.jwt API<br/>
<br/>
Some changes/improvements in this commit:<br/>
<br/>
  - Default token lifetime is now 3600s (from 300s)<br/>
  - Tokens are only validated once per upload<br/>
  - &quot;iat&quot;/&quot;exp&quot; are handled automatically by util.jwt]]></description>
    <author>&#77;&#97;&#116;&#116;&#104;&#101;&#119;&#32;&#87;&#105;&#108;&#100;&#32;&#60;&#109;&#119;&#105;&#108;&#100;&#49;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#62;</author>
    <pubDate>Mon, 11 Jul 2022 13:49:47 +0100</pubDate>
</item>
<item>
    <title>mod_http (and dependent modules): Make CORS opt-in by default (fixes #1731)</title>
    <link>http://hg.omfa.de/prosody-hg/log/b33558969b3e/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[mod_http (and dependent modules): Make CORS opt-in by default (fixes #1731)<br/>
<br/>
The same-origin policy enforced by browsers is a security measure that should<br/>
only be turned off when it is safe to do so. It is safe to do so in Prosody's<br/>
default modules, but people may load third-party modules that are unsafe.<br/>
<br/>
Therefore we have flipped the default, so that modules must explicitly opt in<br/>
to having CORS headers added on their requests.]]></description>
    <author>&#77;&#97;&#116;&#116;&#104;&#101;&#119;&#32;&#87;&#105;&#108;&#100;&#32;&#60;&#109;&#119;&#105;&#108;&#100;&#49;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#62;</author>
    <pubDate>Mon, 28 Mar 2022 14:53:24 +0100</pubDate>
</item>
<item>
    <title>mod_http_file_share: Use alternate syntax for filename in Content-Disposition</title>
    <link>http://hg.omfa.de/prosody-hg/log/88958c0ecab3/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[mod_http_file_share: Use alternate syntax for filename in Content-Disposition<br/>
<br/>
The Lua string.format %q doesn't behave correctly for all characters<br/>
that should be escaped in a quoted-string. And who knows what effects<br/>
higher Unicode might have here.<br/>
<br/>
Applying percent-encoding of filenames seems like the safest way to deal<br/>
with filenames, as well as being easier than implementing the actual<br/>
quoted-string transform, which seems complicated and I'm not even sure<br/>
it covers every possible character.<br/>
<br/>
Filenames can safely be assumed to be UTF-8 since they are passed in an<br/>
attribute in the query without any escaping.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Sat, 29 Jan 2022 16:11:38 +0100</pubDate>
</item>
<item>
    <title>mod_http_file_share: Always measure total disk usage for statistics!</title>
    <link>http://hg.omfa.de/prosody-hg/log/5e68635cdc2c/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[mod_http_file_share: Always measure total disk usage for statistics!<br/>
<br/>
Metrics available or not depending on configuration is weird, even tho<br/>
it might be expensive to calculate and it's only really needed when<br/>
there is a global quota.<br/>
<br/>
Default quota is set to infinity, which is essentially what it was.<br/>
<br/>
Reports NaN if there is an error, which should count as over the<br/>
infinite default quota.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Tue, 11 Jan 2022 04:15:29 +0100</pubDate>
</item>
<item>
    <title>mod_http_file_share: Fix to take retention time into account</title>
    <link>http://hg.omfa.de/prosody-hg/log/c01532ae6a3b/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[mod_http_file_share: Fix to take retention time into account<br/>
<br/>
It was lost in 6f4790b8deec when switching to mod_cron.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Sat, 04 Dec 2021 16:48:39 +0100</pubDate>
</item>
<item>
    <title>mod_http_file_share: Improve consistency of terminology in logging</title>
    <link>http://hg.omfa.de/prosody-hg/log/dc72581e04ff/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[mod_http_file_share: Improve consistency of terminology in logging<br/>
<br/>
Prefer 'prune' over 'delete' since it more strongly implies removal of<br/>
excess.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Sat, 04 Dec 2021 15:03:26 +0100</pubDate>
</item>
<item>
    <title>mod_http_file_share: Rename variable for clarity</title>
    <link>http://hg.omfa.de/prosody-hg/log/62a466e60515/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[mod_http_file_share: Rename variable for clarity]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Sat, 04 Dec 2021 15:03:52 +0100</pubDate>
</item>
<item>
    <title>mod_http_file_share: Fix deletion counter</title>
    <link>http://hg.omfa.de/prosody-hg/log/797197b8607e/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[mod_http_file_share: Fix deletion counter<br/>
<br/>
Before aa60f4353001 each loop had its own counter, seems incrementing of<br/>
one of them was lost. But only one is needed anyhow.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Sat, 04 Dec 2021 14:28:04 +0100</pubDate>
</item>
<item>
    <title>mod_http_file_share: Back out 876e1b6d6ae4</title>
    <link>http://hg.omfa.de/prosody-hg/log/a2a0e00cbd24/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[mod_http_file_share: Back out 876e1b6d6ae4]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Fri, 03 Dec 2021 10:43:02 +0100</pubDate>
</item>
<item>
    <title>mod_http_file_share: Recalculate total storage usage weekly instead of daily</title>
    <link>http://hg.omfa.de/prosody-hg/log/121c0401f83e/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[mod_http_file_share: Recalculate total storage usage weekly instead of daily<br/>
<br/>
Before mod_cron this job ran less frequently than the upload removal<br/>
job. Running them at the same frequency seems wasteful somehow, plus the<br/>
total should not drift away from the true value that fast.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Fri, 03 Dec 2021 09:08:23 +0100</pubDate>
</item>
<item>
    <title>mod_http_file_share: Keep track of total storage use across restarts</title>
    <link>http://hg.omfa.de/prosody-hg/log/9d2eab56f124/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[mod_http_file_share: Keep track of total storage use across restarts<br/>
<br/>
The value needs to be known in order to determine if additional uploads<br/>
can be accepted.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Fri, 03 Dec 2021 08:21:29 +0100</pubDate>
</item>
<item>
    <title>mod_http_file_share: Fix measuring total storage use before it was known</title>
    <link>http://hg.omfa.de/prosody-hg/log/99be6874340b/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[mod_http_file_share: Fix measuring total storage use before it was known<br/>
<br/>
Passing nil to the metrics system causes errors later.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Fri, 03 Dec 2021 08:16:18 +0100</pubDate>
</item>
<item>
    <title>mod_http_file_share: Keep global storage use accurate longer.</title>
    <link>http://hg.omfa.de/prosody-hg/log/f9b2325f6b50/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[mod_http_file_share: Keep global storage use accurate longer.<br/>
<br/>
Merging those loops removes the miscounting that would occur in case a<br/>
file could not be deleted, so no need to limit it to that case.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Tue, 30 Nov 2021 00:55:54 +0100</pubDate>
</item>
<item>
    <title>mod_http_file_share: Merge file expiry loops</title>
    <link>http://hg.omfa.de/prosody-hg/log/aa60f4353001/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[mod_http_file_share: Merge file expiry loops<br/>
<br/>
Not sure what the benefit of two separate loops was, perhaps reduced<br/>
memory usage by allowing archive query state to be garbage collected<br/>
before moving on to deleting files. Never measured so probably not so.<br/>
<br/>
This simplifies a bit.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Tue, 30 Nov 2021 00:53:22 +0100</pubDate>
</item>
<item>
    <title>mod_http_file_share: Limit query to time since last expiry</title>
    <link>http://hg.omfa.de/prosody-hg/log/876e1b6d6ae4/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[mod_http_file_share: Limit query to time since last expiry<br/>
<br/>
This is probably a bad idea, as files that could not be deleted for some<br/>
reason will not be tried again. I was just thinking of what the 'task'<br/>
argument could be used for.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Tue, 30 Nov 2021 00:52:07 +0100</pubDate>
</item>
<item>
    <title>mod_http_file_share: Switch to mod_cron for periodic tasks</title>
    <link>http://hg.omfa.de/prosody-hg/log/6f4790b8deec/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[mod_http_file_share: Switch to mod_cron for periodic tasks]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Mon, 22 Nov 2021 14:54:32 +0100</pubDate>
</item>
<item>
    <title>mod_http_file_share: Move number coercion into util.dataforms</title>
    <link>http://hg.omfa.de/prosody-hg/log/2b85e4e7d389/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[mod_http_file_share: Move number coercion into util.dataforms]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Mon, 25 Oct 2021 21:45:06 +0200</pubDate>
</item>
<item>
    <title>mod_http_file_share: Silence luacheck warning</title>
    <link>http://hg.omfa.de/prosody-hg/log/77bbbd4263d7/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[mod_http_file_share: Silence luacheck warning]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Sat, 23 Oct 2021 13:32:01 +0200</pubDate>
</item>
<item>
    <title>mod_http_file_share: Clean up incomplete uploads</title>
    <link>http://hg.omfa.de/prosody-hg/log/fceebfb28d86/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[mod_http_file_share: Clean up incomplete uploads<br/>
<br/>
If the request fails in the middle then the file~ could be left behind<br/>
because no code was invoked to delete it then.  This gets rid of it when<br/>
the request is removed. It may still be left in case of an unclean<br/>
shutdown.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Sat, 23 Oct 2021 01:53:07 +0200</pubDate>
</item>
<item>
    <title>mod_http_file_share: Allow 'Authorization' header via CORS (thanks kawaii)</title>
    <link>http://hg.omfa.de/prosody-hg/log/e080d6aa0b3b/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[mod_http_file_share: Allow 'Authorization' header via CORS (thanks kawaii)<br/>
<br/>
Can't find anything saying anything on whether this is needed or not.<br/>
kawaii reported that both Chrome and Firefox complained unless the<br/>
header was added to the list of allowed headers.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Wed, 20 Oct 2021 23:06:07 +0200</pubDate>
</item>
<item>
    <title>mod_http_file_share: return 401 instead of 403 if authentication failed</title>
    <link>http://hg.omfa.de/prosody-hg/log/ae5ac9830add/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[mod_http_file_share: return 401 instead of 403 if authentication failed<br/>
<br/>
This is as per the HTTP standards [1]. Thankfully, the REQUIRED<br/>
www-authenticate header is already generated by the code.<br/>
<br/>
   [1]: https://datatracker.ietf.org/doc/html/rfc7235#section-3.1]]></description>
    <author>&#74;&#111;&#110;&#97;&#115;&#32;&#83;&#99;&#104;&#228;&#102;&#101;&#114;&#32;&#60;&#106;&#111;&#110;&#97;&#115;&#64;&#119;&#105;&#101;&#108;&#105;&#99;&#107;&#105;&#46;&#110;&#97;&#109;&#101;&#62;</author>
    <pubDate>Tue, 19 Oct 2021 16:37:32 +0200</pubDate>
</item>
<item>
    <title>mod_http_file_share: Fix measuring how long periodic task take</title>
    <link>http://hg.omfa.de/prosody-hg/log/3d411720e719/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[mod_http_file_share: Fix measuring how long periodic task take]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Tue, 14 Sep 2021 15:33:39 +0200</pubDate>
</item>
<item>
    <title>mod_http_file_share: Measure current total usage</title>
    <link>http://hg.omfa.de/prosody-hg/log/5d925f340ae6/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[mod_http_file_share: Measure current total usage<br/>
<br/>
In order to allow monitoring. Especially as there's not much in the way<br/>
of hard numbers on how much space gets used.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Sun, 12 Sep 2021 17:03:02 +0200</pubDate>
</item>
<item>
    <title>mod_http_file_share: Fix traceback in global quota debug logging (thanks Martin)</title>
    <link>http://hg.omfa.de/prosody-hg/log/f0971a9eba88/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[mod_http_file_share: Fix traceback in global quota debug logging (thanks Martin)<br/>
<br/>
Error in util.human.units.format because of B(nil) when the global quota<br/>
is unset.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Sun, 12 Sep 2021 11:47:22 +0200</pubDate>
</item>
<item>
    <title>mod_http_file_share: Add optional global quota on total storage usage</title>
    <link>http://hg.omfa.de/prosody-hg/log/9c23e7c8a67a/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[mod_http_file_share: Add optional global quota on total storage usage<br/>
<br/>
Before, maximum storage usage (assuming all users upload as much as they<br/>
could) would depend on the quota, retention period and number of users.<br/>
Since number of users can vary, this makes it hard to know how much<br/>
storage will be needed.<br/>
<br/>
Adding a limit to the total overall storage use solves this, making it<br/>
simple to set it to some number based on what storage is actually<br/>
available.<br/>
<br/>
Summary job run less often than the prune job since it touches the<br/>
entire archive; and started before the prune job since it's needed<br/>
before the first upload.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Sun, 12 Sep 2021 01:38:33 +0200</pubDate>
</item>
<item>
    <title>mod_http_file_share: Update comment about x-frame-options</title>
    <link>http://hg.omfa.de/prosody-hg/log/a6d1131ac833/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[mod_http_file_share: Update comment about x-frame-options<br/>
<br/>
X-Frame-Options was replaced by the Content-Security-Policy<br/>
'frame-ancestors' directive, but Internet Explorer does not support that<br/>
part of CSP.<br/>
<br/>
Since it's just one line it doesn't hurt to keep until some future<br/>
spring cleaning event :)]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Sun, 20 Jun 2021 16:30:24 +0200</pubDate>
</item>
<item>
    <title>mod_http_file_share: Build list of measuring buckets for configured size limit</title>
    <link>http://hg.omfa.de/prosody-hg/log/19aac4247b03/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[mod_http_file_share: Build list of measuring buckets for configured size limit<br/>
<br/>
Creates buckets up to the configured size limit or 1TB, whichever is<br/>
smaller, e.g. {1K, 4K, 16K, ... 4M, 16M}]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Tue, 08 Jun 2021 13:33:40 +0200</pubDate>
</item>
<item>
    <title>mod_http_file_share: Handle out of bounds Range request</title>
    <link>http://hg.omfa.de/prosody-hg/log/d5360307a99d/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[mod_http_file_share: Handle out of bounds Range request<br/>
<br/>
Turns out you can seek past the end of the file without getting an<br/>
error.<br/>
<br/>
Also rejects empty range instead of sending the whole file.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Mon, 17 May 2021 14:14:25 +0200</pubDate>
</item>
<item>
    <title>mod_http_file_share: Support download resumption via Range requests</title>
    <link>http://hg.omfa.de/prosody-hg/log/60e31c9ece57/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[mod_http_file_share: Support download resumption via Range requests<br/>
<br/>
Only a starting point is supported due to the way response:send_file()<br/>
sends everything it gets from the provided file handle but does not have<br/>
any way to specify how much to read.<br/>
<br/>
This matches what Conversations appears to be doing.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Sun, 16 May 2021 16:52:59 +0200</pubDate>
</item>
<item>
    <title>mod_http_file_share: Include expiry time of the upload itself in token</title>
    <link>http://hg.omfa.de/prosody-hg/log/7adda14945ad/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[mod_http_file_share: Include expiry time of the upload itself in token<br/>
<br/>
Lets an external upload service know this so it can do expiry itself.<br/>
Could possibly have been calculated based on the token expiry or<br/>
issuance time, explicit &gt; implicit.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Mon, 05 Apr 2021 17:21:18 +0200</pubDate>
</item>
<item>
    <title>mod_http_file_share: Include time of issuance in auth token</title>
    <link>http://hg.omfa.de/prosody-hg/log/8fd760c04cdf/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[mod_http_file_share: Include time of issuance in auth token<br/>
<br/>
In case an external upload service wants to have the original creation<br/>
time, or calculate the token expiry itself.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Mon, 05 Apr 2021 17:16:18 +0200</pubDate>
</item>
<item>
    <title>mod_http_file_share: Group related properties for readability</title>
    <link>http://hg.omfa.de/prosody-hg/log/2c9db2278fed/plugins/mod_http_file_share.lua</link>
    <description><![CDATA[mod_http_file_share: Group related properties for readability]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Mon, 05 Apr 2021 17:15:12 +0200</pubDate>
</item>

  </channel>
</rss>
