Handle token on logout, fix HepClient

This commit is contained in:
Christian Cueni 2021-06-07 11:27:33 +02:00
parent 0dc699baf0
commit 55502d5507
2 changed files with 73 additions and 66 deletions

View File

@ -24,23 +24,20 @@ class HepClientNoTokenException(Exception):
class HepClient: class HepClient:
URL = settings.HEP_URL
def _call(self, url, request, token, method='get', data=None): def _call(self, url, request, token, method='get', data=None):
request_url = f'{self.URL}{url}'
token_parameters = { token_parameters = {
'token': token, 'token': token,
'request': request 'request': request
} }
if method == 'post': if method == 'post':
response = requests.post(request_url, json=data) response = oauth.hep.post(url, json=data, **token_parameters)
elif method == 'get': elif method == 'get':
response = oauth.hep.get(url, params=data, **token_parameters) response = oauth.hep.get(url, params=data, **token_parameters)
elif method == 'put': elif method == 'put':
response = requests.put(request_url, data=data) response = oauth.hep.put(url, data=data, **token_parameters)
if response.status_code == 401: if response.status_code == 401:
raise HepClientUnauthorizedException(response.status_code, response.json()) raise HepClientUnauthorizedException(response.status_code, response.json())
@ -59,66 +56,66 @@ class HepClient:
def logout(self, request=None, token=None): def logout(self, request=None, token=None):
self._has_credentials(request, token) self._has_credentials(request, token)
response = self._call('api/auth/logout', request, token, method='post') self._call('api/auth/logout', request, token, method='post')
return response.json()['message'] return True
def fetch_eorders(self, request=None, token=None): def fetch_eorders(self, request=None, token=None):
# self._has_credentials(request, token) self._has_credentials(request, token)
# data = { data = {
# 'filters[product_type]': 'eLehrmittel', 'filters[product_type]': 'eLehrmittel',
# } }
# response = self._call('api/partners/users/orders/search', request, token, data=data) response = self._call('api/partners/users/orders/search', request, token, data=data)
# return response.json()['data'] return response.json()['data']
return [ # return [
{ # {
"id": 5, # "id": 5,
"status": "paid", # "status": "paid",
"order_total": 10000, # "order_total": 10000,
"created_at": "2021-05-10T20:52:16.000000Z", # "created_at": "2021-05-10T20:52:16.000000Z",
"billing_address": { # "billing_address": {
"id": 20, # "id": 20,
"salutation": "male", # "salutation": "male",
"first_name": "Hans", # "first_name": "Hans",
"last_name": "Meier", # "last_name": "Meier",
"company": "Lustig GmbH", # "company": "Lustig GmbH",
"street": "Sulgenrain 12890", # "street": "Sulgenrain 12890",
"city": "Bern", # "city": "Bern",
"post_code": "3007", # "post_code": "3007",
"country": "Schweiz" # "country": "Schweiz"
}, # },
"delivery_address": { # "delivery_address": {
"id": 19, # "id": 19,
"salutation": "male", # "salutation": "male",
"first_name": "Hans", # "first_name": "Hans",
"last_name": "Muster", # "last_name": "Muster",
"company": "Muster AG", # "company": "Muster AG",
"street": "Ruderweg 24", # "street": "Ruderweg 24",
"city": "Bern", # "city": "Bern",
"post_code": "3000", # "post_code": "3000",
"country": "Schweiz" # "country": "Schweiz"
}, # },
"entries": [ # "entries": [
{ # {
"id": 3433, # "id": 3433,
"uri": "\/products\/myskillbox-lernende", # "uri": "\/products\/myskillbox-lernende",
"url": None, # "url": None,
"title": "mySkillbox für Lernende ", # "title": "mySkillbox für Lernende ",
"subtitle": "Lizenz gültig für 4 Jahre", # "subtitle": "Lizenz gültig für 4 Jahre",
"isbn": "978-3-0355-1397-4", # "isbn": "978-3-0355-1397-4",
"slug": "myskillbox-lernende", # "slug": "myskillbox-lernende",
"product_type": "eLehrmittel", # "product_type": "eLehrmittel",
"product_form": "", # "product_form": "",
"cover": "https:\/\/hep-verlag.fra1.digitaloceanspaces.com\/staging\/products\/2921\/978-3-0355-1397-4.jpg", # "cover": "https:\/\/hep-verlag.fra1.digitaloceanspaces.com\/staging\/products\/2921\/978-3-0355-1397-4.jpg",
"price": 100, # "price": 100,
"price_total": 100, # "price_total": 100,
"amount": 1, # "amount": 1,
"authors": [] # "authors": []
} # }
] # ]
} # }
] # ]
def active_myskillbox_product_for_customer(self, request=None, token=None): def active_myskillbox_product_for_customer(self, request=None, token=None):
eorders = self.fetch_eorders(request=request, token=token) eorders = self.fetch_eorders(request=request, token=token)

View File

@ -4,6 +4,7 @@ from django.utils.timezone import now
from graphene import relay from graphene import relay
from oauth.hep_client import HepClient, HepClientException from oauth.hep_client import HepClient, HepClientException
from oauth.models import OAuth2Token
from oauth.user_signup_login_handler import create_role_for_user from oauth.user_signup_login_handler import create_role_for_user
from users.models import License from users.models import License
@ -54,13 +55,22 @@ class Logout(graphene.Mutation):
success = graphene.Boolean() success = graphene.Boolean()
def mutate(self, info): def mutate(self, info):
# log user out from myskillbox even if hep logout fails
try: try:
logout(info.context) token = OAuth2Token.objects.get(user=info.context.user)
hep_client = HepClient() hep_client = HepClient()
hep_client.logout(request=info) try:
return Logout(success=True) hep_client.logout(request=info.context)
except Exception: except Exception as e:
return Logout(success=False) pass
token.delete()
except OAuth2Token.DoesNotExist:
pass
logout(info.context)
return Logout(success=True)
class OauthMutations(object): class OauthMutations(object):