Files
fn_registry/functions/infra/synapse_msc3861_enable.md
egutierrez daef7ea190 feat(matrix): MAS migration helpers + 2 flows + 15 issues + capability group
Helper functions (matrix-mas capability group):
- mas_client_register_bash_infra: register/sync OAuth clients via mas-cli
- mas_syn2mas_migration_bash_infra: dry-run + apply user migration to MAS
- synapse_msc3861_enable_go_infra: edit homeserver.yaml MSC3861 block (with diff)
- wellknown_oidc_patch_go_infra: patch well-known JSON with msc2965.authentication
- synapse_login_flows_check_go_infra: health-check post-migration login flows

Flows + issues for custom Matrix clients (PC + Android):
- 0010 matrix-client-pc: Wails + React+Mantine (issues 0147-0153)
- 0011 matrix-client-android: Kotlin + Compose (issues 0154-0161)
- 0162 enable MAS as auth provider (Synapse delegate) — EXECUTED on VPS
- 0163 custom admin panel propio (sustituye synapse-admin)

Production state (organic-machine.com):
- Synapse migrated SQLite -> Postgres
- MSC3861 active, password_config disabled
- 21 users + 41 access_tokens migrated via syn2mas
- 4 MAS clients registered (element, matrix_pc, matrix_android, admin_panel)
- synapse-admin container removed + Coolify route deleted
- well-known patched with org.matrix.msc2965.authentication

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 22:53:33 +02:00

3.8 KiB

name, kind, lang, domain, version, purity, signature, description, tags, params, output, uses_functions, uses_types, returns, returns_optional, error_type, imports, tested, tests, test_file_path, file_path
name kind lang domain version purity signature description tags params output uses_functions uses_types returns returns_optional error_type imports tested tests test_file_path file_path
synapse_msc3861_enable function go infra 0.1.0 impure func SynapseMsc3861Enable(cfg SynapseMsc3861Config) (SynapseMsc3861Result, error) Edita homeserver.yaml de Synapse activando el bloque matrix_authentication_service (MSC3861/MAS), asegura experimental_features.msc3861.enabled=true y password_config.enabled=false. Preserva comentarios con yaml.v3 Node API. Hace backup automático previo y devuelve diff unified.
matrix
mas
synapse
msc3861
migration
mas-migration
infra
yaml
matrix-mas
name desc
HomeserverYamlPath Ruta absoluta al homeserver.yaml en disco local (normalmente copiado del VPS con scp antes de llamar esta función)
name desc
MasEndpoint URL interna del servicio MAS (ej. http://mas:8080/). Debe empezar con http:// o https://
name desc
MasSecret Shared secret hex de exactamente 64 caracteres (32 bytes) que debe coincidir con mas/config.yaml::matrix.secret
name desc
BackupDir Directorio donde guardar el backup del archivo original (se crea con mkdir -p si no existe). Ej: /tmp/synapse_backups
name desc
DryRun Si true, sólo computa el diff sin escribir archivos ni crear backup
SynapseMsc3861Result con BackupPath (vacío si DryRun), LinesAdded, LinesRemoved y Diff (unified diff string)
error_go_core
false error_go_core
gopkg.in/yaml.v3
true
commented mas block becomes active
already active mas block gets updated values
no mas block inserts block at end
dry run does not write file
functions/infra/synapse_msc3861_enable_test.go functions/infra/synapse_msc3861_enable.go

Ejemplo

cfg := SynapseMsc3861Config{
    HomeserverYamlPath: "/tmp/synapse_data/homeserver.yaml",
    MasEndpoint:        "http://mas:8080/",
    MasSecret:          "5506f8b2f3fbb50413244e7197599e26477b179ec4917787f352d090fb7c7eb2",
    BackupDir:          "/tmp/synapse_backups",
    DryRun:             true,
}
res, err := SynapseMsc3861Enable(cfg)
if err != nil {
    log.Fatal(err)
}
fmt.Printf("Diff:\n%s\n", res.Diff)
fmt.Printf("Lines added: %d, removed: %d\n", res.LinesAdded, res.LinesRemoved)

// Para aplicar los cambios: DryRun: false
// res.BackupPath contiene la ruta del backup creado.

Cuando usarla

Paso 3 de la migración 0162 (Synapse → MAS auth provider): después de copiar homeserver.yaml del VPS a disco local con scp, antes de copiarlo de vuelta con scp y hacer systemctl restart matrix-synapse. Usar DryRun: true primero para revisar el diff antes de escribir.

Gotchas

  • yaml.v3 Node API obligatorio: el YAML de Synapse contiene comentarios críticos de configuración. Usar yaml.Unmarshal plano los elimina. Esta función usa la API de nodos para la sección experimental_features y edición line-level para los bloques matrix_authentication_service y password_config.
  • MasSecret debe ser exacto: debe coincidir byte a byte con mas/config.yaml::matrix.secret. Un carácter diferente hace que Synapse rechace todas las peticiones MAS con 401.
  • Nunca editar in-place en el VPS activo: editar el archivo mientras Synapse lo lee puede producir YAML corrupto en memoria. El flujo correcto es: scp vps:/etc/matrix-synapse/homeserver.yaml /tmp/SynapseMsc3861Enable(DryRun: false)scp /tmp/homeserver.yaml vps:/etc/matrix-synapse/systemctl restart matrix-synapse.
  • MasSecret formato: exactamente 64 caracteres hexadecimales en minúsculas (32 bytes). La validación rechaza mayúsculas y longitudes incorrectas.
  • Idempotencia: aplicar la función dos veces sobre el mismo archivo produce el mismo resultado final (el segundo pase actualiza valores ya existentes).