PDA

Ver la Versión Completa : Alta de usuarios en Joomla


Cecilio
12-03-2009, 14:26:12
Hola.

Tengo que dar de alta muchisimos usuarios en Joomla. Todos los usuarios me los ha pasado en un archivo txt. Así que estoy pensando hacer un programita en delphi7 que los de de alta en la base de datos MySql.

El problema es que no se como se codifica la clave en Joomla. Había pensado generarla aleatoriamente.

¿ alguien ha hecho algo similar o me puede decir como codificar la clave ?

Gracias.

dec
12-03-2009, 15:17:19
Hola,

Pero, Joomla (http://www.joomla.org/) es software libre, su código fuente está disponible, ¿no puedes mirar tú mismo dónde se lleva a cabo lo que dices?

Cecilio
12-03-2009, 17:58:17
He mirado el código, y lo tengo bastante confuso porque aunque php no es complicado, se llaman a muchos archivos y me lio bastante.

Además la pregunta es también por si alguien ya ha hecho alguna aplicación que sirva para lo mismo.

dec
12-03-2009, 18:04:34
Hola,

En el "script" "/installation/installer/helper.php" puede verse este código en la línea 280:


// Create random salt/password for the admin user
$salt = JUserHelper::genRandomPassword(32);
$crypt = JUserHelper::getCryptedPassword($adminPassword, $salt);
$cryptpass = $crypt.':'.$salt;


El contenido de la variable "cryptpass" es lo que se termina guardando en la base de datos, como puede verse unas líneas más abajo. Creo que te da ya alguna pista de por dónde empezar. O también puedes esperar a ver si algún compañero ha hecho algo como lo que necesitas, lee este hilo, y tiene a bien publicar su solución.

JXJ
12-03-2009, 19:48:15
Usa MD5 para la contraseña

el detalle es que a mi me ha pasado que la constraseña no me la reconoce.
en las ultimas versiones de joomla... la 1.5 y algunas de las 1.2

por que en las versiones 1.2 antes de los ultimos parches y updates.
con poner la contraseña a la que le aplicabas MD5.. ya quedaba.
ejemplo

dsaoho23hoq12

y ahora. el joomla le agrega :
como a la mitad de la contraseña
y ya no corresponde a MD5.. sino a otro codigo que no se cual sea.

sdjasdasoh12:dwjqodn23

si vas crear usuarios. nuevos... mejor es crearlso con la mismas contraseña y que
ellos al final definan una nueva contraseña

pero si ya tienes los usuarios y su contraseña en un archivo de texto.
solo es meterlos en la Base de datos.

dec
12-03-2009, 19:56:03
Hola,


y ya no corresponde a MD5.. sino a otro codigo que no se cual sea.


Véase el código que he puesto más arriba, descárgese Joomla y véase en detalle los métodos JUserHelper::genRandomPassword() y JUserHelper::getCryptedPassword(). Igual habría que revisar un poco más (el código que he puesto es el que se usa para crear al usuario por defecto, así que creo yo que podría servir, pero, igual habría que investigar un poco más, donde se lleve a cabo el registro de usarios, por si cambia algo, aunque, creo que no. Desde luego creo que es un buen sitio por donde empezar.

Cecilio
12-03-2009, 20:00:06
He localizado la función que desencripta..
Pero no me entero de nada. Creo que convierte a hexadecimal pero he realizado pruebas con una clave conocida y no da el resultado ni por asomo, tanto en MD5 Sha1


function getCryptedPassword($plaintext, $salt = '', $encryption = 'md5-hex', $show_encrypt = false)
{
// Get the salt to use.
$salt = JUserHelper::getSalt($encryption, $salt, $plaintext);

// Encrypt the password.
switch ($encryption)
{
case 'plain' :
return $plaintext;

case 'sha' :
$encrypted = base64_encode(mhash(MHASH_SHA1, $plaintext));
return ($show_encrypt) ? '{SHA}'.$encrypted : $encrypted;

case 'crypt' :
case 'crypt-des' :
case 'crypt-md5' :
case 'crypt-blowfish' :
return ($show_encrypt ? '{crypt}' : '').crypt($plaintext, $salt);

case 'md5-base64' :
$encrypted = base64_encode(mhash(MHASH_MD5, $plaintext));
return ($show_encrypt) ? '{MD5}'.$encrypted : $encrypted;

case 'ssha' :
$encrypted = base64_encode(mhash(MHASH_SHA1, $plaintext.$salt).$salt);
return ($show_encrypt) ? '{SSHA}'.$encrypted : $encrypted;

case 'smd5' :
$encrypted = base64_encode(mhash(MHASH_MD5, $plaintext.$salt).$salt);
return ($show_encrypt) ? '{SMD5}'.$encrypted : $encrypted;

case 'aprmd5' :
$length = strlen($plaintext);
$context = $plaintext.'$apr1$'.$salt;
$binary = JUserHelper::_bin(md5($plaintext.$salt.$plaintext));

for ($i = $length; $i > 0; $i -= 16) {
$context .= substr($binary, 0, ($i > 16 ? 16 : $i));
}
for ($i = $length; $i > 0; $i >>= 1) {
$context .= ($i & 1) ? chr(0) : $plaintext[0];
}

$binary = JUserHelper::_bin(md5($context));

for ($i = 0; $i < 1000; $i ++) {
$new = ($i & 1) ? $plaintext : substr($binary, 0, 16);
if ($i % 3) {
$new .= $salt;
}
if ($i % 7) {
$new .= $plaintext;
}
$new .= ($i & 1) ? substr($binary, 0, 16) : $plaintext;
$binary = JUserHelper::_bin(md5($new));
}

$p = array ();
for ($i = 0; $i < 5; $i ++) {
$k = $i +6;
$j = $i +12;
if ($j == 16) {
$j = 5;
}
$p[] = JUserHelper::_toAPRMD5((ord($binary[$i]) << 16) | (ord($binary[$k]) << 8) | (ord($binary[$j])), 5);
}

return '$apr1$'.$salt.'$'.implode('', $p).JUserHelper::_toAPRMD5(ord($binary[11]), 3);

case 'md5-hex' :
default :
$encrypted = ($salt) ? md5($plaintext.$salt) : md5($plaintext);
return ($show_encrypt) ? '{MD5}'.$encrypted : $encrypted;
}
}


Alquien que sepa php podría indicarme ?

Cecilio
13-03-2009, 14:28:10
Como mis conocimientos de PHP son demasiados escasos para descifrar como se crea la clave cifrada he pensado lo siguiente:

Crear el usuario aleatoriamente y poner una clave conocida y única para todos.
La clave la puedo obtener de un usuario actual, copiando todo el tocho de dígitos.

Es algo chapuza, pero puede valer.

JXJ
13-03-2009, 16:58:38
esa es lo que mal explique que podias hacer.

la conocidicima clave. 123456789
para todos los usuarios y ya ellos ingresan y modifican la clave.
aunque podrias dar la seudo seguridad .. de que de el usuario 1 al 100
la misma clave. del 101 al 201. otra clave igual .
y asi...

suerte.

Cecilio
13-03-2009, 17:17:08
Pues si, es muy coerente, crear claves por tramos.

Aunque el nombre de usuario será 4 digitos del número de cliente y otros 4 dígitos aleatorios.

Y unidos a tramos de password, la seguridad mejorará.

De todas formas, voy a intentar contactar con el equipo de joomla o con algún foro de php, ya que va a ser algo para largo, y me gustaría hacerlo bien.

roman
14-03-2009, 01:43:19
he pensado lo siguiente:

Crear el usuario aleatoriamente y poner una clave conocida y única para todos.
La clave la puedo obtener de un usuario actual, copiando todo el tocho de dígitos.

Es algo chapuza, pero puede valer.

Pues no sé si es chapuza o no pero si sirve es buena.

De todas formas, me di a la tarea de investigar un poco y me encontré con el plugin userport (http://extensions.joomla.org/extensions/hosting-&-servers/data-conversion/5430/details) que te permite importar y exportar usuarios. Tú sólo tienes que proveer los datos así:


Hugo Donald, hugo, hugo@disney.com, hugo001
Paco Donald, paco, paco@disney.com, paco002
Luis Donald, luis, luis@disney.com, luis003


es decir, cuatro campos:

nombre completo, nombre de usuario, email, contraseña

Por defecto, pone los usuarios como autores, pero puedes configurarlo para que los ponga como usuarios registrados, editor, etc. También puedes configurar el separador (por defecto es la coma).

La contraseña es plana, esto es, sin encriptar. De manera que puedes pre-procesar tu archivo de texto y colocar la contraseña que desees y el plugin se encarga de encriptarla.

Por lo demás, el plugin es muy fácil de instalar, nada más te descargas el zip, te vas al menú Extensions|Install/Uninstall y en la sección "Upload Package File" buscas el archivo descargado y oprimes el botón "Upload File & Install".

El plugin lo verás en el menú Components.

El único pero que le veo es que no te permite cargar el archivo de texto sino que tienes que copiar y pegar su contenido en un recuadro. Pero salvo eso, lo he probado y funciona muy bien.

// Saludos