Publicar com ncat
Guia simples para registrar cidadania e publicar textos em Soledade usando terminal e ncat (ou nc).
Servidor: soledade.city · Porta de publicação: 1915
Antes de tudo: instale o ncat → teste a porta → registre → guarde identidade e recovery → publique.
Antes de começar
- Soledade não tem login no navegador nem painel web para publicar.
- Tudo passa por TCP na porta 1915: você monta um pacote de texto no terminal e envia com
ncat. - Host de produção: soledade.city (substitua se estiver em outro ambiente de teste).
- Credenciais: Identidade cidadã — cidadãos usam
~/.soledade-identidade, não~/.soledade-token.
Instalar ncat
Windows
- Instale o Nmap e marque Ncat.
- Teste no PowerShell:
& "C:\Program Files (x86)\Nmap\ncat.exe" --version
Linux (Debian / Ubuntu)
sudo apt update
sudo apt install ncat
ncat --version
macOS
brew install nmap
ncat --version
Testar se a porta responde
Antes de registrar ou publicar, confira se sua rede alcança a 1915.
Windows (PowerShell)
Test-NetConnection soledade.city -Port 1915
Procure TcpTestSucceeded : True. Se for False, a porta pode estar fechada no firewall do servidor ou bloqueada na sua rede — tente outra rede ou fale com quem administra a cidade.
Linux ou macOS
nc -zv soledade.city 1915
ou:
timeout 3 bash -c 'cat < /dev/null > /dev/tcp/soledade.city/1915' && echo OK || echo falhou
O que o ncat faz (e o que não faz)
Funciona: enviar um pacote completo (várias linhas + corpo + linha final .) pelo pipe para ncat soledade.city 1915 e ler a resposta do servidor (200 registered, 200 published, erros, etc.).
Não funciona:
- Abrir só
ncat soledade.city 1915e esperar o servidor entregar token ou identidade — isso não acontece. - Publicar sem ter feito REGISTER antes (ou sem identidade válida).
- Usar
~/.soledade-tokense você é cidadão comum — esse arquivo é do Prefeito (detalhes).
Fluxo correto: montar pacote → pipe para ncat → copiar credenciais da resposta → guardar em arquivos locais → publicar com SOLED/2.
Registrar cidadania
Escolha um handle: minúsculas, números, hífen ou underscore — por exemplo maria ou ana_clara. Handles como pablo ou admin estão reservados.
Windows (PowerShell)
Substitua maria e o nome público:
$ncat = "C:\Program Files (x86)\Nmap\ncat.exe"
$payload = @"
SOLED/2
ACTION REGISTER
HANDLE maria
NAME Maria Silva
.
"@
$response = $payload | & $ncat soledade.city 1915
Write-Host $response
Ou use o script do repositório:
.\scripts\register.ps1 maria "Maria Silva"
(O script salva a identidade em %USERPROFILE%\.soledade-identidade se a resposta contiver IDENTITY.)
Linux ou macOS (bash)
{
echo "SOLED/2"
echo "ACTION REGISTER"
echo "HANDLE maria"
echo "NAME Maria Silva"
echo
echo "."
} | ncat soledade.city 1915
Com script:
./scripts/soledade-register maria "Maria Silva"
Resposta esperada
200 registered
HANDLE maria
IDENTITY <string-longa-secreta>
RECOVERY <codigo-de-recuperacao>
HOUSE https://soledade.city/@maria/
SAVE ~/.soledade-identidade
Copie agora as linhas IDENTITY e RECOVERY. O servidor não mostra a identidade em claro de novo depois.
| Resposta | Significado |
|---|---|
200 registered |
Cidadania criada; você já pode publicar |
409 handle taken |
Alguém já usa esse handle — escolha outro |
403 handle reserved |
Handle reservado (ex.: pablo) |
400 bad request |
Handle inválido ou pedido malformado |
403 ip banned |
IP bloqueado pelo Prefeito |
429 rate limited |
Muitos registros do mesmo IP — espere e tente de novo |
Guardar a identidade
Crie dois arquivos com apenas uma linha cada (sem aspas, sem espaço extra):
| Arquivo | Conteúdo |
|---|---|
Windows: %USERPROFILE%\.soledade-identidade |
string da linha IDENTITY |
Windows: %USERPROFILE%\.soledade-recovery |
string da linha RECOVERY |
Linux/macOS: ~/.soledade-identidade |
idem |
Linux/macOS: ~/.soledade-recovery |
idem |
Detalhes e recuperação se perdeu a identidade: Identidade cidadã.
Validar rascunho (ACTION PREVIEW)
Antes de publicar de verdade, você pode validar o pacote. O servidor responde com WARN ou ERR e não grava nada.
Substitua handle, identidade e PATH:
$ncat = "C:\Program Files (x86)\Nmap\ncat.exe"
$Identidade = (Get-Content "$env:USERPROFILE\.soledade-identidade" -Raw).Trim()
$payload = @"
SOLED/2
ACTION PREVIEW
CITIZEN maria
IDENTITY $Identidade
PATH citizens/maria/posts/rascunho.md
---
title: "Rascunho"
district: geral
status: published
---
# Rascunho
.
"@
$payload | & $ncat soledade.city 1915
Resposta típica: 200 preview ok seguido de linhas WARN ou ERR se houver problema de bairro, front matter ou caminho.
Modelos copiáveis também em Assistente de publicação (final desta página).
Publicar um texto
- Escreva um arquivo
.md, por exemplomeu-texto.md:
---
title: "Meu primeiro texto"
district: "geral"
status: "published"
date: "2026-06-02"
description: "Minha estreia na cidade."
---
# Meu primeiro texto
Corpo em Markdown.
Se o arquivo ficar em citizens/SEU_HANDLE/posts/, não precisa de citizen: no YAML — o sistema usa a pasta.
- Envie com SOLED/2:
Windows (PowerShell)
$ncat = "C:\Program Files (x86)\Nmap\ncat.exe"
$Cidadao = "maria"
$Identidade = (Get-Content "$env:USERPROFILE\.soledade-identidade" -Raw).Trim()
$Markdown = Get-Content ".\meu-texto.md" -Raw
$Payload = @"
SOLED/2
CITIZEN $Cidadao
IDENTITY $Identidade
PATH citizens/$Cidadao/posts/meu-texto.md
$Markdown
.
"@
$Payload | & $ncat soledade.city 1915
Linux (bash)
CIDADAO=maria
IDENTIDADE="$(tr -d '\r\n' < ~/.soledade-identidade)"
ARQUIVO=meu-texto.md
DESTINO="citizens/$CIDADAO/posts/meu-texto.md"
{
echo "SOLED/2"
echo "CITIZEN $CIDADAO"
echo "IDENTITY $IDENTIDADE"
echo "PATH $DESTINO"
echo
cat "$ARQUIVO"
echo "."
} | ncat soledade.city 1915
Resposta esperada: 200 published
Seu texto aparece em https://soledade.city/@maria/meu-texto/ (troque handle e slug).
Bairros disponíveis: geral, cinema, historia, livros, programacao — use district: no front matter.
PATH no servidor e URL no site
PATH (relativo a content/) |
URL no site |
|---|---|
citizens/maria/posts/meu-texto.md |
https://soledade.city/@maria/meu-texto/ |
posts/meu-texto.md (legado) |
https://soledade.city/posts/meu-texto/ |
about.md |
https://soledade.city/about/ |
O slug da URL é o nome do arquivo sem .md.
Mais campos de front matter: Guia de publicação.
Formato do pacote SOLED/2
Publicação e preview usam o mesmo esqueleto:
SOLED/2
CITIZEN <seu-handle>
IDENTITY <conteúdo de ~/.soledade-identidade>
PATH citizens/<handle>/posts/arquivo.md
<corpo Markdown completo, pode incluir --- front matter --- >
.
Regras:
- Cabeçalhos obrigatórios na publicação:
CITIZEN,IDENTITY,PATH(ouACTIONno registro/recuperação). - Linha em branco entre os cabeçalhos e o Markdown.
- Última linha do envio:
.sozinha (o pacote termina com\n.\n). PATHdeve ser.mde, em geral, só dentro da sua pastacitizens/seu_handle/.
Respostas do servidor (publicação)
| Resposta | Significado |
|---|---|
200 published |
Gravou e reconstruiu o site |
401 invalid identity |
Identidade errada, arquivo com espaço extra ou identidade revogada |
401 invalid token |
Só no protocolo legado do Prefeito — token errado |
403 forbidden |
Caminho ou bairro não permitido |
403 citizen banned |
Cidadão banido |
400 bad path |
Caminho inválido (.., não é .md, etc.) |
413 payload too large |
Texto maior que 128 KiB (padrão) |
429 rate limited |
Muitas publicações por minuto do mesmo IP |
Atualizar ou apagar
Atualizar: reenvie o mesmo PATH com o .md completo atualizado.
Apagar: mesmo cabeçalho SOLED/2 (CITIZEN, IDENTITY, PATH); corpo só com:
DELETE
Ler Markdown (porta 1900, opcional)
A porta 1900 serve só para ler arquivos .md no servidor — não publica.
"index.md" | & "C:\Program Files (x86)\Nmap\ncat.exe" soledade.city 1900
echo "citizens/maria/posts/meu-texto.md" | ncat soledade.city 1900
Atenção: rascunhos (status: draft) ainda podem ser lidos aqui se o caminho for conhecido. Use private: true no front matter para bloquear também na 1900 (detalhes na página de identidade).
Segurança
- A conexão na porta 1915 é TCP plano (sem HTTPS). Evite redes públicas não confiáveis.
- Nunca publique sua identidade em textos, Git ou chats.
- Rascunhos (
status: draft) não aparecem no site, mas podem ser lidos na 1900 se o caminho for conhecido — salvoprivate: true. - Não coloque dados pessoais reais (CPF, senhas bancárias) em textos publicados.
Assistente de publicação
No final desta página há modelos REGISTER, PREVIEW e publicar prontos para copiar, com seletor de handle e bairro: ir para o assistente.
Como adquirir cidadania · Guia de publicação · Identidade cidadã · Ajuda
Assistente de publicação
Modelos prontos para copiar e enviar com ncat soledade.city 1915 (pipe do pacote). Abrir ncat sem enviar um pacote não gera credencial. Substitua sua-identidade-aqui pelo conteúdo de ~/.soledade-identidade. Use ACTION PREVIEW antes de publicar.
Registrar cidadão
Recuperar identidade (RECOVER)
Publicar texto