def _ngrok_disconnect(self): self._logger.info("Closing any open ngrok tunnels") pyngrok_config = PyngrokConfig() pyngrok_config.auth_token = self._settings.get(["token"]) pyngrok_config.region = self._settings.get(["region"]) try: for tunnel in ngrok.get_tunnels(): self._logger.info("Closing tunnel %s" % tunnel.public_url) ngrok.disconnect(tunnel.public_url, pyngrok_config=pyngrok_config) except PyngrokNgrokError: pass self._event_bus.fire(Events.PLUGIN_NGROK_CLOSED, dict(tunnel=self._tunnel_url)) self._tunnel_url = "" self._plugin_manager.send_plugin_message(self._identifier, dict(tunnel=self._tunnel_url))
def _ngrok_connect(self): if self._retry_connect_timer: self._retry_connect_timer = None if self._ngrok_started: self._ngrok_disconnect() if not self._settings.get(["token"]): self._logger.warning("Ngrok auth token is not configured") self._plugin_manager.send_plugin_message( self._identifier, dict( error= "The auth token is not configured. An auth token is required to create a secure tunnel." )) self._restart_ngrok = True self._attempting_connect_on_start = False return if not (self._settings.get(["auth_name"]) and self._settings.get(["auth_pass"])): self._logger.warning("Basic Auth is not configured") self._plugin_manager.send_plugin_message( self._identifier, dict( error= "The username and password are not configured. Authentication is required to create a secure tunnel." )) self._attempting_connect_on_start = False return pyngrok_config = PyngrokConfig() pyngrok_config.log_event_callback = self.on_ngrok_log_event pyngrok_config.auth_token = self._settings.get(["token"]) pyngrok_config.region = self._settings.get(["region"]) if self._restart_ngrok: self._logger.info("Setting ngrok auth token & region...") if self._ngrok_started: ngrok.kill() # Make sure no previous token is used # Resettimg the _restart_ngrok flag is postponed until we know the restart was succesful # because otherwise the token and region may not "take". self._logger.info("Opening ngrok tunnel...") options = dict(bind_tls=True, inspect=False, auth="%s:%s" % (self._settings.get( ["auth_name"]), self._settings.get(["auth_pass"]))) if self._settings.get(["subdomain"]): options["subdomain"] = self._settings.get(["subdomain"]) if self._settings.get(["hostname"]): options["hostname"] = self._settings.get(["hostname"]) try: if self._legacy_ngrok: tunnel = ngrok.connect( port=self._settings.get_int(["port"]), options=options, pyngrok_config=pyngrok_config) # type:str else: tunnel = ngrok.connect(addr=self._settings.get_int(["port"]), pyngrok_config=pyngrok_config, **options) # type:NgrokTunnel self._ngrok_started = True except PyngrokNgrokError: self._logger.error("Could not connect with the provided API key") self._attempting_connect_on_start = False return self._attempting_connect_on_start = False if tunnel: if self._legacy_ngrok: tunnel_url = tunnel else: tunnel_url = tunnel.public_url self._tunnel_url = tunnel_url.partition("://")[2] self._logger.info("ngrok tunnel: %s" % self._tunnel_url) self._plugin_manager.send_plugin_message( self._identifier, dict(tunnel=self._tunnel_url)) self._event_bus.fire(Events.PLUGIN_NGROK_CONNECTED, dict(tunnel=self._tunnel_url)) self._restart_ngrok = False