Skip to content

Commit 1526f78

Browse files
author
Uttam Singh
committed
Fix bcrypt password byte length in seed-admin
1 parent c82d95b commit 1526f78

File tree

1 file changed

+12
-90
lines changed

1 file changed

+12
-90
lines changed

backend/app/routers/users.py

Lines changed: 12 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -1,89 +1,4 @@
1-
from fastapi import APIRouter, Depends, HTTPException, Form
2-
from passlib.hash import bcrypt
3-
from sqlalchemy.orm import Session
4-
from app.database import get_db
5-
from app.models.user import User
6-
7-
router = APIRouter()
8-
9-
# ✅ Create a new user
10-
@router.post("/")
11-
def create_user(
12-
name: str = Form(...),
13-
email: str = Form(...),
14-
password: str = Form(...),
15-
department: str = Form(None),
16-
role: str = Form("auditee"),
17-
manager_email: str = Form(None),
18-
db: Session = Depends(get_db),
19-
):
20-
try:
21-
if db.query(User).filter(User.email == email).first():
22-
raise HTTPException(status_code=400, detail="Email already exists")
23-
user = User(
24-
name=name,
25-
email=email,
26-
hashed_password=bcrypt.hash(password),
27-
department=department,
28-
role=role,
29-
manager_email=manager_email,
30-
)
31-
db.add(user)
32-
db.commit()
33-
return {"ok": True, "message": "User created successfully"}
34-
except Exception as e:
35-
return {"ok": False, "error": str(e)}
36-
37-
# ✅ Login route
38-
@router.post("/login")
39-
def login_user(
40-
email: str = Form(...),
41-
password: str = Form(...),
42-
db: Session = Depends(get_db)
43-
):
44-
try:
45-
user = db.query(User).filter(User.email == email).first()
46-
if not user or not bcrypt.verify(password, user.hashed_password):
47-
raise HTTPException(status_code=401, detail="Invalid email or password")
48-
return {
49-
"ok": True,
50-
"message": "Login successful",
51-
"user": {"id": user.id, "name": user.name, "role": user.role},
52-
}
53-
except Exception as e:
54-
return {"ok": False, "error": str(e)}
55-
56-
# ✅ Get all users
57-
@router.get("/")
58-
def list_users(db: Session = Depends(get_db)):
59-
try:
60-
return db.query(User).all()
61-
except Exception as e:
62-
return {"ok": False, "error": str(e)}
63-
64-
# ✅ Delete user
65-
@router.delete("/{user_id}")
66-
def delete_user(user_id: int, db: Session = Depends(get_db)):
67-
try:
68-
user = db.get(User, user_id)
69-
if not user:
70-
raise HTTPException(status_code=404, detail="User not found")
71-
db.delete(user)
72-
db.commit()
73-
return {"ok": True, "message": "User deleted"}
74-
except Exception as e:
75-
return {"ok": False, "error": str(e)}
76-
77-
# ✅ Check Admin Users
78-
@router.get("/check-admin")
79-
def check_admin(db: Session = Depends(get_db)):
80-
try:
81-
users = db.query(User).all()
82-
return {"count": len(users), "users": [u.email for u in users]}
83-
except Exception as e:
84-
return {"ok": False, "error": str(e)}
85-
86-
# ✅ Seed Admin User (One-Time Setup)
1+
# ✅ Seed Admin User (One-Time Setup) – FIXED bcrypt byte issue
872
@router.post("/seed-admin")
883
def seed_admin(db: Session = Depends(get_db)):
894
try:
@@ -92,18 +7,25 @@ def seed_admin(db: Session = Depends(get_db)):
927
if existing:
938
return {"ok": True, "note": "Admin already exists"}
949

10+
# --- Fix bcrypt 72-byte password limit ---
11+
raw_password = "Edme@123"
12+
encoded = raw_password.encode("utf-8")
13+
if len(encoded) > 72:
14+
encoded = encoded[:72]
15+
safe_password = encoded.decode("utf-8", "ignore")
16+
hashed_password = bcrypt.hash(safe_password)
17+
# ------------------------------------------
18+
9519
admin = User(
9620
name="Admin",
9721
email=email,
98-
hashed_password=bcrypt.hash("Edme@123"),
22+
hashed_password=hashed_password,
9923
department="Finance",
10024
role="admin",
10125
manager_email=None,
10226
)
10327
db.add(admin)
10428
db.commit()
105-
return {"ok": True, "note": "Admin created"}
29+
return {"ok": True, "note": "Admin created successfully"}
10630
except Exception as e:
10731
return {"ok": False, "error": str(e)}
108-
109-

0 commit comments

Comments
 (0)