1
0
mirror of https://github.com/moparisthebest/SickRage synced 2024-11-16 14:25:02 -05:00

Fixed issues with basic auth and NoneType errors

This commit is contained in:
echel0n 2014-06-17 12:51:23 -07:00
parent cc86dda802
commit 3989f722a7
2 changed files with 22 additions and 52 deletions

View File

@ -18,6 +18,7 @@
from __future__ import with_statement
import base64
import functools
import inspect
import os.path
@ -80,7 +81,7 @@ from lib import adba
from Cheetah.Template import Template
from tornado import gen, autoreload
from tornado.web import RequestHandler, HTTPError, asynchronous, authenticated
from tornado.web import RequestHandler, HTTPError, asynchronous
from tornado.ioloop import IOLoop
# def _handle_reverse_proxy():
@ -92,12 +93,14 @@ from tornado.ioloop import IOLoop
req_headers = None
def basicauth(handler_class):
def authenticated(handler_class):
def wrap_execute(handler_execute):
def basicauth(handler, transforms, *args, **kwargs):
def _request_basic_auth(handler):
handler.set_status(401)
handler.set_header('WWW-Authenticate', 'Basic realm=Restricted')
handler._transforms = []
handler.finish()
return False
@ -112,16 +115,9 @@ def basicauth(handler_class):
auth_decoded = base64.decodestring(auth_hdr[6:])
username, password = auth_decoded.split(':', 2)
if username == sickbeard.WEB_USERNAME and password == sickbeard.WEB_PASSWORD:
#logger.log('authenticated user successfully', logger.DEBUG)
if not handler.get_secure_cookie("user"):
handler.set_secure_cookie("user", str(time.time()))
else:
if handler.get_secure_cookie("user"):
handler.clear_cookie("user")
if username != sickbeard.WEB_USERNAME or password != sickbeard.WEB_PASSWORD:
return _request_basic_auth(handler)
except Exception, e:
handler.clear_cookie("user")
return _request_basic_auth(handler)
return True
@ -135,12 +131,12 @@ def basicauth(handler_class):
handler_class._execute = wrap_execute(handler_class._execute)
return handler_class
class RedirectHandler(RequestHandler):
class RedirectHandler(RequestHandler):
def get(self, path, **kwargs):
self.redirect(path, permanent=True)
@basicauth
@authenticated
class IndexHandler(RedirectHandler):
def __init__(self, application, request, **kwargs):
super(IndexHandler, self).__init__(application, request, **kwargs)
@ -161,7 +157,7 @@ class IndexHandler(RedirectHandler):
args[arg] = value[0]
return args
def _dispatch(self, callback):
def _dispatch(self):
args = None
path = self.request.uri.split('?')[0]
@ -170,7 +166,7 @@ class IndexHandler(RedirectHandler):
if path.startswith('/api'):
apikey = path.strip('/').split('/')[-1]
method = path.strip('/').split('/')[0]
self.request.arguments.update({'apikey':[apikey]})
self.request.arguments.update({'apikey': [apikey]})
def pred(c):
return inspect.isclass(c) and c.__module__ == pred.__module__
@ -200,35 +196,29 @@ class IndexHandler(RedirectHandler):
if func:
if args:
callback(func(**args))
return func(**args)
else:
callback(func())
return func()
callback(HTTPError(404))
raise HTTPError(404)
def get_current_user(self):
return self.get_secure_cookie("user")
@authenticated
@asynchronous
@gen.engine
def get(self, *args, **kwargs):
try:
result = yield gen.Task(self._dispatch)
self.finish(result)
resp = self._dispatch()
if resp:
self.finish(resp)
except Exception as e:
logger.log(ex(e), logger.ERROR)
logger.log(u"Traceback: " + traceback.format_exc(), logger.DEBUG)
self.finish(ex(e))
@asynchronous
def post(self, *args, **kwargs):
try:
result = yield gen.Task(self._dispatch)
self.finish(result)
self.finish(self._dispatch())
except Exception as e:
logger.log(ex(e), logger.ERROR)
logger.log(u"Traceback: " + traceback.format_exc(), logger.DEBUG)
self.finish(ex(e))
def robots_txt(self, *args, **kwargs):
""" Keep web crawlers out """
@ -460,10 +450,6 @@ class IndexHandler(RedirectHandler):
browser = WebFileBrowser
class LoginHandler(IndexHandler):
def get(self):
self.redirect(self.get_argument("next", u"/"))
class PageTemplate(Template):
def __init__(self, *args, **KWs):
KWs['file'] = os.path.join(sickbeard.PROG_DIR, "gui/" + sickbeard.GUI_NAME + "/interfaces/default/",
@ -552,6 +538,7 @@ def _getEpisode(show, season=None, episode=None, absolute=None):
return epObj
def ManageMenu():
manageMenu = [
{'title': 'Backlog Overview', 'path': 'manage/backlogOverview/'},
@ -626,6 +613,7 @@ class ManageSearches(IndexHandler):
self.redirect("/manage/manageSearches/")
class Manage(IndexHandler):
def index(self, *args, **kwargs):
t = PageTemplate(file="manage.tmpl")
@ -1479,8 +1467,6 @@ class ConfigGeneral(IndexHandler):
else:
ui.notifications.message('Configuration Saved', ek.ek(os.path.join, sickbeard.CONFIG_FILE))
self.redirect("/config/general/")
class ConfigSearch(IndexHandler):
def index(self, *args, **kwargs):
@ -1564,8 +1550,6 @@ class ConfigSearch(IndexHandler):
else:
ui.notifications.message('Configuration Saved', ek.ek(os.path.join, sickbeard.CONFIG_FILE))
self.redirect("/config/search/")
class ConfigPostProcessing(IndexHandler):
def index(self, *args, **kwargs):
@ -1669,8 +1653,6 @@ class ConfigPostProcessing(IndexHandler):
else:
ui.notifications.message('Configuration Saved', ek.ek(os.path.join, sickbeard.CONFIG_FILE))
self.redirect("/config/postProcessing/")
def testNaming(self, pattern=None, multi=None, abd=False, sports=False, anime_type=None):
@ -2109,8 +2091,6 @@ class ConfigProviders(IndexHandler):
else:
ui.notifications.message('Configuration Saved', ek.ek(os.path.join, sickbeard.CONFIG_FILE))
self.redirect("/config/providers/")
class ConfigNotifications(IndexHandler):
def index(self, *args, **kwargs):
@ -2312,8 +2292,6 @@ class ConfigNotifications(IndexHandler):
else:
ui.notifications.message('Configuration Saved', ek.ek(os.path.join, sickbeard.CONFIG_FILE))
self.redirect("/config/notifications/")
class ConfigSubtitles(IndexHandler):
def index(self, *args, **kwargs):
@ -2371,8 +2349,6 @@ class ConfigSubtitles(IndexHandler):
else:
ui.notifications.message('Configuration Saved', ek.ek(os.path.join, sickbeard.CONFIG_FILE))
self.redirect("/config/subtitles/")
class ConfigAnime(IndexHandler):
def index(self, *args, **kwargs):
@ -2418,8 +2394,6 @@ class ConfigAnime(IndexHandler):
else:
ui.notifications.message('Configuration Saved', ek.ek(os.path.join, sickbeard.CONFIG_FILE))
self.redirect("/config/anime/")
class Config(IndexHandler):
def index(self, *args, **kwargs):
@ -4222,7 +4196,6 @@ class UI(IndexHandler):
return "ok"
def get_messages(self, *args, **kwargs):
messages = {}
cur_notification_num = 1

View File

@ -4,7 +4,6 @@ import sickbeard
import webserve
import webapi
import tornado.options
from sickbeard import logger
from sickbeard.helpers import create_https_certificates
from tornado.web import Application, StaticFileHandler, RedirectHandler, HTTPError
@ -103,14 +102,12 @@ def initWebServer(options={}):
debug=sickbeard.DEBUG,
gzip=True,
xheaders=True,
cookie_secret='61oETzKXQAGaYdkL5gEmGeJJFuYh7EQnp2XdTP1o/Vo=',
login_url='/login'
cookie_secret='61oETzKXQAGaYdkL5gEmGeJJFuYh7EQnp2XdTP1o/Vo='
)
# Index Handler
app.add_handlers(".*$", [
(r"/", RedirectHandler, {'url': '/home/'}),
(r'/login', webserve.LoginHandler),
(r'/api/(.*)(/?)', webapi.Api),
(r'%s(.*)(/?)' % options['web_root'], webserve.IndexHandler)
])