Add backend and docker file
This commit is contained in:
parent
dc6fd4bbcd
commit
1843801ac5
4 changed files with 97 additions and 0 deletions
17
backend/Dockerfile
Normal file
17
backend/Dockerfile
Normal 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"]
|
||||||
10
backend/docker-compose.yaml
Normal file
10
backend/docker-compose.yaml
Normal 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
4
backend/requirements.txt
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
fastapi
|
||||||
|
uvicorn
|
||||||
|
python-multipart
|
||||||
|
pydantic
|
||||||
66
backend/server.py
Normal file
66
backend/server.py
Normal 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))
|
||||||
Loading…
Reference in a new issue