Source code for ssllabs.host

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Copyright © 2016 Taylor C. Richberger <taywee@gmx.com>
# This code is released under the license described in the LICENSE file

from __future__ import division, absolute_import, print_function, unicode_literals

from datetime import datetime, timedelta

from ssllabs.endpoint import Endpoint
from ssllabs.object import Object

[docs]class Host(Object): '''A host object. The class filled by :meth:`ssllabs.client.Client.analyze` and accessed through :meth:`ssllabs.client.Client.host`''' def __init__(self, data): self.__host = data.get('host') self.__port = data.get('port') self.__protocol = data.get('protocol') self.__isPublic = data.get('isPublic') self.__status = data.get('status') self.__statusMessage = data.get('statusMessage') self.__startTime = (datetime.utcfromtimestamp(0) + timedelta(milliseconds=data['startTime'])) if 'startTime' in data else None self.__testTime = (datetime.utcfromtimestamp(0) + timedelta(milliseconds=data['testTime'])) if 'testTime' in data else None self.__engineVersion = data.get('engineVersion') self.__criteriaVersion = data.get('criteriaVersion') self.__cacheExpiryTime = data.get('cacheExpiryTime') self.__endpoints = [Endpoint(endpoint) for endpoint in data.get('endpoints', list())] self.__certHostnames = data.get('certHostnames', list()) @property def host(self): '''assessment host, which can be a hostname or an IP address''' return self.__host @property def port(self): '''assessment port (e.g., 443)''' return self.__port @property def protocol(self): '''protocol (e.g., HTTP)''' return self.__protocol @property def isPublic(self): '''true if this assessment is publicly available (listed on the SSL Labs assessment boards)''' return self.__isPublic @property def status(self): '''assessment status; possible values: DNS, ERROR, IN_PROGRESS, and READY.''' return self.__status @property def statusMessage(self): '''status message in English. When status is ERROR, this field will contain an error message.''' return self.__statusMessage @property def startTime(self): '''assessment starting time, as a utc datetime object''' return self.__startTime @property def testTime(self): '''assessment completion time, as a utc datetime object''' return self.__testTime @property def engineVersion(self): '''assessment engine version (e.g., "1.0.120")''' return self.__engineVersion @property def criteriaVersion(self): '''grading criteria version (e.g., "2009")''' return self.__criteriaVersion @property def cacheExpiryTime(self): '''when will the assessment results expire from the cache (typically set only for assessment with errors; otherwise the results stay in the cache for as long as there's sufficient room)''' return self.__cacheExpiryTime @property def endpoints(self): '''list of :class:`ssllabs.endpoint.Endpoint` objects''' return self.__endpoints @property def certHostnames(self): '''the list of certificate hostnames collected from the certificates seen during assessment. The hostnames may not be valid. This field is available only if the server certificate doesn't match the requested hostname. In that case, this field saves you some time as you don't have to inspect the certificates yourself to find out what valid hostnames might be.''' return self.__certHostnames