Soledade

Um blog textual, quieto e feito à mão.

Guia de publicação cidadã

Este guia explica como publicar textos em Soledade usando terminal, ncat ou nc, e o protocolo SOLED/2 em soledade.city:1915.

Primeira vez? Comece pelo Guia ncat — instalação, registro, o que o ncat faz (e não faz), primeira publicação e assistente com modelos.

Resumo: Como adquirir cidadania · Identidade e credenciais.

O que você precisa

Placeholders usados neste guia:

HOST=soledade.city
PORTA=1915
CIDADÃO=maria
IDENTIDADE=sua-identidade-aqui

Substitua pelos seus valores reais. Nunca publique sua identidade real neste guia ou em qualquer texto público.

Cidadãos usam ~/.soledade-identidade, não ~/.soledade-token (credenciais).


Testar conectividade

Antes de publicar, confira se a porta 1915 responde — passo a passo em Guia ncat — Testar se a porta responde.

Resumo:

Test-NetConnection soledade.city -Port 1915
nc -zv soledade.city 1915

Se a conexão falhar, registrar ou publicar também falhará (timeout). Abrir ncat sem enviar pacote não entrega credencial.


PATH no servidor e URL no site

O cabeçalho PATH é relativo à pasta content/ no servidor. A URL pública segue o build estático:

PATH no servidor URL no site
citizens/maria/posts/meu-texto.md https://soledade.city/@maria/meu-texto/
citizens/maria/profile.md https://soledade.city/@maria/ (perfil)
posts/meu-texto.md https://soledade.city/posts/meu-texto/
about.md https://soledade.city/about/
cidadania.md https://soledade.city/cidadania/

O slug na URL é o nome do arquivo sem .md. Publicar de novo no mesmo PATH substitui o arquivo.


Windows: instalando ncat

Opção A — Nmap

  1. Baixe e instale o Nmap pelo site oficial do Nmap.
  2. Durante a instalação, marque a opção que inclui o Ncat.
  3. Teste no PowerShell:
ncat --version

Opção B — WSL ou Git Bash

Se você já usa WSL (Windows Subsystem for Linux) ou prefere ambiente Unix, pode seguir a seção Linux abaixo dentro do WSL.


Linux: instalando ncat ou nc

Debian / Ubuntu

sudo apt update
sudo apt install ncat

Alternativa (pacote netcat tradicional):

sudo apt install netcat-openbsd

Fedora

sudo dnf install nmap-ncat

Arch Linux

sudo pacman -S nmap

Testar:

ncat --version

ou:

nc -h

Criando seu texto

Salve um arquivo .md, por exemplo meu-primeiro-texto.md:

---
title: "Meu primeiro texto"
citizen: "maria"
district: "geral"
tags: ["primeiro-texto", "soledade"]
status: "published"
description: "Meu primeiro texto na cidade de Soledade."
---

# Meu primeiro texto

Esta é minha primeira publicação na cidade textual de Soledade.

Campos do front matter

Campo Significado
title Título do texto na cidade
citizen Opcional se o PATH for citizens/seu_handle/posts/...
district Bairro — padrão geral se omitido
tags Etiquetas — aparecem em /tags/
status published (público) ou draft (rascunho, invisível nos índices)
description Resumo curto para listagens e feeds

Textos com status: draft não aparecem na Praça, bairros, arquivo, RSS nem sitemap.


Publicando no Windows com PowerShell

Guarde a identidade em %USERPROFILE%\.soledade-identidade (uma linha, sem espaços extras).

$HostSoledade = "soledade.city"
$PortaSoledade = 1915
$Cidadao = "maria"
$Identidade = Get-Content "$env:USERPROFILE\.soledade-identidade" -Raw
$Identidade = $Identidade.Trim()

$Markdown = Get-Content ".\meu-primeiro-texto.md" -Raw

$Payload = @"
SOLED/2
CITIZEN $Cidadao
IDENTITY $Identidade
PATH citizens/$Cidadao/posts/meu-primeiro-texto.md

$Markdown
.
"@

$Payload | ncat $HostSoledade $PortaSoledade
200 published

O servidor também dispara um rebuild do site; em produção, o texto aparecerá em /@maria/meu-primeiro-texto/.


Publicando no Linux ou macOS com bash

HOST="soledade.city"
PORTA="1915"
CIDADAO="maria"
IDENTIDADE="$(cat ~/.soledade-identidade | tr -d '\r\n')"
ARQUIVO="meu-primeiro-texto.md"
DESTINO="citizens/$CIDADAO/posts/meu-primeiro-texto.md"

{
  echo "SOLED/2"
  echo "CITIZEN $CIDADAO"
  echo "IDENTITY $IDENTIDADE"
  echo "PATH $DESTINO"
  echo
  cat "$ARQUIVO"
  echo "."
} | ncat "$HOST" "$PORTA"

Alternativa com nc:

{
  echo "SOLED/2"
  echo "CITIZEN $CIDADAO"
  echo "IDENTITY $IDENTIDADE"
  echo "PATH $DESTINO"
  echo
  cat "$ARQUIVO"
  echo "."
} | nc "$HOST" "$PORTA"

Editando um texto

Publicar de novo no mesmo PATH substitui o arquivo anterior.

Exemplo:

PATH citizens/maria/posts/meu-primeiro-texto.md

Gera a URL:

/@maria/meu-primeiro-texto/

Use o mesmo fluxo PowerShell ou bash, alterando apenas o conteúdo do Markdown.


Apagando um texto

O corpo da mensagem deve ser apenas:

DELETE

Windows (PowerShell)

$HostSoledade = "soledade.city"
$PortaSoledade = 1915
$Cidadao = "maria"
$Identidade = Get-Content "$env:USERPROFILE\.soledade-identidade" -Raw
$Identidade = $Identidade.Trim()

$Payload = @"
SOLED/2
CITIZEN $Cidadao
IDENTITY $Identidade
PATH citizens/$Cidadao/posts/meu-primeiro-texto.md

DELETE
.
"@

$Payload | ncat $HostSoledade $PortaSoledade

Linux (bash)

HOST="soledade.city"
PORTA="1915"
CIDADAO="maria"
IDENTIDADE="$(cat ~/.soledade-identidade | tr -d '\r\n')"
DESTINO="citizens/$CIDADAO/posts/meu-primeiro-texto.md"

{
  echo "SOLED/2"
  echo "CITIZEN $CIDADAO"
  echo "IDENTITY $IDENTIDADE"
  echo "PATH $DESTINO"
  echo
  echo "DELETE"
  echo "."
} | ncat "$HOST" "$PORTA"

Em sucesso, a resposta também é 200 published (comportamento atual do servidor).


Erros comuns

401 invalid identity

Identidade errada, arquivo .soledade-identidade com espaço ou quebra de linha extra, documento trocado ou identidade revogada pelo Prefeito. Confira se você não está usando o protocolo legado por engano — cidadãos usam SOLED/2 com IDENTITY, não token de uma linha após o PATH.

401 invalid token

Resposta do protocolo legado (Prefeito): token em ~/.soledade-token incorreto, ausente ou com espaço/quebra extra. Cidadãos com SOLED/2 recebem 401 invalid identity, não esta mensagem.

403 forbidden

Tentativa de publicar fora da própria casa (citizens/outro/...), cidadão inativo ou banido, ou bairro sem permissão para seu perfil.

400 bad path

Caminho inválido: path absoluto, .., extensão diferente de .md, ou tentativa de sair de content/.

400 missing citizen / 400 missing identity / 400 missing path

Cabeçalhos SOLED/2 incompletos — verifique as linhas CITIZEN, IDENTITY e PATH.

413 payload too large

Texto maior que o limite do servidor (padrão: 128 KiB).

404 not found

Ao apagar (DELETE), o arquivo não existia no PATH indicado.

429 rate limited

Muitas tentativas de registro ou publicação do mesmo IP em pouco tempo. Aguarde e tente de novo.

Sem resposta ou timeout

Porta 1915 inacessível na sua rede ou firewall do servidor. Veja testar conectividade.


Protocolo do Prefeito {#protocolo-do-prefeito} (token legado)

Cidadãos comuns podem ignorar esta seção. Use apenas SOLED/2 e ~/.soledade-identidade.

O Prefeito pode publicar com o protocolo antigo (sem cabeçalhos SOLED/2), usando um token de 64 caracteres hex guardado localmente em:

~/.soledade-token          # Linux / macOS
%USERPROFILE%\.soledade-token   # Windows

O token é obtido pelo administrador da cidade (não aparece ao conectar na 1915 sem pacote). Não commite esse arquivo no Git.

Formato do pacote (legado)

<caminho-relativo-a-content>
<token-uma-linha>
<conteúdo completo do .md>
.

Exemplo PowerShell (Prefeito):

$ncat = "C:\Program Files (x86)\Nmap\ncat.exe"
$remotePath = "citizens/pablo/posts/meu-texto.md"
$token = (Get-Content "$env:USERPROFILE\.soledade-token" -Raw).Trim()
$body = Get-Content ".\meu-texto.md" -Raw
$payload = $remotePath + "`n" + $token + "`n" + $body + "`n.`n"
$payload | & $ncat soledade.city 1915

Resposta esperada: 200 published. Token inválido: 401 invalid token. Se o token do servidor não estiver configurado: 500 mayor not configured.

O Prefeito também pode usar SOLED/2 com identidade cidadã, como qualquer outro handle.


Guia ncat · Identidade cidadã · Regras da cidade · Ajuda