From 43fc498297353edb121f6d4d3ba6f9ad64a9b4bb Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Mon, 25 Sep 2017 10:04:37 +0200 Subject: [PATCH] Prevent some pages from search indexing --- .../templates/pretixpresale/event/base.html | 2 +- src/pretix/presale/urls.py | 2 ++ src/pretix/presale/views/cart.py | 3 ++- src/pretix/presale/views/locale.py | 4 ++- src/pretix/presale/views/order.py | 3 ++- src/pretix/presale/views/robots.py | 26 +++++++++++++++++++ 6 files changed, 36 insertions(+), 4 deletions(-) create mode 100644 src/pretix/presale/views/robots.py diff --git a/src/pretix/presale/templates/pretixpresale/event/base.html b/src/pretix/presale/templates/pretixpresale/event/base.html index 9e6ea379a6..1bd8155f40 100644 --- a/src/pretix/presale/templates/pretixpresale/event/base.html +++ b/src/pretix/presale/templates/pretixpresale/event/base.html @@ -40,7 +40,7 @@ {% if request.event.settings.locales|length > 1 %}
{% for l in languages %} - + {{ l.name_local }} {% endfor %} diff --git a/src/pretix/presale/urls.py b/src/pretix/presale/urls.py index 0d5e51f22b..4b27c301e7 100644 --- a/src/pretix/presale/urls.py +++ b/src/pretix/presale/urls.py @@ -6,6 +6,7 @@ import pretix.presale.views.event import pretix.presale.views.locale import pretix.presale.views.order import pretix.presale.views.organizer +import pretix.presale.views.robots import pretix.presale.views.user import pretix.presale.views.waiting @@ -83,4 +84,5 @@ organizer_patterns = [ locale_patterns = [ url(r'^locale/set$', pretix.presale.views.locale.LocaleSet.as_view(), name='locale.set'), + url(r'^robots.txt$', pretix.presale.views.robots.robots_txt, name='robots.txt'), ] diff --git a/src/pretix/presale/views/cart.py b/src/pretix/presale/views/cart.py index 360d8664bc..c947a3005b 100644 --- a/src/pretix/presale/views/cart.py +++ b/src/pretix/presale/views/cart.py @@ -22,6 +22,7 @@ from pretix.multidomain.urlreverse import eventreverse from pretix.presale.views import EventViewMixin from pretix.presale.views.async import AsyncAction from pretix.presale.views.event import item_group_by_category +from pretix.presale.views.robots import NoSearchIndexViewMixin class CartActionMixin: @@ -177,7 +178,7 @@ class CartAdd(EventViewMixin, CartActionMixin, AsyncAction, View): return redirect(self.get_error_url()) -class RedeemView(EventViewMixin, TemplateView): +class RedeemView(NoSearchIndexViewMixin, EventViewMixin, TemplateView): template_name = "pretixpresale/event/voucher.html" def get_context_data(self, **kwargs): diff --git a/src/pretix/presale/views/locale.py b/src/pretix/presale/views/locale.py index 7a605837ce..4914e8776c 100644 --- a/src/pretix/presale/views/locale.py +++ b/src/pretix/presale/views/locale.py @@ -5,8 +5,10 @@ from django.http import HttpResponseRedirect from django.utils.http import is_safe_url from django.views.generic import View +from .robots import NoSearchIndexViewMixin -class LocaleSet(View): + +class LocaleSet(NoSearchIndexViewMixin, View): def get(self, request, *args, **kwargs): url = request.GET.get('next', request.META.get('HTTP_REFERER', '/')) diff --git a/src/pretix/presale/views/order.py b/src/pretix/presale/views/order.py index 7613adde80..532aca17fc 100644 --- a/src/pretix/presale/views/order.py +++ b/src/pretix/presale/views/order.py @@ -29,9 +29,10 @@ from pretix.presale.forms.checkout import InvoiceAddressForm from pretix.presale.views import CartMixin, EventViewMixin from pretix.presale.views.async import AsyncAction from pretix.presale.views.questions import QuestionsViewMixin +from pretix.presale.views.robots import NoSearchIndexViewMixin -class OrderDetailMixin: +class OrderDetailMixin(NoSearchIndexViewMixin): @cached_property def order(self): order = self.request.event.orders.filter(code=self.kwargs['order']).select_related('event').first() diff --git a/src/pretix/presale/views/robots.py b/src/pretix/presale/views/robots.py new file mode 100644 index 0000000000..09f2b101fe --- /dev/null +++ b/src/pretix/presale/views/robots.py @@ -0,0 +1,26 @@ +from django.http import HttpResponse +from django.views.decorators.cache import cache_page + + +class NoSearchIndexViewMixin: + def dispatch(self, request, *args, **kwargs): + resp = super().dispatch(request, *args, **kwargs) + resp['X-Robots-Tag'] = "noindex" + return resp + + +@cache_page(3600) +def robots_txt(request): + return HttpResponse( + """User-agent: * +Disallow: */cart/* +Disallow: */checkout/* +Disallow: */order/* +Disallow: */locale/set* +Disallow: /control/ +Disallow: /download/ +Disallow: /redirect/ +Disallow: /api/ +Disallow: /download/ +""", content_type='text/plain' + )