def set_bonjour(host=None, port=None): """ Publish host/port combo through Bonjour """ global _HOST_PORT, _BONJOUR_OBJECT if not _HAVE_BONJOUR or not cfg.enable_bonjour(): logging.info('No Bonjour/ZeroConfig support installed') return if host is None and port is None: host, port = _HOST_PORT else: _HOST_PORT = (host, port) scope = pybonjour.kDNSServiceInterfaceIndexAny zhost = None domain = None if match_str(host, ('localhost', '127.0.', '::1')): logging.info('Bonjour/ZeroConfig does not support "localhost"') # All implementations fail to implement "localhost" properly # A false address is published even when scope==kDNSServiceInterfaceIndexLocalOnly return name = hostname() if '.local' in name: suffix = '' else: suffix = '.local' logging.debug('Try to publish in Bonjour as "%s" (%s:%s)', name, host, port) try: refObject = pybonjour.DNSServiceRegister( interfaceIndex=scope, name='SABnzbd on %s:%s' % (name, port), regtype='_http._tcp', domain=domain, host=zhost, port=int(port), txtRecord=pybonjour.TXTRecord({ 'path': cfg.url_base(), 'https': cfg.enable_https() }), callBack=_zeroconf_callback) except sabnzbd.utils.pybonjour.BonjourError as e: _BONJOUR_OBJECT = None logging.debug('Failed to start Bonjour service: %s', str(e)) except: _BONJOUR_OBJECT = None logging.debug( 'Failed to start Bonjour service due to non-pybonjour related problem', exc_info=True) else: Thread(target=_bonjour_server, args=(refObject, )) _BONJOUR_OBJECT = refObject logging.debug('Successfully started Bonjour service')
def set_bonjour(host=None, port=None): """ Publish host/port combo through Bonjour """ global _HOST_PORT, _BONJOUR_OBJECT if not _HAVE_BONJOUR or not cfg.enable_broadcast(): logging.info("No bonjour/zeroconf support installed") return if host is None and port is None: host, port = _HOST_PORT else: _HOST_PORT = (host, port) scope = pybonjour.kDNSServiceInterfaceIndexAny zhost = None domain = None if is_localhost(host): logging.info("Cannot setup bonjour/zeroconf for localhost (%s)", host) # All implementations fail to implement "localhost" properly # A false address is published even when scope==kDNSServiceInterfaceIndexLocalOnly return name = socket.gethostname() logging.debug('Try to publish in Bonjour as "%s" (%s:%s)', name, host, port) try: refObject = pybonjour.DNSServiceRegister( interfaceIndex=scope, name="SABnzbd on %s:%s" % (name, port), regtype="_http._tcp", domain=domain, host=zhost, port=int(port), txtRecord=pybonjour.TXTRecord({ "path": cfg.url_base(), "https": cfg.enable_https() }), callBack=_zeroconf_callback, ) except sabnzbd.utils.pybonjour.BonjourError as e: _BONJOUR_OBJECT = None logging.debug("Failed to start Bonjour service: %s", str(e)) except: _BONJOUR_OBJECT = None logging.debug( "Failed to start Bonjour service due to non-pybonjour related problem", exc_info=True) else: Thread(target=_bonjour_server, args=(refObject, )) _BONJOUR_OBJECT = refObject logging.debug("Successfully started Bonjour service")
def error_page_404(status, message, traceback, version): """ Custom handler for 404 error, redirect to main page """ return r''' <html> <head> <script type="text/javascript"> <!-- location.href = location.protocol + '//' + location.hostname + (location.port ? ':' + location.port : '') + '%s' ; //--> </script> </head> <body><br/></body> </html> ''' % cfg.url_base()
def set_bonjour(host=None, port=None): """ Publish host/port combo through Bonjour """ global _HOST_PORT, _BONJOUR_OBJECT if not _HAVE_BONJOUR or not cfg.enable_bonjour(): logging.info('No Bonjour/ZeroConfig support installed') return if host is None and port is None: host, port = _HOST_PORT else: _HOST_PORT = (host, port) scope = pybonjour.kDNSServiceInterfaceIndexAny zhost = None domain = None if match_str(host, ('localhost', '127.0.', '::1')): logging.info('Bonjour/ZeroConfig does not support "localhost"') # All implementations fail to implement "localhost" properly # A false address is published even when scope==kDNSServiceInterfaceIndexLocalOnly return name = hostname() logging.debug('Try to publish in Bonjour as "%s" (%s:%s)', name, host, port) try: refObject = pybonjour.DNSServiceRegister( interfaceIndex=scope, name='SABnzbd on %s:%s' % (name, port), regtype='_http._tcp', domain=domain, host=zhost, port=int(port), txtRecord=pybonjour.TXTRecord({'path': cfg.url_base(), 'https': cfg.enable_https()}), callBack=_zeroconf_callback) except sabnzbd.utils.pybonjour.BonjourError as e: _BONJOUR_OBJECT = None logging.debug('Failed to start Bonjour service: %s', str(e)) except: _BONJOUR_OBJECT = None logging.debug('Failed to start Bonjour service due to non-pybonjour related problem', exc_info=True) else: Thread(target=_bonjour_server, args=(refObject,)) _BONJOUR_OBJECT = refObject logging.debug('Successfully started Bonjour service')
def get_access_info(self): """ Build up a list of url's that sabnzbd can be accessed from """ # Access_url is used to provide the user a link to sabnzbd depending on the host access_uri = 'localhost' cherryhost = cfg.cherryhost() if cherryhost == '0.0.0.0': import socket host = socket.gethostname() socks = [host] # Grab a list of all ips for the hostname try: addresses = socket.getaddrinfo(host, None) except: addresses = [] for addr in addresses: address = addr[4][0] # Filter out ipv6 addresses (should not be allowed) if ':' not in address and address not in socks: socks.append(address) if "host" in cherrypy.request.headers: host = cherrypy.request.headers['host'] host = host.rsplit(':')[0] access_uri = host socks.insert(0, host) else: socks.insert(0, 'localhost') elif cherryhost == '::': import socket host = socket.gethostname() socks = [host] # Grab a list of all ips for the hostname addresses = socket.getaddrinfo(host, None) for addr in addresses: address = addr[4][0] # Only ipv6 addresses will work if ':' in address: address = '[%s]' % address if address not in socks: socks.append(address) if "host" in cherrypy.request.headers: host = cherrypy.request.headers['host'] host = host.rsplit(':')[0] access_uri = host socks.insert(0, host) else: socks.insert(0, 'localhost') elif not cherryhost: import socket socks = [socket.gethostname()] access_uri = socket.gethostname() else: socks = [cherryhost] access_uri = cherryhost urls = [] for sock in socks: if sock: if cfg.enable_https() and cfg.https_port(): url = 'https://%s:%s%s' % (sock, cfg.https_port(), cfg.url_base()) elif cfg.enable_https(): url = 'https://%s:%s%s' % (sock, cfg.cherryport(), cfg.url_base()) else: url = 'http://%s:%s%s' % (sock, cfg.cherryport(), cfg.url_base()) urls.append(url) if cfg.enable_https() and cfg.https_port(): access_url = 'https://%s:%s%s' % (sock, cfg.https_port(), cfg.url_base()) elif cfg.enable_https(): access_url = 'https://%s:%s%s' % (access_uri, cfg.cherryport(), cfg.url_base()) else: access_url = 'http://%s:%s%s' % (access_uri, cfg.cherryport(), cfg.url_base()) return access_url, urls