reset-password.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #!/usr/bin/env python3
  2. """Reset user password"""
  3. import asyncio
  4. import sys
  5. from app.database import async_session
  6. from app.auth import get_password_hash
  7. from app.models import User
  8. from sqlalchemy import select
  9. async def reset_password(username: str, new_password: str):
  10. """Reset password for a user"""
  11. async with async_session() as db:
  12. # Find user
  13. result = await db.execute(
  14. select(User).where(User.username == username)
  15. )
  16. user = result.scalar_one_or_none()
  17. if not user:
  18. print(f"✗ User '{username}' not found")
  19. return
  20. # Update password
  21. user.hashed_password = get_password_hash(new_password)
  22. await db.commit()
  23. print(f"✓ Password reset successful for user: {username}")
  24. print(f" User ID: {user.id}")
  25. print(f" Email: {user.email}")
  26. async def list_users():
  27. """List all users"""
  28. async with async_session() as db:
  29. result = await db.execute(select(User))
  30. users = result.scalars().all()
  31. if not users:
  32. print("No users found in database")
  33. return
  34. print("Users in database:")
  35. print("-" * 70)
  36. for user in users:
  37. print(f" ID: {user.id}")
  38. print(f" Username: {user.username}")
  39. print(f" Email: {user.email}")
  40. print(f" Active: {user.is_active}")
  41. print(f" Created: {user.created_at}")
  42. print("-" * 70)
  43. if __name__ == "__main__":
  44. if len(sys.argv) == 1 or sys.argv[1] == "list":
  45. print("Listing all users...")
  46. print("=" * 70)
  47. asyncio.run(list_users())
  48. elif len(sys.argv) == 3:
  49. username = sys.argv[1]
  50. new_password = sys.argv[2]
  51. print(f"Resetting password for user: {username}")
  52. print("=" * 70)
  53. asyncio.run(reset_password(username, new_password))
  54. else:
  55. print("Usage:")
  56. print(" List users: ./reset-password.py list")
  57. print(" Reset password: ./reset-password.py <username> <new_password>")
  58. print("")
  59. print("Examples:")
  60. print(" ./reset-password.py list")
  61. print(" ./reset-password.py Blance newpassword123")
  62. sys.exit(1)