Come inserire login "autorizzazione"

Buongiorno a tutti, è da qualche giorno che ho acquistato un arduino mega con la ethernet shield “W5100” e ho creato/modificato uno sketch che mi permette di accendere un led da web. A questa pagina, di cui allego lo sketch, vorrei che all’apertura dell’indirizzo “192.168.0.177” mi venga chiesto di inserire nome utente e password, ovviamente queste saranno decodificate tramite il comando “convertbase64”. Ho già fatto esperienza con la libreria “webduino” ma non riesco a inserirla in questo banale sketch. Grazie per l’attenzione. Qualcuno, gentilmente, mi aiuta? Grazie…

#include <SPI.h>
#include <Ethernet.h>
#include <WebServer.h>
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = {192, 168, 0, 177 };
byte subnet[] = {255, 255, 255, 0 };
EthernetServer server(80);

String readString;
//dichiaro il pin
byte out_1 = 2;


void setup()
{ 
  Ethernet.begin(mac, ip);
//imposto il pin in uscita
  pinMode(out_1, OUTPUT);
  

}
 
void loop(){
 
  EthernetClient  client = server.available();
 
  if (client) {
    boolean currentLineIsBlank = true;
 
    while (client.connected()) {
      if (client.available()) { 
        char c = client.read();
        readString.concat(c);   
        if (c == '\n' && currentLineIsBlank) {
 
         //se leggi la stringa on1 allora accendi il pin 1 (ecc.)
          if(readString.indexOf("on_1") > 0) digitalWrite(out_1, HIGH);        
          if(readString.indexOf("off_1") > 0) digitalWrite(out_1, LOW);          
          
          //  PAGINA HTML      
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
          client.print("<html><head><title>ARDUINO Controllo WEB</title><meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1' ></head><body>");
          client.print("

");
          client.print("Controllo remoto");
          client.print("<p>");
 
         
         client.println("</body></html>");
 
          readString="";
          delay(5);
 
          client.flush();
          client.stop(); 
        }
      }
    }
  }
}

edit by mod: per favore includi il codice usando gli appositi tag

Ciao,

penso dovresti guardarti la BASIC AUTHENTICATION dell'HTTP.

E' piuttosto semplice, a questo indirizzo http://it.wikipedia.org/wiki/Basic_access_authentication trovi già quello che dovrebbe essere sufficiente. Se hai bisogno di maggiori informazioni una semplice ricerca su google ti fornirà un milione di risultati.

Si tratta quindi di inserire le opportune righe client.println quando crei l'header dell'HTTP, distinguendo il caso in cui l'utente non ti ha mandato la riga "Authorization:..." nell'header della richiesta (devi rispondere con status 401 e riga "WWW-Authenticate:..." nell'header) dal caso in cui te l'ha mandata (devi controllare che il nome utente e la password sia corrette dopo averle decodificate dal base64).

Ciao. V.

quando tu fai

if(readString.indexOf("on_1") > 0) digitalWrite(out_1, HIGH);

stai leggendo i parametri che il client ti passa. un metodo semplice e sporco è di aggiungere user e pass tra le richieste... ma te li trascineresti dietro.

Un metodo più bello è assegnare un numero random, valido per un tot di tempo o fino al logout, e ti trascini dietro solo quel numero. Se ricevi una richiesta senza numero, o con un numero invalido, stampi la pagina di login. Ovvio che la pagina di login dovrà inviare le utenze, ma avviene solo una volta, riducendo un sacco le probabilità di "sniffarle". Infine non dovresti passarle con una GET (che è il metodo che usi) perchè l'url con user e pass sarebbe salvato nella cronologia del browser, e basterebbe richiamare quell'url per collegarsi in automagico; invece devi fare una POST, che però ha un metodo differente di passare i dati (invece che essere all'inizio sono a fine richiesta, ma per il resto cambia poco)

vittorio68: penso dovresti guardarti la BASIC AUTHENTICATION dell'HTTP.

questo è un modo facile e veloce per chi ha già un webserver, ma su arduino devi poi comunque gestirti da solo il tracciamento dell'utente identificato (che utilizza il metodo del codice descritto, una volta si passava il codice via cookie, ora si preferisce passare tutto da POST così puoi avere più sessioni con diverse utenze sullo stesso browser :)

bhe se ti mancano le basi per capire che ilcomendo che ti ho evidenziato è la chiave di volta con cui puoi fare tutto quello che chiedi (anche se è un metodo "sporco", come inizio va più che bene), allora ti conviene fermarti un attimo e farti le basi, se no non vai da nessuna parte.

Questo sckecth però è abbastanza semplice per iniziare. Sapresti dirmi riga per riga cosa fa il codice?

Quindi, cosa fa quel comando? e sopratutto perchè?