@dotrino/vaultd 0.7.8 → 0.7.9
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/bin/dotrino-vaultd.js +5 -3
- package/package.json +1 -1
- package/src/ctl.js +1 -1
- package/src/tui/app.js +1 -1
- package/src/vaultControl.js +6 -2
package/bin/dotrino-vaultd.js
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
*/
|
|
15
15
|
import { runDaemon } from '../src/daemon.js'
|
|
16
16
|
import { qrToString } from '../src/qr.js'
|
|
17
|
-
import { daemonAlive } from '../src/vaultControl.js'
|
|
17
|
+
import { daemonAlive, pairUrl } from '../src/vaultControl.js'
|
|
18
18
|
|
|
19
19
|
// `--tui` con una bóveda YA CORRIENDO en otra ventana: se engancha a ella y abre solo la
|
|
20
20
|
// interfaz. Antes intentaba levantar una segunda bóveda sobre los mismos datos, chocaba
|
|
@@ -37,9 +37,11 @@ const mgr = await runDaemon()
|
|
|
37
37
|
// Empareja contra el perfil ACTIVO.
|
|
38
38
|
if (process.argv.includes('--pair')) {
|
|
39
39
|
const { qr, expiresInMs } = mgr.current().startPairing({ label: 'cli' })
|
|
40
|
+
const { url, b64 } = pairUrl(qr)
|
|
40
41
|
console.log(`\nEmparejá un dispositivo (válido ${expiresInMs / 60000} min):\n`)
|
|
41
|
-
console.log(qrToString(
|
|
42
|
-
console.log(
|
|
42
|
+
console.log(qrToString(url, 2))
|
|
43
|
+
console.log(url)
|
|
44
|
+
console.log('\nO pegá este código:\n ' + b64)
|
|
43
45
|
}
|
|
44
46
|
|
|
45
47
|
// --tui: la bóveda Y su interfaz en la MISMA ventana. Donde no queda como servicio
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dotrino/vaultd",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.9",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Certificador personal de Dotrino: daemon headless que custodia la clave maestra y delega capacidades a tus dispositivos por el proxy. Tu CA propia.",
|
|
6
6
|
"bin": {
|
package/src/ctl.js
CHANGED
|
@@ -186,7 +186,7 @@ async function cmdPair (args = []) {
|
|
|
186
186
|
const acct = pair.profileName || pair.profile
|
|
187
187
|
if (acct) console.log('\nCuenta que se comparte: %s%s', acct, pair.profileName && pair.profile ? ` (${pair.profile})` : '')
|
|
188
188
|
console.log('\nEscanea este QR con el dispositivo que quieres conectar (válido %d min):\n', mins)
|
|
189
|
-
console.log(qrToString(
|
|
189
|
+
console.log(qrToString(url, 2)) // QR con URL+JSON crudo (menos datos) y zona de silencio reducida
|
|
190
190
|
console.log(`${R}${B}⚠ Este código deja LEER tus datos y FIRMAR con tu identidad.${Z}`)
|
|
191
191
|
console.log(`${R} NO lo compartas con nadie, ni con "soporte". Solo escanéalo en TU dispositivo.${Z}`)
|
|
192
192
|
console.log('\nO abre esta dirección en el dispositivo:\n ' + url)
|
package/src/tui/app.js
CHANGED
|
@@ -701,7 +701,7 @@ function pairingBody (st, t, cols, height) {
|
|
|
701
701
|
// QR: se dibuja siempre que quepa de ancho; si es más alto que la pantalla se
|
|
702
702
|
// puede hacer scroll hacia arriba/abajo para verlo completo.
|
|
703
703
|
let qr = ''
|
|
704
|
-
try { qr = qrToString(info.
|
|
704
|
+
try { qr = qrToString(info.url, 2) } catch (_) {}
|
|
705
705
|
const qrLines = qr ? qr.replace(/\n$/, '').split('\n') : []
|
|
706
706
|
const qrWidth = qrLines.length ? Math.max(...qrLines.map((l) => l.replace(/\x1b\[[0-9;]*m/g, '').length)) : 0
|
|
707
707
|
if (qrLines.length && qrWidth <= cols) {
|
package/src/vaultControl.js
CHANGED
|
@@ -257,12 +257,16 @@ export async function deleteScope (ns, profile) {
|
|
|
257
257
|
|
|
258
258
|
const PROFILE_URL = 'https://vault.dotrino.com/dispositivos#vault='
|
|
259
259
|
|
|
260
|
-
/**
|
|
260
|
+
/**
|
|
261
|
+
* Codifica el QR crudo como URL de la consola de vault.dotrino.com.
|
|
262
|
+
* El QR codifica la URL con el JSON crudo en el fragmento (menos datos que base64);
|
|
263
|
+
* el código que el usuario COPIA Y PEGA sigue siendo base64url.
|
|
264
|
+
*/
|
|
261
265
|
export function pairUrl (qr) {
|
|
262
266
|
const payload = JSON.stringify(qr)
|
|
263
267
|
const b64 = Buffer.from(payload, 'utf8').toString('base64')
|
|
264
268
|
.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '')
|
|
265
|
-
return { url: PROFILE_URL +
|
|
269
|
+
return { url: PROFILE_URL + payload, payload, b64 }
|
|
266
270
|
}
|
|
267
271
|
|
|
268
272
|
/**
|