diff --git a/web/index.php b/web/index.php index a716723..79d3abd 100755 --- a/web/index.php +++ b/web/index.php @@ -40,6 +40,13 @@ switch ($url[0]) { echo 'Invalid viewport format. Use WIDTHxHEIGHT (e.g., 1024x768)'; exit; } + $vpParts = array_map('intval', explode('x', $viewport)); + if ($vpParts[0] > 3840 || $vpParts[1] > 2160) { + header('HTTP/1.0 400 Bad Request'); + echo 'Viewport exceeds maximum (3840x2160)'; + exit; + } + $js = $_REQUEST['js'] == 'false' ? false : true; $serverUrl = 'http://localhost:4444'; @@ -49,45 +56,34 @@ switch ($url[0]) { $capabilities = DesiredCapabilities::chrome(); $capabilities->setCapability(\Facebook\WebDriver\Chrome\ChromeOptions::CAPABILITY, $options); - //disable javascript if $js is false if (!$js) $capabilities->setCapability('javascriptEnabled', false); - $driver = null; $error = null; try { - $driver = RemoteWebDriver::create($serverUrl, $capabilities, 30000, 60); + $driver = RemoteWebDriver::create($serverUrl, $capabilities, 30000, 60000); + $driver->manage()->window()->setSize(new \Facebook\WebDriver\WebDriverDimension($vpParts[0], $vpParts[1])); $driver->get($target); - //hide scroll bars $driver->executeScript('document.body.style.overflow = "hidden";'); - if ($viewport) { - $viewport = explode('x', $viewport); - $driver->manage()->window()->setSize(new \Facebook\WebDriver\WebDriverDimension($viewport[0], $viewport[1])); - } else { - $viewport = [1024, 768]; - $driver->manage()->window()->setSize(new \Facebook\WebDriver\WebDriverDimension($viewport[0], $viewport[1])); - } - $viewportLabel = is_array($viewport) ? implode('x', $viewport) : (string) $viewport; - addToLog("$ip\tRequested $target with viewport " . $viewportLabel . " and js " . ($js ? 'enabled' : 'disabled')); + addToLog($ip . ' Requested ' . $target . ' viewport=' . $viewport . ' js=' . ($js ? 'enabled' : 'disabled')); - // take screenshot and send to user $screenshot = $driver->takeScreenshot(); header('Content-Type: image/png'); header('Content-Length: ' . strlen($screenshot)); echo $screenshot; } catch (Exception $e) { $error = $e->getMessage(); - addToLog("$ip\tRequested $target but resulted in error:\t" . $error); + addToLog($ip . ' Error requesting ' . $target . ': ' . $error); } finally { - if ($driver instanceof \Facebook\WebDriver\Remote\RemoteWebDriver) { + if ($driver instanceof RemoteWebDriver) { try { $driver->quit(); } catch (Exception $q) {} } } if ($error !== null) { header('HTTP/1.0 500 Internal Server Error'); - echo 'Error: ' . $error; + echo 'Screenshot failed'; } break;