chore: remove arquivos não utilizados do projeto - Remoção de scripts obsoletos (seed.py, create_test_users.py) e arquivos de configuração não utilizados (setup.py, models.py) após análise completa de dependências
This commit is contained in:
@@ -1,130 +0,0 @@
|
|||||||
from functions.database import get_db_connection, Usuario
|
|
||||||
from functions.rbac import Role
|
|
||||||
import pyotp
|
|
||||||
import qrcode
|
|
||||||
import os
|
|
||||||
import base64
|
|
||||||
from io import BytesIO
|
|
||||||
|
|
||||||
def create_test_users():
|
|
||||||
"""Cria usuários de teste se não existirem"""
|
|
||||||
db = get_db_connection()
|
|
||||||
try:
|
|
||||||
# Usuários de teste
|
|
||||||
test_users = [
|
|
||||||
{
|
|
||||||
'username': 'teste',
|
|
||||||
'password': 'admin123', # Mesma senha do admin
|
|
||||||
'email': 'teste@controles.com',
|
|
||||||
'is_admin': True
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'username': 'aligner',
|
|
||||||
'password': 'Test123!@#',
|
|
||||||
'email': 'aligner@controles.com',
|
|
||||||
'is_admin': False
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'username': 'tester',
|
|
||||||
'password': 'Test123!@#',
|
|
||||||
'email': 'tester@controles.com',
|
|
||||||
'is_admin': False
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'username': 'deployer',
|
|
||||||
'password': 'Test123!@#',
|
|
||||||
'email': 'deployer@controles.com',
|
|
||||||
'is_admin': False
|
|
||||||
}
|
|
||||||
]
|
|
||||||
|
|
||||||
# Obter o OTP secret do admin se existir
|
|
||||||
admin = db.query(Usuario).filter_by(username='admin').first()
|
|
||||||
admin_otp_secret = admin.otp_secret if admin else None
|
|
||||||
|
|
||||||
for user_data in test_users:
|
|
||||||
# Verificar se o usuário já existe
|
|
||||||
user = db.query(Usuario).filter_by(username=user_data['username']).first()
|
|
||||||
|
|
||||||
if not user:
|
|
||||||
print(f"Criando usuário {user_data['username']}...")
|
|
||||||
# Criar usuário
|
|
||||||
user = Usuario(
|
|
||||||
username=user_data['username'],
|
|
||||||
email=user_data['email'],
|
|
||||||
is_admin=user_data['is_admin']
|
|
||||||
)
|
|
||||||
user.set_password(user_data['password'])
|
|
||||||
user.tipo = "ADMIN" if user_data['is_admin'] else "USUARIO"
|
|
||||||
|
|
||||||
# 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
|
|
||||||
else:
|
|
||||||
# Gerar novo OTP para outros usuários
|
|
||||||
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':
|
|
||||||
admin_role = db.query(Role).filter_by(nivel=Role.SECRETARIO_GERAL).first()
|
|
||||||
if admin_role:
|
|
||||||
user.roles.append(admin_role)
|
|
||||||
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")
|
|
||||||
|
|
||||||
# Se for o usuário teste e não tiver o OTP do admin, atualizar
|
|
||||||
if user_data['username'] == 'teste' and admin_otp_secret and user.otp_secret != admin_otp_secret:
|
|
||||||
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':
|
|
||||||
admin_role = db.query(Role).filter_by(nivel=Role.SECRETARIO_GERAL).first()
|
|
||||||
if admin_role and admin_role not in user.roles:
|
|
||||||
user.roles.append(admin_role)
|
|
||||||
db.commit()
|
|
||||||
print(f"Role de Secretário Geral atribuída ao usuário teste")
|
|
||||||
|
|
||||||
except Exception as e:
|
|
||||||
print(f"Erro ao criar usuários de teste: {str(e)}")
|
|
||||||
db.rollback()
|
|
||||||
raise
|
|
||||||
finally:
|
|
||||||
db.close()
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
create_test_users()
|
|
||||||
23
models.py
23
models.py
@@ -1,23 +0,0 @@
|
|||||||
from sqlalchemy import Column, Integer, String, Date, Float, Boolean, ForeignKey, Table, Enum, DateTime
|
|
||||||
from sqlalchemy.orm import relationship, declarative_base
|
|
||||||
from sqlalchemy.sql import func
|
|
||||||
from datetime import datetime, date
|
|
||||||
import enum
|
|
||||||
|
|
||||||
Base = declarative_base()
|
|
||||||
|
|
||||||
class AssinaturaAnual(Base):
|
|
||||||
__tablename__ = 'assinaturas_anuais'
|
|
||||||
|
|
||||||
id = Column(Integer, primary_key=True)
|
|
||||||
militante_id = Column(Integer, ForeignKey('militantes.id'), nullable=False)
|
|
||||||
data_inicio = Column(Date, nullable=False)
|
|
||||||
data_fim = Column(Date, nullable=False)
|
|
||||||
valor = Column(Float, nullable=False)
|
|
||||||
|
|
||||||
militante = relationship('Militante', backref='assinaturas')
|
|
||||||
|
|
||||||
@property
|
|
||||||
def ativa(self):
|
|
||||||
hoje = date.today()
|
|
||||||
return self.data_inicio <= hoje <= self.data_fim
|
|
||||||
32
seed.py
32
seed.py
@@ -1,32 +0,0 @@
|
|||||||
from seed_data import seed_database
|
|
||||||
from functions.database import Base, engine, get_db_connection
|
|
||||||
import time
|
|
||||||
import os
|
|
||||||
|
|
||||||
def wait_for_db():
|
|
||||||
db_path = os.path.expanduser("~/.local/share/controles/database.db")
|
|
||||||
max_attempts = 30
|
|
||||||
attempt = 0
|
|
||||||
|
|
||||||
while attempt < max_attempts:
|
|
||||||
if os.path.exists(db_path):
|
|
||||||
try:
|
|
||||||
db = get_db_connection()
|
|
||||||
db.execute("SELECT 1")
|
|
||||||
return True
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
print(f"Aguardando banco de dados... tentativa {attempt + 1}/{max_attempts}")
|
|
||||||
time.sleep(1)
|
|
||||||
attempt += 1
|
|
||||||
|
|
||||||
return False
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
print("Aguardando banco de dados estar pronto...")
|
|
||||||
if wait_for_db():
|
|
||||||
print("Iniciando população do banco de dados...")
|
|
||||||
seed_database()
|
|
||||||
print("Banco de dados populado com sucesso!")
|
|
||||||
else:
|
|
||||||
print("Erro: Banco de dados não ficou pronto a tempo.")
|
|
||||||
18
setup.py
18
setup.py
@@ -1,18 +0,0 @@
|
|||||||
from setuptools import setup, find_packages
|
|
||||||
|
|
||||||
setup(
|
|
||||||
name="controles",
|
|
||||||
version="0.1.0",
|
|
||||||
packages=find_packages(),
|
|
||||||
install_requires=[
|
|
||||||
"fastapi",
|
|
||||||
"uvicorn",
|
|
||||||
"sqlalchemy",
|
|
||||||
"python-jose[cryptography]",
|
|
||||||
"passlib[bcrypt]",
|
|
||||||
"python-multipart",
|
|
||||||
"qrcode",
|
|
||||||
"pillow",
|
|
||||||
"python-dotenv"
|
|
||||||
],
|
|
||||||
)
|
|
||||||
Reference in New Issue
Block a user