# Middleware - Security Layer

Middlewares de segurança aplicados a todas as requisições HTTP.

---

## 📦 Middlewares Disponíveis

### `auth.go` - Autenticação JWT

Valida tokens JWT e extrai claims do usuário.

```go
// Uso em rotas protegidas
mux.Handle("/protected", AuthMiddleware(handler))

// Com verificação de role
mux.Handle("/admin", AuthMiddleware(RequireRole("superadmin")(handler)))
```

**Claims extraídas:**
- `UserID` - ID do usuário
- `Role` - Papel (superadmin, companyAdmin, recruiter, jobSeeker)
- `CompanyID` - ID da empresa (se aplicável)

---

### `cors.go` - Cross-Origin Resource Sharing

Configura origens permitidas via variável de ambiente.

```env
CORS_ORIGINS=http://localhost:3000,https://gohorsejobs.com
```

**Headers configurados:**
- `Access-Control-Allow-Origin` (whitelist)
- `Access-Control-Allow-Methods`
- `Access-Control-Allow-Headers`
- `Access-Control-Allow-Credentials`

---

### `rate_limit.go` - Rate Limiting

Limita requisições por IP para prevenir abusos.

**Configuração padrão:**
- 100 requisições por minuto por IP
- Retorna `429 Too Many Requests` quando excedido

**Headers de resposta:**
- `Retry-After: 60` (quando limitado)

---

### `security_headers.go` - Security Headers (OWASP)

Adiciona headers de segurança recomendados pela OWASP.

| Header | Valor | Proteção |
|--------|-------|----------|
| `X-Frame-Options` | `DENY` | Clickjacking |
| `X-Content-Type-Options` | `nosniff` | MIME sniffing |
| `X-XSS-Protection` | `1; mode=block` | XSS |
| `Referrer-Policy` | `strict-origin-when-cross-origin` | Vazamento de referrer |
| `Content-Security-Policy` | (configurado) | Injeção de conteúdo |
| `Permissions-Policy` | (configurado) | APIs perigosas |

---

### `logging.go` - Request Logging

Loga todas as requisições com método, path e duração.

---

## 🔗 Ordem de Aplicação

Os middlewares são aplicados na seguinte ordem (de fora para dentro):

1. **Security Headers** - Headers de segurança
2. **Rate Limiting** - Limitação de taxa
3. **CORS** - Cross-origin
4. **Logging** - Log de requisições
5. **Auth** - Autenticação (quando aplicável)

```go
// Em router.go
handler = CORSMiddleware(handler)
handler = RateLimitMiddleware(100, time.Minute)(handler)
handler = SecurityHeadersMiddleware(handler)
```
