Source code for ska.contrib.django.ska.templatetags.ska_tags

from typing import Dict, Optional, Type, Union

from django import template
from django.core.exceptions import ImproperlyConfigured
from django.template import RequestContext

from ..... import sign_url as ska_sign_url
from .....base import AbstractSignature
from .....defaults import (
    DEFAULT_AUTH_USER_PARAM,
    DEFAULT_EXTRA_PARAM,
    DEFAULT_PROVIDER_PARAM,
    DEFAULT_SIGNATURE_PARAM,
    DEFAULT_URL_SUFFIX,
    DEFAULT_VALID_UNTIL_PARAM,
    SIGNATURE_LIFETIME,
)
from .....signatures import Signature
from ..settings import PROVIDERS, SECRET_KEY

__author__ = "Artur Barseghyan <artur.barseghyan@gmail.com>"
__copyright__ = "2013-2023 Artur Barseghyan"
__license__ = "GPL-2.0-only OR LGPL-2.1-or-later"
__all__ = (
    "provider_sign_url",
    "sign_url",
)


register = template.Library()


[docs] @register.simple_tag(takes_context=True) def sign_url( context: RequestContext, url: str = "", auth_user: Optional[str] = None, secret_key: str = SECRET_KEY, valid_until: Optional[Union[float, str]] = None, lifetime: int = SIGNATURE_LIFETIME, suffix: str = DEFAULT_URL_SUFFIX, signature_param: str = DEFAULT_SIGNATURE_PARAM, auth_user_param: str = DEFAULT_AUTH_USER_PARAM, valid_until_param: str = DEFAULT_VALID_UNTIL_PARAM, extra: Optional[Dict[str, Union[bytes, str, float, int]]] = None, extra_param: str = DEFAULT_EXTRA_PARAM, signature_cls: Type[AbstractSignature] = Signature, ) -> str: """Sign URL.""" # The `extra` and `extra_param` are not used at the moment. if not auth_user: auth_user = context["request"].user.get_username() return ska_sign_url( auth_user=auth_user, secret_key=secret_key, valid_until=valid_until, lifetime=lifetime, url=url, suffix=suffix, signature_param=signature_param, auth_user_param=auth_user_param, valid_until_param=valid_until_param, extra=extra, extra_param=extra_param, signature_cls=signature_cls, )
[docs] @register.simple_tag(takes_context=True) def provider_sign_url( context: RequestContext, provider: str, url: str = "", auth_user: Optional[str] = None, valid_until: Optional[Union[float, str]] = None, lifetime: int = SIGNATURE_LIFETIME, suffix: str = DEFAULT_URL_SUFFIX, signature_param: str = DEFAULT_SIGNATURE_PARAM, auth_user_param: str = DEFAULT_AUTH_USER_PARAM, valid_until_param: str = DEFAULT_VALID_UNTIL_PARAM, extra: Optional[Dict[str, Union[bytes, str, float, int]]] = None, extra_param: str = DEFAULT_EXTRA_PARAM, signature_cls: Type[AbstractSignature] = Signature, fail_silently: bool = True, ) -> Union[str, None]: """Sign URL.""" # The `extra` and `extra_param` are not used at the moment. if not auth_user: auth_user = context["request"].user.get_username() if provider not in PROVIDERS: if fail_silently: return None else: raise ImproperlyConfigured(f"Provider {provider} does not exist") secret_key = PROVIDERS.get(provider, {}).get("SECRET_KEY", None) if extra is None: extra = {} extra.update({DEFAULT_PROVIDER_PARAM: provider}) return ska_sign_url( auth_user=auth_user, secret_key=secret_key, valid_until=valid_until, lifetime=lifetime, url=url, suffix=suffix, signature_param=signature_param, auth_user_param=auth_user_param, valid_until_param=valid_until_param, extra=extra, extra_param=extra_param, signature_cls=signature_cls, )