This commit is contained in:
javad committed 2026-09-10 11:34:19 +03:30
commit fa9d154db9
260 files changed
+17643

No files matched your search

+21
View File
@@ -0,0 +1,21 @@
import base64
import hashlib
import time
from urllib.parse import quote, urlencode
from django.conf import settings
from django.http import HttpResponseRedirect
def signed_media_redirect(relative_path, *, download=False, lifetime=300):
"""Create an Nginx secure_link URL after Django has authorized the request."""
safe_path = quote(str(relative_path).replace("\\", "/").lstrip("/"), safe="/")
uri = f"/protected-media/{safe_path}"
expires = int(time.time()) + lifetime
source = f"{expires}{uri} {settings.MEDIA_SIGNING_SECRET}".encode()
digest = hashlib.md5(source, usedforsecurity=False).digest()
signature = base64.urlsafe_b64encode(digest).rstrip(b"=").decode()
query = {"md5": signature, "expires": expires}
if download:
query["download"] = "1"
return HttpResponseRedirect(f"{uri}?{urlencode(query)}")