126 lines
3.8 KiB
Python
126 lines
3.8 KiB
Python
##############################################################################
|
|
#
|
|
# pgAdmin 4 - PostgreSQL Tools
|
|
#
|
|
# Copyright (C) 2013 - 2022, The pgAdmin Development Team
|
|
# This software is released under the PostgreSQL Licence
|
|
#
|
|
##############################################################################
|
|
from unittest.mock import patch
|
|
import config
|
|
from pgadmin.authenticate.mfa.utils import \
|
|
mfa_user_force_registration_required
|
|
from pgadmin.authenticate.mfa.utils import mfa_user_registered, \
|
|
user_supported_mfa_methods
|
|
from .utils import MockUserMFA, MockCurrentUserId
|
|
|
|
|
|
__MFA_PACKAGE = '.'.join((__package__.split('.'))[:-1])
|
|
|
|
|
|
def __return_true():
|
|
return True
|
|
|
|
|
|
def __return_false():
|
|
return False
|
|
|
|
|
|
def check_user_registered(test):
|
|
|
|
user_mfa_test_data = [
|
|
MockUserMFA(1, "dummy", "Hello guys"),
|
|
MockUserMFA(1, "no-present-in-list", None),
|
|
]
|
|
|
|
with patch(
|
|
__MFA_PACKAGE + ".utils.current_user", return_value=MockCurrentUserId()
|
|
):
|
|
with patch(__MFA_PACKAGE + ".utils.UserMFA") as mock_user_mfa:
|
|
mock_user_mfa.query.filter_by.return_value.all.return_value = \
|
|
user_mfa_test_data
|
|
|
|
ret = mfa_user_registered(__return_true, __return_false)
|
|
|
|
if ret is None:
|
|
test.fail(
|
|
"User registration check has not called either "
|
|
"'is_registered' or 'is_not_registered' function"
|
|
)
|
|
|
|
if ret is False:
|
|
test.fail(
|
|
"Not expected to be called 'is_not_registered' function "
|
|
"as 'dummy' is in the supported MFA methods"
|
|
)
|
|
|
|
methods = user_supported_mfa_methods()
|
|
if "dummy" not in methods:
|
|
test.fail(
|
|
"User registration methods are not valid: {}".format(
|
|
methods
|
|
)
|
|
)
|
|
|
|
# Removed the 'dummy' from the user's registered MFA list
|
|
user_mfa_test_data.pop(0)
|
|
ret = mfa_user_registered(__return_true, __return_false)
|
|
|
|
if ret is None:
|
|
test.fail(
|
|
"User registration check has not called either "
|
|
"'is_registered' or 'is_not_registered' function"
|
|
)
|
|
|
|
if ret is True:
|
|
test.fail(
|
|
"Not expected to be called 'is_registered' function as "
|
|
"'not-present-in-list' is not a valid multi-factor "
|
|
"authentication method"
|
|
)
|
|
|
|
# End of test case - check_user_registered
|
|
|
|
|
|
def check_force_registration_required(test):
|
|
|
|
if mfa_user_force_registration_required(
|
|
__return_false, __return_true
|
|
) is None:
|
|
test.fail(
|
|
"User registration check did not call either register or "
|
|
"do_not_register function"
|
|
)
|
|
|
|
config.MFA_FORCE_REGISTRATION = False
|
|
if mfa_user_force_registration_required(
|
|
__return_true, __return_false
|
|
) is True:
|
|
test.fail(
|
|
"User registration function should not be called, when "
|
|
"config.MFA_FORCE_REGISTRATION is True"
|
|
)
|
|
|
|
config.MFA_FORCE_REGISTRATION = True
|
|
if mfa_user_force_registration_required(
|
|
__return_true, __return_false
|
|
) is False:
|
|
test.fail(
|
|
"'do_not_registration' function should not be called, when "
|
|
"config.MFA_FORCE_REGISTRATION is True"
|
|
)
|
|
|
|
# End of test case - check_force_registration_required
|
|
|
|
|
|
user_execution_scenarios = [
|
|
(
|
|
"Check user is registered to do MFA",
|
|
dict(check=check_user_registered),
|
|
),
|
|
(
|
|
"Require the forcefull registration for MFA?",
|
|
dict(check=check_force_registration_required),
|
|
),
|
|
]
|