Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Alta de usuarios en Joomla (https://www.clubdelphi.com/foros/showthread.php?t=64010)

Cecilio 12-03-2009 14:26:12

Alta de usuarios en Joomla
 
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 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:

Código PHP:

// 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,

Cita:

Empezado por JXJ
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

Código PHP:

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($binary0, ($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($binary016);
                    if (
$i 3) {
                        
$new .= $salt;
                    }
                    if (
$i 7) {
                        
$new .= $plaintext;
                    }
                    
$new .= ($i 1) ? substr($binary016) : $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

Cita:

Empezado por Cecilio (Mensaje 341345)
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 que te permite importar y exportar usuarios. Tú sólo tienes que proveer los datos así:

Código:

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


La franja horaria es GMT +2. Ahora son las 23:00:21.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi