Compare commits

..

No commits in common. "2b138446d47728092abad96fd89e5b3777b963e4" and "e5f9b39025ea757af5eb59f40278de8a4ef696ec" have entirely different histories.

2 changed files with 6 additions and 52 deletions

View File

@ -1,4 +1,4 @@
#!/usr/bin/env python #!/usr/bin/python
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Licensed under GNU General Public License v3 or later # Licensed under GNU General Public License v3 or later
@ -312,7 +312,7 @@ class DirListingHandler(FileBaseHandler):
path = self.getCleanPath() path = self.getCleanPath()
# check if path is in current serving directory # check if path is in current serving directory
currBaseDir = self.targetDir + os.path.sep currBaseDir = os.path.abspath(self.targetDir) + os.path.sep
requestPath = os.path.normpath(os.path.join(currBaseDir, path)) + os.path.sep requestPath = os.path.normpath(os.path.join(currBaseDir, path)) + os.path.sep
if not requestPath.startswith(currBaseDir): if not requestPath.startswith(currBaseDir):
self.send_response(301) self.send_response(301)
@ -849,9 +849,9 @@ class ServeFile():
# filter out ips we are not listening on # filter out ips we are not listening on
if not self.listenIPv6: if not self.listenIPv6:
ips = [ip for ip in ips if '.' in ip] ips = filter(lambda ip: ":" not in ip, ips)
if not self.listenIPv4: if not self.listenIPv4:
ips = [ip for ip in ips if ':' in ip] ips = filter(lambda ip: "." not in ip, ips)
return ips return ips
return None return None
@ -1041,7 +1041,7 @@ class ServeFile():
raise ServeFileException("Error: Could not create directory '%s' for uploads, %r" % (self.target, str(e))) raise ServeFileException("Error: Could not create directory '%s' for uploads, %r" % (self.target, str(e)))
else: else:
raise ServeFileException("Error: Upload directory already exists and is a file.") raise ServeFileException("Error: Upload directory already exists and is a file.")
FilePutter.targetDir = os.path.abspath(self.target) FilePutter.targetDir = self.target
FilePutter.maxUploadSize = self.maxUploadSize FilePutter.maxUploadSize = self.maxUploadSize
handler = FilePutter handler = FilePutter
elif self.serveMode == self.MODE_LISTDIR: elif self.serveMode == self.MODE_LISTDIR:
@ -1050,7 +1050,7 @@ class ServeFile():
if not os.path.isdir(self.target): if not os.path.isdir(self.target):
raise ServeFileException("Error: '%s' is not a directory." % (self.target,)) raise ServeFileException("Error: '%s' is not a directory." % (self.target,))
handler = DirListingHandler handler = DirListingHandler
handler.targetDir = os.path.abspath(self.target) handler.targetDir = self.target
if self.auth: if self.auth:
# do authentication # do authentication

View File

@ -2,7 +2,6 @@ import io
import os import os
import pytest import pytest
import requests import requests
import socket
import subprocess import subprocess
import tarfile import tarfile
import time import time
@ -10,12 +9,6 @@ import urllib3
# crudly written to learn more about pytest and to have a base for refactoring # crudly written to learn more about pytest and to have a base for refactoring
try:
ConnectionRefusedError
connrefused_exc = ConnectionRefusedError
except NameError:
connrefused_exc = socket.error
@pytest.fixture @pytest.fixture
def run_servefile(): def run_servefile():
@ -125,18 +118,6 @@ def test_specify_port(run_servefile, datadir):
check_download(data, fname='testfile', port=8081) check_download(data, fname='testfile', port=8081)
def test_ipv4_only(run_servefile, datadir):
data = "NOOT NOOT"
p = datadir({'testfile': data}) / 'testfile'
run_servefile([str(p), '-4'])
check_download(data, fname='testfile', host='127.0.0.1')
sock = socket.socket(socket.AF_INET6)
with pytest.raises(connrefused_exc):
sock.connect(("::1", 8080))
def test_big_download(run_servefile, datadir): def test_big_download(run_servefile, datadir):
# test with about 10 mb of data # test with about 10 mb of data
data = "x" * (10 * 1024 ** 2) data = "x" * (10 * 1024 ** 2)
@ -186,33 +167,6 @@ def test_serve_directory(run_servefile, datadir):
check_download('jup!', '/bar/thisisaverylongfilenamefortestingthatthisstillworksproperly') check_download('jup!', '/bar/thisisaverylongfilenamefortestingthatthisstillworksproperly')
def test_serve_relative_directory(run_servefile, datadir):
d = {
'foo': {'kratzbaum': 'cat', 'I like Cats!': 'kitteh', '&&&&&&&': 'wheee'},
'bar': {'thisisaverylongfilenamefortestingthatthisstillworksproperly': 'jup!'},
'noot': 'still data in here',
'bigfile': 'x' * (10 * 1024 ** 2),
}
p = datadir(d)
run_servefile(['../', '-l'], cwd=os.path.join(str(p), 'foo'))
# check if all files are in directory listing
# (could be made more sophisticated with beautifulsoup)
for path in '/', '/../':
r = make_request(path)
for k in d:
assert k in r.text
for fname, content in d['foo'].items():
check_download(content, '/foo/' + fname)
r = make_request('/unknown')
assert r.status_code == 404
# download
check_download('jup!', '/bar/thisisaverylongfilenamefortestingthatthisstillworksproperly')
def test_upload(run_servefile, tmp_path): def test_upload(run_servefile, tmp_path):
data = ('this is my live now\n' data = ('this is my live now\n'
'uploading strings to servers\n' 'uploading strings to servers\n'