# DNSBlock - Sistema de Gestão de Bloqueios DNS

Sistema SaaS completo para gerenciamento de ordens judiciais de bloqueio de domínios, com integração para agentes remotos (Unbound).

## 🚀 Funcionalidades

- **Painel Administrativo**: Gestão de clientes, servidores e ordens judiciais.
- **Painel do Cliente**: Visualização de status, servidores e ordens.
- **API REST**: Integração segura para agentes remotos.
- **Agente Python**: Script para sincronização automática com Unbound (RPZ).
- **Validação ASN**: Verificação de IPs de servidores.
- **Processamento CSV**: Importação em massa de domínios.

## 🛠️ Tecnologias

- **Backend**: PHP 8.2+ (MVC Customizado)
- **Frontend**: Tailwind CSS + Alpine.js
- **Banco de Dados**: MySQL 8.0
- **Agente**: Python 3.11+

## 📦 Instalação

### 1. Requisitos
- Docker e Docker Compose
- Python 3.11+ (para o agente, caso rode fora do Docker)

### 2. Instalação Rápida (Docker)

1. Clone o repositório.
2. Configure o ambiente:
   ```bash
   cp .env.example .env
   # O arquivo já vem configurado para o ambiente Docker padrão
   ```
3. Suba os containers:
   ```bash
   docker-compose up -d --build
   ```
4. Acesse o sistema:
   - **URL**: `http://localhost:8001`
   - **Admin**: `admin@dnsblock.com` / `Admin@123` (Senha padrão atualizada para política forte)
   - **Cliente**: `joao@provedor.com` / `Client@123`

> [!IMPORTANT]
> **Política de Senhas**: O sistema exige senhas com no mínimo **8 caracteres**, contendo pelo menos **uma letra maiúscula** e **um caractere especial**.

### 3. Instalação Manual (Sem Docker)
*Consulte a seção de requisitos no `composer.json` e configure um servidor Apache/Nginx com PHP 8.2+ e MySQL 8.0.*

### 3. Configuração do Agente (Python)

1. Navegue até a pasta `agent`:
   ```bash
   cd agent
   ```
2. Crie um ambiente virtual e instale dependências:
   ```bash
   python3 -m venv venv
   source venv/bin/activate
   pip install -r requirements.txt
   ```
3. Configure o agente:
   - Crie um arquivo `.env` na pasta `agent` com:
     ```env
     API_URL=http://localhost:8001/api
     SERIAL_KEY=seu_serial_key_do_servidor
     RPZ_FILE=/caminho/para/rpz.zone
     UNBOUND_CMD=echo "reload unbound" # Comando real para reload
     ```
4. Execute o agente:
   ```bash
   python agent.py
   ```

## 📚 Documentação da API

### Autenticação
- **POST** `/api/auth/login`
  - Body: `{"serial_key": "..."}`
  - Retorno: `{"token": "JWT_TOKEN", "expires_in": 3600}`

### Domínios
- **GET** `/api/v1/domains`
  - Headers: `Authorization: Bearer JWT_TOKEN`
  - Retorno: `{"domains": ["exemplo.com", ...], "checksum": "md5...", "timestamp": 123456}`

### Consulta Rápida (Debug Local)
Para listar os domínios bloqueados sem necessidade de autenticação (apenas para desenvolvimento):
```bash
curl http://localhost:8001/debug_domains.php
```

### Consulta via API (Produção/Agente)
A API oficial requer autenticação JWT.
1. Autentique para obter o token:
```bash
curl -X POST http://localhost:8001/api/auth/login \
  -H "Content-Type: application/json" \
  -d '{"serial_key": "SEU_SERIAL_KEY"}'
```
2. Use o token retornado para consultar:
```bash
curl http://localhost:8001/api/v1/domains \
  -H "Authorization: Bearer SEU_TOKEN_JWT"
```

## 🎨 Estrutura do Projeto

```
/DNSBlock
├── app/                 # Core da Aplicação PHP
│   ├── Config/          # Configurações
│   ├── Controllers/     # Controladores
│   ├── Models/          # Modelos de Dados
│   ├── Middleware/      # Middlewares de Auth
│   ├── Services/        # Lógica de Negócio (ASN, CSV)
│   └── Utils/           # Utilitários (JWT, View)
├── public/              # Document Root
├── resources/views/     # Templates HTML/PHP
├── database/            # Scripts SQL
└── agent/               # Agente Python
```

## 📄 Licença
Proprietário.
