mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-08-24 16:24:08 -04:00
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:
@@ -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()
|
||||
|
||||
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user