mirror of
https://github.com/JohnDoee/deluge-streaming/
synced 2026-07-01 07:31:17 -07:00
60 lines
2.3 KiB
Python
60 lines
2.3 KiB
Python
from twisted.web.resource import Resource as TwistedResource, _computeAllowedMethods
|
|
from twisted.web import server, error
|
|
from twisted.internet import defer
|
|
|
|
|
|
class Resource(TwistedResource):
|
|
content_type = 'application/json'
|
|
|
|
def __init__(self, username=None, password=None, *args, **kwargs):
|
|
self.username = username
|
|
self.password = password
|
|
TwistedResource.__init__(self, *args, **kwargs)
|
|
|
|
def render(self, request): # Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
|
|
"""
|
|
Adds support for deferred render methods
|
|
"""
|
|
auth_header = request.getHeader('Authorization')
|
|
|
|
if self.username or self.password:
|
|
authenticated = False
|
|
if auth_header:
|
|
auth_header = auth_header.split(' ')
|
|
if len(auth_header) > 1 and auth_header[0] == 'Basic':
|
|
userpass = auth_header[1].decode('base64').split(':')
|
|
if len(userpass) == 2:
|
|
username, password = userpass
|
|
if self.username == username and self.password == password:
|
|
authenticated = True
|
|
|
|
|
|
if not authenticated:
|
|
print auth_header
|
|
print self.username, self.password
|
|
request.setResponseCode(401)
|
|
return 'Unauthorized'
|
|
|
|
m = getattr(self, 'render_' + request.method, None)
|
|
if not m:
|
|
# This needs to be here until the deprecated subclasses of the
|
|
# below three error resources in twisted.web.error are removed.
|
|
from twisted.web.error import UnsupportedMethod
|
|
allowedMethods = (getattr(self, 'allowedMethods', 0) or
|
|
_computeAllowedMethods(self))
|
|
raise UnsupportedMethod(allowedMethods)
|
|
|
|
result = defer.maybeDeferred(m, request)
|
|
|
|
def write_rest(defer_result, request):
|
|
request.write(defer_result)
|
|
request.finish()
|
|
|
|
def err_rest(defer_result=None):
|
|
defer_result.printTraceback()
|
|
request.finish()
|
|
|
|
result.addCallback(write_rest, request)
|
|
result.addErrback(err_rest)
|
|
|
|
return server.NOT_DONE_YET |