5.2 KiB
5.2 KiB
🔧 Admin API - Gerenciamento de Planos
Este diretório contém ferramentas para gerenciar os planos do Stripe no MongoDB via API local.
🔒 Segurança
IMPORTANTE: O endpoint /api/Admin/* só funciona quando acessado de localhost (127.0.0.1). Qualquer acesso externo retornará 403 Forbidden.
📋 Arquivos
plans.json- Configuração dos planos com Price IDs do Stripeupdate-plans.sh- Script bash para atualizar planos via curlseed-mongodb-plans.js- Script MongoDB direto (método alternativo)
🚀 Método 1: API Endpoint (Recomendado)
Vantagens
- ✅ Não precisa de credenciais do MongoDB
- ✅ Validação automática
- ✅ Logs no sistema
- ✅ Funciona com app rodando
Como Usar
1️⃣ Edite o plans.json com seus Price IDs
{
"pricesByCountry": {
"BR": {
"stripePriceId": "price_SEU_ID_AQUI"
}
}
}
2️⃣ Inicie a aplicação
dotnet run
# ou
dotnet watch run
3️⃣ Execute o script de atualização
# Linux/Mac/WSL
cd Scripts
./update-plans.sh
# Especificar porta diferente
./update-plans.sh 5000
4️⃣ Ou use curl diretamente
# Atualizar planos
curl -k -X POST \
-H "Content-Type: application/json" \
-d @Scripts/plans.json \
https://localhost:52428/api/Admin/SeedPlans
# Listar planos
curl -k https://localhost:52428/api/Admin/Plans
# Deletar todos os planos
curl -k -X DELETE https://localhost:52428/api/Admin/Plans
🗄️ Método 2: Script MongoDB Direto
Vantagens
- ✅ Funciona sem a app rodando
- ✅ Acesso direto ao MongoDB
Desvantagens
- ❌ Precisa de credenciais do MongoDB
- ❌ Sem validação automática
Como Usar
# Localhost
mongosh "mongodb://localhost:27017/QrRapido" < Scripts/seed-mongodb-plans.js
# Produção
mongosh "mongodb://user:pass@host:27017/QrRapido?replicaSet=rs0&authSource=admin" < Scripts/seed-mongodb-plans.js
📝 Endpoints Disponíveis
POST /api/Admin/SeedPlans
Cria ou atualiza planos no MongoDB
Request Body:
[
{
"interval": "month",
"stripePriceId": "price_...",
"pricesByCountry": { ... }
}
]
Response:
{
"success": true,
"message": "2 plans seeded successfully",
"plans": [ ... ]
}
GET /api/Admin/Plans
Lista todos os planos do MongoDB
Response:
{
"success": true,
"count": 2,
"plans": [ ... ]
}
DELETE /api/Admin/Plans
Remove todos os planos do MongoDB
Response:
{
"success": true,
"deletedCount": 2
}
🛡️ Proteção de Segurança
O código verifica o IP de origem:
var remoteIp = HttpContext.Connection.RemoteIpAddress;
var isLocalhost = remoteIp != null &&
(remoteIp.ToString() == "127.0.0.1" ||
remoteIp.ToString() == "::1" ||
remoteIp.ToString() == "localhost");
if (!isLocalhost) {
return Forbid("This endpoint is only accessible from localhost");
}
Tentativas de acesso externo são logadas:
[Warning] Unauthorized admin access attempt from 192.168.1.100
🧪 Testando
# 1. Listar planos atuais
curl -k https://localhost:52428/api/Admin/Plans | jq '.'
# 2. Deletar planos
curl -k -X DELETE https://localhost:52428/api/Admin/Plans
# 3. Criar novos planos
curl -k -X POST \
-H "Content-Type: application/json" \
-d @Scripts/plans.json \
https://localhost:52428/api/Admin/SeedPlans | jq '.'
# 4. Verificar se foram criados
curl -k https://localhost:52428/api/Admin/Plans | jq '.plans[] | {interval, priceIds: .pricesByCountry}'
⚠️ Troubleshooting
Erro: "Connection refused"
- ✅ Certifique-se que a app está rodando:
dotnet run
Erro: "Forbidden" mesmo em localhost
- ✅ Verifique se está usando
https://localhost(nãohttp://) - ✅ Verifique se está usando
localhostou127.0.0.1(não o IP da máquina)
Erro: "SSL certificate problem"
- ✅ Use o flag
-kno curl para aceitar certificados auto-assinados
📊 Estrutura do plans.json
[
{
"name": {
"pt-BR": "Nome em português",
"es-PY": "Nombre en español",
"en": "Name in english"
},
"description": { ... },
"features": { ... },
"interval": "month" ou "year",
"stripePriceId": "price_default",
"pricesByCountry": {
"BR": {
"amount": 9.90,
"currency": "BRL",
"stripePriceId": "price_BR_ID"
},
"PY": {
"amount": 35000,
"currency": "PYG",
"stripePriceId": "price_PY_ID"
}
},
"isActive": true,
"displayOrder": 1,
"badge": { ... } // Opcional
}
]
🎯 Fluxo Recomendado
-
Desenvolvimento (localhost):
# Editar plans.json com Price IDs de teste ./update-plans.sh -
Staging:
# SSH no servidor staging ssh user@staging-server cd /app/qrrapido ./Scripts/update-plans.sh 5000 -
Produção:
# Opção 1: Via API (se tiver acesso SSH) ssh user@prod-server cd /app/qrrapido ./Scripts/update-plans.sh 5001 # Opção 2: Via MongoDB direto mongosh "connection_string" < Scripts/seed-mongodb-plans.js