added logging
All checks were successful
Build Container / docker (push) Successful in 1m23s

This commit is contained in:
Chris 2025-06-10 11:50:24 +02:00
parent 63b49dd282
commit 5df5a0ad7a
2 changed files with 58 additions and 34 deletions

View File

@ -13,4 +13,23 @@ function renderTemplate($templatename,$variables=[],$basepath=ROOT.'/src')
ob_end_clean(); ob_end_clean();
return $rendered; return $rendered;
}
function addToLog($data)
{
$fp = fopen(ROOT.DS.'logs'.DS.'app.log','a');
fwrite($fp,date("d.m.y H:i")."\t".$data."\n");
fclose($fp);
}
function getUserIP()
{
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}
return $ip;
} }

View File

@ -1,66 +1,71 @@
<?php <?php
use Facebook\WebDriver\Remote\RemoteWebDriver; use Facebook\WebDriver\Remote\RemoteWebDriver;
use Facebook\WebDriver\Remote\DesiredCapabilities; use Facebook\WebDriver\Remote\DesiredCapabilities;
define('DS', DIRECTORY_SEPARATOR); define('DS', DIRECTORY_SEPARATOR);
define('ROOT', dirname(__FILE__).DS.'..'); define('ROOT', dirname(__FILE__) . DS . '..');
require_once(ROOT.DS.'src'.DS.'config.inc.php'); require_once(ROOT . DS . 'src' . DS . 'config.inc.php');
require_once(ROOT.DS.'src'.DS.'helpers.php'); require_once(ROOT . DS . 'src' . DS . 'helpers.php');
require_once(ROOT.DS.'src'.DS.'http2pic.class.php'); require_once(ROOT . DS . 'src' . DS . 'http2pic.class.php');
require_once(ROOT.DS.'src'.DS.'vendor'.DS.'autoload.php'); require_once(ROOT . DS . 'src' . DS . 'vendor' . DS . 'autoload.php');
$url = array_filter(explode('/',ltrim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH),'/'))); $url = array_filter(explode('/', ltrim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/')));
//check for integrated server //check for integrated server
if(php_sapi_name()=='cli-server' && file_exists(ROOT.DS.'web'.DS.implode('/',$url)) && !is_dir(ROOT.DS.'web'.DS.implode('/',$url))) if (php_sapi_name() == 'cli-server' && file_exists(ROOT . DS . 'web' . DS . implode('/', $url)) && !is_dir(ROOT . DS . 'web' . DS . implode('/', $url)))
return false; return false;
switch($url[0]) switch ($url[0]) {
{
case 'api': case 'api':
$target = substr($_SERVER['REQUEST_URI'],5); $target = substr($_SERVER['REQUEST_URI'], 5);
if(!$target || !filter_var($target, FILTER_VALIDATE_URL)) if (!$target || !filter_var($target, FILTER_VALIDATE_URL))
$target = $_REQUEST['url']; $target = $_REQUEST['url'];
if(!filter_var($target, FILTER_VALIDATE_URL)) if (!filter_var($target, FILTER_VALIDATE_URL)) {
{
header('HTTP/1.0 400 Bad Request'); header('HTTP/1.0 400 Bad Request');
echo 'Invalid URL'; echo 'Invalid URL';
exit; exit;
} }
$ip = getUserIP();
$viewport = $_REQUEST['viewport']; $viewport = $_REQUEST['viewport'];
$js = $_REQUEST['js']=='false'?false:true; $js = $_REQUEST['js'] == 'false' ? false : true;
$serverUrl = 'http://localhost:4444'; $serverUrl = 'http://localhost:4444';
$options = new \Facebook\WebDriver\Chrome\ChromeOptions(); $options = new \Facebook\WebDriver\Chrome\ChromeOptions();
$options->addArguments(['--headless', '--disable-gpu', '--no-sandbox', '--disable-dev-shm-usage']); $options->addArguments(['--headless', '--disable-gpu', '--no-sandbox', '--disable-dev-shm-usage']);
$capabilities = DesiredCapabilities::chrome(); $capabilities = DesiredCapabilities::chrome();
$capabilities->setCapability(\Facebook\WebDriver\Chrome\ChromeOptions::CAPABILITY, $options); $capabilities->setCapability(\Facebook\WebDriver\Chrome\ChromeOptions::CAPABILITY, $options);
//disable javascript if $js is false //disable javascript if $js is false
if(!$js) if (!$js)
$capabilities->setCapability('javascriptEnabled', false); $capabilities->setCapability('javascriptEnabled', false);
$driver = RemoteWebDriver::create($serverUrl, $capabilities);
$driver->get($target); try {
$driver = RemoteWebDriver::create($serverUrl, $capabilities);
$driver->get($target);
//hide scroll bars
$driver->executeScript('document.body.style.overflow = "hidden";');
//hide scroll bars //set screenshot size to 1920x1080
$driver->executeScript('document.body.style.overflow = "hidden";'); //$driver->manage()->window()->setSize(new \Facebook\WebDriver\WebDriverDimension(1024, 768));
//if $viewport is set, set window size
//set screenshot size to 1920x1080 if ($viewport) {
//$driver->manage()->window()->setSize(new \Facebook\WebDriver\WebDriverDimension(1024, 768)); $viewport = explode('x', $viewport);
//if $viewport is set, set window size $driver->manage()->window()->setSize(new \Facebook\WebDriver\WebDriverDimension($viewport[0], $viewport[1]));
if($viewport) } else {
{ $driver->manage()->window()->setSize(new \Facebook\WebDriver\WebDriverDimension(1024, 768));
$viewport = explode('x',$viewport); }
$driver->manage()->window()->setSize(new \Facebook\WebDriver\WebDriverDimension($viewport[0], $viewport[1])); addToLog("$ip\tRequested $target with viewport " . implode('x', $viewport) . " and js " . ($js ? 'enabled' : 'disabled'));
} } catch (Exception $e) {
else header('HTTP/1.0 500 Internal Server Error');
{ addToLog("$ip\tRequested $target but resulted in error:\t" . $e->getMessage());
$driver->manage()->window()->setSize(new \Facebook\WebDriver\WebDriverDimension(1024, 768)); echo 'Error: ' . $e->getMessage();
exit;
} }
// take screenshot and save to file // take screenshot and save to file
@ -68,8 +73,8 @@ switch($url[0])
header('Content-Type: image/png'); header('Content-Type: image/png');
echo $driver->takeScreenshot(); echo $driver->takeScreenshot();
break; break;
default: default:
echo renderTemplate('index.html.php'); echo renderTemplate('index.html.php');
break; break;
} }