PHP 7.4.33
Preview: cert.py Size: 2.89 KB
//lib/fm-agent/plugins/cert.py

from subprocess import check_output, CalledProcessError
import agent_util
import logging
import os
from os import listdir
from os.path import isfile, join
import datetime

"""
Config file example:
    [cert]
    certpath = /path/to/the/certs
"""


class CertPlugin(agent_util.Plugin):
    textkey = "cert"
    label = "Cert Expiration Date"

    @classmethod
    def get_metadata(cls, config):
        try:
            certpath = config.get("certpath")
            if not os.path.exists(certpath):
                status = agent_util.UNSUPPORTED
                msg = "Missing cert directory in configuration"
                options = []
            else:
                status = agent_util.SUPPORTED
                msg = []
                options = CertPlugin.get_certs(certpath, config)

        except Exception:
            status = agent_util.UNSUPPORTED
            msg = "Exception gathering cert directory"
            options = []

        metadata = {
            "days_to_expire": {
                "label": "Certificate Expiration Status",
                "options": options,
                "status": status,
                "error_message": msg,
                "unit": "days",
            },
        }

        return metadata

    def check(self, textkey, data, config):
        self.log.debug("Checking cert expiration {} - {}".format(textkey, data))
        day = CertPlugin._get_cert_data(config, data)
        return day

    @staticmethod
    def _get_cert_data(config, name):
        certpath = config.get("certpath")
        certs = CertPlugin.get_certs(certpath, config)
        for each in certs:
            if each != name:
                continue
            cert = certpath + "/" + each
            openssl = "openssl x509 -in " + cert + " -noout -enddate"
            try:
                ret, output = agent_util.execute_command(openssl)
                if ret != 0:
                    logging.error(output)
                    raise ValueError("Error Reading cert file")
            except ValueError:
                return False
            datestr = output.split("=")[-1]
            datespl = datestr.split("\n", 1)[0]
            dateformat = datetime.datetime.strptime(datespl, "%b %d %H:%M:%S %Y %Z")
            diff = dateformat - datetime.datetime.utcnow()
            day = diff.days
            return day

    @staticmethod
    def get_certs(certpath, config):
        # Collect all the .crt files in a list

        if not os.path.isdir(certpath):
            logging.error(
                "certpath specified on config file:" + certpath + " does not exist"
            )
        else:
            certfiles = [
                f
                for f in listdir(certpath)
                if isfile(join(certpath, f)) and f.endswith(".crt")
            ]
            logging.info(
                "Certificates found under" + str(certpath) + ":" + str(certfiles)
            )
            return certfiles

Directory Contents

Dirs: 1 × Files: 55

Name Size Perms Modified Actions
- drwxr-xr-x 2025-06-19 05:08:01
Edit Download
20.07 KB lrw-r--r-- 2025-06-18 20:44:50
Edit Download
13.66 KB lrw-r--r-- 2025-06-18 20:44:50
Edit Download
6.34 KB lrw-r--r-- 2025-06-18 20:44:50
Edit Download
22.59 KB lrw-r--r-- 2025-06-18 20:44:50
Edit Download
9.46 KB lrw-r--r-- 2025-06-18 20:44:50
Edit Download
2.89 KB lrw-r--r-- 2025-06-18 20:44:50
Edit Download
9.56 KB lrw-r--r-- 2025-06-18 20:44:50
Edit Download
32.09 KB lrw-r--r-- 2025-06-18 20:44:50
Edit Download
7.33 KB lrw-r--r-- 2025-06-18 20:44:50
Edit Download
16.80 KB lrw-r--r-- 2025-06-18 20:44:50
Edit Download
38.95 KB lrw-r--r-- 2025-06-18 20:44:50
Edit Download
2.90 KB lrw-r--r-- 2025-06-18 20:44:50
Edit Download
930 B lrw-r--r-- 2025-06-18 20:44:50
Edit Download
1.00 KB lrw-r--r-- 2025-06-18 20:44:50
Edit Download
5.07 KB lrw-r--r-- 2025-06-18 20:44:50
Edit Download
4.68 KB lrw-r--r-- 2025-06-18 20:44:50
Edit Download
13.46 KB lrw-r--r-- 2025-06-18 20:44:50
Edit Download
13.21 KB lrw-r--r-- 2025-06-18 20:44:50
Edit Download
13.58 KB lrw-r--r-- 2025-06-18 20:44:50
Edit Download
8.39 KB lrw-r--r-- 2025-06-18 20:44:50
Edit Download
3.34 KB lrw-r--r-- 2025-06-18 20:44:50
Edit Download
2.54 KB lrw-r--r-- 2025-06-18 20:44:50
Edit Download
1.64 KB lrw-r--r-- 2025-06-18 20:44:50
Edit Download
6.04 KB lrw-r--r-- 2025-06-18 20:44:50
Edit Download
26.56 KB lrw-r--r-- 2025-06-18 20:44:50
Edit Download
16.61 KB lrw-r--r-- 2025-06-18 20:44:50
Edit Download
20.40 KB lrw-r--r-- 2025-06-18 20:44:50
Edit Download
5.58 KB lrw-r--r-- 2025-06-18 20:44:50
Edit Download
12.33 KB lrw-r--r-- 2025-06-18 20:44:50
Edit Download
6.44 KB lrw-r--r-- 2025-06-18 20:44:50
Edit Download
1.98 KB lrw-r--r-- 2025-06-18 20:44:50
Edit Download
2.30 KB lrw-r--r-- 2025-06-18 20:44:50
Edit Download
15.51 KB lrw-r--r-- 2025-06-18 20:44:50
Edit Download
8.88 KB lrw-r--r-- 2025-06-18 20:44:50
Edit Download
5.61 KB lrw-r--r-- 2025-06-18 20:44:50
Edit Download
2.60 KB lrw-r--r-- 2025-06-18 20:44:50
Edit Download
1.99 KB lrw-r--r-- 2025-06-18 20:44:50
Edit Download
21.37 KB lrw-r--r-- 2025-06-18 20:44:50
Edit Download
17.23 KB lrw-r--r-- 2025-06-18 20:44:50
Edit Download
19.85 KB lrw-r--r-- 2025-06-18 20:44:50
Edit Download
11.31 KB lrw-r--r-- 2025-06-18 20:44:50
Edit Download
2.42 KB lrw-r--r-- 2025-06-18 20:44:50
Edit Download
1.42 KB lrw-r--r-- 2025-06-18 20:44:50
Edit Download
6.59 KB lrw-r--r-- 2025-06-18 20:44:50
Edit Download
3.28 KB lrw-r--r-- 2025-06-18 20:44:50
Edit Download
7.09 KB lrw-r--r-- 2025-06-18 20:44:50
Edit Download
19.11 KB lrw-r--r-- 2025-06-18 20:44:50
Edit Download
4.62 KB lrw-r--r-- 2025-06-18 20:44:50
Edit Download
3.61 KB lrw-r--r-- 2025-06-18 20:44:50
Edit Download
1.09 KB lrw-r--r-- 2025-06-18 20:44:50
Edit Download
4.73 KB lrw-r--r-- 2025-06-18 20:44:50
Edit Download
4.91 KB lrw-r--r-- 2025-06-18 20:44:50
Edit Download
13.84 KB lrw-r--r-- 2025-06-18 20:44:50
Edit Download
19.20 KB lrw-r--r-- 2025-06-18 20:44:50
Edit Download
0 B lrw-r--r-- 2025-06-18 20:44:50
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).