Página 1 de 2

API de Wapt para interfaz web

Publicado: 20 de mayo de 2019 - 16:26
por Calvibald
Hola, buenas noches.
Mi problema es el siguiente: estoy creando una interfaz web personalizada para WAPT. Esta interfaz está destinada a instructores de un centro de formación y quiero que puedan acceder a un menú que muestre las salas que gestionan. Este menú debería mostrar información sobre cada sala, así como todos los ordenadores disponibles en ella.

El problema es que, al carecer de documentación, me cuesta entender cómo funciona la API y me gustaría saber si es posible asignar paquetes a un grupo mediante la API. Y, en caso afirmativo, ¿cómo? ¿Es posible hacer lo mismo para ordenadores individuales?

Versión de WAPT: 1.5.
Sistema operativo del servidor: CentOS 7.
Sistema operativo del cliente: Windows 7.

Re: API de Wapt para interfaz web

Publicado: 21 de mayo de 2019 - 08:50
por sfonteneau
Hola,

la API de WAPT se comunica en JSON y permite recuperar la misma información que la consola.

Aquí hay algunos ejemplos:

https://admin:password@srvwapt.mydomain ... imit=10000
https://admin:password@srvwapt.mydomain ... /v1/groups
https://admin:password@srvwapt.mydomain ... imit=10000

Con la API, puede recuperar información, cargar un paquete, eliminar un paquete, ejecutar comandos Wake-on-LAN, etc.

Sin embargo, no puede crear paquetes con la API y, por lo tanto, para responder a su pregunta, no puede asignar paquetes a un grupo o a una computadora usando la API.

Actualmente, cuando asigna paquetes a un grupo o a una computadora, la consola crea el paquete localmente en la máquina y luego lo envía al servidor WAPT con una solicitud POST:

https://admin:password@srvwapt.mydomain ... d_packages.

Este enfoque se eligió para evitar que el repositorio de WAPT se convierta en un activo sensible.
En efecto, el servidor WAPT no posee la clave privada; solo actúa como repetidor. Únicamente el titular de la clave privada puede realizar acciones en las estaciones de trabajo.

Re: API de Wapt para interfaz web

Publicado: 21 de mayo de 2019 - 09:01
por Calvibald
Está bien, gracias por la rápida respuesta, debería poder manejarlo, ¡gracias!

Re: API de Wapt para interfaz web

Publicado: 21 de mayo de 2019 - 11:27
por Calvibald
Hola de nuevo, mi problema persiste. Consideré modificar la base de datos directamente con PHP o ejecutar comandos de Linux desde ella. El problema es que, al parecer, los cambios en la base de datos no se aplican en el cliente. Y no encuentro ningún comando del servidor. ¿Hay alguna solución? ¿Podría usar un script ya instalado en el servidor? ¿O un procedimiento?

Re: API de Wapt para interfaz web

Publicado: 21 de mayo de 2019 - 11:58
por sfonteneau
Como ya dije, no está en la base de datos, ¡no hay necesidad de modificarlo! ... :rollo:

Estos son archivos planos ubicados en /var/www/wapt/

https://doc.ad.tranquil.it/fr/doc/wapt- ... repositorios

Re: API de Wapt para interfaz web

Publicado: 21 de mayo de 2019 - 12:09
por Calvibald
Entendí el concepto, pero mi problema es:
¿Existe algún comando de servidor que permita agregar un paquete a un usuario para su instalación?
Por ejemplo :
wapt-add-usrpackage sta5803693 prueba-java8
y así obtenerlo aquí
Captura.PNG
Captura.PNG (48,04 KB) Visto 6634 veces
Esta función se utilizaría en un panel web con un sistema de usuario

Perdón por hacer tantas preguntas raras

Re: API de Wapt para interfaz web

Publicado: 22 de mayo de 2019 - 09:21
por sfonteneau
Aquí tienes un código de muestra gratuito:

Código: Seleccionar todo

from waptpackage import PackageEntry,WaptLocalRepo
from waptcrypto import SSLCABundle,SSLPrivateKey,SSLCertificate

uuid_machine = 'BEDBD700-7277-11E3-AAA8-F44D30629A99'
removedepend=["toto"]
adddepend=["test","test2"]

certpub="/root/mykey.crt"
privatekey="/root/mykey.pem"
passwordkey='password'

ca_bundle = SSLCABundle()
signers_bundle = SSLCABundle()
signers_bundle.add_certificates_from_pem(pem_filename=certpub)
key = SSLPrivateKey(privatekey)

pe = PackageEntry(waptfile = "/var/www/wapt-host/%s.wapt" % uuid_machine)

depends = pe.depends.split(',')
for dep in adddepend:
    if not dep in depends:
        depends.append(dep)

for dep in removedepend:
    if dep in depends:
        depends.remove(dep)

pe.depends = ','.join(depends)
pe.inc_build()
pe.sign_package(private_key=key,certificate = signers_bundle.certificates(),private_key_password=passwordkey)

Código: Seleccionar todo

sudo -u wapt PYTHONPATH=/opt/wapt PYTHONHOME=/opt/wapt /opt/wapt/bin/python /opt/wapt/test.py

Obviamente desaconsejo esta técnica ya que requiere que la clave esté en el servidor... :?

Re: API de Wapt para interfaz web

Publicado: 22 de mayo de 2019 - 09:33
por Calvibald
¡Gracias por el código gratuito, me es muy útil!

Si logro terminarlo a tiempo, lo publicaré en algún lugar del foro como código abierto. ¡
Que tengas un buen resto del día!

Re: API de Wapt para interfaz web

Publicado: 4 de junio de 2019 - 14:51
por Calvibald
¡Hola, hola! Soy yo de nuevo. Terminé el panel web que quería crear (está disponible en el foro), pero tengo un problema con el script de Python.

a pesar de la opción (private_key_password=passwordkey) en sign_package() el script solicita sistemáticamente la contraseña.
Captura.PNG
Captura.PNG (1,99 KB) Visto 6512 veces
lo cual pone todo en peligro.
Eché un vistazo a waptpackage.py para encontrar el método y noté password_callback=passwordkey que tampoco funciona.

¿Me perdí algo? (El código Python es el mismo que el anterior).

¡Que tengas un buen resto del día!

Re: API de Wapt para interfaz web

Publicado: 5 de junio de 2019 - 09:15
por sfonteneau
Admito que no he intentado usar una contraseña en la llave.
Tendré que probarla más a fondo; podría haber algún problema.