diff options
Diffstat (limited to 'deluge/ui/web/server.py')
-rw-r--r-- | deluge/ui/web/server.py | 65 |
1 files changed, 32 insertions, 33 deletions
diff --git a/deluge/ui/web/server.py b/deluge/ui/web/server.py index f391a78..77c1ddf 100644 --- a/deluge/ui/web/server.py +++ b/deluge/ui/web/server.py @@ -73,6 +73,20 @@ def rpath(*paths): return common.resource_filename('deluge.ui.web', os.path.join(*paths)) +def absolute_base_url(base): + """Returns base as absolute URL for links""" + if not base: + base = '/' + + if not base.startswith('/'): + base = '/' + base + + if not base.endswith('/'): + base += '/' + + return base + + class GetText(resource.Resource): def render(self, request): request.setHeader(b'content-type', b'text/javascript; encoding=utf-8') @@ -127,14 +141,12 @@ class Upload(resource.Resource): request.setHeader(b'content-type', b'text/html') request.setResponseCode(http.OK) - return json.dumps({'success': bool(filenames), 'files': filenames}).encode( - 'utf8' - ) + return json.dumps({'success': bool(filenames), 'files': filenames}).encode() class Render(resource.Resource): def __init__(self): - resource.Resource.__init__(self) + super().__init__() # Make a list of all the template files to check requests against. self.template_files = fnmatch.filter(os.listdir(rpath('render')), '*.html') @@ -163,7 +175,7 @@ class Render(resource.Resource): class Tracker(resource.Resource): def __init__(self): - resource.Resource.__init__(self) + super().__init__() try: self.tracker_icons = component.get('TrackerIcons') except KeyError: @@ -178,7 +190,7 @@ class Tracker(resource.Resource): request.setHeader( b'cache-control', b'public, must-revalidate, max-age=86400' ) - request.setHeader(b'content-type', icon.get_mimetype().encode('utf8')) + request.setHeader(b'content-type', icon.get_mimetype().encode()) request.setResponseCode(http.OK) request.write(icon.get_data()) request.finish() @@ -198,7 +210,7 @@ class Flag(resource.Resource): return self def render(self, request): - flag = request.country.decode('utf-8').lower() + '.png' + flag = request.country.decode().lower() + '.png' path = ('ui', 'data', 'pixmaps', 'flags', flag) filename = common.resource_filename('deluge', os.path.join(*path)) if os.path.exists(filename): @@ -447,7 +459,6 @@ class Themes(static.File): class TopLevel(resource.Resource): - __stylesheets = [ 'css/ext-all-notheme.css', 'css/ext-extensions.css', @@ -455,7 +466,7 @@ class TopLevel(resource.Resource): ] def __init__(self): - resource.Resource.__init__(self) + super().__init__() self.putChild(b'css', LookupResource('Css', rpath('css'))) if os.path.isfile(rpath('js', 'gettext.js')): @@ -475,7 +486,8 @@ class TopLevel(resource.Resource): self.putChild( b'ui_images', LookupResource( - 'UI_Images', common.resource_filename('deluge.ui.data', 'pixmaps') + 'UI_Images', + common.resource_filename('deluge.ui', os.path.join('data', 'pixmaps')), ), ) @@ -558,30 +570,21 @@ class TopLevel(resource.Resource): self.__scripts.remove(script) self.__debug_scripts.remove(script) - def getChild(self, path, request): # NOQA: N802 - if not path: - return self - else: - return resource.Resource.getChild(self, path, request) - def getChildWithDefault(self, path, request): # NOQA: N802 # Calculate the request base - header = request.getHeader(b'x-deluge-base') - base = header.decode('utf-8') if header else component.get('DelugeWeb').base - - # validate the base parameter - if not base: - base = '/' + header = request.getHeader('x-deluge-base') + config_base = component.get('DelugeWeb').base + base = header if header else config_base - if base[0] != '/': - base = '/' + base + first_request = not hasattr(request, 'base') + request.base = absolute_base_url(base).encode() - if base[-1] != '/': - base += '/' + base_resource = first_request and path.decode() == config_base.strip('/') - request.base = base.encode('utf-8') + if not path or base_resource: + return self - return resource.Resource.getChildWithDefault(self, path, request) + return super().getChildWithDefault(path, request) def render(self, request): uri_true = ('true', 'yes', 'on', '1') @@ -653,7 +656,7 @@ class DelugeWeb(component.Component): reactor). If False shares the process and twisted reactor from WebUI plugin or tests. """ - component.Component.__init__(self, 'DelugeWeb', depend=['Web']) + super().__init__('DelugeWeb', depend=['Web']) self.config = configmanager.ConfigManager( 'web.conf', defaults=CONFIG_DEFAULTS, file_version=2 ) @@ -680,10 +683,6 @@ class DelugeWeb(component.Component): elif options.no_ssl: self.https = False - if self.base != '/': - # Strip away slashes and serve on the base path as well as root path - self.top_level.putChild(self.base.strip('/'), self.top_level) - setup_translation() # Remove twisted version number from 'server' http-header for security reasons |