from django.db import models from django.contrib.auth.models import AbstractUser from rest_framework import exceptions from rest_framework import authentication from otpauth.serializer import TokenSerializer class OTPSeed(AbstractUser): id = models.AutoField(primary_key=True) name = models.CharField(max_length=128) realm = models.CharField(max_length=128) seed = models.CharField(max_length=128) class Meta: unique_together = (('name', 'realm'),) def __str__(self): return "'{}'@{}".format(self.name, self.realm) class OTPAuthentication(authentication.BaseAuthentication): def authenticate(self, request): serializer = TokenSerializer(data=request.data) if serializer.is_valid(): print("trying to save... {}".format(serializer)) user, token = serializer.save() else: raise exceptions.AuthenticationFailed() return (user, token)