diff --git a/client/src/pages/registration.vue b/client/src/pages/registration.vue index b9b2db71..416641c1 100644 --- a/client/src/pages/registration.vue +++ b/client/src/pages/registration.vue @@ -321,7 +321,8 @@ export default { default_billing: true }] }, - password: this.password + password: this.password, + accepted_terms: this.acceptedTerms }; register(registrationData).then((response) => { @@ -331,8 +332,17 @@ export default { }) .catch((error) => { console.warn(error); - if (error.response.data.message && error.response.data.message === 'Ein Kunde mit der gleichen E-Mail-Adresse existiert bereits in einer zugeordneten Website.') { - this.emailErrors = ['Die angegebene E-Mail ist bereits registriert.']; + if (error.response.data.message) { + switch(error.response.data.message) { + case 'Ein Kunde mit der gleichen E-Mail-Adresse existiert bereits in einer zugeordneten Website.': + this.emailErrors = ['Die angegebene E-Mail ist bereits registriert.']; + break; + case 'Die AGBs und die Datenschutzbestimmungen müssen akzeptiert werden': + this.acceptedTermsError = ['Die AGBs und die Datenschutzbestimmungen müssen akzeptiert werden']; + break; + default: + this.registrationError = 'Es ist ein Fehler aufgetreten. Bitte versuchen Sie nochmals.'; + } } else { this.registrationError = 'Es ist ein Fehler aufgetreten. Bitte versuchen Sie nochmals.'; } diff --git a/server/registration/tests/test_registration_proxy.py b/server/registration/tests/test_registration_proxy.py index 36e1ca8c..9fbfe6a1 100644 --- a/server/registration/tests/test_registration_proxy.py +++ b/server/registration/tests/test_registration_proxy.py @@ -61,7 +61,8 @@ DATA = { 'default_billing': True, } ], - 'password': '123454abasfd' + 'password': '123454abasfd', + 'accepted_terms': True } } @@ -84,3 +85,11 @@ class ProxyTest(TestCase): response = self.client.post(reverse('api:registration:proxy'), json.dumps(DATA), content_type="application/json") self.assertEquals(response.json()['message'], 'Ein Kunde mit der gleichen E-Mail-Adresse existiert bereits in einer zugeordneten Website.') + + def test_requires_accepted_terms(self): + + del DATA['customer']['accepted_terms'] + + response = self.client.post(reverse('api:registration:proxy'), json.dumps(DATA), content_type="application/json") + self.assertEquals(response.status_code, 400) + self.assertEquals(response.json()['message'], 'Die AGBs und die Datenschutzbestimmungen müssen akzeptiert werden') diff --git a/server/registration/view.py b/server/registration/view.py index f9eb6712..e2bda370 100644 --- a/server/registration/view.py +++ b/server/registration/view.py @@ -20,6 +20,14 @@ class RegistrationProxyView(View): def post(self, request, *args, **kwargs): hep_client = HepClient() data = json.loads(request.body) + + if not self.terms_accepted(data['customer']): + return JsonResponse( + { + 'message': 'Die AGBs und die Datenschutzbestimmungen müssen akzeptiert werden' + }, + status=400) + data['customer']['group_id'] = 5 try: @@ -32,3 +40,9 @@ class RegistrationProxyView(View): return JsonResponse(response_data) + def terms_accepted(self, customer): + if 'accepted_terms' in customer and customer['accepted_terms']: + del customer['accepted_terms'] + return True + + return False