@dotrino/vault 0.40.0 → 0.41.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.
- package/package.json +2 -2
- package/src/index.js +12 -9
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dotrino/vault",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.41.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.
|
|
50
|
+
"@dotrino/identity": ">=0.66.0",
|
|
51
51
|
"@dotrino/proxy-client": ">=0.13.0"
|
|
52
52
|
},
|
|
53
53
|
"license": "MIT",
|
package/src/index.js
CHANGED
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
* No reimplementa nada del ecosistema.
|
|
27
27
|
*/
|
|
28
28
|
import { verifyChain, verifyDeviceSig } from '@dotrino/identity/capabilities'
|
|
29
|
-
import {
|
|
29
|
+
import { memberCanScope } from '@dotrino/identity/acta'
|
|
30
30
|
import { createEnrollDesk, deviceIdOf, DEVICE_TTL_MS, FRESH_WINDOW_MS } from './enroll.js'
|
|
31
31
|
// Las constantes del protocolo salen del MISMO módulo que usa el daemon: si la lista
|
|
32
32
|
// local se queda corta, el dispositivo deja de handle mensajes sin que nadie lo note.
|
|
@@ -195,6 +195,17 @@ export async function startDeviceVault (identity, { proxyUrl, client: injectedCl
|
|
|
195
195
|
send(from, { type: MSG.ERROR, error: 'unauthorized: ' + chk.reason })
|
|
196
196
|
return null
|
|
197
197
|
}
|
|
198
|
+
// EL ACTA MANDA, EL PAPEL SOLO ACOMPAÑA. Aquí y no en cada mostrador: el certificado
|
|
199
|
+
// dice a qué se comprometió esta bóveda al conectar el aparato, y el acta lo que puede
|
|
200
|
+
// HOY. Quitarle un permiso sella el acta pero no le retira el papel, que vive hasta 30
|
|
201
|
+
// días, así que sin esto seguiría entrando hasta que lo renovara.
|
|
202
|
+
if (expectedScope) {
|
|
203
|
+
const record = (await identity.profileActa?.().catch(() => null))?.acta || null
|
|
204
|
+
if (record && !memberCanScope(record, chk.device, expectedScope)) {
|
|
205
|
+
send(from, { type: MSG.ERROR, error: 'unauthorized: acta — this member no longer has that permission' })
|
|
206
|
+
return null
|
|
207
|
+
}
|
|
208
|
+
}
|
|
198
209
|
return chk
|
|
199
210
|
}
|
|
200
211
|
|
|
@@ -206,14 +217,6 @@ export async function startDeviceVault (identity, { proxyUrl, client: injectedCl
|
|
|
206
217
|
async function handleSign (from, p) {
|
|
207
218
|
const chk = await authorise(from, p, SCOPE.SIGN)
|
|
208
219
|
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
|
-
}
|
|
217
220
|
const toSign = p.data?.payload
|
|
218
221
|
if (toSign == null) return send(from, { type: MSG.ERROR, error: 'data.payload required' })
|
|
219
222
|
const { signature, publickey } = await identity.signData(toSign)
|