From 600445dbeb5943b240a281b3c6216f11f6268871 Mon Sep 17 00:00:00 2001 From: James Brooks Date: Sat, 17 Jan 2015 19:44:39 +0000 Subject: [PATCH] Add FixPermissionsCommand. Closes #397 --- composer.json | 2 +- .../Commands/FixPermissionsCommand.php | 108 ++++++++++++++++++ src/Providers/ConsoleServiceProvider.php | 16 +++ 3 files changed, 125 insertions(+), 1 deletion(-) create mode 100644 src/Console/Commands/FixPermissionsCommand.php diff --git a/composer.json b/composer.json index 7fd611f7..84456fdb 100644 --- a/composer.json +++ b/composer.json @@ -64,7 +64,7 @@ "scripts": { "post-install-cmd": [ "php artisan optimize", - "chmod -R 777 app/storage public", + "php artisan cachet:chmod", "php artisan cachet:one-click-deploy" ], "post-update-cmd": [ diff --git a/src/Console/Commands/FixPermissionsCommand.php b/src/Console/Commands/FixPermissionsCommand.php new file mode 100644 index 00000000..c4ed0df2 --- /dev/null +++ b/src/Console/Commands/FixPermissionsCommand.php @@ -0,0 +1,108 @@ +storageDirectory = $storageDirectory; + $this->databaseDirectory = $databaseDirectory; + $this->databasePath = $databasePath; + $this->databaseDefault = $databaseDefault; + + parent::__construct(); + } + + /** + * Execute the console command. + * + * @return void + */ + public function fire() + { + $this->recursiveChmod($this->storageDirectory); + + if ($this->databaseDefault === 'sqlite') { + chmod($this->databaseDirectory, 755); + chmod($this->databasePath, 755); + } + } + + /** + * Recursively sets a paths file permissions. + * + * @param string $path + * @param string $mode + * + * @return void + */ + protected function recursiveChmod($path, $mode = '0755') + { + $dir = new DirectoryIterator($path); + foreach ($dir as $item) { + if (!$item->isDot()) { + chmod($item->getPathname(), $mode); + } + + if ($item->isDir() && !$item->isDot()) { + $this->recursiveChmod($item->getPathname()); + } + } + } +} diff --git a/src/Providers/ConsoleServiceProvider.php b/src/Providers/ConsoleServiceProvider.php index b383dcab..012a6a6e 100644 --- a/src/Providers/ConsoleServiceProvider.php +++ b/src/Providers/ConsoleServiceProvider.php @@ -2,6 +2,7 @@ namespace CachetHQ\Cachet\Providers; +use CachetHQ\Cachet\Console\Commands\FixPermissionsCommand; use CachetHQ\Cachet\Console\Commands\OneClickDeployCommand; use Illuminate\Support\ServiceProvider; @@ -14,6 +15,7 @@ class ConsoleServiceProvider extends ServiceProvider */ public function boot() { + $this->commands('CachetHQ\Cachet\Console\Commands\FixPermissionsCommand'); $this->commands('CachetHQ\Cachet\Console\Commands\OneClickDeployCommand'); } @@ -24,6 +26,20 @@ class ConsoleServiceProvider extends ServiceProvider */ public function register() { + $this->app->singleton('CachetHQ\Cachet\Console\Commands\FixPermissionsCommand', function ($app) { + $storageDirectory = $app->path['storage']; + $databaseDirectory = $app->path['database']; + $databasePath = $app->config->get('database.connections.sqlite.database'); + $databaseDefault = $app->config->get('database.default'); + + return new FixPermissionsCommand( + $storageDirectory, + $databaseDirectory, + $databasePath, + $databaseDefault + ); + }); + $this->app->singleton('CachetHQ\Cachet\Console\Commands\OneClickDeployCommand', function ($app) { return new OneClickDeployCommand($app->environment('heroku')); });