<?php declare(strict_types=1); use Airship\Engine\State; /** * @global array $active * @global State $state */ foreach (['Hull', 'Bridge'] as $cabinName) { $cabinDir = ROOT . '/Cabin/' . $cabinName; // Let's make sure our directories exist: if (!\is_dir($cabinDir.'/View/motif')) { \mkdir($cabinDir.'/View/motif', 0775); } else { \chmod($cabinDir.'/View/motif', 0775); } if (!\is_dir($cabinDir.'/public/motif')) { \mkdir($cabinDir.'/public/motif', 0775); } else { \chmod($cabinDir.'/public/motif', 0775); } // Now let's set up our Motifs: $motifsJSONFile = ROOT . '/config/Cabin/' . $cabinName . '/motifs.json'; if (\is_dir($cabinDir.'/View/motif') && \is_readable($motifsJSONFile)) { $motifs = []; $motifsJSONData = \Airship\loadJSON($motifsJSONFile); foreach ($motifsJSONData as $motif => $motifConfig) { if (isset($motifConfig['path'])) { $motifStart = $cabinDir.'/View/motif/'.$motif; $motifEnd = ROOT.'/Motifs/'.$motifConfig['path']; if (\strpos($motifStart, $cabinDir.'/View/motif') === false) { $state->logger->alert( 'Potential directory traversal in Motif config.', [ 'cabin' => $active['name'], 'motif' => $motif, 'path' => $motifStart ] ); // SKIP! We have a potential directory traversal continue; } if (\strpos($motifEnd, ROOT.'/Motifs') === false) { $state->logger->alert( 'Potential directory traversal in Motif config.', [ 'cabin' => $active['name'], 'motif' => $motif, 'path' => $motifEnd ] ); // SKIP! We have a potential directory traversal continue; } // Make sure we create the necessary symlinks if (!\is_link($motifStart)) { \symlink($motifEnd, $motifStart); } if (!\is_link(ROOT . '/public/static/' . $cabinName)) { \symlink( $cabinDir . '/public', ROOT . '/public/static/' . $cabinName ); } if (\is_dir($motifEnd.'/public')) { $motifPublic = $cabinDir.'/public/motif/'.$motif; if (!\is_link($motifPublic)) { \symlink($motifEnd.'/public', $motifPublic); } } if (\file_exists($motifEnd.'/motif.json')) { $motifConfig['config'] = \Airship\loadJSON($motifEnd.'/motif.json'); } else { $motifConfig['config'] = []; } $motifs[$motif] = $motifConfig; } } } } |