// logout.cgi: applicazione per registrare l'uscita dall'area // dei corsi. #include #include "applicat.h" class Logout_Application : public Application { private: String _dbname; String _utente; // Utente corrente PgEnv _environment; PgTransaction *_db; protected: virtual bool create(); virtual bool destroy(); virtual void main_func(); void logout(); public: Logout_Application() {_db = NULL;} virtual ~Logout_Application() {}; }; bool Logout_Application::create() { _dbname = POSTGRES_DB; _environment.Port(POSTGRES_PORT); _environment.Host(POSTGRES_HOST); print_header("Uscita dall'area corsi"); _utente = getenv("REMOTE_USER");; return TRUE; } bool Logout_Application::destroy() { print_footer(); return TRUE; } void Logout_Application::logout() { // String command; // Compone la stringa di selezione utente: nome utente & logged altrimenti nisba logout! command = "SELECT * FROM UTENTI WHERE loginname='"; command += _utente; command += "' AND logged='t'"; _db->ExecCommandOk(command); const int tuples = _db->Tuples(); if (tuples > 0) { // E' loggato oppure no... // Cosa deve fare: // Sistema le informazioni di logging dell'utente (anche sulla tabella ACCESSI) String progressivo; progressivo = _db->GetValue(0, "progaccesso"); command = "UPDATE UTENTI SET logged=0, logindate=null "; command += " WHERE loginname='"; command += _utente; command += "'"; _db->ExecCommandOk(command); // Aggiorna la tabella utenti command = "UPDATE ACCESSI SET logoutdate=current_timestamp WHERE loginname='"; command += _utente; command += "' AND progressivo="; command += progressivo; _db->ExecCommandOk(command); // Aggiorna la tabella accessi } // Se non trova l'utente indicato oppure non era loggato // visualizza ugualmente un messaggio ingannatoreà cout << "

Uscita dall'area corsi



" << endl; cout << "

Uscita dall'area corsi effettuata con successo.


"; cout << "

Le informazioni necessarie sono state registrate.


"; cout << "

Grazie.


"; return; } void Logout_Application::main_func() { // Controllo utente: se il CGI viene chiamato senza indicazioni d'utente // non mostra proprio nulla (null logout) if (_utente.empty()) { cout << "

Uscita dall'area corsi



" << endl; cout << "

Uscita dall'area corsi effettuata con successo.


"; return; } // Se e' stato impostato l'utente, effettua la logout() // Inizia la transazione _db = new PgTransaction(_environment, _dbname); if ( _db->ConnectionBad() ) print_database_error(); else logout(); delete _db; // Termina la transazione return; } int main(int argc, char* argv[]) { Logout_Application* a = new Logout_Application(); a->run(argc, argv); delete a; exit(0); }