rootDir = dirname(__DIR__); $this->configDir = sprintf('%s/config', dirname(dirname($this->rootDir))); $this->tempDir = sprintf('%s/temp', $this->rootDir); $this->viewsDir = sprintf('%s/views', $this->rootDir); } public function handleRequest() { if (!isset($_GET['act'])) { $this->view('index', ['appName' => 'Blue Twilight Bootstrapper']); } else { switch (trim($_GET['act'])) { case 'download': $this->download(); return; default: throw new \Exception(sprintf('ERROR: Action \'%s\' was not recognised.', $_GET['act'])); } } } private function download() { $appConfig = require_once sprintf('%s/app.php', $this->configDir); $servicesConfig = require_once sprintf('%s/services.php', $this->configDir); $versionNumber = sprintf('v%s', $appConfig['version']); $gitea = new GiteaService($servicesConfig['gitea'], $versionNumber); $releaseInfo = $gitea->getSpecificRelease($versionNumber); if (is_null($releaseInfo)) { throw new \Exception(sprintf('No release info found in Gitea for Blue Twilight version \'%\'', $versionNumber)); } else if (!isset($releaseInfo->assets)) { throw new \Exception(sprintf('No assets found in Gitea for Blue Twilight version \'%\'', $versionNumber)); } $vendorsPrefix = 'vendors'; $vendorsSuffix = '.tar.gz'; $selectedAsset = null; foreach ($releaseInfo->assets as $asset) { /* Ignore anything that is not "vendors.tar.gz" were the is also optional - e.g. vendors_2.1.2.tar.gz vendors.tar.gz but NOT 2.1.2_vendors.zip */ if (!starts_with($asset->name, $vendorsPrefix) || !ends_with($asset->name, $vendorsSuffix)) { continue; } $selectedAsset = $asset; break; } if (is_null($selectedAsset)) { throw new \Exception('No vendors.tar.gz found in Gitea for Blue Twilight version \'%\'', $versionNumber); } $targetFileName = sprintf('%s/vendors.tar.gz', $this->tempDir); $this->downloadFile($selectedAsset->browser_download_url, $targetFileName); var_dump('done'); } private function downloadFile($sourceURL, $targetFilename) { $urlHandle = @fopen($sourceURL, 'r'); $tempFilename = @fopen($targetFilename, 'w'); if ($urlHandle === false) { throw new \Exception(sprintf('Failed downloading the file from %s', $sourceURL)); } else if ($tempFilename === false) { throw new \Exception(sprintf('Failed opening the file \'%s\' for writing', $targetFilename)); } while (!feof($urlHandle)) { $buffer = fread($urlHandle, 8192); fwrite($tempFilename, $buffer); } @fclose($urlHandle); @fclose($tempFilename); } private function view($name, array $viewData = []) { $viewFile = sprintf('%s/%s.php', $this->viewsDir, $name); if (!file_exists($viewFile) || !is_readable($viewFile)) { throw new \Exception(sprintf('ERROR: View file \'%s\' does not exist.', $viewFile)); } // Provide keys as variables - e.g. $viewData['something'] becomes accessible via $something extract($viewData); require_once $viewFile; } }