<?php
// Parameter
$base="/home/infofix/cgi-bin/kontakt";
$ttf=$base."/captcha.ttf";
$ip=$_SERVER["REMOTE_ADDR"];
$w=200;
$h=45;
$SchriftGroesse=16;

//-- neue zufallswerte
// Funktion, um eine zufällige Zahl oder einen Buchstaben zu generieren
function generiereZufallswert() {
    $zeichen = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
    $zeichen = '123456789ABCDEFGHIJKLMNPQRSTUVWXYZ!';
#    return $zeichen[random_int(0, strlen($zeichen) - 1)];
    return $zeichen[rand(0, strlen($zeichen) - 1)];
}

function readTxtFile($fn)
{
    $fh=fopen($fn,"r");
    $text=fgets($fh);
    fclose($fh);
    return $text;
}


function createCaptcha()
{
    global $base,$ip;
    $fn=$base."/tmp/CAPTCHA-$ip.txt";
    if (is_file($fn)) {
	$curTime=Time();
	$age=$curTime-filemtime($fn);
	if ($age<30) {
	    return readTxtFile($fn);
	} 
    }
    // Array für die 6 zufälligen Werte
    $zufallswerte = [];

    // 6 zufällige Werte generieren
    for ($i = 0; $i < 6; $i++) {
	$zufallswerte[] = generiereZufallswert();
    }

    // Werte in die Datei schreiben
    file_put_contents($fn, implode("", $zufallswerte));
    return readTxtFile($fn);
}

function checkBlocked($ip)
{
    global $base;
    $filePath=$base."/block.txt";
    // Prüfen, ob Datei existiert und lesbar ist
    if (!file_exists($filePath) || !is_readable($filePath)) {
        die("Fehler: Datei nicht gefunden oder nicht lesbar.\n");
    }

    // Datei im Lesemodus öffnen
    $handle = fopen($filePath, "r");
    if ($handle === false) {
        die("Fehler: Datei konnte nicht geöffnet werden.\n");
    }

    $lineNumber = 0;
    $found = false;

    // Datei zeilenweise lesen
    while (($line = fgets($handle)) !== false) {
        $lineNumber++;
        $trimmedLine = trim($line); // Entfernt Leerzeichen und Zeilenumbrüche

        // Prüfen, ob der Suchbegriff in der Zeile vorkommt (case-insensitive)
        $pos = stripos($ip,$trimmedLine); 
        if ( $pos !== false && $pos == 0) {
            $found = true;
        }
    }

    // Datei schließen
    fclose($handle);
    return $found;
}

if (checkBlocked($ip)) {
    $text="BLOCKED";
} else {
    $text=createCaptcha();
}

$text=substr($text,3);
$w=90;

// Unsere Zeichen in einem Array


Header ("Content-type: image/png");
//

// Laden der Rohdatei, die sich im Verzeichnis befinden muss
//$bild = ImageCreateFromPNG ("captcha-clock.png");
$bild = ImageCreateTrueColor($w,$h);

// Farben definieren
$farbe_w = ImageColorAllocate ($bild, 255, 255, 255);
$farbe_b = ImageColorAllocate ($bild, 0, 0, 0);
$farbe_bk = ImageColorAllocate ($bild, 255, 128, 64);

#ImageFilledRectangle($bild,0,0,$w-1,$h-1,$farbe_bk);
ImageFilledRectangle($bild,0,0,$w-1,$h-1,$farbe_bk);

// die verwendete Schrift-Datei arial.ttf muss vorhanden sein
// Aufbau:// Schriftgröße, Winkel, X-Pos., Y-Pos, Farbe, Schrift, Inhalt
$xp=5;
for ($i=0;$i<strlen($text);$i++) {
    $xp=3+ImageTTFText ($bild, $SchriftGroesse, mt_rand(-15,+15), $xp,  mt_rand(28,34), $farbe_w, $ttf, $text[$i])[2];
}

// Ausgabe im Format PNG
ImagePng     ($bild);
// Resourcen wieder freigeben
ImageDestroy ($bild);
?>