diff --git a/src/OpenMage/ComposerPlugin/Copy/Unpkg/Config.php b/src/OpenMage/ComposerPlugin/Copy/Unpkg/Config.php index 13d2179..8aa1080 100644 --- a/src/OpenMage/ComposerPlugin/Copy/Unpkg/Config.php +++ b/src/OpenMage/ComposerPlugin/Copy/Unpkg/Config.php @@ -43,28 +43,21 @@ public function getValidatedConfig($packageConfig): ?array return null; } - if (!$this->validateConfigFiles($packageConfig)) { + $files = $this->validateConfigFiles($packageConfig); + if (!$files) { return null; } - if (!$this->validateConfigVersion($packageConfig)) { + $version = $this->validateConfigVersion($packageConfig); + if (!$version) { return null; } - $source = ''; - if (array_key_exists(self::CONFIG_SOURCE, $packageConfig) && is_string($packageConfig[self::CONFIG_SOURCE])) { - $source = $packageConfig[self::CONFIG_SOURCE]; - } - - $target = ''; - if (array_key_exists(self::CONFIG_TARGET, $packageConfig) && is_string($packageConfig[self::CONFIG_TARGET])) { - $target = $packageConfig[self::CONFIG_TARGET]; - } + $source = $this->validateConfigSource($packageConfig); + $target = $this->validateConfigTarget($packageConfig); - /** @var string[] $files */ - $files = $packageConfig[self::CONFIG_FILES]; return [ - 'version' => $packageConfig[self::CONFIG_VERSION], + 'version' => $version, 'source' => $source, 'target' => $target, 'files' => $files, @@ -73,18 +66,50 @@ public function getValidatedConfig($packageConfig): ?array /** * @param array $packageConfig + * @return string[]|null */ - private function validateConfigFiles(array $packageConfig): bool + private function validateConfigFiles(array $packageConfig): ?array { - return array_key_exists(self::CONFIG_FILES, $packageConfig) && is_array($packageConfig[self::CONFIG_FILES]); + if (array_key_exists(self::CONFIG_FILES, $packageConfig) && is_array($packageConfig[self::CONFIG_FILES])) { + /** @var string[] $files */ + $files = $packageConfig[self::CONFIG_FILES]; + return $files; + } + return null; } /** * @param array $packageConfig */ - private function validateConfigVersion(array $packageConfig): bool + private function validateConfigVersion(array $packageConfig): ?string { - return array_key_exists(self::CONFIG_VERSION, $packageConfig) && is_string($packageConfig[self::CONFIG_VERSION]); + if (array_key_exists(self::CONFIG_VERSION, $packageConfig) && is_string($packageConfig[self::CONFIG_VERSION])) { + return trim($packageConfig[self::CONFIG_VERSION]); + } + return null; + } + + /** + * @param array $packageConfig + */ + private function validateConfigSource(array $packageConfig): string + { + if (array_key_exists(self::CONFIG_SOURCE, $packageConfig) && is_string($packageConfig[self::CONFIG_SOURCE])) { + return trim($packageConfig[self::CONFIG_SOURCE]); + } + return ''; + } + + /** + * @param array $packageConfig + */ + private function validateConfigTarget(array $packageConfig): string + { + if (array_key_exists(self::CONFIG_TARGET, $packageConfig) && is_string($packageConfig[self::CONFIG_TARGET])) { + $target = str_replace(['../', './'], '', $packageConfig[self::CONFIG_TARGET]); + return trim($target); + } + return ''; } public function getUnpkgName(): string diff --git a/tests/unit/Copy/Unpkg/ConfigTest.php b/tests/unit/Copy/Unpkg/ConfigTest.php index 22fc7bd..97c1c3f 100644 --- a/tests/unit/Copy/Unpkg/ConfigTest.php +++ b/tests/unit/Copy/Unpkg/ConfigTest.php @@ -104,6 +104,44 @@ public function provideGetValidatedConfig(): Generator 'target' => 'target', ], ]; + + yield 'target sub-directory' => [ + [ + 'version' => '1', + 'source' => 'source', + 'target' => 'target', + 'files' => [ + 'test.file', + ], + ], + [ + 'files' => [ + 'test.file', + ], + 'version' => '1', + 'source' => 'source', + 'target' => './../target', + ], + ]; + + yield 'target w/ spaces' => [ + [ + 'version' => '1', + 'source' => 'source', + 'target' => 'target', + 'files' => [ + 'test.file', + ], + ], + [ + 'files' => [ + 'test.file', + ], + 'version' => '1', + 'source' => 'source', + 'target' => ' target ', + ], + ]; } /**