From ef7ea3b6c12279847a6d9cbe5eb1616df8ef2cec Mon Sep 17 00:00:00 2001 From: Lucas Brandstaetter <lucas@brandstaetter.tech> Date: Fri, 27 Dec 2024 17:05:14 +0000 Subject: [PATCH] Add a new url to redeem a badge by token Now possible without request parameter and can be resolved with the url and hub_absolute functions. --- src/plainui/urls.py | 1 + src/plainui/views/badges.py | 8 ++++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/plainui/urls.py b/src/plainui/urls.py index c6ac7b5d6..69bcc2b6e 100644 --- a/src/plainui/urls.py +++ b/src/plainui/urls.py @@ -29,6 +29,7 @@ urlpatterns = [ path('logout', views.LogoutView.as_view(), name='logout'), path('me', views.ProfileView.as_view(), name='userprofile'), path('me/manage_badges', views.ManageBadgesView.as_view(), name='manage_badges'), + path('me/manage_badges/redeem/<str:redeem_token>', views.ManageBadgesView.as_view(), name='manage_badges'), path('me/manage_badges/settings', views.BadgeSettingsView.as_view(), name='manage_badges__settings'), path('me/manage_badges/<uuid:pk>/accept', views.ManageBadgeView.as_view(mode='accept'), name='manage_badges__accept'), path('me/manage_badges/<uuid:pk>/update', views.ManageBadgeView.as_view(mode='update'), name='manage_badges__update'), diff --git a/src/plainui/views/badges.py b/src/plainui/views/badges.py index 83e9bb3ad..4f5ebe983 100644 --- a/src/plainui/views/badges.py +++ b/src/plainui/views/badges.py @@ -167,7 +167,7 @@ class RedeemBadgeView(ConferenceRequiredMixin, FormView): return context def get(self, request: HttpRequest, *args: str, **kwargs: Any) -> HttpResponse: - token = request.GET.get('redeem_token') + token = request.GET.get('redeem_token', kwargs.get('redeem_token')) try: self.form = RedeemBadgeForm({'token': token, 'purpose': 'redeem_token'}, conference=self.conf) if self.form.is_valid(): @@ -238,7 +238,11 @@ class ManageBadgesView(ConferenceRequiredMixin, TemplateView): return context def dispatch(self, request, *args, **kwargs): - if (hasattr(request, 'GET') and request.GET.get('redeem_token')) or (hasattr(request, 'GET') and request.POST.get('purpose', None) == 'redeem_token'): + if ( + (hasattr(request, 'GET') and request.GET.get('redeem_token')) + or (hasattr(request, 'GET') and request.POST.get('purpose', None) == 'redeem_token') + or kwargs.get('redeem_token') + ): return RedeemBadgeView.as_view(external_context=self.get_context_data())(request, *args, **kwargs) return super().dispatch(request, *args, **kwargs) -- GitLab