78 lines
2.1 KiB
Python
78 lines
2.1 KiB
Python
from functions.database import init_database, Usuario, Role, get_db_connection
|
|
import qrcode
|
|
import os
|
|
from pathlib import Path
|
|
import pyotp
|
|
|
|
def generate_qr_code(user):
|
|
"""
|
|
Gera o QR code para um usuário específico
|
|
|
|
Args:
|
|
user: Instância do modelo Usuario
|
|
|
|
Returns:
|
|
Path: Caminho do arquivo QR code gerado
|
|
"""
|
|
# Gerar QR Code apenas na raiz do projeto
|
|
qr_path = Path('admin_qr.png')
|
|
|
|
# Remover arquivo antigo se existir
|
|
if qr_path.exists():
|
|
os.remove(str(qr_path))
|
|
|
|
# Gerar e salvar QR Code
|
|
qr = qrcode.QRCode(version=1, box_size=10, border=5)
|
|
|
|
# Gerar URI do OTP
|
|
totp = pyotp.TOTP(user.otp_secret)
|
|
otp_uri = totp.provisioning_uri(
|
|
name=user.username,
|
|
issuer_name="Sistema de Controles"
|
|
)
|
|
|
|
qr.add_data(otp_uri)
|
|
qr.make(fit=True)
|
|
img = qr.make_image(fill_color="black", back_color="white")
|
|
img.save(str(qr_path))
|
|
|
|
print(f"\nQR Code gerado em: {os.path.abspath(qr_path)}")
|
|
|
|
return qr_path, otp_uri
|
|
|
|
def create_admin_user():
|
|
"""Cria o usuário admin do sistema"""
|
|
session = get_db_connection()
|
|
try:
|
|
# Buscar role de administrador
|
|
admin_role = session.query(Role).filter_by(nome="Administrador").first()
|
|
if not admin_role:
|
|
print("Role de administrador não encontrada!")
|
|
return
|
|
|
|
# Verificar se o usuário admin já existe
|
|
if not session.query(Usuario).filter_by(username="admin").first():
|
|
admin = Usuario(
|
|
username="admin",
|
|
email="admin@example.com",
|
|
is_admin=True
|
|
)
|
|
admin.set_password("admin123")
|
|
admin.tipo = "ADMIN"
|
|
admin.roles.append(admin_role)
|
|
session.add(admin)
|
|
session.commit()
|
|
print("Usuário admin criado com sucesso!")
|
|
else:
|
|
print("Usuário admin já existe!")
|
|
|
|
except Exception as e:
|
|
print(f"Erro ao criar usuário admin: {e}")
|
|
session.rollback()
|
|
raise
|
|
finally:
|
|
session.close()
|
|
|
|
if __name__ == "__main__":
|
|
create_admin_user()
|