# HG changeset patch # User Jeff Hammel # Date 1330558861 28800 # Node ID 8127dde8da22f2f326b7920b282a77994c9fd09a # Parent 1aaf2ba89b30a67630f5087859a219dbecb99416 fix slashing diff -r 1aaf2ba89b30 -r 8127dde8da22 fileserver/web.py --- a/fileserver/web.py Wed Feb 29 15:22:51 2012 -0800 +++ b/fileserver/web.py Wed Feb 29 15:41:01 2012 -0800 @@ -49,6 +49,11 @@ def normpath(path): return os.path.normcase(os.path.abspath(path)) + def add_slash(self, request): + import pdb; pdb.set_trace() + location = '' + response = exc.HTTPMovedPermanantly() + def index(self, directory): """ generate a directory listing for a given directory @@ -81,6 +86,8 @@ if os.path.isdir(full): # serve directory index if not path_info.endswith('/'): + response = exc.HTTPMovedPermanently(add_slash=True) + return response(environ, start_response) return self.add_slash(environ, start_response) index = self.index(full) response_headers = [('Content-Type', 'text/html'), diff -r 1aaf2ba89b30 -r 8127dde8da22 tests/doctest.txt --- a/tests/doctest.txt Wed Feb 29 15:22:51 2012 -0800 +++ b/tests/doctest.txt Wed Feb 29 15:41:01 2012 -0800 @@ -5,6 +5,7 @@ >>> import fileserver >>> import os + >>> import urlparse >>> from paste.fixture import TestApp Make a single file server:: @@ -53,7 +54,17 @@ Ensure you can get resources from subdirectories:: >>> response = testapp.get('/foo') + >>> response.status # 301 Moved Permanently + 301 + >>> location = response.header_dict['location'] + >>> shema, netloc, path, query, fragment = urlparse.urlsplit(location) + >>> path + '/foo/' + >>> response = testapp.get('/foo/') >>> response.status + 200 + >>> 'bar.txt' in response.body + True Ensure you can't get to non-allowed resources::