31 lines
1.0 KiB
Python
31 lines
1.0 KiB
Python
from django.db import transaction
|
|
from django.contrib.auth import get_user_model
|
|
|
|
from rest_framework.response import Response
|
|
from rest_framework import status
|
|
|
|
from pybitid import bitid
|
|
|
|
from .models import Challenge
|
|
from .serializers import ChallengeSerializer
|
|
|
|
|
|
class CreateChallengeMixin:
|
|
"""Add create challenge on get functionality to API views."""
|
|
|
|
def get(self, request, format=None):
|
|
"""Returns a new challenge for the login."""
|
|
serializer = ChallengeSerializer(instance=Challenge.objects.generate())
|
|
serializer.data["challenge"] = bitid.build_uri(
|
|
request.build_absolute_uri(), serializer.data["challenge"]
|
|
)
|
|
return Response(serializer.data, status=status.HTTP_200_OK)
|
|
|
|
|
|
class CreateUserMixin:
|
|
@transaction.atomic
|
|
def create_user(self, username, challenge, address, network):
|
|
user = get_user_model().objects.create(username=username)
|
|
user.address_set.create(address=address, network=network)
|
|
Challenge.objects.invalidate(challenge)
|