from functions.database import Usuario, Base, engine, get_db_connection import qrcode import os from pathlib import Path def create_admin_user(): try: # Criar as tabelas se não existirem Base.metadata.create_all(engine) # Obter conexão com o banco db_session = get_db_connection() # Verificar se já existe um admin admin = db_session.query(Usuario).filter_by(username="admin").first() if not admin: # Criar usuário admin admin = Usuario( username="admin", password="admin123", is_admin=True ) admin.email = "admin@example.com" db_session.add(admin) db_session.commit() print("\n=== Usuário Admin Criado com Sucesso ===") else: print("\n=== Usuário Admin Encontrado ===") print(f"Username: admin") print(f"Senha: admin123") print(f"Segredo OTP: {admin.otp_secret}") # Gerar QR Code qr = qrcode.QRCode(version=1, box_size=10, border=5) qr.add_data(admin.get_otp_uri()) qr.make(fit=True) # Encontrar o diretório raiz do projeto (onde está o app.py) current_dir = Path(__file__).resolve().parent project_root = current_dir.parent # Volta um nível para a raiz do projeto static_dir = project_root / 'static' # Criar diretório static se não existir os.makedirs(static_dir, exist_ok=True) # Caminho completo para o arquivo QR code qr_path = static_dir / 'admin_qr.png' # Salvar QR Code como imagem img = qr.make_image(fill_color="black", back_color="white") img.save(str(qr_path)) print(f"\nQR Code salvo em: {qr_path}") print(f"Diretório atual: {os.getcwd()}") print(f"O arquivo existe? {os.path.exists(qr_path)}") print("\nPasso a passo para configurar o OTP:") print("1. Instale um aplicativo autenticador no seu celular") print(" (Google Authenticator, Microsoft Authenticator, etc)") print("2. Abra o aplicativo") print("3. Selecione a opção para adicionar uma nova conta") print("4. Escaneie o QR Code gerado") print("\nOU, se preferir configuração manual:") print(f"1. Use o segredo: {admin.otp_secret}") print("2. Nome da conta: admin") print("3. Tipo: Baseado em tempo (TOTP)") except Exception as e: print(f"\nErro durante a execução: {e}") import traceback traceback.print_exc() if __name__ == "__main__": create_admin_user()