<?php


//Benutzung:
//- Webserver: GET oder POST input="input"
//- Kommandozeile: "input" "zieldatei.png"

function base64url_encode($data) {
    return 
rtrim(strtr(base64_encode($data), '+/''-_'), '=');
}

function 
base64url_decode($data) {
    return 
base64_decode(str_pad(strtr($data'-_''+/'), strlen($data) % 4'='STR_PAD_RIGHT));
}


//Eingabe per Kommandozeile oder _REQUEST['input']

if ( isset($argv[1]) ) {
    
$input=$argv[1];
}
elseif ( isset(
$_REQUEST['input']) ) {
    
$input=$_REQUEST['input'];
}
else {
    die(
"Kein INPUT\n");
}

//Diese Signatur besteht grundsätzlich aus drei Teilen (getrennt durch Punkte)
$src=explode('.',$input);

if ( 
count($src) !== ) {
    die(
"Kein dreiteiliger INPUT\n");
}

//Der erste Teil (rot) sieht immer gleich aus und sollte aus der Sequenz automatisch entfernt werden
//eyJhbGciOiJFUzI1NiJ9

if ( $src[0] !== "eyJhbGciOiJFUzI1NiJ9" ) {
    die(
"INPUT nicht authorisiert\n");
}

//Beim blauen Part handelt es sich um eine Base64-URL die in einen normalen String konvertiert werden muss
if ( ! $blue base64_decode($src[1]) ) {
    die(
"INPUT Teil BLAU inkorrekt\n");
}

//Der letzte Teil muss ebenfalls umgewandelt werden (von Base64-URL auf Base64)
if ( ! $orange base64_encode(base64url_decode($src[2])) ) {
    die(
"INPUT Teil ORANGE inkorrekt\n");
}

//und zusätzlich muss die Länge des Datensatzes am Ende durch 4 teilbar sein
if ( ( strlen($orange) % ) !== ) {
    
$orange=str_pad($orange,ceil(( strlen($orange) % ))*strlen($orange),"=");
}

//Beide Teile werden dann am Ende zusammenkopiert und durch "_" voneinander getrennt:

$result=$blue."_".$orange;

//Web Ausgabe
if ( isset($_REQUEST['input']) &! isset($_REQUEST['dbg'])) {
    
header("Content-Type: image/png");
    
header("Content-Disposition: inline");
    include(
'phpqrcode/qrlib.php');
    
QRcode::png($result);
    die();
}
//Debug Ausgabe
elseif ( isset($_REQUEST['dbg']) ) {
    
header("Content-Type: text/plain");
    
//Testergebnis:
    
$testinput="eyJhbGciOiJFUzI1NiJ9.X1IxLUFUMl8xMjM0NTZfNTFfMjAxOC0wMS0wM1QxNTo0NjoxN18wLDAwXzAsMDBfMCwwMF8wLDAwXzAsMDBfTWE5eXZ4cFVkcDQ9XzAxRTJFNDZERjQyOEVBRTQ2QUNDQjEyOTU4X3JBZW8zUTFkdzVRPQ.imjuZePqAY07MYcIuw8lQbOWOM5cNUNxQM_iAv60mglD_Ysf08HYBCOn4vC8ISaXkgamKgGic-PIy9-LpDvs3g";
    
//->
    
$testresult="_R1-AT2_123456_51_2018-01-03T15:46:17_0,00_0,00_0,00_0,00_0,00_Ma9yvxpUdp4=_01E2E46DF428EAE46ACCB12958_rAeo3Q1dw5Q=_imjuZePqAY07MYcIuw8lQbOWOM5cNUNxQM/iAv60mglD/Ysf08HYBCOn4vC8ISaXkgamKgGic+PIy9+LpDvs3g==";
    if ( 
$input === $testinput ) {
        print 
"\n$result\n$testresult\n";
        print 
"Testergebnis: ";
        if ( 
$result === $testresult ) {
            print(
"korrekt!\n");
        }
        else {
            print(
"Falsch!\n");
        }
    }
    die(
"\n\nhttps://paypal.me/coolinger");
}
//Kommandozeilen Ausgabe, Parameter 2 = Dateiname
if ( ! isset($argv[2]) ) {
    die(
"Zeildatei nicht angegeben\n");
}
include(
'phpqrcode/qrlib.php');
QRcode::png($result$argv[2]);