PUT: Add initial support
This commit is contained in:
parent
afb5811879
commit
b3763acee4
2 changed files with 64 additions and 3 deletions
4
fhost.py
4
fhost.py
|
@ -330,9 +330,9 @@ def get(path):
|
||||||
|
|
||||||
abort(404)
|
abort(404)
|
||||||
|
|
||||||
@app.route("/", methods=["GET", "POST"])
|
@app.route("/", methods=["GET", "POST", "PUT"])
|
||||||
def fhost():
|
def fhost():
|
||||||
if request.method == "POST":
|
if request.method == "POST" or request.method == "PUT":
|
||||||
sf = None
|
sf = None
|
||||||
|
|
||||||
if "file" in request.files:
|
if "file" in request.files:
|
||||||
|
|
|
@ -18,7 +18,7 @@ def client():
|
||||||
db_upgrade()
|
db_upgrade()
|
||||||
yield client
|
yield client
|
||||||
|
|
||||||
def test_client(client):
|
def test_client_post(client):
|
||||||
payloads = [
|
payloads = [
|
||||||
({ "file" : (BytesIO(b"hello"), "hello.txt") }, 200, b"https://localhost/E.txt\n"),
|
({ "file" : (BytesIO(b"hello"), "hello.txt") }, 200, b"https://localhost/E.txt\n"),
|
||||||
({ "file" : (BytesIO(b"hello"), "hello.ignorethis") }, 200, b"https://localhost/E.txt\n"),
|
({ "file" : (BytesIO(b"hello"), "hello.ignorethis") }, 200, b"https://localhost/E.txt\n"),
|
||||||
|
@ -79,3 +79,64 @@ def test_client(client):
|
||||||
rv = client.get(p)
|
rv = client.get(p)
|
||||||
assert rv.status_code == code
|
assert rv.status_code == code
|
||||||
|
|
||||||
|
def test_client_put(client):
|
||||||
|
payloads = [
|
||||||
|
({ "file" : (BytesIO(b"hello"), "hello.txt") }, 200, b"https://localhost/E.txt\n"),
|
||||||
|
({ "file" : (BytesIO(b"hello"), "hello.ignorethis") }, 200, b"https://localhost/E.txt\n"),
|
||||||
|
({ "file" : (BytesIO(b"bye"), "bye.truncatethis") }, 200, b"https://localhost/Q.truncate\n"),
|
||||||
|
({ "file" : (BytesIO(b"hi"), "hi.tar.gz") }, 200, b"https://localhost/h.tar.gz\n"),
|
||||||
|
({ "file" : (BytesIO(b"lea!"), "lea!") }, 200, b"https://localhost/d.txt\n"),
|
||||||
|
({ "file" : (BytesIO(b"why?"), "balls", "application/x-dosexec") }, 415, None),
|
||||||
|
({ "shorten" : "https://0x0.st" }, 200, b"https://localhost/E\n"),
|
||||||
|
({ "shorten" : "https://localhost" }, 400, None),
|
||||||
|
({}, 400, None),
|
||||||
|
]
|
||||||
|
|
||||||
|
for p, s, r in payloads:
|
||||||
|
rv = client.put("/", buffered=True,
|
||||||
|
content_type="multipart/form-data",
|
||||||
|
data=p)
|
||||||
|
assert rv.status_code == s
|
||||||
|
if r:
|
||||||
|
assert rv.data == r
|
||||||
|
|
||||||
|
f = File.query.get(2)
|
||||||
|
f.removed = True
|
||||||
|
db.session.add(f)
|
||||||
|
db.session.commit()
|
||||||
|
|
||||||
|
rq = [
|
||||||
|
(200, [
|
||||||
|
"/",
|
||||||
|
"robots.txt",
|
||||||
|
"E.txt",
|
||||||
|
"E.txt/test",
|
||||||
|
"E.txt/test.py",
|
||||||
|
"d.txt",
|
||||||
|
"h.tar.gz",
|
||||||
|
]),
|
||||||
|
(302, [
|
||||||
|
"E",
|
||||||
|
"E/test",
|
||||||
|
"E/test.bin",
|
||||||
|
]),
|
||||||
|
(404, [
|
||||||
|
"test.bin",
|
||||||
|
"test.bin/test",
|
||||||
|
"test.bin/test.py",
|
||||||
|
"test",
|
||||||
|
"test/test",
|
||||||
|
"test.bin/test.py",
|
||||||
|
"E.bin",
|
||||||
|
]),
|
||||||
|
(451, [
|
||||||
|
"Q.truncate",
|
||||||
|
]),
|
||||||
|
]
|
||||||
|
|
||||||
|
for code, paths in rq:
|
||||||
|
for p in paths:
|
||||||
|
app.logger.info(f"GET {p}")
|
||||||
|
rv = client.get(p)
|
||||||
|
assert rv.status_code == code
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue