Add backend and docker file

This commit is contained in:
q00 2025-04-14 19:26:13 +03:00
parent dc6fd4bbcd
commit 1843801ac5
4 changed files with 97 additions and 0 deletions

17
backend/Dockerfile Normal file
View file

@ -0,0 +1,17 @@
# Используем официальный образ Python
FROM python:3.9-slim
# Устанавливаем рабочую директорию
WORKDIR /app
# Копируем зависимости
COPY requirements.txt .
# Устанавливаем зависимости
RUN pip install --no-cache-dir -r requirements.txt
# Копируем остальные файлы
COPY . .
# Команда для запуска сервера
CMD ["uvicorn", "server:app", "--host", "0.0.0.0", "--port", "8000"]

View file

@ -0,0 +1,10 @@
services:
backend:
build: .
ports:
- "8000:8000"
volumes:
- .:/app/db
restart: unless-stopped
environment:
- PYTHONUNBUFFERED=1

4
backend/requirements.txt Normal file
View file

@ -0,0 +1,4 @@
fastapi
uvicorn
python-multipart
pydantic

66
backend/server.py Normal file
View file

@ -0,0 +1,66 @@
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from datetime import datetime
import json
import os
from pathlib import Path
app = FastAPI()
class WiFiData(BaseModel):
profile_name: str
password: str
DATA_FILE = "db/wifi_passwords.json"
# Гарантируем, что файл существует и содержит валидный JSON
def init_data_file():
if not Path(DATA_FILE).exists():
with open(DATA_FILE, 'w') as f:
json.dump([], f)
else:
# Проверяем, что файл не пустой и содержит валидный JSON
try:
with open(DATA_FILE, 'r') as f:
json.load(f)
except (json.JSONDecodeError, ValueError):
# Если файл поврежден, пересоздаем его
with open(DATA_FILE, 'w') as f:
json.dump([], f)
# Инициализируем файл при старте
init_data_file()
@app.post("/save-wifi")
async def save_wifi(data: WiFiData):
try:
with open(DATA_FILE, 'r') as f:
try:
wifi_list = json.load(f)
except json.JSONDecodeError:
wifi_list = []
wifi_list.append({
"profile_name": data.profile_name,
"password": data.password,
"timestamp": datetime.now().isoformat()
})
with open(DATA_FILE, 'w') as f:
json.dump(wifi_list, f, indent=4)
return {"status": "success", "message": "Wi-Fi data saved"}
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
@app.get("/get-wifi")
async def get_wifi():
try:
with open(DATA_FILE, 'r') as f:
try:
return json.load(f)
except json.JSONDecodeError:
return []
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))