2021-07-19 13:00:59 +00:00
|
|
|
import logging
|
|
|
|
|
|
|
|
import requests
|
|
|
|
from django.conf import settings
|
|
|
|
from django.http import Http404, HttpResponse
|
|
|
|
from django.views.generic import TemplateView
|
2021-07-19 13:06:10 +00:00
|
|
|
|
|
|
|
from camps.mixins import CampViewMixin
|
|
|
|
from facilities.models import FacilityFeedback
|
2021-07-19 13:00:59 +00:00
|
|
|
from teams.models import Team
|
|
|
|
from utils.models import OutgoingEmail
|
|
|
|
|
2021-07-19 13:06:10 +00:00
|
|
|
from ..mixins import RaisePermissionRequiredMixin
|
2021-07-19 13:00:59 +00:00
|
|
|
|
|
|
|
logger = logging.getLogger("bornhack.%s" % __name__)
|
|
|
|
|
2021-07-19 13:06:10 +00:00
|
|
|
|
2021-07-19 13:00:59 +00:00
|
|
|
class BackofficeIndexView(CampViewMixin, RaisePermissionRequiredMixin, TemplateView):
|
|
|
|
"""
|
|
|
|
The Backoffice index view only requires camps.backoffice_permission so we use RaisePermissionRequiredMixin directly
|
|
|
|
"""
|
|
|
|
|
|
|
|
permission_required = "camps.backoffice_permission"
|
|
|
|
template_name = "index.html"
|
|
|
|
|
|
|
|
def get_context_data(self, *args, **kwargs):
|
|
|
|
context = super().get_context_data(*args, **kwargs)
|
|
|
|
context["facilityfeedback_teams"] = Team.objects.filter(
|
|
|
|
id__in=set(
|
|
|
|
FacilityFeedback.objects.filter(
|
|
|
|
facility__facility_type__responsible_team__camp=self.camp,
|
|
|
|
handled=False,
|
|
|
|
).values_list(
|
|
|
|
"facility__facility_type__responsible_team__id", flat=True
|
|
|
|
)
|
|
|
|
)
|
|
|
|
)
|
2021-07-19 13:06:10 +00:00
|
|
|
context["held_email_count"] = (
|
|
|
|
OutgoingEmail.objects.filter(
|
|
|
|
hold=True, responsible_team__isnull=True
|
|
|
|
).count()
|
|
|
|
+ OutgoingEmail.objects.filter(
|
|
|
|
hold=True, responsible_team__camp=self.camp
|
|
|
|
).count()
|
|
|
|
)
|
2021-07-19 13:00:59 +00:00
|
|
|
return context
|
|
|
|
|
|
|
|
|
|
|
|
class BackofficeProxyView(CampViewMixin, RaisePermissionRequiredMixin, TemplateView):
|
|
|
|
"""
|
|
|
|
Show proxied stuff, only for simple HTML pages with no external content
|
|
|
|
Define URLs in settings.BACKOFFICE_PROXY_URLS as a dict of slug: (description, url) pairs
|
|
|
|
"""
|
|
|
|
|
|
|
|
permission_required = "camps.backoffice_permission"
|
|
|
|
template_name = "backoffice_proxy.html"
|
|
|
|
|
|
|
|
def dispatch(self, request, *args, **kwargs):
|
2021-07-19 13:06:10 +00:00
|
|
|
"""Perform the request and return the response if we have a slug"""
|
2021-07-19 13:00:59 +00:00
|
|
|
# list available stuff if we have no slug
|
|
|
|
if "proxy_slug" not in kwargs:
|
|
|
|
return super().dispatch(request, *args, **kwargs)
|
|
|
|
|
|
|
|
# is the slug valid?
|
|
|
|
if kwargs["proxy_slug"] not in settings.BACKOFFICE_PROXY_URLS.keys():
|
|
|
|
raise Http404
|
|
|
|
|
|
|
|
# perform the request
|
|
|
|
description, url = settings.BACKOFFICE_PROXY_URLS[kwargs["proxy_slug"]]
|
|
|
|
r = requests.get(url)
|
|
|
|
|
|
|
|
# return the response, keeping the status code but no headers
|
|
|
|
return HttpResponse(r.content, status=r.status_code)
|
|
|
|
|
|
|
|
def get_context_data(self, *args, **kwargs):
|
|
|
|
context = super().get_context_data(*args, **kwargs)
|
|
|
|
context["urls"] = settings.BACKOFFICE_PROXY_URLS
|
|
|
|
return context
|