expephalon-chat/smsotp/otp.py

40 lines
1.2 KiB
Python
Raw Normal View History

from core.classes.otp import BaseOTPProvider
from smsotp.models import OTPToken
from core.modules.sms import get_default_sms_provider
from dbsettings.functions import getValue
from django.utils import timezone
class SMSOTP(BaseOTPProvider):
@property
def get_name(self):
return "SMS OTP"
def create_token(self, user):
token = OTPToken.objects.create(user=user)
try:
token.send_sms()
return True
except:
return False
@property
def is_active(self):
return bool(get_default_sms_provider())
def start_authentication(self, user):
if self.create_token(user):
return "We have sent you an SMS containing your authentication token."
else:
return "An error has occurred, please try again later or contact the administrator."
def validate_token(self, user, token):
try:
max_age = timezone.now() - timezone.timedelta(seconds=int(getValue("smsotp.max_age", "300")))
OTPToken.objects.get(user=user, token=token, creation__gte=max_age).delete()
return True
except OTPToken.DoesNotExist:
return False
OTPPROVIDERS = {"smsotp": SMSOTP}