67 lines
1.9 KiB
Python
67 lines
1.9 KiB
Python
"""
|
|
Script para actualizar el password del usuario admin
|
|
Ejecutar: python fix_admin_password.py
|
|
"""
|
|
import asyncio
|
|
import sys
|
|
from sqlalchemy import select, update
|
|
from passlib.context import CryptContext
|
|
|
|
# Importar desde el proyecto
|
|
sys.path.insert(0, '/app')
|
|
from app.core.database import AsyncSessionLocal
|
|
from app.models.user import User
|
|
|
|
# Configurar passlib igual que en security.py
|
|
pwd_context = CryptContext(
|
|
schemes=["argon2", "bcrypt"],
|
|
deprecated="auto",
|
|
argon2__memory_cost=65536,
|
|
argon2__time_cost=3,
|
|
argon2__parallelism=4,
|
|
)
|
|
|
|
async def fix_admin_password():
|
|
"""Actualizar password del admin a 'admin123'"""
|
|
|
|
# Generar hash del password
|
|
new_password = "admin123"
|
|
password_hash = pwd_context.hash(new_password)
|
|
|
|
print(f"Nuevo hash generado para password: {new_password}")
|
|
print(f"Hash: {password_hash[:50]}...")
|
|
|
|
async with AsyncSessionLocal() as session:
|
|
try:
|
|
# Buscar usuario admin
|
|
result = await session.execute(
|
|
select(User).where(User.email == "admin@aduanasoft.com")
|
|
)
|
|
user = result.scalar_one_or_none()
|
|
|
|
if not user:
|
|
print("❌ Usuario admin no encontrado")
|
|
return
|
|
|
|
print(f"✅ Usuario encontrado: {user.email} (ID: {user.id})")
|
|
|
|
# Actualizar password
|
|
user.password_hash = password_hash
|
|
|
|
await session.commit()
|
|
|
|
print("✅ Password actualizado exitosamente")
|
|
print(f" Email: admin@aduanasoft.com")
|
|
print(f" Password: admin123")
|
|
|
|
except Exception as e:
|
|
await session.rollback()
|
|
print(f"❌ Error: {e}")
|
|
raise
|
|
|
|
if __name__ == "__main__":
|
|
print("=" * 60)
|
|
print("ACTUALIZAR PASSWORD DEL ADMIN")
|
|
print("=" * 60)
|
|
asyncio.run(fix_admin_password())
|
|
print("=" * 60) |