This repository has been archived on 2026-10-08. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files

67 lines
2.6 KiB
Python

"""Extracted text and safe original file retrieval."""
from pathlib import Path
from typing import cast
from fastapi import FastAPI
from fastapi.testclient import TestClient
from recoll_modern.engine.fake import FakeRecord
from recoll_modern.indexing.discovery import ObservedFile
def _document(client: TestClient, tmp_path: Path) -> str:
path = tmp_path / "docs" / "quoted\"name.txt"
path.write_bytes(b"abcdef")
digest = "b" * 64
app = cast(FastAPI, client.app)
app.state.documents.observe_files([ObservedFile(path.name, digest, 6)])
app.state.engine.records = [FakeRecord(str(path), "Title", "complete text", ())]
return digest
def test_text_and_byte_range(authenticated: tuple[TestClient, str], tmp_path: Path) -> None:
client, _ = authenticated
digest = _document(client, tmp_path)
text = client.get(f"/documents/{digest}/text")
assert text.status_code == 200
assert text.json()["text"] == "complete text"
response = client.get(f"/documents/{digest}/file", headers={"Range": "bytes=1-3"})
assert response.status_code == 206
assert response.content == b"bcd"
assert response.headers["content-range"] == "bytes 1-3/6"
assert response.headers["content-disposition"] == 'inline; filename="quoted_name.txt"'
assert client.get(
f"/documents/{digest}/file", headers={"Range": "bytes=99-100"}
).status_code == 416
suffix = client.get(f"/documents/{digest}/file", headers={"Range": "bytes=-2"})
assert suffix.status_code == 206 and suffix.content == b"ef"
def test_unknown_and_missing_documents(
authenticated: tuple[TestClient, str], tmp_path: Path
) -> None:
client, _ = authenticated
assert client.get(f"/documents/{'0' * 64}/text").json()["error"]["code"] == (
"document_not_found"
)
digest = _document(client, tmp_path)
(tmp_path / "docs" / 'quoted"name.txt').unlink()
response = client.get(f"/documents/{digest}/file")
assert response.status_code == 410
assert response.json()["error"]["code"] == "document_missing"
def test_html_is_attachment(authenticated: tuple[TestClient, str], tmp_path: Path) -> None:
client, _ = authenticated
path = tmp_path / "docs" / "danger.html"
path.write_text("<script>alert(1)</script>")
digest = "d" * 64
cast(FastAPI, client.app).state.documents.observe_files([
ObservedFile("danger.html", digest, path.stat().st_size)
])
response = client.get(f"/documents/{digest}/file")
assert response.status_code == 200
assert response.headers["content-disposition"].startswith("attachment;")
assert response.headers["content-type"].startswith("text/html")