feat: add API Key authentication, Dockerfile, and docker-compose
- core/auth.py: API Key auth via header X-API-Key (env PDFTOOLKIT_API_KEY) - Modo dev: sem chave configurada → acesso livre - Modo produção: exige chave, retorna 401/403 - api.py: endpoints protegidos com Depends(_auth_required) - /health e / permanecem públicos - Dockerfile: multi-stage (base → api → web) - docker-compose.yml: api + web com healthcheck, volumes e rede - .env.example: template de variáveis de ambiente - README.md: seções de autenticação e Docker
This commit is contained in:
76
README.md
76
README.md
@@ -4,6 +4,8 @@ Transforme, otimize e gerencie arquivos PDF com facilidade.
|
||||
|
||||
- **Interface Web**: Streamlit com upload drag-and-drop e configuração visual
|
||||
- **API REST**: FastAPI com documentação OpenAPI automática em `/docs`
|
||||
- **Autenticação**: API Key via header `X-API-Key` (configurável via env var)
|
||||
- **Docker**: containers prontos para produção via docker-compose
|
||||
- **Operações**: compressão, PDF/A ↔ PDF comum, merge, split, rotação, extração de texto e imagens
|
||||
|
||||
---
|
||||
@@ -14,8 +16,9 @@ Transforme, otimize e gerencie arquivos PDF com facilidade.
|
||||
|
||||
- Python 3.12+
|
||||
- pip
|
||||
- Docker (opcional, para containers)
|
||||
|
||||
### Instalação
|
||||
### Instalação (sem Docker)
|
||||
|
||||
```bash
|
||||
git clone <url-do-repositorio> pdf-toolkit
|
||||
@@ -23,7 +26,7 @@ cd pdf-toolkit
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
### Execução
|
||||
### Execução (sem Docker)
|
||||
|
||||
**Streamlit (interface web):**
|
||||
```bash
|
||||
@@ -109,6 +112,75 @@ pdf-toolkit/
|
||||
|
||||
---
|
||||
|
||||
## 🔐 Autenticação da API
|
||||
|
||||
A API suporta autenticação via **API Key** no header `X-API-Key`.
|
||||
|
||||
### Configuração
|
||||
|
||||
Defina a variável de ambiente `PDFTOOLKIT_API_KEY`:
|
||||
|
||||
```bash
|
||||
export PDFTOOLKIT_API_KEY="sua-chave-secreta-aqui"
|
||||
```
|
||||
|
||||
Se a variável **não** estiver definida, a API roda sem autenticação (modo desenvolvimento).
|
||||
|
||||
### Uso com curl
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:8555/compress \
|
||||
-H "X-API-Key: sua-chave-secreta-aqui" \
|
||||
-F "file=@documento.pdf" \
|
||||
-o comprimido.pdf
|
||||
```
|
||||
|
||||
### Endpoints públicos (sem auth)
|
||||
|
||||
- `GET /` — raiz informativa
|
||||
- `GET /health` — health check
|
||||
|
||||
---
|
||||
|
||||
## 🐳 Docker
|
||||
|
||||
### Com docker-compose (recomendado)
|
||||
|
||||
```bash
|
||||
# 1. Copie e configure o .env
|
||||
cp .env.example .env
|
||||
# Edite .env com sua API Key
|
||||
|
||||
# 2. Inicie os serviços
|
||||
docker compose up -d --build
|
||||
|
||||
# Acesse:
|
||||
# - Streamlit: http://localhost:8550
|
||||
# - API: http://localhost:8555
|
||||
# - Swagger: http://localhost:8555/docs
|
||||
```
|
||||
|
||||
### Build manual
|
||||
|
||||
```bash
|
||||
# API
|
||||
docker build --target api -t pdf-toolkit-api .
|
||||
docker run -p 8555:8555 --env-file .env pdf-toolkit-api
|
||||
|
||||
# Web
|
||||
docker build --target web -t pdf-toolkit-web .
|
||||
docker run -p 8550:8550 --env-file .env pdf-toolkit-web
|
||||
```
|
||||
|
||||
### Estrutura dos containers
|
||||
|
||||
- **api**: FastAPI + uvicorn, porta 8555
|
||||
- **web**: Streamlit, porta 8550, depende do serviço `api`
|
||||
- Volume compartilhado `uploads` para arquivos temporários
|
||||
- Healthcheck em ambos os containers
|
||||
|
||||
---
|
||||
|
||||
## 🧪 Testes
|
||||
|
||||
```bash
|
||||
|
||||
Reference in New Issue
Block a user