Allow anonymous share links in public mode
This commit is contained in:
@@ -115,6 +115,12 @@ def setup_storage(tmp_path: Path):
|
||||
mode="rw",
|
||||
share_paths=["docs"],
|
||||
)
|
||||
share_anon = config.Token(
|
||||
key="share_anon_123",
|
||||
kind="share",
|
||||
mode="ro",
|
||||
share_paths=["docs"],
|
||||
)
|
||||
config.config = config.Config(
|
||||
path=tmp_path,
|
||||
listen=":0",
|
||||
@@ -124,6 +130,7 @@ def setup_storage(tmp_path: Path):
|
||||
"test_token_123": token,
|
||||
"share_ro_123": share_ro,
|
||||
"share_rw_123": share_rw,
|
||||
"share_anon_123": share_anon,
|
||||
},
|
||||
)
|
||||
watching.state.root = []
|
||||
@@ -285,3 +292,20 @@ async def test_share_token_rw_allows_writes_in_scope_only(client):
|
||||
"/files/secret.txt", headers=_basic_auth("token", "share_rw_123")
|
||||
)
|
||||
assert res.status_code == 404
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_anonymous_share_token_requires_public_mode(client):
|
||||
config.config.public = True
|
||||
|
||||
_, res = await client.get(
|
||||
"/files/docs/a.txt", headers=_basic_auth("token", "share_anon_123")
|
||||
)
|
||||
assert res.status_code == 200
|
||||
assert res.body == b"A"
|
||||
|
||||
config.config.public = False
|
||||
_, res = await client.get(
|
||||
"/files/docs/a.txt", headers=_basic_auth("token", "share_anon_123")
|
||||
)
|
||||
assert res.status_code == 401
|
||||
|
||||
@@ -215,3 +215,18 @@ async def test_create_share_token(client):
|
||||
share_tokens = [t for t in res.json["tokens"] if t.get("kind") == "share"]
|
||||
assert len(share_tokens) == 1
|
||||
assert share_tokens[0]["mode"] == "ro"
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_create_share_token_public_anonymous(client):
|
||||
config.config = msgspec.structs.replace(config.config, public=True)
|
||||
|
||||
_, res = await client.post(
|
||||
"/api/share-tokens",
|
||||
json={"paths": ["hello.txt"], "mode": "ro", "name": "public-share"},
|
||||
)
|
||||
assert res.status_code == 200
|
||||
data = res.json
|
||||
assert data["kind"] == "share"
|
||||
assert data["username"] == ""
|
||||
assert data["sso_user_id"] == ""
|
||||
|
||||
Reference in New Issue
Block a user