@dotrino/vault 0.39.0 → 0.40.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/package.json +2 -2
  2. package/src/index.js +9 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dotrino/vault",
3
- "version": "0.39.0",
3
+ "version": "0.40.0",
4
4
  "description": "Usa ESTE dispositivo (navegador) como bóveda/CA del ecosistema Dotrino: atiende enrolamientos por el proxy y firma certificados de delegación a tus máquinas. Incluye el cliente de SERVICIO (Node): un proyecto se enrola una vez y jala sus credenciales del vault en vez del .env (`import '@dotrino/vault/config'`).",
5
5
  "type": "module",
6
6
  "main": "src/index.js",
@@ -47,7 +47,7 @@
47
47
  "pairing"
48
48
  ],
49
49
  "peerDependencies": {
50
- "@dotrino/identity": ">=0.64.0",
50
+ "@dotrino/identity": ">=0.65.0",
51
51
  "@dotrino/proxy-client": ">=0.13.0"
52
52
  },
53
53
  "license": "MIT",
package/src/index.js CHANGED
@@ -26,6 +26,7 @@
26
26
  * No reimplementa nada del ecosistema.
27
27
  */
28
28
  import { verifyChain, verifyDeviceSig } from '@dotrino/identity/capabilities'
29
+ import { memberCanSign } from '@dotrino/identity/acta'
29
30
  import { createEnrollDesk, deviceIdOf, DEVICE_TTL_MS, FRESH_WINDOW_MS } from './enroll.js'
30
31
  // Las constantes del protocolo salen del MISMO módulo que usa el daemon: si la lista
31
32
  // local se queda corta, el dispositivo deja de handle mensajes sin que nadie lo note.
@@ -205,6 +206,14 @@ export async function startDeviceVault (identity, { proxyUrl, client: injectedCl
205
206
  async function handleSign (from, p) {
206
207
  const chk = await authorise(from, p, SCOPE.SIGN)
207
208
  if (!chk) return
209
+ // MANDA EL ACTA, NO EL PAPEL. `authorise` mira el certificado, y quitarle `firma` a un
210
+ // aparato NO reemite ni revoca su cert: seguiría diciendo `vault:sign` hasta 30 días.
211
+ // Sin esto, retirarle el permiso lo cambiaba de firmar él a que firmara la bóveda por
212
+ // él — o sea, no se lo retiraba. Mismo arreglo que en el daemon (`src/vault.js`).
213
+ const record = (await identity.profileActa?.().catch(() => null))?.acta || null
214
+ if (record && !memberCanSign(record, chk.device)) {
215
+ return send(from, { type: MSG.ERROR, error: 'unauthorized: acta — this member does not sign' })
216
+ }
208
217
  const toSign = p.data?.payload
209
218
  if (toSign == null) return send(from, { type: MSG.ERROR, error: 'data.payload required' })
210
219
  const { signature, publickey } = await identity.signData(toSign)