Django Time-Token File Storage
This is a simple extension to Django’s FileSystemStorage that adds a URL parameter carrying a shared token, which is only valid for a defined period of time.
This is a drop-in replacement for the Django FileSystemStorage, usable if media files are served by Django itself. It does currently not work if media files are served from an independent web server.
The storage and its accompanying view do the following:
- When a URL to a storage file is generated, a HMAC-based token is generated
- The token and the timestamp when it was generated are appended as request parameters to the URL
- Upon retrieval of the file through the accompanying view, the requested file name and the passed timestamp are used to recalculate the HMAC-based token
- Only if the tokens match, and a configured timeout has not passed, is the file served
The HMAC-based token ensures that the token is invalidated when:
- The filename changes
- The timestamp changes
- The mtime of the file changes
- The SECRET_KEY changes
The HMAC is salted with the SECRET_KEY.
$ poetry add django-titofisto
django-titofisto will use the base FileSystemStorage for almost everything, including determining the MEDIA_ROOT. It merely adds a token as URL parameter to whatever the base FileSystemStorage.url() method returns.
Add the following to your settings:
DEFAULT_FILE_STORAGE = "titofisto.TitofistoStorage" TITOFISTO_TIMEOUT = 3600 # optional, this is the default TITOFISTO_PARAM = "titofisto_token" # optional, this is the default
Add the following to your URL config:
from django.conf import settings from django.urls import include, path urlpatterns += [ path(settings.MEDIA_URL.removeprefix("/"), include("titofisto.urls")), ]
Django will start serving media files under the configured MEDIA_URL.
django-titofisto was developed for the AlekSIS school information system by its team.
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
|Filename, size||File type||Python version||Upload date||Hashes|
|Filename, size django_titofisto-0.1.2.post1-py3-none-any.whl (15.2 kB)||File type Wheel||Python version py3||Upload date||Hashes View|
|Filename, size django-titofisto-0.1.2.post1.tar.gz (9.6 kB)||File type Source||Python version None||Upload date||Hashes View|
Hashes for django_titofisto-0.1.2.post1-py3-none-any.whl
Hashes for django-titofisto-0.1.2.post1.tar.gz