93 lines
2.9 KiB
Python
93 lines
2.9 KiB
Python
|
|
import argparse
|
||
|
|
import sys
|
||
|
|
from pathlib import Path
|
||
|
|
from dotenv import load_dotenv
|
||
|
|
|
||
|
|
ROOT_DIR = Path(__file__).resolve().parents[1]
|
||
|
|
if str(ROOT_DIR) not in sys.path:
|
||
|
|
sys.path.insert(0, str(ROOT_DIR))
|
||
|
|
|
||
|
|
# Carregar .env antes de importar módulos
|
||
|
|
load_dotenv(ROOT_DIR / ".env")
|
||
|
|
|
||
|
|
from functions.base import Base, engine, get_db_session
|
||
|
|
from functions.rbac import Role, init_rbac
|
||
|
|
from scripts.create_admin import create_admin, rotate_admin_otp
|
||
|
|
from scripts.create_test_users import create_test_users
|
||
|
|
from scripts.seed_database import seed_database
|
||
|
|
|
||
|
|
|
||
|
|
ADMIN_USERNAME = "admin"
|
||
|
|
ADMIN_PASSWORD = "admin123"
|
||
|
|
ADMIN_ROLE = Role.SECRETARIO_GERAL
|
||
|
|
|
||
|
|
def reset_db(args):
|
||
|
|
"""Inicializando banco de dados e criando tabelas"""
|
||
|
|
db = get_db_session()
|
||
|
|
try:
|
||
|
|
# Criar todas as tabelas
|
||
|
|
Base.metadata.drop_all(engine)
|
||
|
|
Base.metadata.create_all(engine)
|
||
|
|
|
||
|
|
except Exception as e:
|
||
|
|
print(f"Erro na drop ou create all da Base: {e}")
|
||
|
|
db.rollback()
|
||
|
|
raise
|
||
|
|
finally:
|
||
|
|
db.close()
|
||
|
|
|
||
|
|
print("Inicializando sistema RBAC...")
|
||
|
|
init_rbac()
|
||
|
|
|
||
|
|
print("Cria usuário admin...")
|
||
|
|
create_admin(username=ADMIN_USERNAME, password=ADMIN_PASSWORD, role=ADMIN_ROLE)
|
||
|
|
|
||
|
|
print("Banco inicializado com sucesso.")
|
||
|
|
return 0
|
||
|
|
|
||
|
|
def seed_db_with_fakes(args):
|
||
|
|
"""Função para popular o banco com dados fake para desenvolvimento"""
|
||
|
|
seed_database()
|
||
|
|
|
||
|
|
def seed_db_test_users(args):
|
||
|
|
"""Função para popular o banco com dados fake para desenvolvimento"""
|
||
|
|
create_test_users()
|
||
|
|
|
||
|
|
def reset_admin(args):
|
||
|
|
create_admin(username=ADMIN_USERNAME, password=ADMIN_PASSWORD, role=ADMIN_ROLE)
|
||
|
|
|
||
|
|
def rotate_admin_otp_cmd(args):
|
||
|
|
rotate_admin_otp(username=ADMIN_USERNAME, save_qr=True)
|
||
|
|
|
||
|
|
|
||
|
|
def build_parser():
|
||
|
|
parser = argparse.ArgumentParser(description="Gerenciador de comandos do sistema Controles")
|
||
|
|
subparsers = parser.add_subparsers(dest="command", required=True)
|
||
|
|
|
||
|
|
db_reset_parser = subparsers.add_parser("db_reset", help="Reseta o banco e recria tabelas, RBAC e admin")
|
||
|
|
db_reset_parser.set_defaults(func=reset_db)
|
||
|
|
|
||
|
|
db_seed_fake_parser = subparsers.add_parser("db_seed_fake", help="Adiciona dados falsos para desenvolvimento")
|
||
|
|
db_seed_fake_parser.set_defaults(func=seed_db_with_fakes)
|
||
|
|
|
||
|
|
db_seed_test_users_parser = subparsers.add_parser("db_seed_test_users", help="Adiciona usuários de teste para desenvolvimento")
|
||
|
|
db_seed_test_users_parser.set_defaults(func=seed_db_test_users)
|
||
|
|
|
||
|
|
admin_reset_parser = subparsers.add_parser("admin_reset", help="Reseta o usuário admin (padrão: admin123)")
|
||
|
|
admin_reset_parser.set_defaults(func=reset_admin)
|
||
|
|
|
||
|
|
admin_rotate_otp_parser = subparsers.add_parser("admin_rotate_otp", help="Rotaciona o OTP do usuário admin - se não definido em .env")
|
||
|
|
admin_rotate_otp_parser.set_defaults(func=rotate_admin_otp_cmd)
|
||
|
|
|
||
|
|
return parser
|
||
|
|
|
||
|
|
|
||
|
|
def main():
|
||
|
|
parser = build_parser()
|
||
|
|
args = parser.parse_args()
|
||
|
|
return args.func(args)
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == "__main__":
|
||
|
|
raise SystemExit(main())
|