# Pasta `deploy/` — o que sobe pro cPanel

Tudo aqui é **PHP que conversa com a VPS**. Nenhuma tela guarda saldo ou código:
o banco de verdade é o Postgres da VPS, e é lá que o app valida o código quando
o cliente ativa. Se o cPanel tivesse banco próprio, o código gerado aqui **não
funcionaria no app** e o saldo teria dois números diferentes.

## O que é cada pasta

| pasta | endereço depois de subir | quem usa |
|---|---|---|
| `painel/` | `suporteoficialbr.online/painel/` | **você** — vê os afiliados, soma e tira saldo |
| `afiliado/` | `suporteoficialbr.online/afiliado/` | os afiliados — entram **só com a senha** |
| `recarga/` | `suporteoficialbr.online/recarga/` | o checkout PIX (abre sozinho ao recarregar) |
| `assets/` | — | o CSS das telas |

## Como subir

1. Suba **o conteúdo** desta pasta para `public_html/` (ou para uma subpasta, se preferir).
2. `cp config.exemplo.php config.php` e preencha:
   - `painel_usuario` / `painel_senha` — o login do **seu** painel;
   - `webhook_segredo` — o **mesmo** `WEBHOOK_SEGREDO` do `.env` da VPS (está no `SENHAS-CRG-TV.txt`);
   - `crgtv_base` — já vem apontando pra API.
3. Em `recarga/`, faça o mesmo com `recarga/config.exemplo.php` → `recarga/config.php`
   (lá ficam as chaves do gateway).
4. Configure o cron do `recarga/conciliar.php` — está explicado em `recarga/LEIA-ME.md`.

⚠️ **Não suba `recarga/testes/`** (já está fora desta pasta). É harness de desenvolvimento:
acessível por HTTP, cada acesso cria arquivos e chama `proc_open`.

## Senhas

**Não ficam neste arquivo nem em nenhum arquivo versionado.** Estão em
`SENHAS-AFILIADOS.md`, na raiz do projeto, fora do git — como o `SENHAS-CRG-TV.txt`.

⚠️ **Risco registrado:** o dono escolheu senhas curtas e previsíveis para as telas dos
afiliados. Na tela do afiliado **a senha é a identidade** (não há usuário), então uma senha
adivinhável se acerta de primeira, e quem entrar consegue **gerar códigos, que gastam o
saldo**. O limite de 10 tentativas por IP não protege contra acerto na primeira tentativa;
o prejuízo possível é o saldo que estiver na conta.

Duas formas de reduzir isso sem perder a facilidade:
- subir a tela num endereço não óbvio (`/a7k2/` em vez de `/afiliado/`);
- acrescentar um sufixo próprio à senha, que continua fácil de passar no WhatsApp.

Para trocar: `POST /api/dono/senha` com `afiliado_id` e `senha`. O servidor **recusa senha
repetida** (409) — duas iguais fariam um afiliado entrar na conta do outro.

## Segurança que já está aqui

- `config.php` e `config.exemplo.php` bloqueados por `.htaccess`, e `Options -Indexes`.
- **CSRF** nos dois painéis: todo POST carrega token de sessão. Sem isso, uma página
  externa aberta no seu navegador logado conseguiria somar saldo sozinha — foi exatamente
  o furo encontrado no painel da VPS em 26/10.
- Cookie de sessão `HttpOnly`, `SameSite=Strict` e `Secure` quando em HTTPS.
- A senha do afiliado **nunca** aparece em URL nem no HTML: fica só na sessão do PHP.
- O segredo da VPS fica **só no servidor**, nunca chega ao navegador.

## Por que a tela do afiliado é só senha

Decisão do dono: "não precisa login/senha, só senha, fica mais fácil". Como a senha
vira a identidade, ela é **longa e sorteada pelo servidor**, e a VPS limita a
**10 tentativas por IP a cada 5 minutos** — sem isso, só-senha seria porta aberta
pra tentativa e erro.
