2025-08-29 13:42:46 +02:00

yasuc

yet another sprunge.us clone

(command line pastebin)

Sobre

YASUC é um pastebin de linha de comando que armazena pastes usando SQLite3. Cada paste é identificado por um ID curto único de 7 caracteres, tornando as URLs mais amigáveis e fáceis de compartilhar.

Uso do Servidor

Execução Local

# Compilar
go build -o yasuc .

# Executar
./yasuc -db /path/to/yasuc.sqlite3 -port 8080 -addr 0.0.0.0

Docker

# Construir e executar com Docker Compose
docker-compose up --build

# Ou manualmente
docker build -t yasuc .
docker run -d -p 8080:8080 -v /path/to/data:/data yasuc

Uso do Cliente

# Enviar um paste
<command> | curl -F 'sprunge=<-' http://localhost:8080/

# Exemplo
echo 'hello world' | curl -F 'sprunge=<-' http://localhost:8080/
# Retorna: http://localhost:8080/Ly34kx3

# Acessar um paste
curl http://localhost:8080/Ly34kx3
# Retorna: hello world

Características dos IDs Curtos

  • 7 caracteres: Combinação de letras maiúsculas, minúsculas e números
  • Únicos: Cada paste tem um ID único
  • Detecção de duplicatas: Pastes idênticos recebem o mesmo ID
  • Amigáveis: URLs mais curtas e fáceis de compartilhar

Migração de BoltDB para SQLite3

Este projeto foi migrado de BoltDB para SQLite3. Para migrar dados existentes:

  1. Backup automático: Execute scripts/migrate.ps1 (Windows) ou scripts/migrate.sh (Linux/Mac)
  2. Migração manual: Use go run cmd/migrate/main.go -bolt data/yasuc.db -sqlite data/yasuc.sqlite3
  3. Ver detalhes: Consulte MIGRATION.md

Estrutura do Banco

CREATE TABLE pastes (
    short_id TEXT PRIMARY KEY,      -- ID curto único (7 caracteres)
    content TEXT NOT NULL,          -- Conteúdo do paste
    content_hash TEXT NOT NULL,     -- Hash SHA-256 para detecção de duplicatas
    created_at INTEGER NOT NULL     -- Timestamp de criação
);

Vantagens do SQLite3

  • Consultas SQL: Possibilidade de fazer consultas complexas
  • Ferramentas: Melhor suporte a ferramentas de administração
  • Backup: Arquivo único mais fácil de fazer backup
  • Compatibilidade: Mais amplamente suportado

Exemplos de Consultas

-- Contar total de pastes
SELECT COUNT(*) FROM pastes;

-- Pastes criados hoje
SELECT * FROM pastes WHERE date(created_at, 'unixepoch') = date('now');

-- Pastes maiores que 1KB
SELECT short_id, length(content) as size FROM pastes WHERE length(content) > 1024;

-- Encontrar duplicatas (mesmo conteúdo, IDs diferentes)
SELECT content_hash, COUNT(*) as count FROM pastes GROUP BY content_hash HAVING count > 1;

Copyright (c) Tom Jakubowski. License AGPLv3: Affero GPL Version 3. This is free software; you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. For copying conditions and source, see the LICENSE.txt file.

Description
No description provided
Readme 30 MiB
Languages
Go 63.2%
PowerShell 20.9%
Shell 14.8%
Dockerfile 1.1%