- adminAuth: exige Authorization: Bearer <HARDCAP_ADMIN_TOKEN> (o X-Admin-Token). Comparación timingSafeEqual sobre sha256 de ambos valores (sin leak de longitud ni timing). Fail-closed: sin token configurado, TODAS las rutas admin responden 503. - 401s ahora se loguean con método, ruta e IP (primera trazabilidad de acceso que tiene el admin API desde que existe). - token generado (32 bytes hex) y almacenado SOLO en /srv/hardcap-backend/.env — nunca impreso ni versionado. - test-admin-auth.mjs: 6 tests (sin token, incorrecto, vacío, correcto, header alternativo, misma-longitud-distinto) — todos pasan en la VPS. - desplegado en src + dist; servicio reiniciado y activo. Nota de contexto: el admin API carecía de auth desde su creación (index.ts: \x27TODO: add auth middleware before production\x27) y estuvo alcanzable sin credenciales en :3001 hasta la contención de hoy.
33 lines
2.0 KiB
Bash
Executable File
33 lines
2.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# deploy.sh — instala el runtime contenido en sus rutas live y reinicia el daemon.
|
|
# Fuente versionada: este directorio (cayce-ops/runtime). Reversible con
|
|
# CAYCE_PUBLISH_MODE=live en el .env de cada servicio.
|
|
set -euo pipefail
|
|
SRC="$(cd "$(dirname "$0")" && pwd)"
|
|
|
|
install -m 644 "$SRC/outbox.mjs" /srv/cayce-core/outbox.mjs
|
|
install -m 644 "$SRC/core.mjs" /srv/cayce-core/core.mjs
|
|
install -m 644 "$SRC/editorials.mjs" /srv/cayce-core/editorials.mjs
|
|
install -m 644 "$SRC/initiative.mjs" /srv/cayce-core/initiative.mjs
|
|
install -m 644 "$SRC/outbox.mjs" /srv/cayce-nostr/outbox.mjs
|
|
install -m 644 "$SRC/daemon.mjs" /srv/cayce-nostr/daemon.mjs
|
|
# opcionales (llegan con el PR de verificación/10050)
|
|
install -m 755 "$SRC/publish-10050.mjs" /srv/cayce-nostr/publish-10050.mjs 2>/dev/null || true
|
|
install -m 644 "$SRC/check-relay-silence.mjs" /srv/cayce-nostr/check-relay-silence.mjs 2>/dev/null || true
|
|
install -m 644 "$SRC/outbox.mjs" /home/ubuntu/cayce-social/outbox.mjs
|
|
install -m 644 "$SRC/promo.mjs" /home/ubuntu/cayce-social/promo.mjs
|
|
install -m 644 "$SRC/outbox.mjs" /home/ubuntu/cayce-mail/outbox.mjs
|
|
install -m 644 "$SRC/mail.mjs" /home/ubuntu/cayce-mail/mail.mjs
|
|
|
|
# config de contención (idempotente): draft por defecto + ruta de identidad
|
|
for ENVF in /srv/cayce-core/.env /srv/cayce-nostr/.env /home/ubuntu/cayce-social/.env /home/ubuntu/cayce-mail/.env; do
|
|
grep -q "^CAYCE_PUBLISH_MODE=" "$ENVF" 2>/dev/null || echo "CAYCE_PUBLISH_MODE=draft" >> "$ENVF"
|
|
grep -q "^IDENTITY_PATH=" "$ENVF" 2>/dev/null || echo "IDENTITY_PATH=/home/ubuntu/cayce-ops/prompts/cayce-identity.md" >> "$ENVF"
|
|
done
|
|
|
|
sudo install -m 644 '$SRC/hardcap/admin.ts' /srv/hardcap-backend/src/routes/admin.ts 2>/dev/null || true
|
|
install -m 755 '$SRC/hardcap/test-admin-auth.mjs' /srv/hardcap-backend/runtime-tests/test-admin-auth.mjs 2>/dev/null || true
|
|
sudo systemctl restart hardcap-backend
|
|
sudo systemctl restart cayce-nostr
|
|
echo "deploy OK — mode=$(grep -h "^CAYCE_PUBLISH_MODE=" /srv/cayce-core/.env | head -1)"
|