diff options
| author | altaf-creator <dev@altafcreator.com> | 2026-06-18 15:45:40 +0800 |
|---|---|---|
| committer | altaf-creator <dev@altafcreator.com> | 2026-06-18 15:45:40 +0800 |
| commit | 3525abf99fa3e6f41028cb7e93c8e58eb3f0a9c6 (patch) | |
| tree | 65a0a1c003a39a6a6493801225ef3f52013f98ab /main.py | |
initial commit working
Diffstat (limited to 'main.py')
| -rw-r--r-- | main.py | 64 |
1 files changed, 64 insertions, 0 deletions
@@ -0,0 +1,64 @@ +import fastapi +from fastapi.middleware.cors import CORSMiddleware +import fastapi.staticfiles +import fastapi.responses +from pydantic import BaseModel +from pathlib import Path +import os +import html + +print("Hello, world!") + +FOLDER_PATH = Path("/Users/altaf/").resolve() +# FOLDER_PATH = "/var/files" + +app = fastapi.FastAPI(title="altaf-files", decscription="altaf-files backend", version="1.0") + +origins = [ + "http://localhost", + "http://localhost:9092", + "https://files.altafcreator.com", +] + +app.add_middleware( + CORSMiddleware, + allow_origins=origins, + allow_credentials=True, + allow_methods=["*"], + allow_headers=["*"], +) + + +@app.get("/{path:path}") +def folder(path: str): + target_path = (FOLDER_PATH / path).resolve() + + if FOLDER_PATH not in target_path.parents and target_path != FOLDER_PATH: + return fastapi.responses.Response(status_code=403, content="Access denied.") + + is_file = False + + if target_path.is_file(): + is_file = True + return fastapi.responses.FileResponse(target_path) + elif not target_path.is_dir(): + return fastapi.responses.Response(status_code=404) + + content = f"<p>/{path}</p><a href='..'>../</a><br>" + + for item in sorted(target_path.iterdir()): + safe_child_path = html.escape(item.name) + + href_path = "" + if path == "": + href_path = f"/{safe_child_path}" + else: + href_path = f"/{path.rstrip('/')}/{safe_child_path}" + + filetype_string = "📂" + if (target_path / safe_child_path).resolve().is_file(): + filetype_string = "📄" + + content += f"<a href='{href_path}'>{filetype_string} {safe_child_path}</a><br>" + + return fastapi.responses.Response(content=content, media_type="text/html", status_code=200) |
