def checkOTPExistance(self, skypedata, replyObj): """ Check if OTP already exists for the specific email address """ try: user = Users.get(user_id=skypedata['from']['id'][3:]) try: OTP.get(user_id=user.id) replyObj.send_reply(skypedata, "Incorrect OTP, please send the correct one.") #return True except OTP.DoesNotExist: self.otp_generated = False self.user_registered = False replyObj.send_reply(skypedata, """I think you were off for a long time and the OTP would hav been expired. Can you please provide your servicenow registered email address?""") #return False except Users.DoesNotExist: self.user_registered = False self.otp_generated = False replyObj.send_reply(skypedata, """I think you were off for a long time or would have entered a wrong email address. Can you please provide your servicenow registered email address?""")
def createUserOTP(self, user_data, skypedata, otp): """ Creates or fetches User and OTP atomically """ try: user = Users.get_or_create( name=user_data['name'], user_id=skypedata['from']['id'][3:], servicenow_id=user_data['sys_id'], is_active=False) try: otp_obj = OTP.get(user_id=user[0].id) otp_obj.otp = otp otp_obj.save() except OTP.DoesNotExist: OTP.create(user_id=user[0].id, otp=otp) return True except Exception as e: return False
def checkOTPExistance(self, skypedata, replyObj): """ Check if OTP already exists for the specific email address """ try: print('Inside checkORPexistance first try') user = Users.get(user_id=skypedata['from']['id'][3:]) try: print('Inside checkORPexistance seconf try') OTP.get(user_id=user.id) replyObj.send_reply(skypedata, "Incorrect OTP, please send the correct one.") except OTP.DoesNotExist: print('Inside checkORPexistance first except') self.otp_generated = False self.user_registered = False replyObj.send_reply(skypedata, """I think you were off for a long time and the OTP would hav been expired. Can you please provide your email address?""") except Users.DoesNotExist: print('Inside checkORPexistance second except') self.user_registered = False self.otp_generated = False replyObj.send_reply(skypedata, """I think you were off for a long time or would have entered a wrong email address. Can you please provide your email address?""")
def verifyOTP(self, skypedata): """ Verify OTP with of specific user """ try: pattern = '[#!@$%]{{{}}}[\d]{{{}}}[!@#$%]{{{}}}'.format(os.environ.get('OTP_SPECIAL_CHARACTERS_LIMIT'), os.environ.get('OTP_DIGITS_LIMIT'), os.environ.get('OTP_SPECIAL_CHARACTERS_LIMIT')) # finds opt from the text entered by the user using regex otp = re.findall(pattern, skypedata['text']) #otp = re.findall(r'FUJIAMAZE+[\d]+', skypedata['text']) if len(otp)==1 and (otp[0] in skypedata['text'].split()): # using split coz regex gives valid(matching regex) string from an invalid(valid regex but an incorrect otp) one too. it gives @#12345@# from string !@#12345@#$ otp_obj = OTP.get(otp=otp[0]) user = Users.get(id=otp_obj.user_id) if (user and user.user_id == skypedata['from']['id'][3:]): user.is_active = True user.save() # Make the user as active return True return False except BaseException as e: return False
""" Check if the OTP has passed 10 minutes after being created and if True then delete that record """ import os import datetime from app.models.user import OTP expiry_time = datetime.datetime.now() - datetime.timedelta( minutes=int(os.environ.get('OTP_LIFETIME'))) query = OTP.delete().where(expiry_time < OTP.set_time) query.execute()