From c640a756df3411421d4356232a2c021e74887daa Mon Sep 17 00:00:00 2001 From: andersonid Date: Mon, 7 Apr 2025 10:24:17 -0300 Subject: [PATCH] =?UTF-8?q?chore:=20remove=20arquivos=20n=C3=A3o=20utiliza?= =?UTF-8?q?dos=20do=20projeto=20-=20Remo=C3=A7=C3=A3o=20de=20scripts=20obs?= =?UTF-8?q?oletos=20(seed.py,=20create=5Ftest=5Fusers.py)=20e=20arquivos?= =?UTF-8?q?=20de=20configura=C3=A7=C3=A3o=20n=C3=A3o=20utilizados=20(setup?= =?UTF-8?q?.py,=20models.py)=20ap=C3=B3s=20an=C3=A1lise=20completa=20de=20?= =?UTF-8?q?depend=C3=AAncias?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- create_test_users.py | 130 ------------------------------------------- models.py | 23 -------- seed.py | 32 ----------- setup.py | 18 ------ 4 files changed, 203 deletions(-) delete mode 100644 create_test_users.py delete mode 100644 models.py delete mode 100644 seed.py delete mode 100644 setup.py diff --git a/create_test_users.py b/create_test_users.py deleted file mode 100644 index 88dd5e5..0000000 --- a/create_test_users.py +++ /dev/null @@ -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() \ No newline at end of file diff --git a/models.py b/models.py deleted file mode 100644 index 30dab99..0000000 --- a/models.py +++ /dev/null @@ -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 \ No newline at end of file diff --git a/seed.py b/seed.py deleted file mode 100644 index 6e2390f..0000000 --- a/seed.py +++ /dev/null @@ -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.") \ No newline at end of file diff --git a/setup.py b/setup.py deleted file mode 100644 index 5b99be3..0000000 --- a/setup.py +++ /dev/null @@ -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" - ], -) \ No newline at end of file