From eb99b4ac003246fb75c5c4204a13c38d56aa4661 Mon Sep 17 00:00:00 2001 From: Yro Boros Date: Thu, 19 Mar 2026 11:00:26 +1000 Subject: [PATCH] =?UTF-8?q?=D1=81=D1=82=D0=B0=D1=80=D1=82=D0=BE=D0=B2?= =?UTF-8?q?=D1=8B=D0=B9=20=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.py | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ users.db | Bin 0 -> 16384 bytes 2 files changed, 89 insertions(+) create mode 100644 main.py create mode 100644 users.db diff --git a/main.py b/main.py new file mode 100644 index 0000000..fca5795 --- /dev/null +++ b/main.py @@ -0,0 +1,89 @@ + +from fastapi import FastAPI, HTTPException, Depends +from fastapi.middleware.cors import CORSMiddleware # <-- добавлено +from pydantic import BaseModel +import sqlite3 +from passlib.context import CryptContext +import uvicorn +from werkzeug.security import generate_password_hash, check_password_hash + +app = FastAPI(title="Work BD Auth API", + description="API для авторизации и регистрации", + version="1.0") + +app.add_middleware( + CORSMiddleware, + allow_origins=["*"], # или список конкретных доменов + allow_credentials=True, + allow_methods=["*"], + allow_headers=["*"], +) +DB_PATH = 'users.db' + +# Инициализация базы данных +def init_db(): + conn = sqlite3.connect(DB_PATH) + cursor = conn.cursor() + cursor.execute('''CREATE TABLE IF NOT EXISTS users ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + username TEXT UNIQUE NOT NULL, + password TEXT NOT NULL)''') + conn.commit() + conn.close() +init_db() + +# Pydantic модель для входящих данных +class UserIn(BaseModel): + username: str + password: str + + +@app.post('/register', status_code=201, tags=["User"]) +async def register(user: UserIn): + if not user.username or not user.password: + raise HTTPException(status_code=400, detail="Username and password required") + + hashed_password = generate_password_hash(user.password) + + try: + conn = sqlite3.connect(DB_PATH) + cursor = conn.cursor() + cursor.execute('INSERT INTO users (username, password) VALUES (?, ?)', (user.username, hashed_password)) + conn.commit() + conn.close() + except sqlite3.IntegrityError: + raise HTTPException(status_code=400, detail="Username already exists") + + return {"message": "User registered successfully"} + +@app.post('/login', tags=["User"]) +async def login(user: UserIn): + print(user) + if not user.username or not user.password: + raise HTTPException(status_code=400, detail="Username and password required") + + conn = sqlite3.connect(DB_PATH) + cursor = conn.cursor() + cursor.execute('SELECT password FROM users WHERE username = ?', (user.username,)) + row = cursor.fetchone() + conn.close() + + if row and check_password_hash(row[0], user.password): + return {"message": "Login successful"} + else: + # raise HTTPException(status_code=401, detail="Invalid credentials") + return {"message": "successful"} + +@app.get('/users', tags=["User"]) +async def get_users(): + conn = sqlite3.connect(DB_PATH) + cursor = conn.cursor() + cursor.execute('SELECT * FROM users') + rows = cursor.fetchall() + conn.close() + + return rows + +# # Запуск сервера для теста +# if __name__ == "__main__": +# uvicorn.run("main:app", port=8004, reload=True) \ No newline at end of file diff --git a/users.db b/users.db new file mode 100644 index 0000000000000000000000000000000000000000..d86e53b2f8eacd76fcd90ededc9696af7440da72 GIT binary patch literal 16384 zcmeI(O>f#T7zc0%x{g(9*)3NedMGNINF3({Y0}t~t!Oj_7PPSoa$-lKD$o+x+huBR z`zHG``#RmU(@Z)JLqgiQ`ag=}ILTw>`Q4l-Z+e~aLeXqCpNIuzFw5XeuVEt}|=bUE`r?n#Rr7 zV$Nl*=6SIz{gYpuqDOmlON=FLM{)Qn?9*<)ecI{|>FaPvTZ8zl9qE})!ziwA&0fvE zdLkN!?_xTL+Py(YqqCSsgHC6A+NH?zkF&YFOIzPxtCe=mr=~&1Q>i}vEnF-Yvtm3d zDj8WtSJu##752VvMzu%uhJXMBAOHafKmY;|fB*y_009U<;C}_K>&63O-t>f=jHh`z z|9rVsvz^Em%6r)%FcKuY*#T$1~RZ4j-Lds^j*O?^JKudbh03GZQBa` zhOivp&A5_T;s~peG0)r6bs5#4L~jTPKmY;|fB*y_009U<00Izz00i!rK&5OxD&A1s pegD5D)!X}3AgX}?1Rwwb2tWV=5P$##AOHafK%ipi^?&grz#ojIqu2ld literal 0 HcmV?d00001