Para este propósito necesitamos tener un rol administrador con todos los permisos asignados. El usuario que tenga asignado este rol será con el que iniciemos sesión en Python y el que tendrá poder para registrar usuarios. A partir de aquí, voy a suponer una instalación limpia de Drupal. Drupal tiene módulos que proporcionan un servidor XMLRPC y una serie de servicios Web impecables que expone al exterior. Veamos los pasos para preparar Drupal para este cometido.
- Instalar la herramienta de descarga y habilitación sencilla de módulos Drupal
- neonigma@neonigma-desktop:~/Descargas$ sudo apt-get install drush
- Descargar y habilitar el módulo Services
- neonigma@neonigma-desktop:/opt/lampp/htdocs/drupal/modules$ drush dl services -r modules
- Project services (6.x-2.2) downloaded to /opt/lampp/htdocs/drupal/modules/services. [success]
- neonigma@neonigma-desktop:/opt/lampp/htdocs/drupal/modules$ drush en services
- The following projects will be enabled: services
- Do you really want to continue? (y/n): y
- services was enabled successfully. [ok]
- #! /usr/bin/python
- import os.path, sys, xmlrpclib, socket
- config = {
- 'url': 'http://localhost/drupal/services/xmlrpc',
- 'username': 'admin',
- 'password': 'admin',
- }
- # Make initial connection to service
- server = xmlrpclib.ServerProxy(config['url'], allow_none=True);
- try:
- server.system.listMethods() # si podemos listar las operaciones del servicio web, hemos conectado al servidor
- except xmlrpclib.ProtocolError, socket.error:
- print 'No se puede conectar al servidor'
- except EOFError:
- exit(1)
- else:
- try:
- connection = server.system.connect(); # hacer uso de la funcion connect del servicio web System
- except:
- print "Error en la conexion. Codigo de error: %d" % err.faultCode
- print "%s" % err.faultString.encode('utf-8','ignore')
- else:
- try:
- session = server.user.login(connection['sessid'], config['username'], config['password']); # usar funcion login del servicio web User
- except xmlrpclib.Fault, err:
- print "Error en el inicio de sesion. Codigo de error: %d" % err.faultCode
- print "%s" % err.faultString.encode('utf-8','ignore')
- else:
- sessid = session['sessid']; # necesario obtener el sessid, es nuestra key para identificarnos despues
- user = session['user'];
- try:
- # construimos los datos del nuevo usuario y le entregamos la key
- user_data = {
- 'sessid': session['sessid'],
- 'name': 'enigma',
- 'mail': 'enigma@enigma.es',
- 'pass': 'enigma',
- }
- print session # datos del administrador
- result = server.user.save(sessid, user_data) # intentar registrar nuestro usuario, no olvidar la key
- print result # resultado del registro de usuario
- except xmlrpclib.Fault, err:
- print "Error en el registro de usuario. Codigo de error: %d" % err.faultCode
- print "%s" % err.faultString.encode('utf-8','ignore')
- else:
- print "Se ha registrado correctamente al usuario"
- neonigma@neonigma-desktop:/opt/lampp/htdocs/drupal$ python register.py
- u003igf16uvf9fnhaspe3v36e0
- {'sort': '0', 'status': '1', 'picture': '', 'uid': '3', 'language': 'es', 'created': '1290805507', 'roles': {'3': 'usuario administrador', '2': 'authenticated user'}, 'signature': '', 'init': 'admin@admin.fake', 'access': '1290858423', 'signature_format': '0', 'theme': '', 'form_build_id': 'form-ac8a1d5923bb603b231df3f65fc8d38f', 'mode': '0', 'pass': '21232f297a57a5a743894a0e4a801fc3', 'threshold': '0', 'mail': 'admin@admin.fake', 'login': 1290858449, 'data': 'a:1:{s:13:"form_build_id";s:37:"form-ac8a1d5923bb603b231df3f65fc8d38f";}', 'timezone': '3600', 'name': 'admin'}
- 9
- Se ha registrado correctamente al usuario
En Drupal vamos a Administrar -> Construcción del sitio -> Módulos. Activamos los siguientes módulos y pulsamos en Guardar configuración:
MUY IMPORTANTE. En Drupal vamos ahora a Administrar -> Administración de usuarios -> Opciones de usuario y DESACTIVAMOS la casilla Es necesaria la verificación por correo cuando un visitante crea una cuenta. Pulsamos el botón Guardar la configuración del final de la página. La siguiente imagen muestra cómo debe quedar la configuración:
A continuación, vamos a Administrar -> Construcción del sitio -> Services, pulsamos en la pestaña Opciones y en el desplegable Authentication module escogemos Key authentication. A continuación desmarcamos Use keys y dejamos marcado Use sessid. Este párrafo es lo más importante, el que permite la magia. La siguiente imagen muestra cómo debe quedar la configuración:
Por último, vamos a asignar todos los permisos correctamente. Vamos a Administrar -> Administración de usuarios -> Permisos. En la columna de administrador debemos haber marcado todos los checkbox, dando permiso al administrador para hacer lo que desee en el portal.
Con esto, ya tendríamos Drupal preparado para el acceso a los distintos servicios Web. Para comprobarlo, vamos Administrar -> Construcción del sitio -> Services y hacemos clic en el enlace XMLRPC – /services/xmlrpc. La URL que se nos abra en el navegador será nuestra URL de conexión a los servicios Web. En mi caso de ejemplo, la URL es http://localhost/drupal/services/xmlrpc
Ahora, sólo tenemos que escribir un pequeño programa de testing como este para aprovechar estos servicios:
El resultado de la ejecución de este código es el siguiente:
Si vamos a Administrar -> Administración de usuarios -> Usuarios veremos nuestro usuario perfectamente creado. Además, podemos iniciar sesión con él.