Initial commit

This commit is contained in:
HalbeBruno
2026-02-18 10:18:46 -03:00
commit b264b583b8
24 changed files with 2338 additions and 0 deletions

42
tools/build.sh Executable file
View File

@@ -0,0 +1,42 @@
# Definir diretórios (Relativos à raiz do projeto, assumindo execução via ./tools/build.sh)
# Mas vamos garantir que o script rode da raiz
cd "$(dirname "$0")/.."
echo "[BUILD] Limpando builds anteriores..."
rm -rf dist build release_production.zip
# Definir diretórios
STAGE_DIR="dist/ipv0-olt-api"
RELEASE_DIR="dist/release"
mkdir -p $STAGE_DIR
mkdir -p $RELEASE_DIR
echo "[BUILD] Iniciando Obfuscação Pyarmor (Modo Full)..."
# Usando Pyarmor para proteger todo o código fonte
# O comando gen irá usar a configuração existente em .pyarmor se houver, ou criar uma nova.
# --outer: Permite usar chave de licença externa (license.key via outer_keyname=license.key)
./venv/bin/pyarmor gen --outer -O $STAGE_DIR app.py drivers/ utils/ config.py
echo "[BUILD] Copiando arquivos estáticos..."
cp hosts.json $STAGE_DIR/
cp requirements.txt $STAGE_DIR/
cp README.md $STAGE_DIR/
cp tools/debug.py $STAGE_DIR/
cp tools/service/install.sh $STAGE_DIR/
cp tools/service/ipv0-olt-api.service $STAGE_DIR/
chmod +x $STAGE_DIR/install.sh
echo "[BUILD] Criando arquivo ZIP (via Python)..."
# Usar Python para zipar o CONTEÚDO do diretório de staging para dentro do zip
# O zip final ficará em dist/release/ipv0-olt-api.zip
# Estando em dist/ipv0-olt-api, ../release aponta para dist/release
cd $STAGE_DIR
../../venv/bin/python3 -c "import shutil; shutil.make_archive('../release/ipv0-olt-api', 'zip', '.')"
cd ../..
echo "✅ Build Process Complete!"
echo "Artifacts:"
echo " - Staging: $STAGE_DIR"
echo " - Release: $RELEASE_DIR/ipv0-olt-api.zip"
ls -F $RELEASE_DIR/

51
tools/debug.py Normal file
View File

@@ -0,0 +1,51 @@
import os
import sys
import subprocess
import time
import urllib.request
import json
def print_header(msg):
print(f"\n{'='*40}\n {msg}\n{'='*40}")
import glob
def check_pyarmor_binding():
print_header("Hardware & License (Machine ID)")
try:
# Usar ferramenta oficial do Pyarmor CLI para HD Info
subprocess.run([sys.executable, "-m", "pyarmor.cli.hdinfo"], check=False)
except Exception as e:
print(f"Erro ao consultar HD Info: {e}")
def check_service_status():
print_header("Service Status (systemd)")
ret = subprocess.run(["systemctl", "status", "ipv0-olt-api", "--no-pager"], capture_output=False)
if ret.returncode != 0:
print("⚠️ Serviço parece estar parado ou com erro.")
def check_api_health():
print_header("API Health Check")
url = "http://localhost:5050/health"
try:
print(f"Connecting to {url}...")
with urllib.request.urlopen(url, timeout=5) as response:
if response.status == 200:
data = json.loads(response.read().decode())
print(f"✅ API Online! Status: {data}")
else:
print(f"❌ API retornou status code: {response.status}")
except Exception as e:
print(f"❌ Falha na conexão com API: {e}")
print("Verifique se o serviço está rodando e se a licença é válida.")
if __name__ == "__main__":
print("IPv0 OLT API - Debug Tool (v3.1)")
check_service_status()
check_pyarmor_binding()
check_api_health()
print("\nLogs recentes:")
subprocess.run(["journalctl", "-u", "ipv0-olt-api", "-n", "10", "--no-pager"], check=False)

87
tools/gen_license.sh Executable file
View File

@@ -0,0 +1,87 @@
#!/bin/bash
# Ensure we are in project root
cd "$(dirname "$0")/.."
# Configuration
OUTPUT_BASE="dist/licenses"
PYARMOR="./venv/bin/pyarmor"
# Colors (only if terminal supports it, otherwise empty)
if [ -t 1 ]; then
RED='\033[0;31m'
GREEN='\033[0;32m'
BLUE='\033[0;34m'
NC='\033[0m'
else
RED=''
GREEN=''
BLUE=''
NC=''
fi
echo "${BLUE}=== Gerador de Licenças IPv0 OLT API ===${NC}"
# 1. Solicitar Nome do Cliente
echo "Nome do Cliente (sem espaços, ex: ProvedorX): "
read CLIENT_NAME
if [ -z "$CLIENT_NAME" ]; then
echo "${RED}Erro: Nome do cliente é obrigatório.${NC}"
exit 1
fi
DEST_DIR="$OUTPUT_BASE/$CLIENT_NAME"
mkdir -p "$DEST_DIR"
# 2. Escolher Tipo de Licença
echo ""
echo "Tipo de Licença:"
echo "1) Data de Expiração (Trial/PoC)"
echo "2) Hardware (Produção/Machine ID)"
echo "Opção [1/2]: "
read OPTION
if [ "$OPTION" = "1" ]; then
# Licença por Data
echo "Data de Vencimento (YYYY-MM-DD): "
read EXPIRE_DATE
# Validação simples de formato YYYY-MM-DD
if ! echo "$EXPIRE_DATE" | grep -qE '^[0-9]{4}-[0-9]{2}-[0-9]{2}$'; then
echo "${RED}Erro: Formato de data inválido.${NC}"
exit 1
fi
echo "Gerando licença Trial para ${GREEN}$CLIENT_NAME${NC} até ${GREEN}$EXPIRE_DATE${NC}..."
$PYARMOR gen key -e "$EXPIRE_DATE"
elif [ "$OPTION" = "2" ]; then
# Licença por Hardware
echo "Machine ID do Cliente: "
read MACHINE_ID
if [ -z "$MACHINE_ID" ]; then
echo "${RED}Erro: Machine ID é obrigatório.${NC}"
exit 1
fi
echo "Gerando licença Permanente para ${GREEN}$CLIENT_NAME${NC} (ID: $MACHINE_ID)..."
$PYARMOR gen key --bind-device "$MACHINE_ID"
else
echo "${RED}Opção inválida.${NC}"
exit 1
fi
# 3. Mover e Verifica
# Por padrão, o pyarmor gera em dist/license.key (conforme config outer_keyname)
GENERATED_FILE="dist/license.key"
if [ -f "$GENERATED_FILE" ]; then
mv "$GENERATED_FILE" "$DEST_DIR/"
echo ""
echo "${GREEN}✅ Licença gerada com sucesso!${NC}"
echo "Arquivo: ${BLUE}$DEST_DIR/license.key${NC}"
echo "Envie este arquivo para o cliente."
else
echo "${RED}❌ Erro: O arquivo de licença não foi gerado.${NC}"
exit 1
fi

60
tools/service/install.sh Normal file
View File

@@ -0,0 +1,60 @@
#!/bin/bash
# IPv0 OLT API Installer
# Usage: sudo ./install.sh
if [ "$EUID" -ne 0 ]; then
echo "Please run as root (sudo ./install.sh)"
exit 1
fi
DEST_DIR="/opt/ipv0-olt-api"
echo "[INSTALL] Installing dependencies..."
apt-get update
apt-get install -y python3-venv python3-pip unzip
echo "[INSTALL] Setting up directory..."
mkdir -p $DEST_DIR
# Copiar arquivos do diretório atual para o destino (se não estiver lá)
if [ "$PWD" != "$DEST_DIR" ]; then
cp -r * $DEST_DIR/
fi
cd $DEST_DIR
echo "[INSTALL] Creating virtual environment..."
python3 -m venv venv
./venv/bin/pip install -r requirements.txt
echo "[INSTALL] Configuring Service..."
cp ipv0-olt-api.service /etc/systemd/system/
systemctl daemon-reload
# Não habilitar/iniciar automaticamente, pois falta a licença
# systemctl enable ipv0-olt-api
# systemctl start ipv0-olt-api
echo ""
echo "[INSTALL] Dependencies installed!"
# Obter Machine ID de forma limpa
MACHINE_ID=$(./venv/bin/python3 -m pyarmor.cli.hdinfo 2>/dev/null | grep "Machine ID" | cut -d: -f2 | xargs)
# Cores
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
echo ""
echo "Serviço 'ipv0-olt-api' configurado mas não iniciado - ${RED}PRECISA SER LICENCIADO${NC}."
echo ""
echo -e "Machine ID: ${YELLOW}${MACHINE_ID}${NC}"
echo ""
echo "NEXT STEPS:"
echo "1. Solicite sua licença."
echo "2. Copie a licença 'license.key' para /opt/ipv0-olt-api/"
echo "3. Inicialize o serviço: sudo systemctl enable --now ipv0-olt-api"
echo "4. Após licenciar e inicializar o serviço, verifique se a api está funcionando com:"
echo " curl http://localhost:5050/health"

View File

@@ -0,0 +1,14 @@
[Unit]
Description=IPv0 OLT API (Zabbix Integration)
After=network.target
[Service]
User=root
Group=root
WorkingDirectory=/opt/ipv0-olt-api
ExecStart=/opt/ipv0-olt-api/venv/bin/python3 app.py
Restart=always
Environment=PYTHONUNBUFFERED=1
[Install]
WantedBy=multi-user.target