Skip to content

Qmaker-programmer/Nsly

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🛡️ NSLY VAULT — Gestor de Contraseñas TUI

Un gestor de contraseñas minimalista, seguro y FACHERO que vive en tu terminal 🖥️
Porque guardar contraseñas en un post-it es 2023, amigo.


🚀 Instalación rápida

Prerequisitos

  • Go 1.21+ (si no lo tienes, instálalo aquí)
  • Un terminal que no sea de hace 15 años

Setup en 3 pasos

# 1️⃣ Clona y entra al directorio
git clone https://github.com/Qmaker-programmer/Nsly.git
cd Nsly

# 2️⃣ Descarga las dependencias (go hace todo)
go mod tidy

# 3️⃣ ¡Ejecútalo ya!
go run src/main.go

O compila un binario permanente (Asegurate de haber hecho el paso 1 y 2)

# Linux / macOS
go build -o bin/nsly src/main.go
./bin/nsly

# Windows (obviamente .exe)
go build -o bin/nsly.exe src/main.go
bin\\nsly.exe

# O usa el Makefile (si tienes make)
make run      # ejecución directa
make build    # compilar binario
make clean    # borrar lo compilado

🔐 Seguridad — Tómatelo en serio

Capa Tecnología Para qué Nivel 💪
Autenticación bcrypt cost=14 Verificar contraseña maestra (~1s) 🟢 Fuerte
Cifrado datos AES-256-GCM Cifrar cada contraseña guardada 🟢 Militar
Derivación de clave scrypt (N=32768) Generar clave AES desde tu master pass 🟢 Anti-brute-force
Permisos archivos 0700 dir / 0600 archivos Solo TÚ puedes leer tus secretos 🟢 Linux/Unix

Dónde se guardan tus secretos

Todos los archivos viven en ~/.nsly_vault/:

  • master.hash — Hash bcrypt de tu contraseña maestra (NUNCA se guarda en claro)
  • vault.enc — Todas tus contraseñas cifradas con AES-256-GCM (blob opaco)
  • vault.meta — Metadatos de la bóveda (salt para scrypt)
  • sync.json — Config de sincronización en la nube (sin datos sensibles)

¿Y en la nube?

Cuando sincronizas (☁️ Sync), tu bóveda viaja COMPLETAMENTE CIFRADA. El servidor solo ve:

[BLOB OPACO INCOMPRENSIBLE PARA HUMANOS Y MÁQUINAS]

Incluso si alguien hackea tu servidor, solo obtiene basura cifrada. 🎯

⌨️ Atajos de teclado

🌍 Global

Tecla Acción
Ctrl+C Salir de emergencia (⚠️ sincroniza antes)
Esc Volver / Bloquear bóveda

📋 Lista de contraseñas

Tecla Acción
↑/↓ k/j Navegar (elegimos dos porque somos geniales 😎)
Enter Ver detalle completo
C Copiar contraseña al clipboard
D Eliminar entrada (te pide confirmación)

🔎 Detalle de contraseña

Tecla Acción
S Mostrar/ocultar contraseña (discreto)
C Copiar al clipboard
T Copiar código TOTP (si tiene 2FA)
D Eliminar entrada

➕ Añadir contraseña

Tecla Acción
Ctrl+G Generar contraseña aleatoria (en el campo de contraseña)
Enter Avanzar al siguiente campo
Esc Cancelar y volver

🎲 Generador de contraseñas

Tecla Acción
←/→ Cambiar longitud
↑/↓ Navegar opciones
Space Toggle: activar/desactivar conjunto de caracteres
C Copiar al clipboard
Enter Usar esta contraseña → crear entrada

🔍 Búsqueda

Tecla Acción
Escribe Filtrar en tiempo real (servicio, usuario, URL)
Enter Ver detalle de resultado seleccionado
↑/↓ Navegar resultados
Esc Volver

📦 Dependencias

github.com/atotto/clipboard      v0.1.4   → Copiar al portapapeles sin lágrimas
github.com/charmbracelet/bubbles v0.18.0  → Componentes TUI (textinput, etc)
github.com/charmbracelet/bubbletea v0.25.0 → Framework TUI (el cerebro)
github.com/charmbracelet/lipgloss v0.10.0  → Estilos para terminal (lo bonito)
github.com/pquerna/otp           v1.4.0   → Generación de códigos TOTP 2FA
golang.org/x/crypto/bcrypt       (Go std) → Hashing seguro de contraseñas
golang.org/x/crypto              v0.18.0  → AES-256-GCM, scrypt, utils

🎯 Características principales

✅ Lo que YA funciona

✓ Cifrado AES-256-GCM — Tus contraseñas viajan blindadas ✓ Generador de contraseñas seguras — Random de verdad (no ChatGPT) ✓ Búsqueda en tiempo real — Encuentra esa contraseña que no recuerdas ✓ Copiar al clipboard — No dejas rastro en el historial ✓ Exportar JSON — Para migrar o hacer backup (¡cuidado!) ✓ Medidor de fortaleza — Te dice si tu contraseña es patética ✓ Confirmación antes de eliminar — Porque los accidentes suceden ✓ TOTP / 2FA — Códigos de 6 dígitos para Google, GitHub, etc ✓ Sincronización en la nube — Sube/descarga tu bóveda cifrada ✓ Importar de otros gestores — Bitwarden, KeePass, formatos NSLY

🚀 En el roadmap (coming soon™)

  • Soporte múltiples identidades — Varias "cajas fuertes"
  • Historial de cambios — Saber quién modificó qué y cuándo
  • Autolock temporal — Bloquea automáticamente tras 5 min inactivo
  • WebDAV / Nextcloud — Sincroniza con tu nube personal
  • Biometría — Huella dactilar en lugar de contraseña maestra
  • Compartir contraseña de forma segura — (cryptografía asimétrica needed)

📤 Exportar tu bóveda

Menú → "📤 Exportar bóveda" → ✅
Se creará un archivo nsly_export_YYYYMMDD_HHMMSS.json en tu $HOME con:

✓ Todas las contraseñas en texto plano
✓ Usuarios, URLs, notas
✓ Códigos TOTP (si tienes)

⚠️ ADVERTENCIA IMPORTANTE:

Este archivo es SENSIBLE. Guárdalo en un lugar seguro. Bórralo después de importarlo a otro gestor. No lo dejes en el escritorio ni lo subes a GitHub (please).

📥 Importar desde otros gestores

Desde Bitwarden

Bitwarden → Ajustes → Exportar bóveda → JSON
Luego en NSLY:

📥 Importar → Bitwarden → [selecciona el JSON]

Desde KeePass

KeePass → Archivo → Exportar → CSV (con encabezados)
Luego en NSLY:

📥 Importar → KeePass → [selecciona el CSV]

Desde NSLY anterior

📥 Importar → NSLY → [selecciona el export JSON]

☁️ Sincronización con la nube

Setup inicial

Configura tu servidor

Menú → ☁️ Sync → ⚙️ Configurar
Proporciona:

URL: https://tu-servidor.com/vault
Token: Tu bearer token de autenticación
NSLY guardará los datos de sync (sin información sensible)

Operaciones

Subir a la nube
Menú → ☁️ Sync → ⬆️ Subir
Tu bóveda cifrada se sube al servidor.

Descargar desde la nube
Menú → ☁️ Sync → ⬇️ Descargar
Tu bóveda local se reemplaza con la del servidor.

¿Cómo implemento el servidor? El servidor espera:

PUT {URL} con Authorization: Bearer {token} → guarda el blob GET {URL} con Authorization: Bearer {token} → devuelve el blob

Ejemplo mínimo en Node.js:

const express = require('express');
const app = express();

let vault = null;

app.put('/vault', (req, res) => {
  const token = req.headers.authorization?.replace('Bearer ', '');
  if (token !== process.env.VAULT_TOKEN) return res.status(401).send('Unauthorized');
  
  let data = Buffer.alloc(0);
  req.on('data', chunk => { data = Buffer.concat([data, chunk]); });
  req.on('end', () => {
    vault = data;
    res.send('OK');
  });
});

app.get('/vault', (req, res) => {
  const token = req.headers.authorization?.replace('Bearer ', '');
  if (token !== process.env.VAULT_TOKEN) return res.status(401).send('Unauthorized');
  if (!vault) return res.status(404).send('Not found');
  res.send(vault);
});

app.listen(3000, () => console.log('NSLY Sync server ready 🚀'));

🛠️ Compilación y desarrollo

Estructura del proyecto

Nsly/
├── README.md              ← Estás aquí 👋
├── go.mod                 ← Dependencias
├── go.sum                 ← Lockfile de dependencias
├── Makefile               ← Comandos útiles
├── LICENSE                ← GPL v2
└── src/
    └── main.go            ← TODO el código (sí, en un archivo 😅)

Compilar para diferentes plataformas

# Linux 64-bit
GOOS=linux GOARCH=amd64 go build -o bin/nsly src/main.go

# macOS Intel
GOOS=darwin GOARCH=amd64 go build -o bin/nsly-darwin-amd64 src/main.go

# macOS Apple Silicon
GOOS=darwin GOARCH=arm64 go build -o bin/nsly-darwin-arm64 src/main.go

# Windows
GOOS=windows GOARCH=amd64 go build -o bin/nsly.exe src/main.go

Desarrollo

# Ejecutar directamente
make run

# Compilar y colocar en bin/
make build

# Limpiar binarios
make clean

# Verificar código
go fmt ./...
go vet ./...

🐛 Troubleshooting

"Error: go: no Go files in /current/directory"

cd nsly
ls src/main.go  # debe existir
go run src/main.go

"Error: clipboard no disponible en este terminal"

Algunos terminales remotos (SSH, WSL sin soporte) no permiten acceso a clipboard.

Solución: Copia manual desde la pantalla

"Olvidé mi contraseña maestra 😭"

No hay recuperación. Es intencional.

Tu bóveda está cifrada. Si pierdes la clave, pierdes TODO. Escribe tu contraseña en un lugar seguro.

"¿Funciona en Windows?"

Sí, usa Windows Terminal (PowerShell). En cmd.exe los colores pueden verse raros.

"¿Y en macOS?"

Perfectamente. Go compila para cualquier cosa.

📊 Comparación con otros gestores

Feature NSLY Bitwarden KeePass 1Password
TUI Terminal ✅ 🎉
Local-first ❌ (cloud default)
Sincronización ✅ (DIY) ✅ (cloud) ✅ (cloud)
Precio 🆓 Gratis $10/año 🆓 Gratis $3.99/mes
2FA/TOTP
Open Source
Importar datos

🤝 Contribuciones

¿Encontraste un bug? ¿Quieres una feature?

Fork el repo Crea una rama: git checkout -b feature/mi-feature Haz tu magia ✨ Commit: git commit -m 'Add: mi-feature' Push: git push origin feature/mi-feature Abre un Pull Request 🎉

📜 Licencia

GNU General Public License v2 (GPL v2) — ¡Código libre para todos!

Esto significa:

✅ Puedes usar, copiar, modificar y distribuir NSLY libremente ✅ Cualquier software derivado DEBE ser también GPL v2 ✅ Acceso al código fuente garantizado ✅ Sin garantías (lo usas bajo tu responsabilidad) Lee LICENSE para detalles completos.

¡Viva el Software Libre! 🚩

🎪 Curiosidades

¿Por qué TUI? → Porque vivimos en la terminal y amamos eficiencia. ¿Por qué Go? → Binario único, sin dependencias, rápido. Zero drama. ¿Por qué scrypt + AES-256-GCM? → Porque la seguridad no es negociable. ¿Por qué GPL v2? → Porque el software es un bien común. 🚩 ¿Puedo usarlo en producción? → Sí, pero asume el riesgo (y lee el código).

🚀 ¡Empecemos!

git clone https://github.com/Qmaker-programmer/Nsly.git
cd Nsly
go run src/main.go

# Crea tu contraseña maestra 🔐
# Guarda tus secretos sin miedo 🛡️
# Duerme tranquilo 😴

Por Andres(Qmaker) (y mucho Tè) en la terminal.

About

Un gestor de contraseñas minimalista y seguro que vive en tu terminal.

Topics

Resources

License

Stars

Watchers

Forks

Contributors