コード例 #1
0
 def __init__(
     self,
     hass,
     ip_address,
     port,
     topic,
     security_protocol,
     username,
     password,
 ):
     """Initialize."""
     self._encoder = DateTimeJSONEncoder()
     self._hass = hass
     ssl_context = ssl_util.client_context()
     self._producer = AIOKafkaProducer(
         loop=hass.loop,
         bootstrap_servers=f"{ip_address}:{port}",
         compression_type="gzip",
         security_protocol=security_protocol,
         ssl_context=ssl_context,
         sasl_mechanism="PLAIN",
         sasl_plain_username=username,
         sasl_plain_password=password,
     )
     self._topic = topic
コード例 #2
0
def _async_get_connector(hass: HomeAssistantType,
                         verify_ssl: bool = True) -> aiohttp.BaseConnector:
    """Return the connector pool for aiohttp.

    This method must be run in the event loop.
    """
    key = DATA_CONNECTOR if verify_ssl else DATA_CONNECTOR_NOTVERIFY

    if key in hass.data:
        return cast(aiohttp.BaseConnector, hass.data[key])

    if verify_ssl:
        ssl_context: Union[bool, SSLContext] = ssl_util.client_context()
    else:
        ssl_context = False

    connector = aiohttp.TCPConnector(enable_cleanup_closed=True,
                                     ssl=ssl_context)
    hass.data[key] = connector

    async def _async_close_connector(event: Event) -> None:
        """Close connector pool."""
        await connector.close()

    hass.bus.async_listen_once(EVENT_HOMEASSISTANT_CLOSE,
                               _async_close_connector)

    return connector
コード例 #3
0
def _async_get_connector(hass, verify_ssl=True):
    """Return the connector pool for aiohttp.

    This method must be run in the event loop.
    """
    key = DATA_CONNECTOR if verify_ssl else DATA_CONNECTOR_NOTVERIFY

    if key in hass.data:
        return hass.data[key]

    if verify_ssl:
        ssl_context = ssl_util.client_context()
    else:
        ssl_context = False

    connector = aiohttp.TCPConnector(loop=hass.loop, ssl=ssl_context)
    hass.data[key] = connector

    async def _async_close_connector(event):
        """Close connector pool."""
        await connector.close()

    hass.bus.async_listen_once(
        EVENT_HOMEASSISTANT_CLOSE, _async_close_connector)

    return connector
コード例 #4
0
def _async_get_connector(hass, verify_ssl=True):
    """Return the connector pool for aiohttp.

    This method must be run in the event loop.
    """
    key = DATA_CONNECTOR if verify_ssl else DATA_CONNECTOR_NOTVERIFY

    if key in hass.data:
        return hass.data[key]

    if verify_ssl:
        ssl_context = ssl_util.client_context()
    else:
        ssl_context = False

    connector = aiohttp.TCPConnector(loop=hass.loop, ssl=ssl_context)
    hass.data[key] = connector

    @callback
    def _async_close_connector(event):
        """Close connector pool."""
        connector.close()

    hass.bus.async_listen_once(EVENT_HOMEASSISTANT_CLOSE,
                               _async_close_connector)

    return connector
コード例 #5
0
    async def async_step_user(self, user_input=None):
        """Handle a flow initiated by the user."""
        errors = {}
        if user_input is None:
            return await self._show_setup_form()

        # check for existing
        entries = self._async_current_entries()
        for entry in entries:
            if entry.data[CONF_URL] == user_input[CONF_URL]:
                errors[CONF_URL] = "server_exists"
                return await self._show_setup_form(user_input, errors)
            elif entry.unique_id == user_input[CONF_URL]:
                errors[CONF_NAME] = "name_exists"
                return await self._show_setup_form(user_input, errors)

        # attempt to connect
        validate_cert = not user_input[CONF_SKIP_VERIFICATION]
        try:
            context = None
            if validate_cert:
                context = ssl.client_context()

            version = await Client.test_connection(user_input[CONF_URL],
                                                   validate_cert=validate_cert,
                                                   ssl_options=context)
            if version is None:
                errors[CONF_URL] = f"unkonwn_version"
        except ConnectionRefusedError:
            errors[CONF_URL] = "connection_refused"
        except HTTPTimeoutError:
            errors[CONF_URL] = "connection_timeout"
        except HTTPClientError as error:
            # connection_error_301
            # connection_error_302
            # connection_error_404
            errors[CONF_URL] = f"connection_error_{error.code}"
        except SSLCertVerificationError:
            errors[CONF_URL] = "ssl_verification"
        except Exception:
            errors[CONF_URL] = "unknown_error"

        if bool(errors):
            return await self._show_setup_form(user_input, errors)

        await self.async_set_unique_id(user_input[CONF_URL])
        return self.async_create_entry(
            title=user_input[CONF_NAME],
            data={
                CONF_URL: user_input[CONF_URL],
                CONF_VERIFY_SSL: validate_cert,
            },
        )
コード例 #6
0
 def connect(self):
     """Login and setup the connection."""
     ssl_context = client_context() if self._verify_ssl else None
     try:
         self.connection = imaplib.IMAP4_SSL(
             self._server, self._port, ssl_context=ssl_context
         )
         self.connection.login(self._user, self._password)
         return True
     except imaplib.IMAP4.error:
         _LOGGER.error("Failed to login to %s", self._server)
         return False
コード例 #7
0
    async def async_added_to_hass(self):
        context = None
        if self._validate_cert:
            context = ssl.client_context()

        await self._client.connect(
            validate_cert=self._validate_cert, ssl_options=context
        )
        await self.async_refresh_playlists()
        state = await self._client.playback.get_state()
        await self._playback_state_changed(None, state)
        tl_track = await self._client.playback.get_current_tl_track()
        if tl_track:
            await self._track_playback_started(tl_track)
コード例 #8
0
 def connect(self):
     """Connect/authenticate to SMTP Server."""
     ssl_context = client_context() if self._verify_ssl else None
     if self.encryption == "tls":
         mail = smtplib.SMTP_SSL(
             self._server,
             self._port,
             timeout=self._timeout,
             context=ssl_context,
         )
     else:
         mail = smtplib.SMTP(self._server,
                             self._port,
                             timeout=self._timeout)
     mail.set_debuglevel(self.debug)
     mail.ehlo_or_helo_if_needed()
     if self.encryption == "starttls":
         mail.starttls(context=ssl_context)
         mail.ehlo()
     if self.username and self.password:
         mail.login(self.username, self.password)
     return mail
コード例 #9
0
 def __init__(self, url, apiKey, session):
     self._url = url
     self._api_key = apiKey
     self._session = session
     self._context = ssl.client_context()