def get(self, *args, **kwargs): if self.get_argument('u', '') == sickbeard.WEB_USERNAME and self.get_argument('p', '') == sickbeard.WEB_PASSWORD: if not len(sickbeard.API_KEY or ''): sickbeard.API_KEY = helpers.generateApiKey() result = {'success': True, 'api_key': sickbeard.API_KEY} else: result = {'success': False, 'error': _('Failed authentication while getting api key')} logger.log(_('Authentication failed during api key request: {0}').format((traceback.format_exc())), logger.WARNING) return self.finish(result)
def generateApiKey(): return helpers.generateApiKey()
def __init__(self, options={}, io_loop=None): threading.Thread.__init__(self) self.daemon = True self.alive = True self.name = "TORNADO" self.io_loop = io_loop or IOLoop.current() self.options = options self.options.setdefault('port', 8081) self.options.setdefault('host', '0.0.0.0') self.options.setdefault('log_dir', None) self.options.setdefault('username', '') self.options.setdefault('password', '') self.options.setdefault('web_root', '/') assert isinstance(self.options['port'], int) assert 'data_root' in self.options # video root if sickbeard.ROOT_DIRS: root_dirs = sickbeard.ROOT_DIRS.split('|') self.video_root = root_dirs[int(root_dirs[0]) + 1] else: self.video_root = None # web root if self.options['web_root']: sickbeard.WEB_ROOT = self.options['web_root'] = ('/' + self.options['web_root'].lstrip('/').strip('/')) # api root if not sickbeard.API_KEY: sickbeard.API_KEY = generateApiKey() self.options['api_root'] = r'%s/api/%s' % (sickbeard.WEB_ROOT, sickbeard.API_KEY) # tornado setup self.enable_https = self.options['enable_https'] self.https_cert = self.options['https_cert'] self.https_key = self.options['https_key'] if self.enable_https: # If either the HTTPS certificate or key do not exist, make some self-signed ones. if not (self.https_cert and os.path.exists(self.https_cert)) or not ( self.https_key and os.path.exists(self.https_key)): if not create_https_certificates(self.https_cert, self.https_key): logger.log(u"Unable to create CERT/KEY files, disabling HTTPS") sickbeard.ENABLE_HTTPS = False self.enable_https = False if not (os.path.exists(self.https_cert) and os.path.exists(self.https_key)): logger.log(u"Disabled HTTPS because of missing CERT and KEY files", logger.WARNING) sickbeard.ENABLE_HTTPS = False self.enable_https = False # Load the app self.app = Application([], debug=True, autoreload=False, gzip=True, xheaders=sickbeard.HANDLE_REVERSE_PROXY, cookie_secret='61oETzKXQAGaYdkL5gEmGeJJFuYh7EQnp2XdTP1o/Vo=', login_url='%s/login/' % self.options['web_root'], ) # Main Handlers self.app.add_handlers('.*$', [ # webapi handler (r'%s(/?.*)' % self.options['api_root'], ApiHandler), # webapi key retrieval (r'%s/getkey(/?.*)' % self.options['web_root'], KeyHandler), # webapi builder redirect (r'%s/api/builder' % self.options['web_root'], RedirectHandler, {"url": self.options['web_root'] + '/apibuilder/'}), # webui login/logout handlers (r'%s/login(/?)' % self.options['web_root'], LoginHandler), (r'%s/logout(/?)' % self.options['web_root'], LogoutHandler), # webui handlers ] + route.get_routes(self.options['web_root'])) # Static File Handlers self.app.add_handlers(".*$", [ # favicon (r'%s/(favicon\.ico)' % self.options['web_root'], StaticFileHandler, {"path": os.path.join(self.options['data_root'], 'images/ico/favicon.ico')}), # images (r'%s/images/(.*)' % self.options['web_root'], StaticFileHandler, {"path": os.path.join(self.options['data_root'], 'images')}), # cached images (r'%s/cache/images/(.*)' % self.options['web_root'], StaticFileHandler, {"path": os.path.join(sickbeard.CACHE_DIR, 'images')}), # css (r'%s/css/(.*)' % self.options['web_root'], StaticFileHandler, {"path": os.path.join(self.options['data_root'], 'css')}), # javascript (r'%s/js/(.*)' % self.options['web_root'], StaticFileHandler, {"path": os.path.join(self.options['data_root'], 'js')}), # videos ] + [(r'%s/videos/(.*)' % self.options['web_root'], StaticFileHandler, {"path": self.video_root})])
def __init__(self, options=None): threading.Thread.__init__(self) self.daemon = True self.alive = True self.name = "WEBSERVER" self.options = options or {} self.options.setdefault('port', 8081) self.options.setdefault('host', '0.0.0.0') self.options.setdefault('log_dir', None) self.options.setdefault('username', '') self.options.setdefault('password', '') self.options.setdefault('web_root', '/') assert isinstance(self.options['port'], int) assert 'data_root' in self.options self.server = None # video root if sickbeard.ROOT_DIRS: root_dirs = sickbeard.ROOT_DIRS.split('|') self.video_root = root_dirs[int(root_dirs[0]) + 1] else: self.video_root = None # web root if self.options['web_root']: sickbeard.WEB_ROOT = self.options['web_root'] = ( '/' + self.options['web_root'].lstrip('/').strip('/')) # api root if not sickbeard.API_KEY: sickbeard.API_KEY = generateApiKey() self.options['api_root'] = r'{0}/api/{1}'.format( sickbeard.WEB_ROOT, sickbeard.API_KEY) # tornado setup self.enable_https = self.options['enable_https'] self.https_cert = self.options['https_cert'] self.https_key = self.options['https_key'] if self.enable_https: # If either the HTTPS certificate or key do not exist, make some self-signed ones. if not (self.https_cert and ek(os.path.exists, self.https_cert)) or not ( self.https_key and ek(os.path.exists, self.https_key)): if not create_https_certificates(self.https_cert, self.https_key): logger.log( "Unable to create CERT/KEY files, disabling HTTPS") sickbeard.ENABLE_HTTPS = False self.enable_https = False if not (ek(os.path.exists, self.https_cert) and ek(os.path.exists, self.https_key)): logger.log( "Disabled HTTPS because of missing CERT and KEY files", logger.WARNING) sickbeard.ENABLE_HTTPS = False self.enable_https = False # Load the app self.app = Application( [], debug= False, # enables autoreload, compiled_template_cache, static_hash_cache, serve_traceback - This fixes the 404 page and fixes autoreload for # devs. We could now update without restart possibly if we check DB version hasnt changed! autoreload=False, gzip=sickbeard.WEB_USE_GZIP, cookie_secret=sickbeard.WEB_COOKIE_SECRET, login_url='{0}/login/'.format(self.options['web_root']), static_path=self.options['data_root'], static_url_prefix='{0}/'.format(self.options['web_root']) # default_handler_class=Custom404Handler ) # Static File Handlers self.app.add_handlers( ".*$", [ url(r'{0}/favicon.ico'.format(self.options['web_root']), StaticFileHandler, { "path": ek(os.path.join, self.options['data_root'], 'images/ico/favicon.ico') }, name='favicon'), url(r'{0}/images/(.*)'.format(self.options['web_root']), StaticFileHandler, { "path": ek(os.path.join, self.options['data_root'], 'images') }, name='images'), url(r'{0}/cache/images/(.*)'.format(self.options['web_root']), StaticFileHandler, {"path": ek(os.path.join, sickbeard.CACHE_DIR, 'images')}, name='image_cache'), url(r'{0}/css/(.*)'.format(self.options['web_root']), StaticFileHandler, { "path": ek(os.path.join, self.options['data_root'], 'css') }, name='css'), url(r'{0}/js/(.*)'.format(self.options['web_root']), StaticFileHandler, { "path": ek(os.path.join, self.options['data_root'], 'js') }, name='js'), url(r'{0}/fonts/(.*)'.format(self.options['web_root']), StaticFileHandler, { "path": ek(os.path.join, self.options['data_root'], 'fonts') }, name='fonts') # TODO: WTF is this? # url(r'{0}/videos/(.*)'.format(self.options['web_root']), StaticFileHandler, # {"path": self.video_root}, name='videos') ]) # Main Handlers self.app.add_handlers( '.*$', [ url(r'{0}(/?.*)'.format(self.options['api_root']), ApiHandler, name='api'), url(r'{0}/getkey(/?.*)'.format(self.options['web_root']), KeyHandler, name='get_api_key'), url(r'{0}/api/builder'.format(self.options['web_root']), RedirectHandler, {"url": self.options['web_root'] + '/apibuilder/'}, name='apibuilder'), url(r'{0}/login(/?)'.format(self.options['web_root']), LoginHandler, name='login'), url(r'{0}/logout(/?)'.format(self.options['web_root']), LogoutHandler, name='logout'), url(r'{0}/calendar/?'.format(self.options['web_root']), CalendarHandler, name='calendar'), # routes added by @route decorator # Plus naked index with missing web_root prefix ] + Route.get_routes(self.options['web_root']))
def __init__(self, options=None, io_loop=None): threading.Thread.__init__(self) self.daemon = True self.alive = True self.name = "TORNADO" self.io_loop = io_loop or IOLoop.current() self.options = options or {} self.options.setdefault('port', 8081) self.options.setdefault('host', '0.0.0.0') self.options.setdefault('log_dir', None) self.options.setdefault('username', '') self.options.setdefault('password', '') self.options.setdefault('web_root', '/') assert isinstance(self.options['port'], int) assert 'data_root' in self.options self.server = None # video root if sickbeard.ROOT_DIRS: root_dirs = sickbeard.ROOT_DIRS.split('|') self.video_root = root_dirs[int(root_dirs[0]) + 1] else: self.video_root = None # web root if self.options['web_root']: sickbeard.WEB_ROOT = self.options['web_root'] = ( '/' + self.options['web_root'].lstrip('/').strip('/')) # api root if not sickbeard.API_KEY: sickbeard.API_KEY = generateApiKey() self.options['api_root'] = r'{0}/api/{1}'.format( sickbeard.WEB_ROOT, sickbeard.API_KEY) # tornado setup self.enable_https = self.options['enable_https'] self.https_cert = self.options['https_cert'] self.https_key = self.options['https_key'] if self.enable_https: # If either the HTTPS certificate or key do not exist, make some self-signed ones. if not (self.https_cert and ek(os.path.exists, self.https_cert)) or not ( self.https_key and ek(os.path.exists, self.https_key)): if not create_https_certificates(self.https_cert, self.https_key): logger.log( "Unable to create CERT/KEY files, disabling HTTPS") sickbeard.ENABLE_HTTPS = False self.enable_https = False if not (ek(os.path.exists, self.https_cert) and ek(os.path.exists, self.https_key)): logger.log( "Disabled HTTPS because of missing CERT and KEY files", logger.WARNING) sickbeard.ENABLE_HTTPS = False self.enable_https = False # Load the app self.app = Application( [], debug=True, autoreload=False, gzip=sickbeard.WEB_USE_GZIP, cookie_secret=sickbeard.WEB_COOKIE_SECRET, login_url='{0}/login/'.format(self.options['web_root']), ) # Main Handlers self.app.add_handlers( '.*$', [ # webapi handler (r'{0}(/?.*)'.format(self.options['api_root']), ApiHandler), # webapi key retrieval (r'{0}/getkey(/?.*)'.format( self.options['web_root']), KeyHandler), # webapi builder redirect (r'{0}/api/builder'.format( self.options['web_root']), RedirectHandler, { "url": self.options['web_root'] + '/apibuilder/' }), # webui login/logout handlers (r'{0}/login(/?)'.format( self.options['web_root']), LoginHandler), (r'{0}/logout(/?)'.format( self.options['web_root']), LogoutHandler), # Web calendar handler (Needed because option Unprotected calendar) (r'{0}/calendar'.format( self.options['web_root']), CalendarHandler), # webui handlers ] + route.get_routes(self.options['web_root'])) # Static File Handlers self.app.add_handlers( ".*$", [ # favicon (r'{0}/(favicon\.ico)'.format( self.options['web_root']), StaticFileHandler, { "path": ek(os.path.join, self.options['data_root'], 'images/ico/favicon.ico') }), # images (r'{0}/images/(.*)'.format( self.options['web_root']), StaticFileHandler, { "path": ek(os.path.join, self.options['data_root'], 'images') }), # locale (r'{0}/locale/messages\.json'.format( self.options['web_root']), LocaleFileHandler, { "path": ek(os.path.join, sickbeard.LOCALE_DIR, '{lang_code}/LC_MESSAGES') }), # cached images (r'{0}/cache/images/(.*)'.format( self.options['web_root']), StaticFileHandler, { "path": ek(os.path.join, sickbeard.CACHE_DIR, 'images') }), # css (r'{0}/css/(.*)'.format(self.options['web_root']), StaticFileHandler, { "path": ek(os.path.join, self.options['data_root'], 'css') }), # javascript (r'{0}/js/(.*)'.format(self.options['web_root']), StaticFileHandler, { "path": ek(os.path.join, self.options['data_root'], 'js') }), # fonts (r'{0}/fonts/(.*)'.format( self.options['web_root']), StaticFileHandler, { "path": ek(os.path.join, self.options['data_root'], 'fonts') }), # videos (r'{0}/videos/(.*)'.format( self.options['web_root']), StaticFileHandler, { "path": self.video_root }) ])
def __init__(self, options=None, io_loop=None): threading.Thread.__init__(self) self.daemon = True self.alive = True self.name = "TORNADO" self.io_loop = io_loop or IOLoop.current() self.options = options or {} self.options.setdefault("port", 8081) self.options.setdefault("host", "0.0.0.0") self.options.setdefault("log_dir", None) self.options.setdefault("username", "") self.options.setdefault("password", "") self.options.setdefault("web_root", "/") assert isinstance(self.options["port"], int) assert "data_root" in self.options self.server = None # video root if sickbeard.ROOT_DIRS: root_dirs = sickbeard.ROOT_DIRS.split("|") self.video_root = root_dirs[int(root_dirs[0]) + 1] else: self.video_root = None # web root if self.options["web_root"]: sickbeard.WEB_ROOT = self.options["web_root"] = "/" + self.options["web_root"].lstrip("/").strip("/") # api root if not sickbeard.API_KEY: sickbeard.API_KEY = generateApiKey() self.options["api_root"] = r"{0}/api/{1}".format(sickbeard.WEB_ROOT, sickbeard.API_KEY) # tornado setup self.enable_https = self.options["enable_https"] self.https_cert = self.options["https_cert"] self.https_key = self.options["https_key"] if self.enable_https: # If either the HTTPS certificate or key do not exist, make some self-signed ones. if not (self.https_cert and ek(os.path.exists, self.https_cert)) or not ( self.https_key and ek(os.path.exists, self.https_key) ): if not create_https_certificates(self.https_cert, self.https_key): logger.log(u"Unable to create CERT/KEY files, disabling HTTPS") sickbeard.ENABLE_HTTPS = False self.enable_https = False if not (ek(os.path.exists, self.https_cert) and ek(os.path.exists, self.https_key)): logger.log(u"Disabled HTTPS because of missing CERT and KEY files", logger.WARNING) sickbeard.ENABLE_HTTPS = False self.enable_https = False # Load the app self.app = Application( [], debug=True, autoreload=False, gzip=sickbeard.WEB_USE_GZIP, xheaders=sickbeard.HANDLE_REVERSE_PROXY, cookie_secret=sickbeard.WEB_COOKIE_SECRET, login_url="{0}/login/".format(self.options["web_root"]), ) # Main Handlers self.app.add_handlers( ".*$", [ # webapi handler (r"{0}(/?.*)".format(self.options["api_root"]), ApiHandler), # webapi key retrieval (r"{0}/getkey(/?.*)".format(self.options["web_root"]), KeyHandler), # webapi builder redirect ( r"{0}/api/builder".format(self.options["web_root"]), RedirectHandler, {"url": self.options["web_root"] + "/apibuilder/"}, ), # webui login/logout handlers (r"{0}/login(/?)".format(self.options["web_root"]), LoginHandler), (r"{0}/logout(/?)".format(self.options["web_root"]), LogoutHandler), # Web calendar handler (Needed because option Unprotected calendar) (r"{0}/calendar".format(self.options["web_root"]), CalendarHandler), # webui handlers ] + route.get_routes(self.options["web_root"]), ) # Static File Handlers self.app.add_handlers( ".*$", [ # favicon ( r"{0}/(favicon\.ico)".format(self.options["web_root"]), StaticFileHandler, {"path": ek(os.path.join, self.options["data_root"], "images/ico/favicon.ico")}, ), # images ( r"{0}/images/(.*)".format(self.options["web_root"]), StaticFileHandler, {"path": ek(os.path.join, self.options["data_root"], "images")}, ), # cached images ( r"{0}/cache/images/(.*)".format(self.options["web_root"]), StaticFileHandler, {"path": ek(os.path.join, sickbeard.CACHE_DIR, "images")}, ), # css ( r"{0}/css/(.*)".format(self.options["web_root"]), StaticFileHandler, {"path": ek(os.path.join, self.options["data_root"], "css")}, ), # javascript ( r"{0}/js/(.*)".format(self.options["web_root"]), StaticFileHandler, {"path": ek(os.path.join, self.options["data_root"], "js")}, ), # fonts ( r"{0}/fonts/(.*)".format(self.options["web_root"]), StaticFileHandler, {"path": ek(os.path.join, self.options["data_root"], "fonts")}, ), # videos (r"{0}/videos/(.*)".format(self.options["web_root"]), StaticFileHandler, {"path": self.video_root}), ], )
def __init__(self, options={}, io_loop=None): threading.Thread.__init__(self) self.daemon = True self.alive = True self.name = "TORNADO" self.io_loop = io_loop or IOLoop.current() self.options = options self.options.setdefault('port', 8081) self.options.setdefault('host', '0.0.0.0') self.options.setdefault('log_dir', None) self.options.setdefault('username', '') self.options.setdefault('password', '') self.options.setdefault('web_root', '/') assert isinstance(self.options['port'], int) assert 'data_root' in self.options # video root if sickbeard.ROOT_DIRS: root_dirs = sickbeard.ROOT_DIRS.split('|') self.video_root = root_dirs[int(root_dirs[0]) + 1] else: self.video_root = None # web root if self.options['web_root']: sickbeard.WEB_ROOT = self.options['web_root'] = ('/' + self.options['web_root'].lstrip('/').strip('/')) # api root if not sickbeard.API_KEY: sickbeard.API_KEY = generateApiKey() self.options['api_root'] = r'%s/api/%s' % (sickbeard.WEB_ROOT, sickbeard.API_KEY) # tornado setup self.enable_https = self.options['enable_https'] self.https_cert = self.options['https_cert'] self.https_key = self.options['https_key'] if self.enable_https: # If either the HTTPS certificate or key do not exist, make some self-signed ones. if not (self.https_cert and os.path.exists(self.https_cert)) or not ( self.https_key and os.path.exists(self.https_key)): if not create_https_certificates(self.https_cert, self.https_key): logger.log(u"Unable to create CERT/KEY files, disabling HTTPS") sickbeard.ENABLE_HTTPS = False self.enable_https = False if not (os.path.exists(self.https_cert) and os.path.exists(self.https_key)): logger.log(u"Disabled HTTPS because of missing CERT and KEY files", logger.WARNING) sickbeard.ENABLE_HTTPS = False self.enable_https = False # Load the app self.app = Application([], debug=True, autoreload=False, gzip=True, xheaders=sickbeard.HANDLE_REVERSE_PROXY, cookie_secret='61oETzKXQAGaYdkL5gEmGeJJFuYh7EQnp2XdTP1o/Vo=', login_url='/login/', ) # Main Handlers self.app.add_handlers('.*$', [ # webapi handler (r'%s(/?.*)' % self.options['api_root'], ApiHandler), # webapi key retrieval (r'%s/getkey(/?.*)' % self.options['web_root'], KeyHandler), # webapi builder redirect (r'%s/api/builder' % self.options['web_root'], RedirectHandler, {"url": self.options['web_root'] + '/apibuilder/'}), # webui login/logout handlers (r'%s/login(/?.*)' % self.options['web_root'], LoginHandler), (r'%s/logout(/?.*)' % self.options['web_root'], LogoutHandler), # webui redirect (r'/', RedirectHandler, {"url": self.options['web_root'] + '/home/'}), # webui handlers ] + route.get_routes(self.options['web_root'])) # Static File Handlers self.app.add_handlers(".*$", [ # favicon (r'%s/(favicon\.ico)' % self.options['web_root'], StaticFileHandler, {"path": os.path.join(self.options['data_root'], 'images/ico/favicon.ico')}), # images (r'%s/images/(.*)' % self.options['web_root'], StaticFileHandler, {"path": os.path.join(self.options['data_root'], 'images')}), # cached images (r'%s/cache/images/(.*)' % self.options['web_root'], StaticFileHandler, {"path": os.path.join(sickbeard.CACHE_DIR, 'images')}), # css (r'%s/css/(.*)' % self.options['web_root'], StaticFileHandler, {"path": os.path.join(self.options['data_root'], 'css')}), # javascript (r'%s/js/(.*)' % self.options['web_root'], StaticFileHandler, {"path": os.path.join(self.options['data_root'], 'js')}), # videos ] + [(r'%s/videos/(.*)' % self.options['web_root'], StaticFileHandler, {"path": self.video_root})])
def __init__(self, options=None, io_loop=None): threading.Thread.__init__(self) self.daemon = True self.alive = True self.name = "TORNADO" self.io_loop = io_loop or IOLoop.current() self.options = options or {} self.options.setdefault('port', 8081) self.options.setdefault('host', '0.0.0.0') self.options.setdefault('log_dir', None) self.options.setdefault('username', '') self.options.setdefault('password', '') self.options.setdefault('web_root', '/') assert isinstance(self.options['port'], int) assert 'data_root' in self.options self.server = None # video root if sickbeard.ROOT_DIRS: root_dirs = sickbeard.ROOT_DIRS.split('|') self.video_root = root_dirs[int(root_dirs[0]) + 1] else: self.video_root = None # web root if self.options['web_root']: sickbeard.WEB_ROOT = self.options['web_root'] = ('/' + self.options['web_root'].lstrip('/').strip('/')) # api root if not sickbeard.API_KEY: sickbeard.API_KEY = generateApiKey() self.options['api_root'] = r'{0}/api/{1}'.format(sickbeard.WEB_ROOT, sickbeard.API_KEY) # tornado setup self.enable_https = self.options['enable_https'] self.https_cert = self.options['https_cert'] self.https_key = self.options['https_key'] if self.enable_https: # If either the HTTPS certificate or key do not exist, make some self-signed ones. if not (self.https_cert and ek(os.path.exists, self.https_cert)) or not ( self.https_key and ek(os.path.exists, self.https_key)): if not create_https_certificates(self.https_cert, self.https_key): logger.log(u"Unable to create CERT/KEY files, disabling HTTPS") sickbeard.ENABLE_HTTPS = False self.enable_https = False if not (ek(os.path.exists, self.https_cert) and ek(os.path.exists, self.https_key)): logger.log(u"Disabled HTTPS because of missing CERT and KEY files", logger.WARNING) sickbeard.ENABLE_HTTPS = False self.enable_https = False # Load the app self.app = Application( [], debug=True, autoreload=False, gzip=sickbeard.WEB_USE_GZIP, cookie_secret=sickbeard.WEB_COOKIE_SECRET, login_url='{0}/login/'.format(self.options['web_root']), ) # Main Handlers self.app.add_handlers('.*$', [ # webapi handler (r'{0}(/?.*)'.format(self.options['api_root']), ApiHandler), # webapi key retrieval (r'{0}/getkey(/?.*)'.format(self.options['web_root']), KeyHandler), # webapi builder redirect (r'{0}/api/builder'.format(self.options['web_root']), RedirectHandler, {"url": self.options['web_root'] + '/apibuilder/'}), # webui login/logout handlers (r'{0}/login(/?)'.format(self.options['web_root']), LoginHandler), (r'{0}/logout(/?)'.format(self.options['web_root']), LogoutHandler), # Web calendar handler (Needed because option Unprotected calendar) (r'{0}/calendar'.format(self.options['web_root']), CalendarHandler), # webui handlers ] + route.get_routes(self.options['web_root'])) # Static File Handlers self.app.add_handlers(".*$", [ # favicon (r'{0}/(favicon\.ico)'.format(self.options['web_root']), StaticFileHandler, {"path": ek(os.path.join, self.options['data_root'], 'images/ico/favicon.ico')}), # images (r'{0}/images/(.*)'.format(self.options['web_root']), StaticFileHandler, {"path": ek(os.path.join, self.options['data_root'], 'images')}), # cached images (r'{0}/cache/images/(.*)'.format(self.options['web_root']), StaticFileHandler, {"path": ek(os.path.join, sickbeard.CACHE_DIR, 'images')}), # css (r'{0}/css/(.*)'.format(self.options['web_root']), StaticFileHandler, {"path": ek(os.path.join, self.options['data_root'], 'css')}), # javascript (r'{0}/js/(.*)'.format(self.options['web_root']), StaticFileHandler, {"path": ek(os.path.join, self.options['data_root'], 'js')}), # fonts (r'{0}/fonts/(.*)'.format(self.options['web_root']), StaticFileHandler, {"path": ek(os.path.join, self.options['data_root'], 'fonts')}), # videos (r'{0}/videos/(.*)'.format(self.options['web_root']), StaticFileHandler, {"path": self.video_root}) ])
def generateApiKey(): return helpers.generateApiKey()
def __init__(self, options={}, io_loop=None): threading.Thread.__init__(self) self.name = "TORNADO" self.alive = True self.io_loop = io_loop or IOLoop.current() self.options = options self.options.setdefault('port', 8081) self.options.setdefault('host', '0.0.0.0') self.options.setdefault('log_dir', None) self.options.setdefault('username', '') self.options.setdefault('password', '') self.options.setdefault('web_root', '/') assert isinstance(self.options[b'port'], int) assert 'gui_root' in self.options # video root if sickbeard.ROOT_DIRS: root_dirs = sickbeard.ROOT_DIRS.split('|') self.video_root = root_dirs[int(root_dirs[0]) + 1] else: self.video_root = None # web root if self.options[b'web_root']: sickbeard.WEB_ROOT = self.options[b'web_root'] = ('/' + self.options[b'web_root'].lstrip('/').strip('/')) # api root if not sickbeard.API_KEY: sickbeard.API_KEY = generateApiKey() self.options[b'api_root'] = r'%s/api/%s' % (sickbeard.WEB_ROOT, sickbeard.API_KEY) # tornado setup self.enable_https = self.options[b'enable_https'] self.https_cert = self.options[b'https_cert'] self.https_key = self.options[b'https_key'] if self.enable_https: # If either the HTTPS certificate or key do not exist, make some self-signed ones. if not (self.https_cert and ek(os.path.exists, self.https_cert)) or not ( self.https_key and ek(os.path.exists, self.https_key)): if not create_https_certificates(self.https_cert, self.https_key): logging.info("Unable to create CERT/KEY files, disabling HTTPS") sickbeard.ENABLE_HTTPS = False self.enable_https = False if not (os.path.exists(self.https_cert) and ek(os.path.exists, self.https_key)): logging.warning("Disabled HTTPS because of missing CERT and KEY files") sickbeard.ENABLE_HTTPS = False self.enable_https = False # Load the app self.app = Application([], debug=sickbeard.DEBUG, autoreload=False, gzip=sickbeard.WEB_USE_GZIP, xheaders=sickbeard.HANDLE_REVERSE_PROXY, cookie_secret=sickbeard.WEB_COOKIE_SECRET, login_url='%s/login/' % self.options[b'web_root'], ) # Main Handlers self.app.add_handlers('.*$', [ # webapi handler (r'%s(/?.*)' % self.options[b'api_root'], ApiHandler), # webapi key retrieval (r'%s/getkey(/?.*)' % self.options[b'web_root'], KeyHandler), # webapi builder redirect (r'%s/api/builder' % self.options[b'web_root'], RedirectHandler, {"url": self.options[b'web_root'] + '/apibuilder/'}), # webui login/logout handlers (r'%s/login(/?)' % self.options[b'web_root'], LoginHandler), (r'%s/logout(/?)' % self.options[b'web_root'], LogoutHandler), # webui handlers ] + route.get_routes(self.options[b'web_root'])) # Web calendar handler (Needed because option Unprotected calendar) self.app.add_handlers('.*$', [ (r'%s/calendar' % self.options[b'web_root'], CalendarHandler), ]) # Static File Handlers self.app.add_handlers(".*$", [ # favicon (r'%s/(favicon\.ico)' % self.options[b'web_root'], StaticFileHandler, {"path": ek(os.path.join, self.options[b'gui_root'], 'images/ico/favicon.ico')}), # images (r'%s.*?/images/(.*)' % self.options[b'web_root'], StaticImageHandler, {"path": ek(os.path.join, self.options[b'gui_root'], 'images')}), # css (r'%s/css/(.*)' % self.options[b'web_root'], StaticFileHandler, {"path": ek(os.path.join, self.options[b'gui_root'], 'css')}), # javascript (r'%s/js/(.*)' % self.options[b'web_root'], StaticFileHandler, {"path": ek(os.path.join, self.options[b'gui_root'], 'js')}), # videos ] + [(r'%s/videos/(.*)' % self.options[b'web_root'], StaticFileHandler, {"path": self.video_root})])
def __init__(self, options={}, io_loop=None): threading.Thread.__init__(self) self.name = "TORNADO" self.alive = True self.io_loop = io_loop or IOLoop.current() self.options = options self.options.setdefault('port', 8081) self.options.setdefault('host', '0.0.0.0') self.options.setdefault('log_dir', None) self.options.setdefault('username', '') self.options.setdefault('password', '') self.options.setdefault('web_root', '/') assert isinstance(self.options[b'port'], int) assert 'gui_root' in self.options # video root if sickbeard.ROOT_DIRS: root_dirs = sickbeard.ROOT_DIRS.split('|') self.video_root = root_dirs[int(root_dirs[0]) + 1] else: self.video_root = None # web root if self.options[b'web_root']: sickbeard.WEB_ROOT = self.options[b'web_root'] = ( '/' + self.options[b'web_root'].lstrip('/').strip('/')) # api root if not sickbeard.API_KEY: sickbeard.API_KEY = generateApiKey() self.options[b'api_root'] = r'%s/api/%s' % (sickbeard.WEB_ROOT, sickbeard.API_KEY) # tornado setup self.enable_https = self.options[b'enable_https'] self.https_cert = self.options[b'https_cert'] self.https_key = self.options[b'https_key'] if self.enable_https: # If either the HTTPS certificate or key do not exist, make some self-signed ones. if not (self.https_cert and ek(os.path.exists, self.https_cert)) or not ( self.https_key and ek(os.path.exists, self.https_key)): if not create_https_certificates(self.https_cert, self.https_key): logging.info( "Unable to create CERT/KEY files, disabling HTTPS") sickbeard.ENABLE_HTTPS = False self.enable_https = False if not (os.path.exists(self.https_cert) and ek(os.path.exists, self.https_key)): logging.warning( "Disabled HTTPS because of missing CERT and KEY files") sickbeard.ENABLE_HTTPS = False self.enable_https = False # Load the app self.app = Application( [], debug=sickbeard.DEBUG, autoreload=False, gzip=sickbeard.WEB_USE_GZIP, xheaders=sickbeard.HANDLE_REVERSE_PROXY, cookie_secret=sickbeard.WEB_COOKIE_SECRET, login_url='%s/login/' % self.options[b'web_root'], ) # Main Handlers self.app.add_handlers( '.*$', [ # webapi handler (r'%s(/?.*)' % self.options[b'api_root'], ApiHandler), # webapi key retrieval (r'%s/getkey(/?.*)' % self.options[b'web_root'], KeyHandler), # webapi builder redirect (r'%s/api/builder' % self.options[b'web_root'], RedirectHandler, { "url": self.options[b'web_root'] + '/apibuilder/' }), # webui login/logout handlers (r'%s/login(/?)' % self.options[b'web_root'], LoginHandler), (r'%s/logout(/?)' % self.options[b'web_root'], LogoutHandler), # webui handlers ] + route.get_routes(self.options[b'web_root'])) # Web calendar handler (Needed because option Unprotected calendar) self.app.add_handlers('.*$', [ (r'%s/calendar' % self.options[b'web_root'], CalendarHandler), ]) # Static File Handlers self.app.add_handlers( ".*$", [ # favicon (r'%s/(favicon\.ico)' % self.options[b'web_root'], StaticFileHandler, { "path": ek(os.path.join, self.options[b'gui_root'], 'images/ico/favicon.ico') }), # images (r'%s.*?/images/(.*)' % self.options[b'web_root'], StaticImageHandler, { "path": ek(os.path.join, self.options[b'gui_root'], 'images') }), # css (r'%s/css/(.*)' % self.options[b'web_root'], StaticFileHandler, { "path": ek(os.path.join, self.options[b'gui_root'], 'css') }), # javascript (r'%s/js/(.*)' % self.options[b'web_root'], StaticFileHandler, { "path": ek(os.path.join, self.options[b'gui_root'], 'js') }), # videos ] + [(r'%s/videos/(.*)' % self.options[b'web_root'], StaticFileHandler, { "path": self.video_root })])