added password hashing and ensured admin user exists #8
@@ -50,9 +50,7 @@ def _ensure_admin_user() -> None:
|
|||||||
db = SessionLocal()
|
db = SessionLocal()
|
||||||
try:
|
try:
|
||||||
# Check if admin user exists
|
# Check if admin user exists
|
||||||
admin_user = db.query(User).filter(
|
admin_user = db.query(User).filter(User.username == admin_username).first()
|
||||||
User.username == admin_username
|
|
||||||
).first()
|
|
||||||
|
|
||||||
hashed_pw = hash_password(admin_password)
|
hashed_pw = hash_password(admin_password)
|
||||||
|
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ class InMemoryTokenRepository(TokenRepositoryInterface):
|
|||||||
|
|
||||||
def cleanup_expired(self) -> None:
|
def cleanup_expired(self) -> None:
|
||||||
"""Remove expired tokens."""
|
"""Remove expired tokens."""
|
||||||
now = datetime.utcnow()
|
now = datetime.now(UTC)
|
||||||
expired_tokens = [
|
expired_tokens = [
|
||||||
token for token, (_, expiry) in self._tokens.items() if now > expiry
|
token for token, (_, expiry) in self._tokens.items() if now > expiry
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -80,15 +80,11 @@ def login(
|
|||||||
# Check if user exists in database
|
# Check if user exists in database
|
||||||
user = user_repo.get_by_username(credentials.username)
|
user = user_repo.get_by_username(credentials.username)
|
||||||
if not user:
|
if not user:
|
||||||
raise HTTPException(
|
raise HTTPException(status_code=401, detail="Invalid username or password")
|
||||||
status_code=401, detail="Invalid username or password"
|
|
||||||
)
|
|
||||||
|
|
||||||
# Verify password using bcrypt
|
# Verify password using bcrypt
|
||||||
if not verify_password(credentials.password, user["hashed_password"]):
|
if not verify_password(credentials.password, user["hashed_password"]):
|
||||||
raise HTTPException(
|
raise HTTPException(status_code=401, detail="Invalid username or password")
|
||||||
status_code=401, detail="Invalid username or password"
|
|
||||||
)
|
|
||||||
|
|
||||||
# Generate a secure random token
|
# Generate a secure random token
|
||||||
access_token = secrets.token_urlsafe(32)
|
access_token = secrets.token_urlsafe(32)
|
||||||
|
|||||||
Reference in New Issue
Block a user