mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-03-27 10:38:21 +03:00
Validate preview filename and camera access (#22530)
Some checks failed
CI / AMD64 Build (push) Has been cancelled
CI / ARM Build (push) Has been cancelled
CI / Jetson Jetpack 6 (push) Has been cancelled
CI / AMD64 Extra Build (push) Has been cancelled
CI / ARM Extra Build (push) Has been cancelled
CI / Synaptics Build (push) Has been cancelled
CI / Assemble and push default build (push) Has been cancelled
Some checks failed
CI / AMD64 Build (push) Has been cancelled
CI / ARM Build (push) Has been cancelled
CI / Jetson Jetpack 6 (push) Has been cancelled
CI / AMD64 Extra Build (push) Has been cancelled
CI / ARM Extra Build (push) Has been cancelled
CI / Synaptics Build (push) Has been cancelled
CI / Assemble and push default build (push) Has been cancelled
* validate preview filename and camera access * correctly handle camera names with dashes
This commit is contained in:
parent
d11c26970d
commit
416a9b7692
@ -1893,7 +1893,7 @@ async def review_preview(
|
|||||||
"/preview/{file_name}/thumbnail.webp",
|
"/preview/{file_name}/thumbnail.webp",
|
||||||
dependencies=[Depends(allow_any_authenticated())],
|
dependencies=[Depends(allow_any_authenticated())],
|
||||||
)
|
)
|
||||||
def preview_thumbnail(file_name: str):
|
async def preview_thumbnail(request: Request, file_name: str):
|
||||||
"""Get a thumbnail from the cached preview frames."""
|
"""Get a thumbnail from the cached preview frames."""
|
||||||
if len(file_name) > 1000:
|
if len(file_name) > 1000:
|
||||||
return JSONResponse(
|
return JSONResponse(
|
||||||
@ -1903,6 +1903,17 @@ def preview_thumbnail(file_name: str):
|
|||||||
status_code=403,
|
status_code=403,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Extract camera name from preview filename (format: preview_{camera}-{timestamp}.ext)
|
||||||
|
if not file_name.startswith("preview_"):
|
||||||
|
return JSONResponse(
|
||||||
|
content={"success": False, "message": "Invalid preview filename"},
|
||||||
|
status_code=400,
|
||||||
|
)
|
||||||
|
# Use rsplit to handle camera names containing dashes (e.g. front-door)
|
||||||
|
name_part = file_name[len("preview_") :].rsplit(".", 1)[0] # strip extension
|
||||||
|
camera_name = name_part.rsplit("-", 1)[0] # split off timestamp
|
||||||
|
await require_camera_access(camera_name, request=request)
|
||||||
|
|
||||||
safe_file_name_current = sanitize_filename(file_name)
|
safe_file_name_current = sanitize_filename(file_name)
|
||||||
preview_dir = os.path.join(CACHE_DIR, "preview_frames")
|
preview_dir = os.path.join(CACHE_DIR, "preview_frames")
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user