cryptgeon es un servicio seguro y de código abierto para compartir notas o archivos inspirado en PrivNote. Incluye un servidor, una página web y una interfaz de línea de comandos (CLI, por sus siglas en inglés).
🌍 Si quieres traducir este proyecto no dudes en ponerte en contacto conmigo.
Gracias a Lokalise por darnos acceso gratis a su plataforma.
Prueba la demo y experimenta por ti mismo cryptgeon.org
npx cryptgeon send text "Esto es una nota secreta"
Puedes revisar la documentación sobre el CLI en este readme.
- enviar texto o archivos
- el servidor no puede desencriptar el contenido debido a que la encriptación se hace del lado del cliente
- restriccion de vistas o de tiempo
- en memoria, sin persistencia
- compatibilidad obligatoria con el modo oscuro
Se genera una id (256bit)
y una llave 256(bit)
para cada nota. La
id
se usa para guardar y recuperar la nota. Después la nota es encriptada con la llave
y con aes en modo gcm del lado del cliente y por último se envía al servidor. La información es almacenada en memoria y nunca persiste en el disco. El servidor nunca ve la llave de encriptación por lo que no puede desencriptar el contenido de las notas aunque lo intentara.
Variable | Default | Descripción |
---|---|---|
REDIS |
redis://redis/ |
Redis URL a la que conectarse. Según el formato |
SIZE_LIMIT |
1 KiB |
Tamaño máximo. Valores aceptados según la unidad byte. 512 MiB es el máximo permitido. El frontend mostrará ese número, incluyendo el ~35% de sobrecarga de codificación. |
MAX_VIEWS |
100 |
Número máximo de vistas. |
MAX_EXPIRATION |
360 |
Tiempo máximo de expiración en minutos. |
ALLOW_ADVANCED |
true |
Permitir configuración personalizada. Si se establece en false todas las notas serán de una sola vista. |
ID_LENGTH |
32 |
Establece el tamaño en bytes de la id de la nota. Por defecto es de 32 bytes. Esto es util para reducir el tamaño del link. Esta configuración no afecta el nivel de encriptación. |
VERBOSITY |
warn |
Nivel de verbosidad del backend. Posibles valores: error , warn , info , debug , trace |
THEME_IMAGE |
"" |
Imagen personalizada para reemplazar el logo. Debe ser accesible públicamente. |
THEME_TEXT |
"" |
Texto personalizado para reemplazar la descripción bajo el logo. |
THEME_PAGE_TITLE |
"" |
Texto personalizado para el título |
THEME_FAVICON |
"" |
Url personalizada para el favicon. Debe ser accesible públicamente. |
ℹ️ Se requiere
https
de lo contrario el navegador no soportará las funciones de encriptacón.
ℹ️ Hay un endpoint para verificar el estado, lo encontramos en
/api/health/
. Regresa un código 200 o 503.
Docker es la manera más fácil. Aquí encontramos la imágen oficial.
# docker-compose.yml
version: '3.8'
services:
redis:
image: redis:7-alpine
# Set a size limit. See link below on how to customise.
# https://redis.io/docs/manual/eviction/
# command: redis-server --maxmemory 1gb --maxmemory-policy allkeys-lru
app:
image: cupcakearmy/cryptgeon:latest
depends_on:
- redis
environment:
# Size limit for a single note.
SIZE_LIMIT: 4 MiB
ports:
- 80:8000
# Optional health checks
# healthcheck:
# test: ["CMD", "curl", "--fail", "http://127.0.0.1:8000/api/live/"]
# interval: 1m
# timeout: 3s
# retries: 2
# start_period: 5s
Ver la carpeta de ejemplo/nginx. Hay un ejemplo con un proxy simple y otro con https. Es necesario que especifiques el nombre del servidor y los certificados.
Ver la carpeta de ejemplo/traefik.
Ver la carpeta de ejemplo/scratch. Ahí encontrarás una guía de cómo configurar el servidor e instalar cryptgeon desde cero.
Hay una guía (en inglés) que puedes seguir.
- En inglés, por Webnestify
- En inglés, por DB Tech Previous Video
- En alemán, por ApfelCast
Requisitos
pnpm
:>=6
node
:>=18
rust
: edition2021
Instalación
pnpm install
# También necesitas cargo-watch, si no lo tienes instalado.
# https://lib.rs/crates/cargo-watch
cargo install cargo-watch
Ejecutar
Asegurate de que docker se esté ejecutando.
pnpm run dev
Ejecutando pnpm run dev
en la carpeta raíz iniciará lo siguiente:
- redis docker container
- rust backend
- client
- cli
Puedes ver la app en localhost:1234.
Existe una colección de Postman con algunas peticiones de ejemplo disponible en el repo
Los tests son end-to-end tests escritos con Playwright.
pnpm run test:prepare
# Usa el script test o test:local. La versión local solo corre en el navegador para acelerar el desarrollo.
pnpm run test:local
Por favor dirigite a la sección de seguridad aquí.
Atribuciones
- Datos del Test:
- Texto para los tests Nietzsche Ipsum
- AES Paper
- Unsplash Imágenes
- Animación de carga por Nikhil Krishnan
- Iconos hechos por freepik de www.flaticon.com