Publicación y seguridad
Empaquetar un plugin
Sección titulada «Empaquetar un plugin»yonto-plugin bundleGenera el archivo publicable, dist/<id>-<version>.js, y un zip de ese archivo, dist/<id>-<version>.zip, e imprime el tamaño del zip y su SHA-256.
El zip contiene una sola entrada, el mismo archivo, comprimido.
Pon el zip en cualquier lugar que lo sirva por HTTPS, como una release de GitHub. Un usuario lo instala con Ajustes, Plugins, Instalar desde una URL.
Los bytes publicados nunca cambian
Sección titulada «Los bytes publicados nunca cambian»Cuando una versión es pública, nunca reemplaces el archivo en su dirección.
Un repositorio fija cada plugin por su SHA-256, así que un archivo que cambió en la misma dirección se rechaza, y con razón.
Para corregir un plugin, sube version, vuelve a empaquetar y publica en una dirección nueva.
Crear un repositorio
Sección titulada «Crear un repositorio»Un repositorio es una dirección que lista muchos plugins, para que un usuario los añada todos a la vez. Pon tus plugins en un directorio, una carpeta para cada uno, y ejecuta:
yonto-plugin index plugins --base-url https://plugins.example.com > index.jsonEmpaqueta cada plugin y escribe el índice: para cada uno, una entrada cuya dirección es <base-url>/<id>/<id>-<version>.zip#sha256=….
Sube los zips donde dicen las direcciones, y index.json a la dirección que vas a dar a los usuarios.
Luego comprueba lo que publicaste, desde fuera, como lo hará el Yonto de un usuario:
yonto-plugin index --check https://plugins.example.com/index.jsonDescarga el índice y cada plugin que lista, y comprueba de cada uno su SHA-256, su manifiesto y las reglas anteriores. Informa de todos los problemas, no solo del primero.
Un usuario añade el repositorio en Ajustes, Repositorios, Añadir un repositorio.
Qué se le dice al usuario
Sección titulada «Qué se le dice al usuario»El cuadro de diálogo de instalación muestra el nombre del plugin, su versión y adónde puede acceder, información que sale del manifiesto. Así que el manifiesto es la promesa del plugin, y el usuario es quien la acepta.
- Accede a los menos hosts posibles y escríbelos como hosts exactos. Un comodín que cubra un host que no necesitas le pide al usuario que confíe en más.
- Un plugin que define
hostsFromConfigle hace al usuario una pregunta adicional, y Yonto no lo ejecuta antes de la respuesta. Solo el tipo de plugin que lee direcciones que aporta el usuario puede justificar uno. - Nunca envíes la clave, el token o el texto escrito por un usuario a un host que el usuario no eligió.
- Un plugin nunca puede acceder por sí mismo a una dirección privada, como
localhost,192.168.x.xo*.local. Solo se permite una dirección que el usuario escribió en un campourl. Así es como funciona un plugin para un servidor de la propia red del usuario, y por eso suallowedHostsestá vacío.
Los plugins son código y se ejecutan en un entorno aislado, sin archivos, sin sockets y sin temporizadores, por lo que la única salida es yonto.fetch.
Aun así, un usuario solo debería instalar uno desde una dirección de confianza, y tú debes escribir el tuyo de modo que quien no lo haya leído no pueda salir perjudicado.
Lista de comprobación antes de publicar
Sección titulada «Lista de comprobación antes de publicar»lintydoctor --replayestán en verde.contractVersiones el que pidelint, y no más.allowedHostses lo más pequeño posible.- Cada
reasonque lanzas nombra la parte que falló, en una frase, y los registros no contienen ninguna URL, clave ni consulta. doctor.jsonyfixtures/no contienen ninguna clave ni cookie.versiones nueva.