blob: d530932207388a95fa9f787286bf627b50a607fc [file] [log] [blame]
#!/usr/bin/env python3
from tempfile import NamedTemporaryFile
from textwrap import dedent
class DuoUnixConfig(dict):
def __str__(self):
config = dedent(
"""
[duo]\n
"""
)
for key in self:
config += "{key} = {value}\n".format(key=key, value=self[key])
return config
def failmode_as_prefix(self):
failmode = self.get("failmode", "safe")
if failmode == "safe" or failmode is None:
return "Failsafe"
if failmode == "secure":
return "Failsecure"
else:
return "Unknown"
# Referred to as "duo.conf" in cram testing
TESTCONF = DuoUnixConfig(
ikey="DIXYZV6YM8IFYVWBINCA",
skey="yWHSMhWucAcp7qvuH3HWTaSaKABs8Gaddiv1NIRo",
host="localhost:4443",
)
# Referred to as "bad-corrupt.conf" in cram testing
BAD_CORRUPT_CONF = """
[duo]
ikey =
skey =
host =
q3598pjg9jajaf
"""
BAD_CORRUPT_SECURE_CONF = """
[duo]
failmode=secure
ikey =
skey =
host =
q3598pjg9jajaf
"""
# Referred to as "bad-header_only.conf" in cram testing
BAD_HEADER_CONF = """
[duo]
"""
# Referred to as "bad-empty.conf" in cram testing
BAD_EMPTY_CONF = """
"""
# Referred to as "bad-missing_values.conf" in cram testing
BAD_MISSING_VALUES_CONF = """
[duo]
ikey =
skey =
host =
"""
# Referred to as "mockduo_failsecure.conf"
MOCKDUO_FAILSECURE = DuoUnixConfig(
ikey="DIXYZV6YM8IFYVWBINCA",
skey="yWHSMhWucAcp7qvuH3HWTaSaKABs8Gaddiv1NIRo",
host="localhost:4443",
cafile="certs/mockduo-ca.pem",
failmode="secure",
)
MOCKDUO_FAILSECURE_BAD_CERT = DuoUnixConfig(
ikey="DIXYZV6YM8IFYVWBINCA",
skey="yWHSMhWucAcp7qvuH3HWTaSaKABs8Gaddiv1NIRo",
host="localhost:4443",
cafile="nonexistent/ca.pem",
failmode="secure",
)
# Referred to as "mockduo.conf"
MOCKDUO_CONF = DuoUnixConfig(
ikey="DIXYZV6YM8IFYVWBINCA",
skey="yWHSMhWucAcp7qvuH3HWTaSaKABs8Gaddiv1NIRo",
host="localhost:4443",
cafile="certs/mockduo-ca.pem",
)
# Referred to as "mockduo_noverify.conf"
MOCKDUO_NOVERIFY = DuoUnixConfig(
ikey="DIXYZV6YM8IFYVWBINCA",
skey="yWHSMhWucAcp7qvuH3HWTaSaKABs8Gaddiv1NIRo",
host="localhost:4443",
cafile="certs/mockduo-ca.pem",
noverify="1",
)
# Referred to as "mockduo_autopush.conf"
MOCKDUO_AUTOPUSH = DuoUnixConfig(
ikey="DIXYZV6YM8IFYVWBINCA",
skey="yWHSMhWucAcp7qvuH3HWTaSaKABs8Gaddiv1NIRo",
host="localhost:4443",
cafile="certs/mockduo-ca.pem",
autopush="yes",
prompts="1",
)
# Referred to as "mockduo_badkeys.conf"
MOCKDUO_BADKEYS = DuoUnixConfig(
ikey="foo",
skey="bar",
host="localhost:4443",
cafile="certs/mockduo-ca.pem",
)
MOCKDUO_BADKEYS_FAILSECURE = DuoUnixConfig(
ikey="foo",
skey="bar",
host="localhost:4443",
cafile="certs/mockduo-ca.pem",
failmode="secure",
)
# Referred to as "mockduo_fallback.conf" in cram tests
MOCKDUO_FALLBACK = DuoUnixConfig(
ikey="DIXYZV6YM8IFYVWBINCA",
skey="yWHSMhWucAcp7qvuH3HWTaSaKABs8Gaddiv1NIRo",
host="localhost:4443",
cafile="certs/mockduo-ca.pem",
fallback_local_ip="yes",
)
# Referred to as "mockduo_proxy.conf" in cram tests
MOCKDUO_PROXY = DuoUnixConfig(
ikey="DIXYZV6YM8IFYVWBINCA",
skey="yWHSMhWucAcp7qvuH3HWTaSaKABs8Gaddiv1NIRo",
host="localhost:4443",
cafile="certs/mockduo-ca.pem",
http_proxy="http://localhost:8888/",
)
MOCKDUO_FIPS = DuoUnixConfig(
ikey="DIXYZV6YM8IFYVWBINCA",
skey="yWHSMhWucAcp7qvuH3HWTaSaKABs8Gaddiv1NIRo",
host="localhost:4443",
dev_fips_mode="true",
cafile="certs/mockduo-ca.pem",
noverify="1",
)
# Referred to as "duo.conf" in the cram tests
DUO_CONF = DuoUnixConfig(
ikey="DIXYZV6YM8IFYVWBINCA",
skey="yWHSMhWucAcp7qvuH3HWTaSaKABs8Gaddiv1NIRo",
host="localhost:4443",
)
# Referred to as "mockduo_prompts_1.conf" in cram tests
MOCKDUO_PROMPTS_1 = DuoUnixConfig(
ikey="DIXYZV6YM8IFYVWBINCA",
skey="yWHSMhWucAcp7qvuH3HWTaSaKABs8Gaddiv1NIRo",
host="localhost:4443",
cafile="certs/mockduo-ca.pem",
autopush="yes",
prompts="1",
)
# Refered to as "mockduo_prompts_default.conf" in cram tests
MOCKDUO_PROMPTS_DEFAULT = DuoUnixConfig(
ikey="DIXYZV6YM8IFYVWBINCA",
skey="yWHSMhWucAcp7qvuH3HWTaSaKABs8Gaddiv1NIRo",
host="localhost:4443",
cafile="certs/mockduo-ca.pem",
autopush="true",
)
# Referred to as "mockduo_autopush_secure.conf" in cram tests
MOCKDUO_AUTOPUSH_SECURE = DuoUnixConfig(
ikey="DIXYZV6YM8IFYVWBINCA",
skey="yWHSMhWucAcp7qvuH3HWTaSaKABs8Gaddiv1NIRo",
host="localhost:4443",
cafile="certs/mockduo-ca.pem",
autopush="yes",
prompts="1",
failmode="secure",
)
MOCKDUO_GECOS_SEND_UNPARSED = DuoUnixConfig(
ikey="DIXYZV6YM8IFYVWBINCA",
skey="yWHSMhWucAcp7qvuH3HWTaSaKABs8Gaddiv1NIRo",
host="localhost:4443",
cafile="certs/mockduo-ca.pem",
send_gecos="true",
)
MOCKDUO_GECOS_DEPRECATED_PARSE_FLAG = DuoUnixConfig(
ikey="DIXYZV6YM8IFYVWBINCA",
skey="yWHSMhWucAcp7qvuH3HWTaSaKABs8Gaddiv1NIRo",
host="localhost:4443",
cafile="certs/mockduo-ca.pem",
gecos_parsed="true",
)
MOCKDUO_GECOS_DEFAULT_DELIM_6_POS = DuoUnixConfig(
ikey="DIXYZV6YM8IFYVWBINCA",
skey="yWHSMhWucAcp7qvuH3HWTaSaKABs8Gaddiv1NIRo",
host="localhost:4443",
cafile="certs/mockduo-ca.pem",
gecos_username_pos="6",
)
MOCKDUO_GECOS_SLASH_DELIM_3_POS = DuoUnixConfig(
ikey="DIXYZV6YM8IFYVWBINCA",
skey="yWHSMhWucAcp7qvuH3HWTaSaKABs8Gaddiv1NIRo",
host="localhost:4443",
cafile="certs/mockduo-ca.pem",
gecos_delim="/",
gecos_username_pos="3",
)
MOCKDUO_GECOS_LONG_DELIM = DuoUnixConfig(
ikey="DIXYZV6YM8IFYVWBINCA",
skey="yWHSMhWucAcp7qvuH3HWTaSaKABs8Gaddiv1NIRo",
host="localhost:4443",
cafile="certs/mockduo-ca.pem",
gecos_delim=",,",
)
MOCKDUO_GECOS_INVALID_DELIM_COLON = DuoUnixConfig(
ikey="DIXYZV6YM8IFYVWBINCA",
skey="yWHSMhWucAcp7qvuH3HWTaSaKABs8Gaddiv1NIRo",
host="localhost:4443",
cafile="certs/mockduo-ca.pem",
gecos_delim=":",
)
MOCKDUO_GECOS_INVALID_DELIM_PUNC = DuoUnixConfig(
ikey="DIXYZV6YM8IFYVWBINCA",
skey="yWHSMhWucAcp7qvuH3HWTaSaKABs8Gaddiv1NIRo",
host="localhost:4443",
cafile="certs/mockduo-ca.pem",
gecos_delim="a",
)
MOCKDUO_GECOS_INVALID_DELIM_WHITESPACE = DuoUnixConfig(
ikey="DIXYZV6YM8IFYVWBINCA",
skey="yWHSMhWucAcp7qvuH3HWTaSaKABs8Gaddiv1NIRo",
host="localhost:4443",
cafile="certs/mockduo-ca.pem",
gecos_delim=" ",
)
MOCKDUO_GECOS_INVALID_POS = DuoUnixConfig(
ikey="DIXYZV6YM8IFYVWBINCA",
skey="yWHSMhWucAcp7qvuH3HWTaSaKABs8Gaddiv1NIRo",
host="localhost:4443",
cafile="certs/mockduo-ca.pem",
gecos_username_pos="-1",
)
# Referred to as "mockduo_users.conf"
MOCKDUO_USERS = DuoUnixConfig(
ikey="DIXYZV6YM8IFYVWBINCA",
skey="yWHSMhWucAcp7qvuH3HWTaSaKABs8Gaddiv1NIRo",
host="localhost:4443",
cafile="certs/mockduo-ca.pem",
groups="users",
)
MOCKDUO_USERS_ADMINS = DuoUnixConfig(
ikey="DIXYZV6YM8IFYVWBINCA",
skey="yWHSMhWucAcp7qvuH3HWTaSaKABs8Gaddiv1NIRo",
host="localhost:4443",
cafile="certs/mockduo-ca.pem",
group="users,admin",
)
MOCKDUO_ADMINS_NO_USERS = DuoUnixConfig(
ikey="DIXYZV6YM8IFYVWBINCA",
skey="yWHSMhWucAcp7qvuH3HWTaSaKABs8Gaddiv1NIRo",
host="localhost:4443",
cafile="certs/mockduo-ca.pem",
group="admin,!users",
)
MOTD_CONF = DuoUnixConfig(
ikey="DIXYZV6YM8IFYVWBINCA",
skey="yWHSMhWucAcp7qvuH3HWTaSaKABs8Gaddiv1NIRo",
host="localhost:4443",
cafile="certs/mockduo-ca.pem",
motd="yes",
)
MOCKDUO_EXTRA_SPACE = """
[duo]
ikey = DIXYZV6YM8IFYVWBINCA
skey =
yWHSMhWucAcp7qvuH3HWTaSaKABs8Gaddiv1NIRo
host = localhost:4443
cafile = certs/mockduo-ca.pem
; This comment shouldn't break Duo
"""
class TempConfig(object):
def __init__(self, config_data):
self.config_data = str(config_data)
self.temp_file = None
def __enter__(self):
self.temp_file = NamedTemporaryFile()
self.temp_file.write(self.config_data.encode("utf8"))
self.temp_file.flush()
return self.temp_file
def __exit__(self, type, value, traceback):
self.temp_file.close()