Autore Topic: Collegarsi al database joomla con Android/Java  (Letto 6048 volte)

Offline Aitor

  • Nuovo arrivato
  • *
  • Post: 30
  • Sesso: Maschio
    • Mostra profilo
    • Davide "Aitor" Finetto
Collegarsi al database joomla con Android/Java
« il: 19 Set 2012, 17:55:29 »
Salve,
 io ho un sito joomla con all'interno molti iscritti. Volevo creare una applicazione android che permettesse di fare il login come si fosse sul sito (quindi si deve collegare al database joomla del sito)...ho provato vari metodi ma poi ho scoperto che tramite un file php non riesco a ricavare le password degli utenti perchè criptate, cè un metodo per decriptare le password e poterle quindi usare per la mia applicazione?
 
 ps: il sito è fatto con joomla 2.5. Chiedo, magari qualcuno ha già avuto a che fare con un problema di questo tipo
 
 grazie e ciao
 Davide

Offline simone83

  • Appassionato
  • ***
  • Post: 362
  • Sesso: Maschio
    • Mostra profilo
    • Braincode gli artigiani del codice
Re:Collegarsi al database joomla con Android/Java
« Risposta #1 il: 25 Set 2012, 12:34:52 »
Ciao, la password non puo essere decriptata, o almeno non dovrebbe. Il meccanismo di login di joomla prevede che la stringa che inserisci sia convertita in md5 piu un valore segreto all'inizio, quindi il login non fa altro che criptare quello che inserisi per poi confrontarlo con quello nel database. Dovresti creare un interfaccia per la tua applicazione che accede a joomla, comunque io di android ne so 0 e magari sparo cavolate.



Offline Aitor

  • Nuovo arrivato
  • *
  • Post: 30
  • Sesso: Maschio
    • Mostra profilo
    • Davide "Aitor" Finetto
Re:Collegarsi al database joomla con Android/Java
« Risposta #2 il: 26 Set 2012, 21:18:36 »
mi sa che è quella è la soluzione migliore, cercherò di integrare il login di joomla, se qualcuno ha mai fatto una cosa del genere batti un colpo

grazie comunque

Offline giovi

  • Instancabile
  • ******
  • Post: 9694
  • Sesso: Maschio
    • Mostra profilo
    • Simple File Manager
Re:Collegarsi al database joomla con Android/Java
« Risposta #3 il: 06 Ott 2012, 23:26:02 »
alcuni server più economici NON consentono per motivi di sicurezza di accedere al database mysql dall'esterno. Se sei sicuro che il servera cui ti appoggi non è tra uno di questi, puoi dare un'occhiata al componente di login di joomla per capire come funziona il login ed implementare in android le stesse procedure... Altrimenti esistono metodi alternativi per sincronizzare le utenze di joomla con altri generi di db
Ti sono stato utile? Aiutami anche tu votando Simple File Manager sulla Joomla! Extension Directory!

Offline devil_cp

  • Esploratore
  • **
  • Post: 107
    • Mostra profilo
    • FOS S.r.l.
Re:Collegarsi al database joomla con Android/Java
« Risposta #4 il: 07 Ott 2012, 22:54:26 »
Oppure puoi fare un web service in php, che richiama direttamente le librerie di Joomla per effettuare il login.
« Ultima modifica: 07 Ott 2012, 22:56:05 da devil_cp »

Offline Aitor

  • Nuovo arrivato
  • *
  • Post: 30
  • Sesso: Maschio
    • Mostra profilo
    • Davide "Aitor" Finetto
Re:Collegarsi al database joomla con Android/Java
« Risposta #5 il: 11 Ott 2012, 14:00:03 »
grazie intanto
per fare il lavoro più semplice visto che mi sembra un bel lavoraccio ho pensato ad una soluzione alternativa...fare una pagina php (in sostanza un piccolo web service come suggerito) per controllare però solo l'esistenza di un utente, quindi senza quindi gestire la sessione etc, vorrei solo come ritorno un false o true...qualcuno ci ha già avuto a che fare? La teoria sarebbe semplice, fare un login che richiama le funzioni di autentificazione joomla, ma non riesco a metterla in pratica con una pagina php funzionante, non ne vengo proprio fuori

poi naturalmente passerò con android nome utente e password a questa pagina php che rimanderà indietro un flag true o false

Offline giovi

  • Instancabile
  • ******
  • Post: 9694
  • Sesso: Maschio
    • Mostra profilo
    • Simple File Manager
Re:Collegarsi al database joomla con Android/Java
« Risposta #6 il: 11 Ott 2012, 14:44:17 »
grazie intanto
per fare il lavoro più semplice visto che mi sembra un bel lavoraccio ho pensato ad una soluzione alternativa...fare una pagina php (in sostanza un piccolo web service come suggerito) per controllare però solo l'esistenza di un utente
solo l'esistenza o anche la password? perchè la cosa è differente in termini di codice ;)
Ti sono stato utile? Aiutami anche tu votando Simple File Manager sulla Joomla! Extension Directory!

Offline Aitor

  • Nuovo arrivato
  • *
  • Post: 30
  • Sesso: Maschio
    • Mostra profilo
    • Davide "Aitor" Finetto
Re:Collegarsi al database joomla con Android/Java
« Risposta #7 il: 11 Ott 2012, 14:48:19 »
volevo provare anche con la password anche se ho visto che sono criptate e non è cosa semplice

Offline tomtomeight

  • Global Moderator
  • Fuori controllo
  • ********
  • Post: 27113
  • Sesso: Maschio
  • Chi si specializza muore.
    • Mostra profilo
    • Xataface Italia
Re:Collegarsi al database joomla con Android/Java
« Risposta #8 il: 11 Ott 2012, 14:54:34 »
Il fatto che siano criptate e che non sia possibile in alcun modo decriptarle non dovrebbe costituire un problema.Infatti anche joomla non le decripta quando verifica le password di un utente che effettua un login, ma le confronta applicando a quella inserita lo stesso algoritmo di criptazione e se il risultato è uguale allora concede la sessione. Devi ripetere lo stesso algoritmo nella tua applicazione.
NEWS DataGrill Xataface Installer (Ver. 1.0.0) per Joomla 3.6 ed un Esempio Applicazione Bblioteca

Offline Aitor

  • Nuovo arrivato
  • *
  • Post: 30
  • Sesso: Maschio
    • Mostra profilo
    • Davide "Aitor" Finetto
Re:Collegarsi al database joomla con Android/Java
« Risposta #9 il: 11 Ott 2012, 16:07:06 »
ok grazie, io allora prendo i dati login in questo modo:
$username = $post->get('username');
$password = $post->get('password');
$credentials = array("username" => $username, "password" => $password);

poi in ...libraries\joomla\user\authentication.php vedo che la funzione "authenticate" prende in ingresso questi 2 valori (almeno mi sembra sia la funzione che joomla usa per il login):
public function authenticate($credentials, $options = array())
    {..

per credentials siamo a posto (vedi sopra) mentre per options cosa intende?

Offline tomtomeight

  • Global Moderator
  • Fuori controllo
  • ********
  • Post: 27113
  • Sesso: Maschio
  • Chi si specializza muore.
    • Mostra profilo
    • Xataface Italia
Re:Collegarsi al database joomla con Android/Java
« Risposta #10 il: 11 Ott 2012, 16:18:11 »
Scusami ma per fare chiarezza, se parli di applicazione android devi poter eseguire un programma su android stesso, non ho la minima idea di come e con quale linguaggio si operi su questi dispositivi. Ho solo qualche perplessità sul fatto di interagire col db joomla da remoto cosa che non è sempre possibile. Allora forse dovresti metter la parte server del prg sullo stesso server che ospita joomla e da lì fai le operazioni. Ma non avendo la conoscenza di come si implementa un applicazione android e cosa poi alla fine dovrebbe fare rischio solo di dire sciocchezze.  :(
NEWS DataGrill Xataface Installer (Ver. 1.0.0) per Joomla 3.6 ed un Esempio Applicazione Bblioteca

Offline simone83

  • Appassionato
  • ***
  • Post: 362
  • Sesso: Maschio
    • Mostra profilo
    • Braincode gli artigiani del codice
Re:Collegarsi al database joomla con Android/Java
« Risposta #11 il: 11 Ott 2012, 16:29:55 »
puoi effettuare il login richiamando JFactory::getApplication()->login($credentials) senza options che puo essere un array vuoto e ti ritorna true se il login e valido.

$credentials va bene come l'hai impostato

Offline Aitor

  • Nuovo arrivato
  • *
  • Post: 30
  • Sesso: Maschio
    • Mostra profilo
    • Davide "Aitor" Finetto
Re:Collegarsi al database joomla con Android/Java
« Risposta #12 il: 11 Ott 2012, 16:30:23 »
edit, doppio messaggio

Offline Aitor

  • Nuovo arrivato
  • *
  • Post: 30
  • Sesso: Maschio
    • Mostra profilo
    • Davide "Aitor" Finetto
Re:Collegarsi al database joomla con Android/Java
« Risposta #13 il: 11 Ott 2012, 16:30:54 »
Scusami ma per fare chiarezza, se parli di applicazione android devi poter eseguire un programma su android stesso, non ho la minima idea di come e con quale linguaggio si operi su questi dispositivi. Ho solo qualche perplessità sul fatto di interagire col db joomla da remoto cosa che non è sempre possibile. Allora forse dovresti metter la parte server del prg sullo stesso server che ospita joomla e da lì fai le operazioni. Ma non avendo la conoscenza di come si implementa un applicazione android e cosa poi alla fine dovrebbe fare rischio solo di dire sciocchezze.  :(

su android si programma in java in sostanza, la mia idea era questa (spero sia fattibile anche se sto trovando delle difficoltà):
il mio sito joomla è ospitato su di un server e l'applicazione android va a collegarsi direttamente a questo server usando le librerie standard joomla.

- il programma android prende nome utente e password e la passa ad un file php (presente sul server che ospita joomla)
-il file php, riutilizzando le librerie di joomla (includendole o facendo un saggio copia/incolla) mi da come ritorno un flag, true o false nel caso l'utente esista o non esista
-ripasso il risultato del flag all'applicazione android

ho deciso di lasciare stare la storia della sessione utente etc perchè da quello che ho capito non è facile integrarla in una applicazione esterna. In sostanza quello che faccio con questa applicazione è solo un controllo

Offline Aitor

  • Nuovo arrivato
  • *
  • Post: 30
  • Sesso: Maschio
    • Mostra profilo
    • Davide "Aitor" Finetto
Re:Collegarsi al database joomla con Android/Java
« Risposta #14 il: 11 Ott 2012, 17:08:17 »
puoi effettuare il login richiamando JFactory::getApplication()->login($credentials) senza options che puo essere un array vuoto e ti ritorna true se il login e valido.

$credentials va bene come l'hai impostato

in linea teorica questo minicodice potrebbe funzionare?

$credentials = array();
$credentials['username'] = "test";
$credentials['password'] = "test";
   
$result=JFactory::getApplication()->login($credentials);
echo   $result;   

perchè non mi da nessu risultato. Ho alcuni dubbi sulla funzione JFactory....per prendere il valore che ritorna la funzione/applicazione bisogna assegnargli una variabile come ho fatto io?

Offline simone83

  • Appassionato
  • ***
  • Post: 362
  • Sesso: Maschio
    • Mostra profilo
    • Braincode gli artigiani del codice
Re:Collegarsi al database joomla con Android/Java
« Risposta #15 il: 11 Ott 2012, 17:17:52 »
ritorna un boolean e dubito che un echo result ti stampi qualcosa  ;)

Offline Aitor

  • Nuovo arrivato
  • *
  • Post: 30
  • Sesso: Maschio
    • Mostra profilo
    • Davide "Aitor" Finetto
Re:Collegarsi al database joomla con Android/Java
« Risposta #16 il: 11 Ott 2012, 17:25:51 »
diciamo che sto provando e riprovando ma la pagina php rimane sempre bianca

<?php
$credentials = array();
$credentials['username'] = "test";
$credentials['password'] = "test";
$result = FALSE;
   
    $result=JFactory::getApplication()->login($credentials);

   
    if (result==TRUE) {
        echo "LOGGATO";
    }
    else{
    echo "NO LOGGATO";}                             
?>


anche con questo tentativo se aggiorno la pagina non mi da nessun risultato, e si che almeno uno dei 2 risultati deve darmelo...mah

Offline simone83

  • Appassionato
  • ***
  • Post: 362
  • Sesso: Maschio
    • Mostra profilo
    • Braincode gli artigiani del codice
Re:Collegarsi al database joomla con Android/Java
« Risposta #17 il: 11 Ott 2012, 17:29:32 »
hai gli errori abilitati? molto probailmente no, aggiungi un ini_set('display_errors',true); all'inizio e aggiungi un echo dopo per vedere se sei effettivamente in quella pagina

Offline Aitor

  • Nuovo arrivato
  • *
  • Post: 30
  • Sesso: Maschio
    • Mostra profilo
    • Davide "Aitor" Finetto
Re:Collegarsi al database joomla con Android/Java
« Risposta #18 il: 11 Ott 2012, 18:46:45 »
ora funziona! grazie mille! abilitando gli errori ho capito subito (dovevo fare delle inclusioni base di librerie joomla). Ora vedo di fare il passaggio delle variabili da android a php.
Ecco il codice per chi interessa:

<?php
ini_set('display_errors',true);
define( '_JEXEC', 1 );

define('JPATH_BASE', dirname(__FILE__) );
define( 'DS', DIRECTORY_SEPARATOR );

require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );

require('libraries/joomla/factory.php');
// initialize the application
$mainframe =& JFactory::getApplication('site');
$mainframe->initialise();

$user =& JFactory::getUser();

$credentials = array();
$options = array();
$credentials['username'] = $post->get('username');;
$credentials['password'] = $post->get('password');
$result = False;
$result=JFactory::getApplication()->login($credentials,$options);

    if ($result==False) {
        echo "NON LOGGATO";
    }
    else{
    echo "LOGGATO";}
   
    return $result;
   
?>

unica cosa: quando i login è sbagliato la pagina php mi da il seguente errore (ma mi interessa che il flag di return funziona e mi sembra di si quindi potrei anche sorvolare). Penso sia dovuto al fatto che lavoro con un file esterno, può essere?

 Warning:  fopen(/opt/enginecube/webdomains/URL.it/home/htdocs/logs/error.php) [function.fopen]: failed to open stream: Permission denied in /opt/enginecube/webdomains/URL.it/home/htdocs/libraries/joomla/log/loggers/formattedtext.php on line 248
 
 Warning:  fputs() expects parameter 1 to be resource, boolean given in /opt/enginecube/webdomains/URL.it/home/htdocs/libraries/joomla/log/loggers/formattedtext.php on line 183
 
 Fatal error:  Uncaught exception 'LogException' in /opt/enginecube/webdomains/URL.it/home/htdocs/libraries/joomla/log/loggers/formattedtext.php:185 Stack trace: #0 /opt/enginecube/webdomains/URL.it/home/htdocs/libraries/joomla/log/log.php(382): JLoggerFormattedText->addEntry(Object(JLogEntry)) #1 /opt/enginecube/webdomains/URL.it/home/htdocs/libraries/joomla/log/log.php(346): JLog->addLogEntry(Object(JLogEntry)) #2 /opt/enginecube/webdomains/URL.it/home/htdocs/plugins/system/log/log.php(41): JLog->addEntry(Array) #3 [internal function]: plgSystemLog->onUserLoginFailure(Array) #4 /opt/enginecube/webdomains/URL.it/home/htdocs/libraries/joomla/event/event.php(71): call_user_func_array(Array, Array) #5 /opt/enginecube/webdomains/URL.it/home/htdocs/libraries/joomla/event/dispatcher.php(161): JEvent->update(Array) #6 /opt/enginecube/webdomains/URL.it/home/htdocs/libraries/joomla/application/application.php(642): JDispatcher->trigger('onUserLoginFail...', Array) #7 /opt/enginecube/webdomains/URL.it in /opt/enginecube/webdomains/URL.it/home/htdocs/libraries/joomla/log/loggers/formattedtext.php on line 185

comunque non ho avuto modo di approfondire questi errori, stasera guarderò meglio
« Ultima modifica: 13 Ott 2012, 14:19:44 da Aitor »

Offline simone83

  • Appassionato
  • ***
  • Post: 362
  • Sesso: Maschio
    • Mostra profilo
    • Braincode gli artigiani del codice
Re:Collegarsi al database joomla con Android/Java
« Risposta #19 il: 11 Ott 2012, 19:02:19 »
l'ho gia visto questo errore, mi veniva fuori quando cancellavo un utente, o qualcosa del genere ma su joomla 1.6, prova a settare bene il perscorso del file di log e dargli i permessi di scrittura al file, se ci fai caso su joomla se non hai permessi di scrittura nel file log ti da un errore 500 al login sbagliato!

 

Torna su