diff --git a/.gitignore b/.gitignore index b9bcaad6..36052a32 100644 --- a/.gitignore +++ b/.gitignore @@ -23,4 +23,5 @@ stregsystem.log # nix .direnv .envrc -result \ No newline at end of file +result +/.vscode diff --git a/stregsystem/templates/stregsystem/error_invalidquickbuy.html b/stregsystem/templates/stregsystem/error_invalidquickbuy.html index 72e7bd75..16618fa5 100644 --- a/stregsystem/templates/stregsystem/error_invalidquickbuy.html +++ b/stregsystem/templates/stregsystem/error_invalidquickbuy.html @@ -2,6 +2,11 @@ {% load stregsystem_extras %} +{% block head %} +{{ block.super }} +{% include "stregsystem/gdpr.html" %} +{% endblock %} + {% block headline %}
Du forsøgte at bruge quickbuy men fejlede.
This incident will be reported.
diff --git a/stregsystem/tests.py b/stregsystem/tests.py index 97de7230..106126db 100644 --- a/stregsystem/tests.py +++ b/stregsystem/tests.py @@ -46,7 +46,12 @@ ) from stregsystem.purchase_heatmap import prepare_heatmap_template_context from stregsystem.templatetags.stregsystem_extras import caffeine_emoji_render -from stregsystem.utils import mobile_payment_exact_match_member, strip_emoji, PaymentToolException +from stregsystem.utils import ( + mobile_payment_exact_match_member, + strip_emoji, + PaymentToolException, + insert_gdpr_span, +) from stregsystem.mail import data_sent @@ -2283,3 +2288,23 @@ def test_welcome_mail_paid_approved(self, mock_mail_method: MagicMock): signup_request.approve() mock_mail_method.assert_called_once() + + +class MiscUtilTests(TestCase): + fixtures = ['initial_data'] + + def test_gdpr_is_inserted(self): + assumed_user = "jokke" + assumed_non_user = "nonuser" + + simple_quickbuy = assumed_user + simple_gdpr_quickbuy = insert_gdpr_span(simple_quickbuy) + expected_simple_gdpr_quickbuy = '' + assumed_user + '' + + self.assertEqual(simple_gdpr_quickbuy, expected_simple_gdpr_quickbuy) + + advanced_quickbuy = assumed_user + " " + assumed_non_user + advanced_gdpr_quickbuy = insert_gdpr_span(advanced_quickbuy) + expected_advanced_gdpr_quickbuy = '' + assumed_user + ' ' + assumed_non_user + + self.assertEqual(advanced_gdpr_quickbuy, expected_advanced_gdpr_quickbuy) diff --git a/stregsystem/utils.py b/stregsystem/utils.py index baafca0e..9c8c1c05 100644 --- a/stregsystem/utils.py +++ b/stregsystem/utils.py @@ -180,6 +180,21 @@ def mobilepay_launch_uri(comment: str, amount: float) -> str: return 'mobilepay://send?{}'.format(urllib.parse.urlencode(query)) +def insert_gdpr_span(text: str) -> str: + from stregsystem.models import Member + + parts = text.split(' ') + + for i, part in enumerate(parts): + try: + Member.objects.get(username__iexact=part) + parts[i] = '' + part + '' + except Member.DoesNotExist: + continue + + return " ".join(parts) + + class stregsystemTestRunner(DiscoverRunner): def __init__(self, *args, **kwargs): settings.TEST_MODE = True diff --git a/stregsystem/views.py b/stregsystem/views.py index ff060612..f8b8f47b 100644 --- a/stregsystem/views.py +++ b/stregsystem/views.py @@ -13,6 +13,8 @@ namedtuple, ) +from django.utils.safestring import mark_safe + from django.contrib.admin.views.decorators import staff_member_required from django.contrib.auth.decorators import permission_required from django.core import management @@ -54,6 +56,7 @@ parse_csv_and_create_mobile_payments, PaymentToolException, make_unprocessed_signups_query, + insert_gdpr_span, ) from .booze import ballmer_peak @@ -131,9 +134,12 @@ def sale(request, room_id): try: username, bought_ids = parser.parse(_pre_process(buy_string)) except parser.QuickBuyError as err: + correct = mark_safe(insert_gdpr_span(err.parsed_part)) + incorrect = mark_safe(insert_gdpr_span(err.failed_part)) + values = { - 'correct': err.parsed_part, - 'incorrect': err.failed_part, + 'correct': correct, + 'incorrect': incorrect, 'error_ptr': '~' * (len(err.parsed_part)) + '^', 'error_msg': ' ' * (len(err.parsed_part) - 4) + 'Fejl her', 'room': room,