Source code for django_agent_trust.decorators

from functools import wraps

from django.contrib.auth.decorators import user_passes_test

from .conf import settings


[docs] def trusted_agent_required(view=None, redirect_field_name='next', login_url=None): """ Similar to :func:`~django.contrib.auth.decorators.login_required`, but requires ``request.agent.is_trusted`` to be true. This will frequently be used in conjunction with login_required, unless you're allowing trusted agents to bypass authentication. The default value for ``login_url`` is :setting:`AGENT_LOGIN_URL`. """ if login_url is None: login_url = settings.AGENT_LOGIN_URL def decorator(view_func): @wraps(view_func) def _wrapped_view(request, *args, **kwargs): enforcer = user_passes_test( lambda u: request.agent.is_trusted, redirect_field_name=redirect_field_name, login_url=login_url, ) return enforcer(view_func)(request, *args, **kwargs) return _wrapped_view return decorator(view) if (view is not None) else decorator