18c4b0613f35430749f12b619d5423c6b553295a
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:
- Backup automático: Execute
scripts/migrate.ps1(Windows) ouscripts/migrate.sh(Linux/Mac) - Migração manual: Use
go run cmd/migrate/main.go -bolt data/yasuc.db -sqlite data/yasuc.sqlite3 - 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
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
Languages
Go
63.2%
PowerShell
20.9%
Shell
14.8%
Dockerfile
1.1%