feat: Melhorias de segurança e interface - Segurança: Implementação de CSRF token em formulários, validação no backend, proteção AJAX - QR Code: Preservação do otp_secret, evita geração desnecessária - Interface: Correções visuais, padronização de cores, melhorias em formulários
This commit is contained in:
@@ -56,18 +56,16 @@ def create_test_users():
|
||||
)
|
||||
user.set_password(user_data['password'])
|
||||
user.tipo = "ADMIN" if user_data['is_admin'] else "USUARIO"
|
||||
db.add(user)
|
||||
db.commit()
|
||||
|
||||
# Se for o usuário teste, usar o mesmo OTP do admin
|
||||
if user_data['username'] == 'teste' and admin_otp_secret:
|
||||
user.otp_secret = admin_otp_secret
|
||||
db.commit()
|
||||
else:
|
||||
# Gerar novo OTP para outros usuários
|
||||
otp_secret = pyotp.random_base32()
|
||||
user.otp_secret = otp_secret
|
||||
db.commit()
|
||||
user.otp_secret = pyotp.random_base32()
|
||||
|
||||
db.add(user)
|
||||
db.commit()
|
||||
|
||||
# Atribuir role de Secretário Geral para o usuário teste
|
||||
if user_data['username'] == 'teste':
|
||||
@@ -77,6 +75,17 @@ def create_test_users():
|
||||
db.commit()
|
||||
|
||||
print(f"Usuário {user_data['username']} criado com sucesso!")
|
||||
|
||||
# Gerar QR code para o novo usuário
|
||||
qr_path = f"{user_data['username']}_qr.png"
|
||||
if not os.path.exists(qr_path):
|
||||
totp = pyotp.TOTP(user.otp_secret)
|
||||
qr = qrcode.QRCode(version=1, box_size=10, border=5)
|
||||
qr.add_data(totp.provisioning_uri(user.email, issuer_name="Sistema de Controles"))
|
||||
qr.make(fit=True)
|
||||
img = qr.make_image(fill_color="black", back_color="white")
|
||||
img.save(qr_path)
|
||||
print(f"QR Code gerado para {user_data['username']} em: {qr_path}")
|
||||
else:
|
||||
print(f"Usuário {user_data['username']} já existe")
|
||||
|
||||
@@ -85,6 +94,22 @@ def create_test_users():
|
||||
user.otp_secret = admin_otp_secret
|
||||
db.commit()
|
||||
print(f"OTP do usuário teste atualizado para o mesmo do admin")
|
||||
elif not user.otp_secret:
|
||||
# Se não tiver OTP, gerar um novo
|
||||
user.otp_secret = pyotp.random_base32()
|
||||
db.commit()
|
||||
print(f"Novo OTP gerado para {user_data['username']}")
|
||||
|
||||
# Gerar QR code
|
||||
qr_path = f"{user_data['username']}_qr.png"
|
||||
if not os.path.exists(qr_path):
|
||||
totp = pyotp.TOTP(user.otp_secret)
|
||||
qr = qrcode.QRCode(version=1, box_size=10, border=5)
|
||||
qr.add_data(totp.provisioning_uri(user.email, issuer_name="Sistema de Controles"))
|
||||
qr.make(fit=True)
|
||||
img = qr.make_image(fill_color="black", back_color="white")
|
||||
img.save(qr_path)
|
||||
print(f"QR Code gerado para {user_data['username']} em: {qr_path}")
|
||||
|
||||
# Verificar se o usuário teste tem a role de Secretário Geral
|
||||
if user_data['username'] == 'teste':
|
||||
|
||||
Reference in New Issue
Block a user