Interactúa con Alfresco desde la línea de comandos (con curl)

Si eres de los que te sientes más cómodo usando una shell de Linux o Unix que el ratón, creo que este artículo te va a gustar.

Algunas veces necesitamos chequear algún dato concreto o realizar alguna tarea específica en Alfresco. La posibilidad de interactuar con Alfresco desde la línea de comandos (desde una shell) nos permite automatizar algunas tareas mediante scripts o sacarle mucho más partido a la aplicación para hacer diferentes tipos de tareas.

Vamos a ver qué podemos hacer con el comando “curl”. Recuerda que en los siguientes ejemplos donde aparece “localhost” deberás poner la IP o nombre del servidor así como usuario y contraseña, algunos comandos solo funcionan si el usuario tiene permisos de administrador en el repositorio:

Extraer el identificador del repositorio, muy útil para desarrollos o configurar la replicación:

[bash]
curl -u usuario:contraseña "http://localhost:8080/alfresco/s/cmis" | grep repositoryId|perl -pi -e "s/.*>(.*)<.*/\1/"
[/bash]

Subir ficheros usando diferentes protocolos, en estos ejemplos el fichero.doc está en el mismo directorio local desde donde lanzamos el comando:

FTP a un sitio concreto (versión 4.0 que no hay que indicar sites en la URL ya que mapea directamente a sites cualquier acceso FTP):

[bash]
curl -u usuario:contraseña -T fichero.doc "ftp://localhost/Alfresco/nombre-corto-del-sitio/documentLibrary/"
[/bash]

Webdav (HTTP) a un sitio concreto (versión 4.0 que no hay que indicar sites en la URL ya que mapea directamente a sites cualquier acceso webdav):

[bash]
curl -u usuario:contraseña -T fichero.doc "http://localhost:8080/alfresco/webdav/nombre-corto-del-sitio/documentLibrary/"
[/bash]

Subir un fichero atacando a la API (HTTP):

[bash]
curl -v -X POST -F [email protected] -F siteid=nombre-corto-del-sitio -F containerid=documentLibrary -F uploaddirectory=/directorio-dentro-del-sitio http://usuario:contraseña@localhost:8080/alfresco/service/api/upload
[/bash]

Por ejemplo, si queremos crear (subir) unos cuantos contenidos podríamos usar este pequeño script lanzado desde la shell de linux directamente:

[bash]
for i in `seq 1 300`
> do
> echo "uploading file $i"
> touch file$i.txt
> curl -u usuario:contraseña -T file$i.txt "http://localhost:8080/alfresco/webdav/ficheros-personales/documentLibrary/"> done
[/bash]

El script/comando anterior creará en local 300 ficheros txt vacíos con el nombre file1.txt hasta file300.txt y los irá subiendo a Alfresco mediante webdav. También podemos hacerlo mediante la API, por FTP, etc.

En el blog de Cesar Capillas podemos ver otros scripts invocando estos comandos para hacer subidas.

Otra forma de hacer llamadas a Alfresco es mediante los webscripts, incluyendo los webscripts CMIS, podemos ver un listado de todos los disponibles por grupos aquí http://localhost:8080/alfresco/service/index o incluso un listado completo aquí http://localhost:8080/alfresco/service/index/uri/

Para obtener un ticket de sesión podríamos usar el siguiente comando:

[bash]
curl "http://localhost:8080/alfresco/service/api/login?u=usuario&pw=contraseña"|grep ticket|perl -pi -e "s/.*>(.*)<.*/\1/"
[/bash]

Ver el estado de las auditorías (activadas o desactivadas):

[bash]
curl -X GET "http://usuario:contraseña@localhost:8080/alfresco/service/api/audit/control"
[/bash]

Ver (si están activadas las auditorías) los logins fallidos:

[bash]
curl -u usuario:contraseña "http://localhost:8080/alfresco/service/api/audit/query/AuditExampleLogin1/auditexamplelogin1/login/error/user?verbose=true"
[/bash]

Ver algunos datos concretos del repositorio:

[bash]
curl -X POST "http://usuario:contraseña@localhost:8080/alfresco/service/api/admin/usage"
{
"lastUpdate" : 1342542164417,
"users" : 6,
"documents" : 545,
"licenseMode" : "ENTERPRISE",
"readOnly" : false,
"updated" : true,
"licenseValidUntil" : null,
"level" : 0,
"warnings": [],
"errors": []
}
[/bash]

Sacar un listado de los sites:

[bash]
curl -X GET "http://usuario:contraseña@localhost:8080/alfresco/service/api/sites"
[/bash]

Consultar la versión de Alfresco:

[bash]
curl -X GET "http://usuario:contraseña@localhost:8080/alfresco/service/api/server"
[/bash]

Exportar un sitio con info de miembros, grupos y contenidos (fichero ZIP con varios ACP en su interior):

[bash]
curl -X GET "http://usuario:contraseña@localhost:8080/alfresco/service/api/sites/nombre-corto-del-sitio/export" > sitio.zip
[/bash]

Ver todos los tipos mime y transformaciones soportadas por Alfresco:

[bash]
curl -X GET "http://usuario:contraseña@localhost:8080/alfresco/service/mimetypes?mimetype={mimetype?}"
[/bash]

Crear un sitio:

[bash]
curl -u usuario:contraseña -H ‘Content-Type: application/json’ -d "{‘title’:’site$i’,’visibility’:’PUBLIC’,’description’:”,’sitePreset’:’site-dashboard’,’shortName’:’site$i’}" "http://localhost:8080/alfresco/s/api/sites"
[/bash]

Si conoces otros usos útiles con curl no dudes en ponerlos en los comentarios.

8 thoughts to “Interactúa con Alfresco desde la línea de comandos (con curl)”

  1. Hey Toni, mira tengo una duda con el exportar sitios.

    Lo hago tal cual pones en el ejemplo, pero ese archivo zip se deberia descomprimir para poder importarlo no ?
    o bah eso intento pero me sale este error:

    Archive: sitio.zip
    End-of-central-directory signature not found. Either this file is not
    a zipfile, or it constitutes one disk of a multi-part archive. In the
    latter case the central directory and zipfile comment will be found on
    the last disk(s) of this archive.
    unzip: cannot find zipfile directory in one of sitio or
    sitio.zip, and cannot find sitio.ZIP, period.

    Entonces no se si esta bien o no esa parte.

  2. Gracias a ti Cesar, conocía el proyecto que comentas, de hecho lo comenté por Twitter porque es bastante interesante.

    Saludos!

  3. Hola, me gustaria conocer mas sobre alfresco… por ejemplo como hago para ingresar a alfrsco y sin usar 8080¿¿?

  4. Hola Lizzie, para usar alfresco en un puerto que no sea el 8080 deberás cambiar la configuración o selecionar el puerto deseado como por ejemplo el 80 durante la instalación. Aquí más info: http://blyx.com/2014/06/02/where-and-how-to-change-any-alfresco-related-port/

    Para no cambiar nada en Alfresco puedes usar un proxy por delante de Alfresco como apache o nginx y que haga la capacidad de reenviar el tráfico. También puedes usar IPtables para redirigir el tráfico del 80 al 8080. Mira el punto 5 aquí: http://blyx.com/2009/11/09/10-consejos-basicos-de-seguridad-en-alfresco/

    Saludos.

  5. Hola Toni, te felicito por este blog me ha ayudado mucho, yo requiero guardar archivos en Alfresco y mediante curl se ve sencillo.

    Me funcionó muy bien el envío de un archivo mediante POST, me podrías decir cómo sería el comando para crear una carpeta.

    Gracias y Saludos

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.