This repository has been archived on 2023-02-07. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
blender-my-data/mydata/auth.py
T
Markus Ritberger cf61e0d7da initial commit
2018-06-24 21:16:26 +02:00

59 lines
1.8 KiB
Python

import re
from rest_framework import exceptions
from rest_framework.authentication import BaseAuthentication
from mydata.blender_id import blender_id_server_validate, blender_id_server_authenticate
from mydata.models import MydataUser
class BlenderIdAuthentication(BaseAuthentication):
def authenticate(self, request):
"""Authenticates bearer token with Blender ID"""
bearer = request.META.get('HTTP_AUTHORIZATION')
if bearer is None:
return None
try:
bearer = re.search('Bearer (.*)', bearer).group(1)
except AttributeError:
return None
try:
response = blender_id_server_validate(bearer)
user = MydataUser()
user.id = response['id']
user.email = response['email']
user.name = response['full_name']
except MydataUser.DoesNotExist:
raise exceptions.AuthenticationFailed('invalid token')
return (user, bearer)
class BlenderIdBackend:
"""Custom django backend for Blender ID authentication"""
def authenticate(self, request, username=None, password=None):
try:
userdata = blender_id_server_authenticate(username, password)
except MydataUser.DoesNotExist:
return None;
if userdata is not None:
try:
user = MydataUser.objects.get(blender_id=userdata['blender_id'])
except MydataUser.DoesNotExist:
user = MydataUser(username=username)
user.blender_id = userdata['blender_id']
user.save()
return user
return None
def get_user(self, pk):
try:
return MydataUser.objects.get(pk=pk)
except MydataUser.DoesNotExist:
return None