# yasuc

yet another [sprunge.us](http://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

```bash
# Compilar
go build -o yasuc .

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

### Docker

```bash
# 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 -e YASUC_ADMIN_PASSWORD=minhasenha yasuc
```

## Uso do Cliente

```bash
# 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
```

## Interface de Administração

O YASUC inclui uma interface web de administração para gerenciar pastes.

### Acesso à Administração

- **URL**: `http://localhost:8080/admin/login`
- **Senha**: Definida pela variável de ambiente `YASUC_ADMIN_PASSWORD`
- **Padrão**: `admin123` (se não definida)

### Funcionalidades

- **Listagem de Pastes**: Visualizar todos os pastes criados
- **Estatísticas**: Total de pastes e tamanho em bytes
- **Visualização**: Links diretos para cada paste
- **Remoção**: Botão para deletar pastes individualmente
- **Autenticação**: Protegido por senha com sessão de 1 hora

### Configuração da Senha

#### Docker Compose
```yaml
environment:
  - YASUC_ADMIN_PASSWORD=minhasenha123
```

#### Execução Local
```bash
YASUC_ADMIN_PASSWORD=minhasenha123 ./yasuc -db data/yasuc.sqlite3 -port 8080
```

## 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](MIGRATION.md)

## Estrutura do Banco

```sql
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

```sql
-- 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.
