diff --git a/sickbeard/webserve.py b/sickbeard/webserve.py
index e3ff6d15..caa009b4 100644
--- a/sickbeard/webserve.py
+++ b/sickbeard/webserve.py
@@ -99,7 +99,7 @@ def authenticated(handler_class):
def basicauth(handler, transforms, *args, **kwargs):
def _request_basic_auth(handler):
handler.set_status(401)
- handler.set_header('WWW-Authenticate', 'Basic realm=Restricted')
+ handler.set_header('WWW-Authenticate', 'Basic realm=SickRage')
handler._transforms = []
handler.finish()
return False
@@ -107,6 +107,9 @@ def authenticated(handler_class):
try:
if not (sickbeard.WEB_USERNAME and sickbeard.WEB_PASSWORD):
return True
+ elif handler.request.uri.startswith('/calendar') or (
+ handler.request.uri.startswith('/api') and '/api/builder' not in handler.request.uri):
+ return True
auth_hdr = handler.request.headers.get('Authorization')
@@ -134,6 +137,7 @@ def authenticated(handler_class):
handler_class._execute = wrap_execute(handler_class._execute)
return handler_class
+
@authenticated
class IndexHandler(RequestHandler):
def __init__(self, application, request, **kwargs):
@@ -141,12 +145,37 @@ class IndexHandler(RequestHandler):
global req_headers
sickbeard.REMOTE_IP = self.request.remote_ip
- self.set_header('Cache-Control', "max-age=0,no-cache,no-store")
req_headers = self.request.headers
+ def http_error_401_handler(self):
+ """ Custom handler for 401 error """
+ return r'''
+
+
+ %s
+
+
+
+ Error %s: You need to provide a valid username and password.
+
+
+ ''' % ('Access denied', 401)
+
+ def http_error_404_handler(self):
+ """ Custom handler for 404 error, redirect back to main page """
+ self.redirect('/home/')
+
+ def write_error(self, status_code, **kwargs):
+ if status_code == 404:
+ self.redirect('/home/')
+ elif status_code == 401:
+ self.finish(self.http_error_401_handler())
+ else:
+ super(IndexHandler, self).write_error(status_code, **kwargs)
+
def _dispatch(self):
- path = self.request.uri.replace(sickbeard.WEB_ROOT,'').split('?')[0]
+ path = self.request.uri.replace(sickbeard.WEB_ROOT, '').split('?')[0]
method = path.strip('/').split('/')[-1]
if path.startswith('/api'):
@@ -186,7 +215,7 @@ class IndexHandler(RequestHandler):
return func(**args)
raise HTTPError(404)
-
+
def redirect(self, url, permanent=False, status=None):
self._transforms = []
super(IndexHandler, self).redirect(sickbeard.WEB_ROOT + url, permanent, status)
@@ -194,23 +223,14 @@ class IndexHandler(RequestHandler):
@asynchronous
@gen.engine
def get(self, *args, **kwargs):
- try:
- response = yield gen.Task(self.getresponse, self._dispatch)
- self.finish(response)
- except Exception as e:
- logger.log(ex(e), logger.ERROR)
- logger.log(u"Traceback: " + traceback.format_exc(), logger.DEBUG)
+ response = yield gen.Task(self.getresponse, self._dispatch)
+ self.finish(response)
@asynchronous
@gen.engine
def post(self, *args, **kwargs):
- try:
- response = yield gen.Task(self.getresponse, self._dispatch)
- self.finish(response)
- except Exception as e:
- logger.log(ex(e), logger.ERROR)
- logger.log(u"Traceback: " + traceback.format_exc(), logger.DEBUG)
-
+ response = yield gen.Task(self.getresponse, self._dispatch)
+ self.finish(response)
def getresponse(self, func, callback):
response = func()
@@ -446,7 +466,6 @@ class IndexHandler(RequestHandler):
browser = WebFileBrowser
-
class PageTemplate(Template):
def __init__(self, *args, **KWs):
KWs['file'] = os.path.join(sickbeard.PROG_DIR, "gui/" + sickbeard.GUI_NAME + "/interfaces/default/",
@@ -1464,6 +1483,7 @@ class ConfigGeneral(IndexHandler):
else:
ui.notifications.message('Configuration Saved', ek.ek(os.path.join, sickbeard.CONFIG_FILE))
+
class ConfigSearch(IndexHandler):
def index(self, *args, **kwargs):
diff --git a/sickbeard/webserveInit.py b/sickbeard/webserveInit.py
index 61cd31ca..34f105ed 100644
--- a/sickbeard/webserveInit.py
+++ b/sickbeard/webserveInit.py
@@ -43,41 +43,6 @@ def initWebServer(options={}):
assert isinstance(options['port'], int)
assert 'data_root' in options
- def http_error_401_hander(status, message, traceback, version):
- """ Custom handler for 401 error """
- if status != "401 Unauthorized":
- logger.log(u"Tornado caught an error: %s %s" % (status, message), logger.ERROR)
- logger.log(traceback, logger.DEBUG)
- return r'''
-
-
- %s
-
-
-
- Error %s: You need to provide a valid username and password.
-
-
-''' % ('Access denied', status)
-
- def http_error_404_hander(status, message, traceback, version):
- """ Custom handler for 404 error, redirect back to main page """
- return r'''
-
-
- 404
-
-
-
-
-
-
-''' % options['web_root']
-
# tornado setup
enable_https = options['enable_https']
https_cert = options['https_cert']
@@ -116,14 +81,11 @@ def initWebServer(options={}):
{'paths': [os.path.join(options['data_root'], 'images/ico/favicon.ico')]}),
(r'%s/%s/(.*)(/?)' % (options['web_root'], 'images'), MultiStaticFileHandler,
{'paths': [os.path.join(options['data_root'], 'images'),
- os.path.join(sickbeard.CACHE_DIR, 'images'),
- os.path.join(sickbeard.CACHE_DIR, 'images', 'thumbnails')]}),
+ os.path.join(sickbeard.CACHE_DIR, 'images')]}),
(r'%s/%s/(.*)(/?)' % (options['web_root'], 'css'), MultiStaticFileHandler,
{'paths': [os.path.join(options['data_root'], 'css')]}),
(r'%s/%s/(.*)(/?)' % (options['web_root'], 'js'), MultiStaticFileHandler,
- {'paths': [os.path.join(options['data_root'], 'js'),
- os.path.join(options['data_root'], 'js/lib'),
- os.path.join(options['data_root'], 'js/fancybox')]})
+ {'paths': [os.path.join(options['data_root'], 'js')]})
])