Add proxy for registration call

This commit is contained in:
Christian Cueni 2020-02-25 14:42:42 +01:00
parent fff752f59d
commit b572523a33
8 changed files with 155 additions and 16 deletions

View File

@ -3,7 +3,7 @@ import * as axios from 'axios'
const hepBaseUrl = 'https://stage.hep-verlag.ch'; const hepBaseUrl = 'https://stage.hep-verlag.ch';
export function register(registrationData) { export function register(registrationData) {
return axios.post(`${hepBaseUrl}/rest/deutsch/V1/customers`, registrationData); return axios.post('/api/proxy/registration/', registrationData);
} }
export function login(username, password) { export function login(username, password) {

View File

@ -34,7 +34,6 @@ import Logo from '@/components/icons/Logo';
margin: 0 auto; margin: 0 auto;
} }
.public { .public {
grid-template-areas: "h" "c" "f"; grid-template-areas: "h" "c" "f";
@ -44,7 +43,13 @@ import Logo from '@/components/icons/Logo';
width: 100%; width: 100%;
} }
&__content, &__logo { &__content {
@include content-block();
margin-bottom: $large-spacing;
}
&__logo {
@include content-block(); @include content-block();
} }

View File

@ -1,5 +1,6 @@
from django.conf import settings from django.conf import settings
from django.conf.urls import url from django.conf.urls import url
from django.urls import include
from django.views.decorators.csrf import csrf_exempt from django.views.decorators.csrf import csrf_exempt
from graphene_django.views import GraphQLView from graphene_django.views import GraphQLView
@ -11,6 +12,9 @@ app_name = 'api'
urlpatterns = [ urlpatterns = [
url(r'^graphql-public', csrf_exempt(GraphQLView.as_view(schema=schema))), url(r'^graphql-public', csrf_exempt(GraphQLView.as_view(schema=schema))),
url(r'^graphql', csrf_exempt(PrivateGraphQLView.as_view())), url(r'^graphql', csrf_exempt(PrivateGraphQLView.as_view())),
# hep proxy
url(r'^proxy/', include('registration.urls', namespace="registration")),
] ]
if settings.DEBUG: if settings.DEBUG:

View File

@ -82,18 +82,7 @@ class HepClient:
response = self._call('/rest/V1/customers/me', method='put', data={'confirmationKey': confirmation_key}) response = self._call('/rest/V1/customers/me', method='put', data={'confirmationKey': confirmation_key})
return response.json() return response.json()
def customer_create(self, customer_data, address): def customer_create(self, customer_data):
if customer_data['prefix'] == 'Herr':
customer_data['gender'] = 1
else:
customer_data['gender'] = 2
address['country_id'] = 'CH'
address['default_billing'] = True
address['default_shipping'] = True
customer_data['addresses'] = [address]
response = self._call('/rest/deutsch/V1/customers', method='post', data=customer_data) response = self._call('/rest/deutsch/V1/customers', method='post', data=customer_data)
return response.json() return response.json()

View File

@ -2,7 +2,7 @@ from django.conf import settings
from django.conf.urls import url, include from django.conf.urls import url, include
from django.conf.urls.static import static from django.conf.urls.static import static
from django.contrib import admin from django.contrib import admin
from django.urls import re_path, path from django.urls import re_path
from django.views.generic import RedirectView from django.views.generic import RedirectView
from wagtail.admin import urls as wagtailadmin_urls from wagtail.admin import urls as wagtailadmin_urls
from wagtail.core import urls as wagtail_urls from wagtail.core import urls as wagtail_urls

View File

@ -0,0 +1,86 @@
# -*- coding: utf-8 -*-
#
# ITerativ GmbH
# http://www.iterativ.ch/
#
# Copyright (c) 2020 ITerativ GmbH. All rights reserved.
#
# Created on 25.02.20
# @author: chrigu <christian.cueni@iterativ.ch>
import json
from unittest.mock import patch
import requests
from django.test import TestCase, Client
from django.urls import reverse
from core.hep_client import HepClient
from core.tests.mock_hep_data_factory import MockResponse
RESPONSE = {
'id': 1234,
'confirmation': 'abdc1234',
'firstname': 'Pesche',
'lastname': 'Zubrüti',
'email': 'aschima@ch.ch',
'prefix': 'Herr',
'gender': 1,
'addresses': [
{
'country_id': 'CH',
'street': ['Weg 1'],
'postcode': '1234',
'city': 'Äussere Einöde',
'firstname': 'Pesche',
'lastname': 'Zubrüti',
'prefix': 'Herr',
'default_shipping': True,
'default_billing': True,
}
],
}
DATA = {
'customer': {
'firstname': 'Pesche',
'lastname': 'Zubrüti',
'email': 'aschima@ch.ch',
'prefix': 'Herr',
'gender': 1,
'addresses': [
{
'country_id': 'CH',
'street': ['Weg 1'],
'postcode': '1234',
'city': 'Äussere Einöde',
'firstname': 'Pesche',
'lastname': 'Zubrüti',
'prefix': 'Herr',
'default_shipping': True,
'default_billing': True,
}
],
'password': '123454abasfd'
}
}
class ProxyTest(TestCase):
def setUp(self):
self.client = Client()
@patch.object(HepClient, 'customer_create', return_value=RESPONSE)
def test_proxy_filters_confirmation_key(self, create_mock):
response = self.client.post(reverse('api:registration:proxy'), DATA)
found = 'confirmation' in response.json().keys()
self.assertFalse(found)
@patch.object(requests, 'post', return_value=MockResponse(400,
data={'message': 'Ein Kunde mit der gleichen E-Mail-Adresse existiert bereits in einer zugeordneten Website.'}))
def test_handles_400(self, create_mock):
response = self.client.post(reverse('api:registration:proxy'), DATA)
self.assertEquals(response.json()['message'], 'Ein Kunde mit der gleichen E-Mail-Adresse existiert bereits in einer zugeordneten Website.')

View File

@ -0,0 +1,18 @@
# -*- coding: utf-8 -*-
#
# ITerativ GmbH
# http://www.iterativ.ch/
#
# Copyright (c) 2020 ITerativ GmbH. All rights reserved.
#
# Created on 25.02.20
# @author: chrigu <christian.cueni@iterativ.ch>
from django.conf.urls import url
from django.views.decorators.csrf import csrf_exempt
from registration.view import RegistrationProxyView
app_name = 'registration'
urlpatterns = [
url(r'^registration/', csrf_exempt(RegistrationProxyView.as_view()), name="proxy"),
]

View File

@ -0,0 +1,37 @@
# -*- coding: utf-8 -*-
#
# ITerativ GmbH
# http://www.iterativ.ch/
#
# Copyright (c) 2020 ITerativ GmbH. All rights reserved.
#
# Created on 25.02.20
# @author: chrigu <christian.cueni@iterativ.ch>
import json
from django.http import HttpResponse
from django.views import View
from core.hep_client import HepClient, HepClientException
class RegistrationProxyView(View):
def post(self, request, *args, **kwargs):
hep_client = HepClient()
if request.POST:
data = request.POST
else:
data = json.loads(request.body)
try:
hep_data = hep_client.customer_create(data)
except HepClientException as e:
return HttpResponse(json.dumps(e.args[1]), status=e.args[0], content_type='application/json')
response_data = hep_data.copy()
del response_data['confirmation']
return HttpResponse(json.dumps(response_data), content_type='application/json')