"""
https://stackoverflow.com/questions/41620369/how-to-get-ssl-certificate-details-using-python
"""


import socket
import ssl
import datetime

domains = [
    'iiiypuk.me',
    'a2s.su',
    'ya.ru'
]


def ssl_expiry_datetime(hostname):
    ssl_dateformat = r'%b %d %H:%M:%S %Y %Z'

    context = ssl.create_default_context()
    context.check_hostname = False

    conn = context.wrap_socket(
        socket.socket(socket.AF_INET),
        server_hostname=hostname,
    )

    # 5 second timeout
    conn.settimeout(5.0)

    conn.connect((hostname, 443))
    ssl_info = conn.getpeercert()

    # Python datetime object
    return datetime.datetime.strptime(ssl_info["notAfter"], ssl_dateformat)


if __name__ == "__main__":
    for value in domains:
        now = datetime.datetime.now()
        try:
            expire = ssl_expiry_datetime(value)
            diff = expire - now
            print(
                "Domain name: {} Expiry Date: {} Expiry Day: {}".format(
                    value, expire.strftime("%Y-%m-%d"), diff.days
                )
            )
        except Exception as e:
            print(e)
