mirror of
https://github.com/flarum/core.git
synced 2025-08-14 04:14:06 +02:00
File permissions alert and clear command failure message.
This commit is contained in:
@@ -3,6 +3,9 @@
|
||||
namespace SychO\PackageManager\Api\Controller;
|
||||
|
||||
use Flarum\Bus\Dispatcher;
|
||||
use Laminas\Diactoros\Response\JsonResponse;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use Psr\Http\Server\RequestHandlerInterface;
|
||||
use SychO\PackageManager\Api\Serializer\ExtensionSerializer;
|
||||
use SychO\PackageManager\Command\RequireExtension;
|
||||
use SychO\PackageManager\Extension\ExtensionUtils;
|
||||
@@ -12,10 +15,8 @@ use Illuminate\Support\Arr;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
use Tobscure\JsonApi\Document;
|
||||
|
||||
class RequireExtensionController extends AbstractCreateController
|
||||
class RequireExtensionController implements RequestHandlerInterface
|
||||
{
|
||||
public $serializer = ExtensionSerializer::class;
|
||||
|
||||
/**
|
||||
* @var Dispatcher
|
||||
*/
|
||||
@@ -26,13 +27,15 @@ class RequireExtensionController extends AbstractCreateController
|
||||
$this->bus = $bus;
|
||||
}
|
||||
|
||||
protected function data(ServerRequestInterface $request, Document $document)
|
||||
public function handle(ServerRequestInterface $request): ResponseInterface
|
||||
{
|
||||
$actor = RequestUtil::getActor($request);
|
||||
$package = Arr::get($request->getParsedBody(), 'data.package');
|
||||
|
||||
return $this->bus->dispatch(
|
||||
$data = $this->bus->dispatch(
|
||||
new RequireExtension($actor, $package)
|
||||
);
|
||||
|
||||
return new JsonResponse($data);
|
||||
}
|
||||
}
|
||||
|
@@ -4,6 +4,7 @@ namespace SychO\PackageManager\Command;
|
||||
|
||||
use Composer\Console\Application;
|
||||
use Flarum\Extension\ExtensionManager;
|
||||
use SychO\PackageManager\Exception\ComposerRequireFailedException;
|
||||
use SychO\PackageManager\Extension\ExtensionUtils;
|
||||
use SychO\PackageManager\RequirePackageValidator;
|
||||
use Symfony\Component\Console\Input\ArrayInput;
|
||||
@@ -56,7 +57,11 @@ class RequireExtensionHandler
|
||||
'packages' => [$command->package],
|
||||
]);
|
||||
|
||||
$this->composer->run($input, $output);
|
||||
$exitCode = $this->composer->run($input, $output);
|
||||
|
||||
if ($exitCode !== 0) {
|
||||
throw new ComposerRequireFailedException($command->package, $output->fetch());
|
||||
}
|
||||
|
||||
return ['id' => $extensionId];
|
||||
}
|
||||
|
@@ -0,0 +1,48 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
|
||||
namespace SychO\PackageManager\Exception;
|
||||
|
||||
use Flarum\Foundation\ErrorHandling\HandledError;
|
||||
|
||||
class ComposerCommandFailedExceptionHandler
|
||||
{
|
||||
protected const INCOMPATIBLE_REGEX = '/ +- {PACKAGE_NAME} v[0-9.]+ requires flarum\/core/m';
|
||||
|
||||
public function handle(ComposerRequireFailedException $e): HandledError
|
||||
{
|
||||
return (new HandledError(
|
||||
$e,
|
||||
'composer_command_failure',
|
||||
409
|
||||
))->withDetails($this->errorDetails($e));
|
||||
}
|
||||
|
||||
protected function errorDetails(ComposerRequireFailedException $e): array
|
||||
{
|
||||
$details = [
|
||||
'output' => $e->getMessage(),
|
||||
];
|
||||
|
||||
if ($guessedCause = $this->guessCause($e)) {
|
||||
$details['guessed_cause'] = $guessedCause;
|
||||
}
|
||||
|
||||
return [$details];
|
||||
}
|
||||
|
||||
protected function guessCause(ComposerRequireFailedException $e): ?string
|
||||
{
|
||||
error_log(str_replace('{PACKAGE_NAME}', preg_quote($e->packageName, '/'), self::INCOMPATIBLE_REGEX));
|
||||
$hasMatches = preg_match(str_replace('{PACKAGE_NAME}', preg_quote($e->packageName, '/'), self::INCOMPATIBLE_REGEX), $e->getMessage(), $matches);
|
||||
|
||||
if ($hasMatches) {
|
||||
return 'extension_incompatible_with_instance';
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
|
||||
namespace SychO\PackageManager\Exception;
|
||||
|
||||
use Exception;
|
||||
|
||||
class ComposerRequireFailedException extends Exception
|
||||
{
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
public $packageName;
|
||||
|
||||
public function __construct(string $packageName, string $output)
|
||||
{
|
||||
$this->packageName = $packageName;
|
||||
|
||||
parent::__construct($output);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user