mirror of
https://github.com/GSA/notifications-api.git
synced 2025-12-21 16:01:15 -05:00
Record and persist failed login count on api.
This commit is contained in:
@@ -62,3 +62,9 @@ def get_model_users(user_id=None):
|
|||||||
if user_id:
|
if user_id:
|
||||||
return User.query.filter_by(id=user_id).one()
|
return User.query.filter_by(id=user_id).one()
|
||||||
return User.query.filter_by().all()
|
return User.query.filter_by().all()
|
||||||
|
|
||||||
|
|
||||||
|
def increment_failed_login_count(user):
|
||||||
|
user.failed_login_count += 1
|
||||||
|
db.session.add(user)
|
||||||
|
db.session.commit()
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ from sqlalchemy.orm.exc import NoResultFound
|
|||||||
from app.dao.services_dao import get_model_services
|
from app.dao.services_dao import get_model_services
|
||||||
from app.dao.users_dao import (
|
from app.dao.users_dao import (
|
||||||
get_model_users, save_model_user, delete_model_user,
|
get_model_users, save_model_user, delete_model_user,
|
||||||
create_user_code, get_user_code, use_user_code,
|
create_user_code, get_user_code, use_user_code, increment_failed_login_count,
|
||||||
create_secret_code)
|
create_secret_code)
|
||||||
from app.schemas import (
|
from app.schemas import (
|
||||||
user_schema, users_schema, service_schema, services_schema,
|
user_schema, users_schema, service_schema, services_schema,
|
||||||
@@ -71,6 +71,7 @@ def verify_user_password(user_id):
|
|||||||
if user.check_password(txt_pwd):
|
if user.check_password(txt_pwd):
|
||||||
return jsonify(''), 204
|
return jsonify(''), 204
|
||||||
else:
|
else:
|
||||||
|
increment_failed_login_count(user)
|
||||||
return jsonify(result='error', message={'password': ['Incorrect password']}), 400
|
return jsonify(result='error', message={'password': ['Incorrect password']}), 400
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,14 @@
|
|||||||
from sqlalchemy.exc import DataError
|
from sqlalchemy.exc import DataError
|
||||||
from sqlalchemy.orm.exc import NoResultFound
|
from sqlalchemy.orm.exc import NoResultFound
|
||||||
|
|
||||||
|
import pytest
|
||||||
from app.dao.users_dao import (
|
from app.dao.users_dao import (
|
||||||
save_model_user, get_model_users, delete_model_user)
|
save_model_user,
|
||||||
|
get_model_users,
|
||||||
|
delete_model_user,
|
||||||
|
increment_failed_login_count
|
||||||
|
)
|
||||||
|
|
||||||
from tests.app.conftest import sample_user as create_sample_user
|
from tests.app.conftest import sample_user as create_sample_user
|
||||||
from app.models import User
|
from app.models import User
|
||||||
|
|
||||||
@@ -60,3 +67,10 @@ def test_delete_users(notify_api, notify_db, notify_db_session, sample_user):
|
|||||||
assert User.query.count() == 1
|
assert User.query.count() == 1
|
||||||
delete_model_user(sample_user)
|
delete_model_user(sample_user)
|
||||||
assert User.query.count() == 0
|
assert User.query.count() == 0
|
||||||
|
|
||||||
|
|
||||||
|
def test_increment_failed_login_should_increment_failed_logins(notify_api, notify_db, notify_db_session, sample_user):
|
||||||
|
assert User.query.count() == 1
|
||||||
|
assert sample_user.failed_login_count == 0
|
||||||
|
increment_failed_login_count(sample_user)
|
||||||
|
assert sample_user.failed_login_count == 1
|
||||||
|
|||||||
@@ -182,6 +182,9 @@ def test_user_verify_password_invalid_password(notify_api,
|
|||||||
path=url_for('user.verify_user_password', user_id=sample_user.id),
|
path=url_for('user.verify_user_password', user_id=sample_user.id),
|
||||||
method='POST',
|
method='POST',
|
||||||
request_body=data)
|
request_body=data)
|
||||||
|
|
||||||
|
assert sample_user.failed_login_count == 0
|
||||||
|
|
||||||
resp = client.post(
|
resp = client.post(
|
||||||
url_for('user.verify_user_password', user_id=sample_user.id),
|
url_for('user.verify_user_password', user_id=sample_user.id),
|
||||||
data=data,
|
data=data,
|
||||||
@@ -189,6 +192,7 @@ def test_user_verify_password_invalid_password(notify_api,
|
|||||||
assert resp.status_code == 400
|
assert resp.status_code == 400
|
||||||
json_resp = json.loads(resp.get_data(as_text=True))
|
json_resp = json.loads(resp.get_data(as_text=True))
|
||||||
assert 'Incorrect password' in json_resp['message']['password']
|
assert 'Incorrect password' in json_resp['message']['password']
|
||||||
|
assert sample_user.failed_login_count == 1
|
||||||
|
|
||||||
|
|
||||||
def test_user_verify_password_missing_password(notify_api,
|
def test_user_verify_password_missing_password(notify_api,
|
||||||
|
|||||||
Reference in New Issue
Block a user