<?php

#
# authentication script by peter krausgrill
#

function box($text)
{
    return

    
'<TABLE cellspacing="0" cellpadding="0" border="0" width="440">'
    
        
# TOP
        
.'<TR>'
            
.'<TD WIDTH="22"><IMG SRC="images/t.gif" WIDTH="1" HEIGHT="1" BORDER="0" ALT=""></TD>'
            
.'<TD WIDTH="19"><IMG SRC="images/t_l_t.gif" WIDTH="19" HEIGHT="19" BORDER="0" ALT=""></TD>'
            
.'<TD><IMG SRC="images/t_t_m.gif" WIDTH="380" HEIGHT="19" BORDER="0" ALT=""></TD>'
            
.'<TD><IMG SRC="images/t_r_t.gif" WIDTH="19" HEIGHT="19" BORDER="0" ALT=""></TD>'
        
.'</TR>'
        
# GERADE
        
.'<TR>'
            
.'<TD WIDTH="22"><IMG SRC="images/t.gif" WIDTH="1" HEIGHT="1" BORDER="0" ALT=""></TD>'
            
.'<TD WIDTH="19"  background="images/t_l_m.gif"><IMG SRC="images/t_l_m.gif" WIDTH="19" HEIGHT="5" BORDER="0" ALT=""></TD>'
            
.'<TD rowspan="3" bgcolor="#EFEFEF" style="font-family : Verdana; font-size : 14px; color : #000063;">'.$text.'</TD>'
            
.'<TD rowspan="3" background="images/t_r_m.gif"><IMG SRC="images/t_r_m.gif" WIDTH="19" HEIGHT="60" BORDER="0" ALT=""></TD>'
        
.'</TR>'
        
# SPITZE
        
.'<TR>'
            
.'<TD colspan="2"><IMG SRC="images/t_l_s.gif" WIDTH="41" HEIGHT="50" BORDER="0" ALT=""></TD>'
        
.'</TR>'
        
# GERADE
        
.'<TR>'
            
.'<TD WIDTH="22"><IMG SRC="images/t.gif" WIDTH="1" HEIGHT="1" BORDER="0" ALT=""></TD>'
            
.'<TD WIDTH="19" background="images/t_l_m.gif"><IMG SRC="images/t_l_m.gif" WIDTH="19" HEIGHT="5" BORDER="0" ALT=""></TD>'
        
.'</TR>'
        
# BOTTOM
        
.'<TR>'
            
.'<TD WIDTH="22"><IMG SRC="images/t.gif" WIDTH="1" HEIGHT="1" BORDER="0" ALT=""></TD>'
            
.'<TD WIDTH="19"><IMG SRC="images/t_l_b.gif" WIDTH="19" HEIGHT="19" BORDER="0" ALT=""></TD>'
            
.'<TD><IMG SRC="images/t_b_m.gif" WIDTH="380" HEIGHT="19" BORDER="0" ALT=""></TD>'
            
.'<TD><IMG SRC="images/t_r_b.gif" WIDTH="19" HEIGHT="19" BORDER="0" ALT=""></TD>'
        
.'</TR>'

    
.'</TABLE><IMG SRC="images/t.gif" WIDTH="1" HEIGHT="10" BORDER="0" ALT="">';
}


class 
Login
{
    var 
$error                '';
    var 
$status                = array( minutes => );


    function 
Validate()
    {
        
$_POST[l_time] += 0;

        
$s_ip    $_SERVER[REMOTE_ADDR];

        
####################################################################
        # session active
        ####################################################################
        
$dbq "SELECT c.minutes_free, UNIX_TIMESTAMP(s.expires) - UNIX_TIMESTAMP(NOW()) FROM code c, session s WHERE (c.id=s.code_id) AND (s.ip = '$s_ip') AND (s.expires >= NOW()) AND (s.status = 'enabled')";

        
$dbr mysql_query($dbq);

        if (!
$dbr)
        {
            
$this->error "Es gabe ein Datenbank Problem. Bitte wenden Sie sich an den Support.<br><br><b>Fehler :</b> "mysql_error();
            return 
0;
        }

        if (
mysql_num_rows($dbr) > 0)
        {
            list(
$this->status[minutes], $this->status[minutes_left]) = mysql_fetch_row($dbr);
            
            if (
$time floor($this->status[minutes_left]/60))

                
$time $time.' Minuten';

            else

                
$time $this->status[minutes_left].' Sekunden';


            
$this->error 
            
            
'Herzlich Willkommen in unserem Netzwerk.<br>'
            
.'<br>'
            
.'Kartenguthaben : <b>'.$this->status[minutes].' Minuten</b><br>'
            
.'Verbleibende Zeit : <b>'.$time.'</b>';

            return 
1;
        }

        
####################################################################
        # basic check -> inital
        ####################################################################
        
if ( (!$_POST[l_code_1]) && (!$_POST[l_code_2]) && (!$_POST[l_code_3]) && (!$_POST[l_code_4]) && (!$_POST[l_time]) )
        {
            
$this->error 'Bitte geben Sie die vier Wörter auf Ihrer Zeitkarte ein um den Internetzugang frei zu schalten.<br><br>Falls Sie mehr über unseren Service wissen möchten klicken Sie bitte <a href="#">hier</a>.';
            return 
0;
        }

        
####################################################################
        # basic check -> empty || null || 0
        ####################################################################
        
if ( (!$_POST[l_code_1]) || (!$_POST[l_code_2]) || (!$_POST[l_code_3]) || (!$_POST[l_code_4]) || (!$_POST[l_time]) )
        {
            
$this->error 'Der Code ist unvollständig';
            return 
0;
        }

        
####################################################################
        # code valid
        ####################################################################
        
$dbq "SELECT c.id, c.minutes_free, (c.date_expires < NOW()) "
                
."FROM code c, word w1, word w2, word w3, word w4 "
                
."WHERE "
                    
."LCASE(w1.word) = LCASE('".trim($_POST[l_code_1])."') AND LCASE(w2.word) = LCASE('".trim($_POST[l_code_2])."') AND LCASE(w3.word) = LCASE('".trim($_POST[l_code_3])."') AND LCASE(w4.word) = LCASE('".trim($_POST[l_code_4])."') AND "
                    
."(c.code_1=w1.id) AND (c.code_2=w2.id) AND (c.code_3=w3.id) AND (c.code_4=w4.id) AND "
                    
."(c.status='enabled')"
                
."LIMIT 0, 1";

        
$dbr mysql_query($dbq);

        if (!
$dbr)
        {
            
$this->error "Es gabe ein Datenbank Problem. Bitte wenden Sie sich an den Support.<br><br><b>Fehler :</b> "mysql_error();
            return 
0;
        }

        if ( !
mysql_num_rows($dbr) )
        {
            
$this->error 'Der Code ist ungültig';
            return 
0;
        }

        list(
$c_id$this->status[minutes], $this->status[expired]) = mysql_fetch_row($dbr);

        
####################################################################
        # code expired
        ####################################################################
        
if ($this->status[expired])
        {
            
$this->error 'Dein Code ist leider abgelaufen';
            return 
0;
        }

        
####################################################################
        # code empty
        ####################################################################
        
if ($this->status[minutes] <= 0)
        {
            
$this->error 'Auf Ihrer Zeitkarte befindet sich leider kein Guthaben mehr.';
            return 
0;
        }

        
####################################################################
        # code time
        ####################################################################
        
if ($this->status[minutes] < $_POST[l_time])
        {
            
$this->error 'Auf Ihrer Zeitkarte befindet sich leider nicht genügend Guthaben. Bitte wählen Sie einen anderen Wert.';
            return 
0;
        }


        
####################################################################
        # client enable
        ####################################################################

        
include "_dhcp_leases.php";

        
$dhcpd = new DHCPD("/var/state/dhcp/dhcpd.leases");

        
$s_mac    $dhcpd->IP2MAC($s_ip);
        
$s_host    $dhcpd->MAC2HOST($s_mac);
        
        if ( 
exec 'bash -c "/share/hotspot/script/firewall.sh addClient '.$s_ip.' '.$s_mac.' 2>&1"'$output$return_var) )
        {
            if (
$return_var)
            {
                
# DEBUG STUFF
                /**/
                
foreach ($output as $s)
                    
$error .= "$s\n";

                
$this->error "<pre>CODE: $return_var\n\n$error</pre>";
                
/**/

                #$this->error = 'Error enableing Client';
                
return 0;
            }
        }
        else
        {
            
$this->error 'Error enableing Client';
            return 
0;
        }


        
####################################################################
        # create session
        ####################################################################
        
$dbq "INSERT INTO session SET code_id='$c_id', mac='$s_mac', ip='$s_ip', host='$s_host', activated=NOW(), expires=DATE_ADD(NOW(), INTERVAL ".$_POST[l_time]." MINUTE), status='enabled'";

        
$dbr mysql_query($dbq);

        if (!
$dbr)
        {
            
$this->error "Es gabe ein Datenbank Problem. Bitte wenden Sie sich an den Support.<br><br><b>Fehler :</b> "mysql_error();
            return 
0;
        }

        
####################################################################
        # update code
        ####################################################################
        
$dbq "UPDATE code SET minutes_free=minutes_free-".$_POST[l_time]." WHERE id='$c_id'";

        
$dbr mysql_query($dbq);

        if (!
$dbr)
        {
            
$this->error "Es gabe ein Datenbank Problem. Bitte wenden Sie sich an den Support.<br><br><b>Fehler :</b> "mysql_error();
            return 
0;
        }

        if (
$_POST[l_url])
            
$url 
            
'<br>'
            
.'Zu Deinem ursprünglichen Ziel kommst du hier:<br>'
            
.'<br>'
            
.'<b><a href="http://'.$_POST[l_url].$_POST[l_query].'">http://'.$_POST[l_url].'</a></b>';

        
$this->error 
            
            
'Herzlich Willkommen in unserem Netzwerk.<br>'
            
.'<br>'
            
.'Dein Restguthaben beträgt: <b>'.($this->status[minutes]-$_POST[l_time]).' Minuten</b><br>'
            
.$url;

        return 
1;
    }


    
####################################################################
    # Der AFFE
    ####################################################################
    
function Monkey($speech$content)
    {
        return

        
'<TABLE cellspacing="0" cellpadding="0" border="0" width="620" bgcolor="#FFFFFF">'
        
            
.'<TR>'
                
.'<TD WIDTH="20"><IMG SRC="images/t.gif" WIDTH="20" HEIGHT="161" BORDER="0" ALT=""></TD>'
                
.'<TD WIDTH="120" valign="bottom" rowspan="3"><IMG SRC="images/l_affe.gif" WIDTH="120" HEIGHT="147" BORDER="0" ALT=""></TD>'
                
.'<TD>'.box($speech).'</TD>'
            
.'</TR>'
            
.'<TR>'
                
.'<TD bgcolor="#C1C1D1" HEIGHT="1"><IMG SRC="images/t.gif" WIDTH="1" HEIGHT="1" BORDER="0" ALT=""></TD>'
                
.'<TD bgcolor="#C1C1D1" HEIGHT="1"><IMG SRC="images/t.gif" WIDTH="1" HEIGHT="1" BORDER="0" ALT=""></TD>'
            
.'</TR>'
            
.'<TR>'
                
.'<TD bgcolor="#F5F5F5" HEIGHT="35"><IMG SRC="images/t.gif" WIDTH="1" HEIGHT="35" BORDER="0" ALT=""></TD>'
                
.'<TD bgcolor="#F5F5F5" HEIGHT="35"><IMG SRC="images/t.gif" WIDTH="1" HEIGHT="35" BORDER="0" ALT=""></TD>'
            
.'</TR>'
            
.'<TR>'
                
.'<TD bgcolor="#F5F5F5"><IMG SRC="images/t.gif" WIDTH="20"  HEIGHT="1" BORDER="0" ALT=""></TD>'
                
.'<TD bgcolor="#F5F5F5" colspan="2" align="left">'.$content.'</TD>'
            
.'</TR>'
            
.'<TR><TD bgcolor="#C1C1D1" colspan="3"><IMG SRC="images/t.gif" WIDTH="1" HEIGHT="1" BORDER="0" ALT=""></TD></TR>'
            

        
.'</TABLE>';
    }

    
####################################################################
    # Das Formular
    ####################################################################
    
function Form()
    {
        return

        
'<TABLE cellspacing="0" cellpadding="0" border="0">'
            
            
.'<FORM METHOD="POST" ACTION="https://10.11.12.13/index.php">' #.$_SERVER[PHP_SELF].'">'
            
.'<INPUT TYPE="hidden" NAME="s" VALUE="1">'
            
.'<INPUT TYPE="hidden" NAME="l_url" VALUE="'.$_POST[l_url].'">'
            
.'<INPUT TYPE="hidden" NAME="l_query" VALUE="'.$_POST[l_query].'">'

            
.'<TR>'
                
.'<TD valign="top" rowspan="2"><IMG SRC="images/t.gif" WIDTH="120"  HEIGHT="1" BORDER="0" ALT=""><IMG SRC="images/l_lock.gif" WIDTH="110" HEIGHT="129" BORDER="0" ALT=""></TD>'
                
.'<TD valign="top" rowspan="2"><IMG SRC="images/t.gif" WIDTH="20" HEIGHT="1" BORDER="0" ALT=""></TD>'
                
.'<TD valign="top" rowspan="2">'
                    
.'<IMG SRC="images/l_codewoerter.gif" WIDTH="91" HEIGHT="27" BORDER="0" ALT="Codewörter"><br>'
                    
.'<INPUT TYPE="text" NAME="l_code_1" VALUE="'.$_POST[l_code_1].'"><br>'
                    
.'<IMG SRC="images/t.gif" WIDTH="2" HEIGHT="1" BORDER="0" ALT=""><br>'
                    
.'<INPUT TYPE="text" NAME="l_code_2" VALUE="'.$_POST[l_code_2].'"><br>'
                    
.'<IMG SRC="images/t.gif" WIDTH="2" HEIGHT="1" BORDER="0" ALT=""><br>'
                    
.'<INPUT TYPE="text" NAME="l_code_3" VALUE="'.$_POST[l_code_3].'"><br>'
                    
.'<IMG SRC="images/t.gif" WIDTH="2" HEIGHT="1" BORDER="0" ALT=""><br>'
                    
.'<INPUT TYPE="text" NAME="l_code_4" VALUE="'.$_POST[l_code_4].'"><br>'
                
.'</TD>'
                
.'<TD valign="top" rowspan="2"><IMG SRC="images/t.gif" WIDTH="20" HEIGHT="1" BORDER="0" ALT=""></TD>'
                
.'<TD valign="top">'
                    
.'<IMG SRC="images/l_zeit.gif" WIDTH="35" HEIGHT="27" BORDER="0" ALT="Zeit"><br>'
                    
.'<SELECT NAME="l_time"><OPTION value="30">30 Minuten</OPTION><OPTION value="60">60 Minuten</OPTION><OPTION value="90">90 Minuten</OPTION></SELECT><br>'
                
.'</TD>'
            
.'</TR>'
            
.'<TR>'
                
.'<TD valign="middle" align="center">'
                    
.'<INPUT TYPE="image" SRC="images/l_button.gif" WIDTH="46" HEIGHT="46" BORDER="0" ALT="">'
                
.'</TD>'
            
.'</TR>'

            
.'</FORM>'

        
.'</TABLE>';

    }

    

    function 
Show()
    {
        if (
$_GET[url])
        {
            
$_POST[l_url] = $_GET[url];

            foreach (
$_GET as $k => $v)
                if (
$k != 'url')
                    
$_POST[l_query] .= "&$k=$v";

            
$_POST[l_query] = '?'.substr($_POST[l_query], 1);
        }

        
#return  $this->Monkey( urldecode($_POST[l_url]), $this->Form() );

        
if (!$this->Validate())

            return  
$this->Monkey$this->error$this->Form() );

        else

            return  
$this->Monkey$this->error'<IMG SRC="images/t.gif" WIDTH="58"  HEIGHT="1" BORDER="0" ALT=""><IMG SRC="images/l_success.gif" WIDTH="489" HEIGHT="134" BORDER="0" ALT=""><br><br>' );

    }

}

?>