Files
minecraft_simple_mod_sync/server/server.py
2025-01-14 15:16:03 +03:00

54 lines
1.6 KiB
Python

from fastapi import FastAPI, Request, Header, Depends, Response, HTTPException
from fastapi.responses import FileResponse
import os
import json
from pathlib import Path
config_path: Path = Path("./config.json")
config: dict = {}
with open(config_path, "r") as f:
config = json.load(f)
CONTENT_PATH: Path = Path(config["content"]).resolve()
MODS_PATH: Path = CONTENT_PATH / "mods"
RESOURCEPACKS_PATH: Path = CONTENT_PATH / "resourcepacks"
if not CONTENT_PATH.exists():
CONTENT_PATH.mkdir(parents=True)
MODS_PATH.mkdir()
RESOURCEPACKS_PATH.mkdir()
# Токен для доступа к сервису
TOKEN: str = None
TOKENFILE = Path(__file__).parent / "token.txt"
if not TOKENFILE.exists():
TOKEN = os.urandom(48).hex()
with open(TOKENFILE, "w") as f:
f.write(TOKEN)
else:
with open(TOKENFILE, "r") as f:
TOKEN = f.read()
# Функция для проверки токена
def check_token(authorization: str = Header(...)):
if authorization != TOKEN:
raise HTTPException(status_code=401, detail="Неверный токен")
app = FastAPI()
@app.get("/mods/files")
async def get_files():
# Получаем список всех файлов в указанной директории
files = os.listdir(str(MODS_PATH))
return {"files": files}
@app.get("/mods/download/{filename}")
async def download_file(filename: str):
file_path: Path = MODS_PATH / filename
if not file_path.exists():
return {"error": f"Файл {filename} не найден"}
return FileResponse(path=file_path, filename=str(filename), media_type="application/octet-stream")