Files
py-certo/certo/__main__.py

44 lines
1.3 KiB
Python

"""
Usage:
certo [-vj] <hostnames>... [-d DAYS|--days-to-expiration=DAYS] [-t SECONDS|--timeout=SECONDS]
certo -h | --help
Options:
-h --help Show this help.
-j Output in JSON format [default: False].
-v Increase verbosity [default: False].
-d DAYS --days-to-expiration=DAYS Warn about near expiration if within DAYS of the cert's notAfter [default: 5].
-t SECONDS --timeout=SECONDS Timeout for SSL Handshake [default: 5].
"""
import logging
from docopt import docopt
from certo.checks.hostname import check_host_certificate_expiration
from certo.report import JSONReporter, DefaultReporter
if __name__ == "__main__":
args = docopt(__doc__)
output_as_json = args.get("-j")
if args.get("-v"):
logging.getLogger().setLevel(logging.INFO)
hostnames = args.get("<hostnames>")
days_to_expiration = int(args.get("--days-to-expiration"))
# @todo factory
if output_as_json:
reporter = JSONReporter()
else:
reporter = DefaultReporter()
# @todo async
for hs in hostnames:
logging.info(f"Getting CERT from {hs}")
reporter.add_check(check_host_certificate_expiration(hs, days_to_expiration))
if log := reporter.report():
print(log)
exit(reporter.num_failed())