22 lines
701 B
Python
22 lines
701 B
Python
|
from django.db import models
|
||
|
from django.contrib.auth import get_user_model
|
||
|
|
||
|
from annoying.fields import AutoOneToOneField
|
||
|
from pyotp import TOTP, random_base32
|
||
|
|
||
|
|
||
|
class TOTPSecret(models.Model):
|
||
|
user = AutoOneToOneField(get_user_model(), models.CASCADE, primary_key=True)
|
||
|
secret = models.CharField(max_length=32, default=random_base32)
|
||
|
active = models.BooleanField(default=False)
|
||
|
|
||
|
def verify(self, token):
|
||
|
return TOTP(self.secret).verify(token)
|
||
|
|
||
|
def get_uri(self):
|
||
|
return TOTP(self.secret).provisioning_uri(name=self.user.email, issuer_name="KumiDC")
|
||
|
|
||
|
def change_secret(self):
|
||
|
self.secret = random_base32()
|
||
|
self.save()
|
||
|
return self.secret
|