################################# One Time TOKEN ##################################################
from django.contrib.auth.tokens import PasswordResetTokenGenerator
from six import text_type
class OneTimeToken(PasswordResetTokenGenerator):
def __make_hash_value(self, user, timestamp):
return (text_type(user.is_active)+text_type(user.pk)+text_type(timestamp))
one_time_token = OneTimeToken()
#one_time_token_generator.make_token(user)
#one_time_token_generator.check_token(user, token)
####################################################################################################
################################## TOTP TOKEN ####################################################
import pyotp
import qrcode
from qrcode.image.svg import SvgImage
from io import BytesIO
from django.http import JsonResponse
class TOTP_Token:
def __get_qrcode_svg(self,uri):
stream = BytesIO()
img = qrcode.make(uri, image_factory = SvgImage)
img.save(stream)
return stream.getvalue().decode()
def create_totp_token(self,user):
key = user.profile.otp_key
#create token
totp = pyotp.totp.TOTP(key)
#create uri
totp_uri = pyotp.totp.TOTP(key).provisioning_uri(user.username,issuer_name="Souk Baalbeck")
svg = __get_qrcode_svg(totp_uri)
return svg
def verify_totp_token(self,user, token):
user_key = user.profile.otp_key
#create token
totp = pyotp.totp.TOTP(user_key)
#verify if token and user match
if token == totp.now():
return True
else:
return False
totp_token = TOTP_Token()
#######################################################################################################