2017-07-30 14:57:38 +00:00
|
|
|
from django.core.exceptions import PermissionDenied
|
|
|
|
from django.contrib.auth.decorators import login_required
|
2017-11-04 14:30:00 +00:00
|
|
|
from django.shortcuts import get_object_or_404
|
2017-11-26 19:55:09 +00:00
|
|
|
from django.http import Http404
|
2017-11-04 14:30:00 +00:00
|
|
|
|
|
|
|
from functools import wraps
|
2017-11-26 19:55:09 +00:00
|
|
|
from uuid import UUID
|
2017-07-30 14:57:38 +00:00
|
|
|
|
|
|
|
from cfp.utils import is_staff
|
2017-11-06 20:47:31 +00:00
|
|
|
from cfp.models import Participant, Volunteer
|
2017-11-04 14:30:00 +00:00
|
|
|
|
|
|
|
|
|
|
|
def speaker_required(view_func):
|
|
|
|
def wrapped_view(request, **kwargs):
|
2020-08-09 14:10:28 +00:00
|
|
|
speaker_token = kwargs.pop('speaker_token', None)
|
2017-11-05 20:37:34 +00:00
|
|
|
if speaker_token:
|
2017-11-26 19:55:09 +00:00
|
|
|
try:
|
|
|
|
speaker_token = UUID(speaker_token)
|
|
|
|
except ValueError:
|
|
|
|
raise Http404
|
2017-11-05 20:37:34 +00:00
|
|
|
speaker = get_object_or_404(Participant, site=request.conference.site, token=speaker_token)
|
2017-12-10 12:32:19 +00:00
|
|
|
elif request.user.is_authenticated:
|
2017-11-05 20:37:34 +00:00
|
|
|
speaker = get_object_or_404(Participant, site=request.conference.site, email=request.user.email)
|
|
|
|
else:
|
|
|
|
raise PermissionDenied
|
2017-11-04 14:30:00 +00:00
|
|
|
kwargs['speaker'] = speaker
|
|
|
|
return view_func(request, **kwargs)
|
|
|
|
return wraps(view_func)(wrapped_view)
|
2017-07-30 14:57:38 +00:00
|
|
|
|
|
|
|
|
2017-11-06 20:47:31 +00:00
|
|
|
def volunteer_required(view_func):
|
|
|
|
def wrapped_view(request, **kwargs):
|
2020-08-09 14:10:28 +00:00
|
|
|
volunteer_token = kwargs.pop('volunteer_token', None)
|
2017-11-06 20:47:31 +00:00
|
|
|
if volunteer_token:
|
2017-11-26 19:55:09 +00:00
|
|
|
try:
|
|
|
|
volunteer_token = UUID(volunteer_token)
|
|
|
|
except ValueError:
|
|
|
|
raise Http404
|
2017-11-06 20:47:31 +00:00
|
|
|
volunteer = get_object_or_404(Volunteer, site=request.conference.site, token=volunteer_token)
|
2017-12-10 12:32:19 +00:00
|
|
|
elif request.user.is_authenticated:
|
2017-11-06 20:47:31 +00:00
|
|
|
volunteer = get_object_or_404(Volunteer, site=request.conference.site, email=request.user.email)
|
|
|
|
else:
|
|
|
|
raise PermissionDenied
|
|
|
|
kwargs['volunteer'] = volunteer
|
|
|
|
return view_func(request, **kwargs)
|
|
|
|
return wraps(view_func)(wrapped_view)
|
|
|
|
|
|
|
|
|
2017-07-30 14:57:38 +00:00
|
|
|
def staff_required(view_func):
|
|
|
|
def _is_staff(request, *args, **kwargs):
|
2017-12-10 12:32:19 +00:00
|
|
|
if not request.user.is_authenticated:
|
2017-07-30 14:57:38 +00:00
|
|
|
return login_required(view_func)(request, *args, **kwargs)
|
|
|
|
elif is_staff(request, request.user):
|
|
|
|
return view_func(request, *args, **kwargs)
|
|
|
|
else:
|
|
|
|
raise PermissionDenied
|
|
|
|
return wraps(view_func)(_is_staff)
|