ldap-python-webui/libs/helper.py

77 lines
2.1 KiB
Python

#!/usr/bin/python3
import sqlite3
import re
from onetimepass import valid_totp
from secrets import choice
import segno
from os import path
import uuid
class Tools():
def __init__(self):
self.username = ''
#check code
def code_is_valid(self, code, db):
con = sqlite3.connect(db)
cur = con.cursor()
codes=[]
for row in cur.execute('SELECT * FROM codes WHERE valid = 1'):
codes.append(row[0])
return(bool(code in codes))
def mark_code_as_used(self, code, db):
con = sqlite3.connect(db)
cur = con.cursor()
cur.execute('''UPDATE codes SET valid=? WHERE code==?''',(0, code))
con.commit()
#form validation
def input_validation(self, e, ws=None):
if ws:
#accepts whitespaces
regex = r'^\w+( \w+)*$'
else:
regex = r'^\w+$'
return(bool(re.fullmatch(regex, e)))
def email_validation(self, e):
regex = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b'
return(bool(re.fullmatch(regex, e)))
def pwd_validation(self, e):
regex = r'^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\d@$!#%*?&]{8,18}$'
return(bool(re.fullmatch(regex, e)))
# 2FA
def gen_qr(self, secret):
if(not path.isfile('static/tmp/'+secret+'.png')):
qrcode = segno.make(secret, micro=False)
qrcode.save('static/tmp/'+secret+'.png', scale=10)
def gen_secret(self): # Function to return a random string with length 16.
secret = ''
while len(secret) < 16:
secret += choice('ABCDEFGHIJKLMNOPQRSTUVWXYZ234567')
self.gen_qr(secret)
return secret
def _2fa_validation(self, otp, secret):
authenticated = valid_totp(otp, secret)
if authenticated:
print('Correct otp, Authenticated!')
return True
elif not authenticated:
print('Wrong otp, please try again.')
return False
def key(self):
return uuid.uuid4().hex
tools = Tools()