109898688: All codes are valid until one code is used, then they are all marked used.

Fixed the is_active() method on the Users model, if the user was pending they would come back as active, allowing a user to sign in before being active.
There is still a problem with the validate_sms_code and validate_email_code method.
This commit is contained in:
Rebecca Law
2015-12-16 12:20:25 +00:00
parent bd8bb3c926
commit 64812c1614
18 changed files with 259 additions and 203 deletions

View File

@@ -13,11 +13,11 @@ def add_code(user_id, code, code_type):
db.session.add(code)
db.session.commit()
return code.id
def get_code(user_id, code_type):
verify_code = VerifyCodes.query.filter_by(user_id=user_id, code_type=code_type, code_used=False).first()
return verify_code
def get_codes(user_id, code_type):
return VerifyCodes.query.filter_by(user_id=user_id, code_type=code_type, code_used=False).all()
def get_code_by_code(user_id, code, code_type):
@@ -32,9 +32,10 @@ def use_code(id):
def use_code_for_user_and_type(user_id, code_type):
verify_code = VerifyCodes.query.filter_by(user_id=user_id, code_type=code_type).first()
verify_code.code_used = True
db.session.add(verify_code)
codes = VerifyCodes.query.filter_by(user_id=user_id, code_type=code_type, code_used=False).all()
for verify_code in codes:
verify_code.code_used = True
db.session.add(verify_code)
db.session.commit()

View File

@@ -49,8 +49,10 @@ class TwoFactorForm(Form):
Regexp(regex=verify_code, message='Code must be 5 digits')])
def validate_sms_code(self, a):
code = verify_codes_dao.get_code(session['user_id'], 'sms')
validate_code(self.sms_code, code)
codes = verify_codes_dao.get_codes(session['user_id'], 'sms')
for code in codes:
if validate_code(self.sms_code, code):
return True
class VerifyForm(Form):
@@ -62,12 +64,16 @@ class VerifyForm(Form):
Regexp(regex=verify_code, message='Code must be 5 digits')])
def validate_email_code(self, a):
code = verify_codes_dao.get_code(session['user_id'], 'email')
validate_code(self.email_code, code)
codes = verify_codes_dao.get_codes(session['user_id'], 'email')
for code in codes:
if validate_code(self.email_code, code):
return True
def validate_sms_code(self, a):
code = verify_codes_dao.get_code(session['user_id'], 'sms')
validate_code(self.sms_code, code)
codes = verify_codes_dao.get_codes(session['user_id'], 'sms')
for code in codes:
if validate_code(self.sms_code, code):
return True
def validate_code(field, code):

View File

@@ -19,7 +19,6 @@ def check_and_resend_email_code():
if form.validate_on_submit():
user = users_dao.get_user_by_id(session['user_id'])
users_dao.update_email_address(id=user.id, email_address=form.email_address.data)
verify_codes_dao.use_code_for_user_and_type(user_id=user.id, code_type='email')
send_email_code(user_id=user.id, email=user.email_address)
return redirect('/verify')
return jsonify(form.errors), 400
@@ -37,7 +36,6 @@ def check_and_resend_text_code():
if form.validate_on_submit():
user = users_dao.get_user_by_id(session['user_id'])
users_dao.update_mobile_number(id=user.id, mobile_number=form.mobile_number.data)
verify_codes_dao.use_code_for_user_and_type(user_id=user.id, code_type='sms')
send_sms_code(user_id=user.id, mobile_number=user.mobile_number)
return redirect('/verify')
return jsonify(form.errors), 400