36 lines
No EOL
907 B
Python
36 lines
No EOL
907 B
Python
from core.classes.otp import BaseOTPProvider
|
|
from totp.models import TOTPUser
|
|
|
|
from dbsettings.functions import getValue
|
|
|
|
from django.utils import timezone
|
|
|
|
import pyotp
|
|
|
|
class TOTP(BaseOTPProvider):
|
|
@property
|
|
def get_name(self):
|
|
return "Time-based OTP"
|
|
|
|
@property
|
|
def is_active(self):
|
|
return True
|
|
|
|
def active_for_user(self, user):
|
|
try:
|
|
TOTPUser.objects.get(user=user)
|
|
return super().active_for_user(user)
|
|
except TOTPUser.DoesNotExist:
|
|
return False
|
|
|
|
def start_authentication(self, user):
|
|
return "Please enter the token displayed in your app."
|
|
|
|
def validate_token(self, user, token):
|
|
try:
|
|
otpuser = TOTPUser.objects.get(user=user)
|
|
return pyotp.TOTP(otpuser.secret).verify(token)
|
|
except TOTPUser.DoesNotExist:
|
|
return False
|
|
|
|
OTPPROVIDERS = {"totp": TOTP} |