Autore Topic: trasferimento utenti da altro sistema  (Letto 3256 volte)

Offline mikipari1

  • Nuovo arrivato
  • *
  • Post: 10
    • Mostra profilo
trasferimento utenti da altro sistema
« il: 02 Ott 2012, 01:07:34 »
ciao a tutti
tento di spiegare cosa vorrei fare e come e chiedo gentilmente se c'è qualcuno che mi può dare una dritta per risolvere alcuni problemi oppure, forse meglio, se mi indica una strada migliore per raggiunger il mio obiettivo

- ho un account di google apps con più di un centinaio di utenti, vorrei importare gli utenti evitando di crearli tutti manualmente in un sito realizzato con joomla 2.5 e che attraverso joomdle si interfaccia a moodle come se fosse una sua sezione, quindi con un sistema di login SSO
- vorrei inoltre che una volta importati gli utenti da google, si riuscisse a realizzare un SSO anche tra google e joomla

per quanto riguarda il SSo tra joomla e google ho pensato di cavarmela con un componente che permette l'accesso al sito attraverso le credenziali dei più famosi social network, il problema vero viene quando cerco di importare gli utenti di google
io avrei pensato di realizzare la cosa utilizzando un componente che permette l'importazione di liste di utenti da un file csv ma ho visto che per joomla 2.5 non esistono (o io non li ho trovati) componenti free, ma solo 1 a pagamento, pertanto fedele alla mia vocazione free (e anche perchè la mia scuola non ha soldi da spendere in questo...) ho pensato di passare dalla porta di moodle, che invece permette l'importazione di utenti attraverso csv. poi, una volta in moodle, attraverso joomdle li faccio passare a joomla
il problema è però che nel momento in cui gli utenti passano a joomla, joomla crea delle nuove password e quindi io mi trovo la lista dei miei utenti uguale a quella di google, ma con le password cambiate e quindi la cosa non mi serve per nulla
quello che chiedo è se qualcuno mi sa indicare qualche via migliore per importare utenti e relative password o, nel caso, se c'è qualche modo per evitare che joomla generi in automatico le password?

grazie

« Ultima modifica: 02 Ott 2012, 01:09:42 da mikipari1 »

Offline GianArb

  • Appassionato
  • ***
  • Post: 576
  • Sesso: Maschio
    • Mostra profilo
Re:trasferimento utenti da altro sistema
« Risposta #1 il: 02 Ott 2012, 11:00:14 »
Non ho mai verificato, ma ti dico come farei io..


Ci serve capire come Joomla genera la sua Password e come Google genera la sua e farle combaciare, perchè entrambi la criptano quindi si rischia che ci siano due chiavi diverse e che quindi il login non funzioni.


Una volta che abbiamo questi elementi possiamo facilmente scrivere una funzione che abbia come ingresso la pass di google e come return la pass da mettere nel db.
A questo punto visto che hai un csv puoi parsarlo nello script ed avere un array di dati da infilare nella tabella Users di Joomla CMS..


Detto questo, probabilmente non funzionerà, ma a primo pelo potrebbe funzionare.. :)
La vita è una lunga lezione di umiltà.

Offline mikipari1

  • Nuovo arrivato
  • *
  • Post: 10
    • Mostra profilo
Re:trasferimento utenti da altro sistema
« Risposta #2 il: 02 Ott 2012, 15:12:40 »
le password di google le genero io quindi quelle le so... quelle di joomla ho letto che vengono criptate tramite MD5 e nel file di configurazione io ho un codice segreto, che non so come utilizzare ma credo sia la chiave che utilizza joomla per criptare le password
io però non saprei proprio come iniziare a scrivere la funzione che tu dici... non è che potresti darmi qualche imbeccata?
non ho trovato nulla che spieghi come criptare le password di joomla
grazie

Offline GianArb

  • Appassionato
  • ***
  • Post: 576
  • Sesso: Maschio
    • Mostra profilo
Re:trasferimento utenti da altro sistema
« Risposta #3 il: 02 Ott 2012, 16:36:44 »
Conosci il php? :)
La vita è una lunga lezione di umiltà.

Offline mikipari1

  • Nuovo arrivato
  • *
  • Post: 10
    • Mostra profilo
Re:trasferimento utenti da altro sistema
« Risposta #4 il: 02 Ott 2012, 23:27:09 »
non benissimo ma mi arrangio, le cose basilari, ma non mi sono mai addentrato nei meandri della programmazione ad oggetti
però mi piace imparare...


Offline GianArb

  • Appassionato
  • ***
  • Post: 576
  • Sesso: Maschio
    • Mostra profilo
Re:trasferimento utenti da altro sistema
« Risposta #5 il: 03 Ott 2012, 00:06:33 »
Scusa, funzione l'ho detta per abitudine, possiamo anche fare spaghetti..

Allora iniziamo da questo..
Cercati la successione di codici che criptano la pass di Joomla
http://forum.joomla.it/index.php?topic=159965.0
qui trovi suggerimenti, e prova a inserire un utente a mano, fai la connessione al db scrivi la query di insert, e provi a loggarti, per capire se la pass è corretta.

A questo punto se tutto funziona prendi il CSV dei tuoi account, lo converti in array
http://php.net/manual/en/function.fgetcsv.php

Verifichi ed aggiungi i dati che mancano e inserisci tutto nel database.. :)
Tra l'altro se ci riesci mi piacerebbe avere il codice se fosse possibile  :P

Ps Sentirai parlare di Salt nell'articolo citato
http://php.net/manual/en/function.crypt.php
qui trovi documentazione ulteriore
 
« Ultima modifica: 03 Ott 2012, 00:13:53 da GianArb »
La vita è una lunga lezione di umiltà.

Offline mikipari1

  • Nuovo arrivato
  • *
  • Post: 10
    • Mostra profilo
Re:trasferimento utenti da altro sistema
« Risposta #6 il: 03 Ott 2012, 00:20:04 »
ok il compito è chiaro ma tosto
il tempo che ho non è molto, ma mi applicherò...
non ti assicuro però che riuscirò a breve, però ci tento

per adesso grazie davvero mille


Offline GianArb

  • Appassionato
  • ***
  • Post: 576
  • Sesso: Maschio
    • Mostra profilo
Re:trasferimento utenti da altro sistema
« Risposta #7 il: 03 Ott 2012, 00:23:54 »
Nemmeno io purtroppo ho gran tempo per fare prove, ma un po' di materiale dovrebbe esserci per riuscire a far tutto.. se hai problemi la discussione rimane qui eheh  ;D
La vita è una lunga lezione di umiltà.

Offline mikipari1

  • Nuovo arrivato
  • *
  • Post: 10
    • Mostra profilo
Re:trasferimento utenti da altro sistema
« Risposta #8 il: 09 Ott 2012, 02:12:48 »
sto lavorando...
procedo piano piano, a tempo perso, ma vado...
ho trovato il modo di codificare le password con il metodo joomla, adesso provo ad inserire tutti gli utenti nella tabella del db, però, già che ci sono ho divagato e sto realizzando il codice che inserisce anche diversi ruoli per utente

quando ho finito tutto posto il codice, se proprio vuoi vedere la schifezza che avrò realizzato...

grazie di nuovo per le dritte!


Offline GianArb

  • Appassionato
  • ***
  • Post: 576
  • Sesso: Maschio
    • Mostra profilo
Re:trasferimento utenti da altro sistema
« Risposta #9 il: 09 Ott 2012, 08:51:35 »
Si si mi interesserebbe  :)  se usi github possiamo anche lavorarci insieme :) non ho molto tempo nemmeno io, ma magari qualcosa si fa  :)
La vita è una lunga lezione di umiltà.

Offline mikipari1

  • Nuovo arrivato
  • *
  • Post: 10
    • Mostra profilo
Re:trasferimento utenti da altro sistema
« Risposta #10 il: 18 Ott 2012, 16:38:30 »
io avrei prodotto quanto segue:
Codice: [Seleziona]
function codificapassword($password){
    $salt = '';
    for ($i = 1; $i <= 32; $i++) {
        $maiusc = rand (1, 2);
        if ($maiusc == 1)
            {
            $str = strtoupper(dechex(rand (0, 16)));
            }
        else    {
            $str = dechex(rand (0, 16));
            }
        $salt .= $str;
    }
$passwordcodificata = md5($password.$salt).":".$salt;
return $passwordcodificata;
}
che genera random una password codificata con il metodo di joomla con salt esadecimale e caratteri maiuscolie minuscoli

poi il codice vero e proprio che scrive nelle tabelle del db di joomla è questo:
Codice: [Seleziona]
require_once "connetti.inc";
require_once "codificapassword.inc";
$prefisso = "prefissotabella_"; // inserire il prefisso delle tabelle di joomla

$link = connetti('nomedatabase','nome host','nomeutente','passwordutente'); // dove connetti è una funzione che connette al db di joomla richiamando semplicemente mysql_connect e inviando messaggi di errore nel caso di impossibilità di connessione al db

$row = 1;
if (($handle = fopen("prova.csv", "r")) !== FALSE)  // dove prova.csv è il file di testo che contiene i dati
    {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)
        {
        // inserisce nome, username, email, password e data registrazione nella tabella users
        $password = codificapassword($data[4]);
        $comando = "INSERT INTO ".$prefisso."users (name,username,email,password,registerDate) VALUES ('$data[1] $data[2]','$data[3]','$data[0]','$password',NOW())";
        $valori = mysql_query($comando);

        // legge il numero ID dell'utente inserito
        $comando = "SELECT id FROM ".$prefisso."users WHERE username='$data[3]'";
        $result = mysql_query($comando);
        $valori = mysql_fetch_assoc($result);
        echo $valori['id'];

        // ricava i codici di tutti i gruppi a cui appartiene l'utente dalla tabella usegroups e li inserisce nella tabella user_usergroup_map
        $num = count($data);
        $row++;
        $id = $valori['id'];
        for ($c=5; $c < $num; $c++)
            {
            // legge l'id del gruppo dalla tabella usergroups
            $comando = "SELECT id FROM ".$prefisso."usergroups WHERE title='$data[$c]'";
            $result = mysql_query($comando);
            $gruppi = mysql_fetch_assoc($result);
            $gruppo = $gruppi['id'];
           
            // scrive l'id del gruppo nella tabella user_usergroup_map
            $comando = "INSERT INTO ".$prefisso."user_usergroup_map (user_id,group_id) VALUES ('$id','$gruppo')";
                $valori = mysql_query($comando);
            }
            }
    fclose($handle);
    }
    else
    {
    echo "errore";
    }

il file prova.csv ha i seguenti campi:
mail,nome,cognome,username,password,gruppo1,gruppo2, ecc... (grippo1 ecc.. sono i nomi dei gruppi che creati in joomla)
i vari campi sono separati da una ',' e non c'è carattere di fineriga

cosa ne dici?


« Ultima modifica: 18 Ott 2012, 16:48:28 da mikipari1 »

Offline GianArb

  • Appassionato
  • ***
  • Post: 576
  • Sesso: Maschio
    • Mostra profilo
Re:trasferimento utenti da altro sistema
« Risposta #11 il: 18 Ott 2012, 17:21:31 »
Se funziona è buono :) grazie :) :)


Me lo sono guardato un po' meglio, la logica funziona, se riesco lo generalizzo un po', potrebbe essere utile a qualcun altro struttura bene.. :) se trovo il tempo e frulla tutto ti tengo aggiornato :)


Tra l'altro la parte dei gruppi a cosa serve? :) Non ricordo bene com'è strutturato Joomla quindi non so a cosa si riferisce quella tabella, non basta impostarlo register?
« Ultima modifica: 18 Ott 2012, 17:28:05 da GianArb »
La vita è una lunga lezione di umiltà.

Offline mikipari1

  • Nuovo arrivato
  • *
  • Post: 10
    • Mostra profilo
Re:trasferimento utenti da altro sistema
« Risposta #12 il: 18 Ott 2012, 23:04:07 »
basterebbe impostarlo register se gli utenti fossero solo registrati, ma io ho a che fare con un sistema di livelli di accesso molto più complesso
io insegno in una scuola, dove i docenti registrati possono accedere ai documenti relativi alle classi nelle quali insegnano: programmazioni, assenze degli alunni ecc... e tra i vari docenti, alcini di essi hanno la facoltà di inserire documenti, altri no (coordinatori di classe)
allo stesso modo, i genitori possono vedere i file relativi ai loro figli o alle classi dei loro figli e così via...
così un docente per esempio potrebbe essere inserito in 18-20 gruppi e farlo a mano per 100 docenti è massacrante
mentre se lo posso fare con una query mi facilita molto il compito

se vuoi generalizzare tieni conto che il numero di gruppi per ogni utente potrebbe essere molto grande...

comunque se generalizzi posta pure...

e poi tu sai come si struttura un componente di joomla?


Offline tomtomeight

  • Global Moderator
  • Fuori controllo
  • ********
  • Post: 30135
  • Sesso: Maschio
  • Gli automatismi aiutano ma non insegnano nulla.
    • Mostra profilo
Re:trasferimento utenti da altro sistema
« Risposta #13 il: 19 Ott 2012, 07:51:26 »
Citazione
così un docente per esempio potrebbe essere inserito in 18-20 gruppi


Questo approccio è sbagliato, il gruppo deve essere inteso come ruolo ed è al ruolo che si assegnano i permessi ed una sola volta, naturalmente i permessi possono essere ricorsivi e gerarcici. così un docente avrà assegnato un solo ruolo (gruppo) e sarà al ruolo che assegnerai  i 20 e più permessi ma lo farai una sola volta.
NEWS DataGrill Xataface Installer (Ver. 1.0.1) per Joomla 3.8.x - DEMO Gestione Magazzino

Offline mikipari1

  • Nuovo arrivato
  • *
  • Post: 10
    • Mostra profilo
Re:trasferimento utenti da altro sistema
« Risposta #14 il: 19 Ott 2012, 10:11:56 »
uhm... la cosa potrebbe essere interessante, ma non vedo come trasformarla in realtà
provo a farti un esempio

ho un docente di tecnologia che insegna in 9 classi, per esempio le classi 1-2-3 dei corsi A-B-C
deve poter avere accesso ai file riservati ai docenti delle sue classi
nel contempo un altro docente, per esempio di inglese insegna in 6 classi, 3 delle quali sono le stesse di quello di tecnologia 1-2-3A ma le altre 3 sono di un altro corso 1-2-3D
nello stesso tempo quello di lettere magari insegna solo in 1A
rischio di dover creare tanti gruppi quanti sono i docenti e poi allora sì che posso dare ad ogni gruppo e quindi ad ogni docente il ruolo di cui ho bisogno, ma allora non è meglio creare tanti gruppi quante sono le classi (con i rispettivi ruoli ed accessi) ed assegnare i docenti ai vari gruppi come se fossero le loro classi
o sbaglio?

se hai un'idea migliore ben lieto di seguirla
grazie


Offline tomtomeight

  • Global Moderator
  • Fuori controllo
  • ********
  • Post: 30135
  • Sesso: Maschio
  • Gli automatismi aiutano ma non insegnano nulla.
    • Mostra profilo
Re:trasferimento utenti da altro sistema
« Risposta #15 il: 19 Ott 2012, 11:46:01 »
Non si può mischiare o confondere ruolo con permessi e cioè gruppo con accesso. Da quì facevo notare l'approccio sbagliato di assegnare ad un insegnante più gruppi (ruoli) è il ruolo che deve contenere più accessi è ovvio tuttavia che se hai bisogno di diversificare uno a uno devi avere tanti ruoli quanti sono gli insegnanti. Forse non cambierà nulla  come risultato ed impegno ma sicuramente il ragionamento e la comprensione sarà più lineare anche ai fini di future modifiche.
NEWS DataGrill Xataface Installer (Ver. 1.0.1) per Joomla 3.8.x - DEMO Gestione Magazzino

Offline mikipari1

  • Nuovo arrivato
  • *
  • Post: 10
    • Mostra profilo
Re:trasferimento utenti da altro sistema
« Risposta #16 il: 19 Ott 2012, 16:09:57 »
certo su questo sono d'accordo! la mia strada stava nel tentativo di ottimizzare i tempi...
adesso però devo completare il codice che ti ho postato inserendo una funzione che mandi le mail di notifica delle credenziali d'accesso ai vari utenti inseriti, perchè pensare di farlo manualmente mi sconvolge...

non dovrebbe essere difficile usando la funzione mail, vero?


Offline GianArb

  • Appassionato
  • ***
  • Post: 576
  • Sesso: Maschio
    • Mostra profilo
Re:trasferimento utenti da altro sistema
« Risposta #17 il: 19 Ott 2012, 16:17:05 »
è semplicissimo!  :D


mail($destionation, $obj, $msg);


Questa dovrebbe bastare eheh per una mail di  base..


$msg = "ciao
Sei stata aggiunta al sito gne gne g ne";
La vita è una lunga lezione di umiltà.

 

Host

Torna su