41 lines
1.3 KiB
Python
41 lines
1.3 KiB
Python
"""
|
|
Usage: certo [-v] [-j] <hostnames>... [-d DAYS|--days-to-expiration=DAYS] [-t SECONDS|--timeout=SECONDS]
|
|
|
|
Options:
|
|
-v Increase verbosity [default: False]
|
|
-j Output in JSON format [default: False]
|
|
-d DAYS --days-to-expiration=DAYS Warn about impending 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())
|