Emi Simpson
af4b3b06c0
SUPPLEMENTALLY: - Add an `expiration` field to the `file` table of the database - Produce a migration for the above change - Overhaul the cleanup script, and integrate into fhost.py (now run using FLASK_APP=fhost flask prune) - Replace the old cleanup script with a deprecation notice - Add information about how to expire files to the index - Update the README with information about the new script Squashed commits: Add a note explaining that expired files aren't immediately removed Show correct times on the index page graph Improve the migration script, removing the need for --legacy Use automap in place of an explicit file map in migration Remove vestigial `touch()` Don't crash when upgrading a fresh database Remove vestigial warning about legacy files More efficiently filter to unexpired files when migrating mia/0x0#72 (comment) Coalesce updates to the database during migration mia/0x0#72 (comment) Remove vestigial database model mia/0x0#72 (comment) prune: Stream expired files from the database (as opposed to collecting them all first) config.example.py: Add min & max expiration + description
54 lines
2.1 KiB
HTML
54 lines
2.1 KiB
HTML
<pre>
|
|
THE NULL POINTER
|
|
================
|
|
{% set fhost_url = url_for("fhost", _external=True).rstrip("/") %}
|
|
HTTP POST files here:
|
|
curl -F'file=@yourfile.png' {{ fhost_url }}
|
|
You can also POST remote URLs:
|
|
curl -F'url=http://example.com/image.jpg' {{ fhost_url }}
|
|
Or you can shorten URLs:
|
|
curl -F'shorten=http://example.com/some/long/url' {{ fhost_url }}
|
|
|
|
File URLs are valid for at least 30 days and up to a year (see below).
|
|
Shortened URLs do not expire.
|
|
|
|
Files can be set to expire sooner by adding an "expires" parameter (in hours)
|
|
curl -F'file=@yourfile.png' -F'expires=24' {{ fhost_url }}
|
|
OR by setting "expires" to a timestamp in epoch milliseconds
|
|
curl -F'file=@yourfile.png' -F'expires=1681996320000' {{ fhost_url }}
|
|
|
|
Expired files won't be removed immediately, but will be removed as part of
|
|
the next purge.
|
|
|
|
{% set max_size = config["MAX_CONTENT_LENGTH"]|filesizeformat(True) %}
|
|
Maximum file size: {{ max_size }}
|
|
Not allowed: {{ config["FHOST_MIME_BLACKLIST"]|join(", ") }}
|
|
|
|
|
|
FILE RETENTION PERIOD
|
|
---------------------
|
|
|
|
retention = min_age + (-max_age + min_age) * pow((file_size / max_size - 1), 3)
|
|
|
|
days
|
|
{{'{: 6}'.format(config.get("FHOST_MAX_EXPIRATION", 31536000000)//86400000)}} | \\
|
|
| \\
|
|
| \\
|
|
| \\
|
|
| \\
|
|
| \\
|
|
| ..
|
|
| \\
|
|
{{'{: 6.1f}'.format((config.get("FHOST_MIN_EXPIRATION", 2592000000)/2 + config.get("FHOST_MAX_EXPIRATION", 31536000000)/2)/86400000)}} | ----------..-------------------------------------------
|
|
| ..
|
|
| \\
|
|
| ..
|
|
| ...
|
|
| ..
|
|
| ...
|
|
| ....
|
|
| ......
|
|
{{'{: 6}'.format(config.get("FHOST_MIN_EXPIRATION", 2592000000)//86400000)}} | ....................
|
|
0{{ ((config["MAX_CONTENT_LENGTH"]/2)|filesizeformat(True)).split(" ")[0].rjust(27) }}{{ max_size.split(" ")[0].rjust(27) }}
|
|
{{ max_size.split(" ")[1].rjust(54) }}
|
|
</pre>
|