[mod] improved command line arguments

This commit is contained in:
Christian Fraß 2023-05-29 12:03:38 +02:00
parent 391b52a5d9
commit e048d2e5a6

View file

@ -5,47 +5,77 @@ def args(
description = "INWX CLI Frontend" description = "INWX CLI Frontend"
) )
argumentparser.add_argument( argumentparser.add_argument(
'--conf', "-c",
"--conf",
dest = "conf", dest = "conf",
default = _os.path.join(str(_pathlib.Path.home()), ".inwx-conf.json") default = _os.path.join(str(_pathlib.Path.home()), ".inwx-conf.json"),
metavar = "<conf>",
help = "path to configuration file",
) )
argumentparser.add_argument( argumentparser.add_argument(
'--environment', "-e",
"--environment",
dest = "environment", dest = "environment",
default = None metavar = "<environment>",
default = None,
help = "environment to use; one of the keys in the 'url' filed of the configuration; overwrites the configuration value",
) )
argumentparser.add_argument( argumentparser.add_argument(
'--username', "-u",
"--username",
dest = "username", dest = "username",
default = None metavar = "<username>",
default = None,
help = "username; overwrites the configuration value",
) )
argumentparser.add_argument( argumentparser.add_argument(
'--password', "-p",
"--password",
dest = "password", dest = "password",
default = None metavar = "<password>",
default = None,
help = "password; overwrites the configuration value",
) )
''' '''
argumentparser.add_argument( argumentparser.add_argument(
'--domain', "-d",
"--domain",
dest = "domain", dest = "domain",
default = None default = None,
metavar = "<domain>",
help = "the domain to work with"
) )
''' '''
argumentparser.add_argument( argumentparser.add_argument(
'--delay', "-x",
"--challenge-prefix",
dest = "challenge_prefix",
metavar = "<challenge-prefix>",
default = "_acme-challenge",
help = "which subdomain to use for ACME challanges",
)
argumentparser.add_argument(
"-w",
"--delay",
dest = "delay", dest = "delay",
type = float, type = float,
default = 60.0, default = 60.0,
metavar = "<delay>",
help = "seconds to wait at end of certbot auth hook", help = "seconds to wait at end of certbot auth hook",
) )
argumentparser.add_argument( argumentparser.add_argument(
"command", "action",
type = str type = str,
choices = ["info", "list", "save", "certbot-hook"],
metavar = "<action>",
help = "action to execute",
) )
argumentparser.add_argument( argumentparser.add_argument(
"parameter", "parameter",
nargs = "*", nargs = "*",
type = str type = str,
metavar = "<parameters>",
help = "action specific parameters",
) )
arguments = argumentparser.parse_args() arguments = argumentparser.parse_args()
return arguments return arguments
@ -60,14 +90,14 @@ def main(
if (not (arguments.username is None)): conf_set("account.username", arguments.username) if (not (arguments.username is None)): conf_set("account.username", arguments.username)
if (not (arguments.password is None)): conf_set("account.password", arguments.password) if (not (arguments.password is None)): conf_set("account.password", arguments.password)
if (arguments.command == "info"): if (arguments.action == "info"):
result = api_macro_info( result = api_macro_info(
conf_get("environment"), conf_get("environment"),
conf_get("account.username"), conf_get("account.username"),
conf_get("account.password") conf_get("account.password")
) )
print(_json.dumps(result, indent = "\t")) print(_json.dumps(result, indent = "\t"))
elif (arguments.command == "list"): elif (arguments.action == "list"):
domain = arguments.parameter[0] domain = arguments.parameter[0]
result = api_macro_list( result = api_macro_list(
conf_get("environment"), conf_get("environment"),
@ -76,7 +106,7 @@ def main(
domain domain
) )
print(_json.dumps(result, indent = "\t")) print(_json.dumps(result, indent = "\t"))
elif (arguments.command == "save"): elif (arguments.action == "save"):
domain = arguments.parameter[0] domain = arguments.parameter[0]
name = arguments.parameter[1] name = arguments.parameter[1]
type_ = arguments.parameter[2] type_ = arguments.parameter[2]
@ -91,11 +121,10 @@ def main(
content content
) )
# print(_json.dumps(result, indent = "\t")) # print(_json.dumps(result, indent = "\t"))
elif (arguments.command == "certbot-hook"): elif (arguments.action == "certbot-hook"):
domain_full = _os.environ["CERTBOT_DOMAIN"]
domain_full_parts = _os.environ["CERTBOT_DOMAIN"].split(".", 1) domain_full_parts = _os.environ["CERTBOT_DOMAIN"].split(".", 1)
domain = domain_full_parts[1] domain = domain_full_parts[1]
name = domain_full_parts[0] name = (arguments.challenge_prefix + "." + domain_full_parts[0])
type_ = "TXT" type_ = "TXT"
content = _os.environ["CERTBOT_VALIDATION"] content = _os.environ["CERTBOT_VALIDATION"]
api_macro_save( api_macro_save(
@ -107,10 +136,10 @@ def main(
type_, type_,
content content
) )
_time.sleep(args.delay) _time.sleep(arguments.delay)
# print(_json.dumps(result, indent = "\t")) # print(_json.dumps(result, indent = "\t"))
else: else:
log("unhandled command '%s'" % (arguments.command, )) log("unhandled action '%s'" % (arguments.action, ))
try: try: