mirror of
https://github.com/GSA/notifications-api.git
synced 2026-02-01 15:46:07 -05:00
Add a limit to the number of active 2fa codes that we create. At the moment that is set to 10.
This commit is contained in:
@@ -78,6 +78,7 @@ class Config(object):
|
||||
SMS_CHAR_COUNT_LIMIT = 495
|
||||
BRANDING_PATH = '/images/email-template/crests/'
|
||||
TEST_MESSAGE_FILENAME = 'Test message'
|
||||
MAX_VERIFY_CODE_COUNT = 10
|
||||
|
||||
NOTIFY_SERVICE_ID = 'd6aa2c68-a2d9-4437-ab19-3ae8eb202553'
|
||||
INVITATION_EMAIL_TEMPLATE_ID = '4f46df42-f795-4cc4-83bb-65ca312f49cc'
|
||||
|
||||
@@ -82,6 +82,14 @@ def delete_user_verify_codes(user):
|
||||
db.session.commit()
|
||||
|
||||
|
||||
def count_user_verify_codes(user):
|
||||
query = db.session.query(
|
||||
func.count().label('count')
|
||||
).filter(VerifyCode.user == user,
|
||||
VerifyCode.expiry_datetime <= datetime.utcnow()).one()
|
||||
return query.count
|
||||
|
||||
|
||||
def get_user_by_id(user_id=None):
|
||||
if user_id:
|
||||
return User.query.filter_by(id=user_id).one()
|
||||
|
||||
@@ -12,7 +12,8 @@ from app.dao.users_dao import (
|
||||
get_user_by_email,
|
||||
create_secret_code,
|
||||
save_user_attribute,
|
||||
update_user_password
|
||||
update_user_password,
|
||||
count_user_verify_codes
|
||||
)
|
||||
from app.dao.permissions_dao import permission_dao
|
||||
from app.dao.services_dao import dao_fetch_service_by_id
|
||||
@@ -137,6 +138,10 @@ def send_user_sms_code(user_id):
|
||||
user_to_send_to = get_user_by_id(user_id=user_id)
|
||||
verify_code, errors = request_verify_code_schema.load(request.get_json())
|
||||
|
||||
if count_user_verify_codes(user_to_send_to) >= current_app.config.get('MAX_VERIFY_CODE_COUNT'):
|
||||
# Prevent more than `MAX_VERIFY_CODE_COUNT` active verify codes at a time
|
||||
return jsonify({}), 204
|
||||
|
||||
secret_code = create_secret_code()
|
||||
create_user_code(user_to_send_to, secret_code, SMS_TYPE)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user