Skip to content
Extraits de code Groupes Projets
Valider 63441b95 rédigé par JamesRezo's avatar JamesRezo :tada:
Parcourir les fichiers

fix: always apply chmod on base directories

parent dce484e7
Aucune branche associée trouvée
Aucune étiquette associée trouvée
1 requête de fusion!11fix: always apply chmod on base directories
......@@ -8,6 +8,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## Unreleased
### Fixed
- #8 Appliquer systématiquement le CHMOD sur IMG, local et tmp à l'installation
## 0.7.2 - 2024-11-19
### Added
......
......@@ -4,6 +4,7 @@ namespace SpipLeague\Composer;
use Composer\Script\Event;
use Composer\Util\Filesystem;
use Symfony\Component\Filesystem\Filesystem as SymfonyFilesystem;
/**
* Script for post-install-cmd and post-update-cmd.
......@@ -29,8 +30,10 @@ class AssetsClearCache
$vendorDir = $event->getComposer()->getConfig()->get('vendor-dir') . '/';
$fs = new Filesystem($event->getComposer()->getLoop()->getProcessExecutor());
$sffs = new SymfonyFilesystem;
foreach (self::$dirs as $dir) {
$fs->emptyDirectory($vendorDir . '../' . SpipPaths::interpolate($dir));
$sffs->chmod($vendorDir . '../' . SpipPaths::interpolate($dir), SpipPaths::CHMOD, SpipPaths::UMASK);
}
$event->getIO()->write('Done.');
......
......@@ -11,10 +11,17 @@ use Symfony\Component\Filesystem\Filesystem;
class BaseDirectories
{
/** @var string[] */
private static array $dirs = [
private static array $readOnlyDirs = [
SpipPaths::ETC,
];
/** @var string[] */
private static array $writeableDirs = [
SpipPaths::VAR,
SpipPaths::TMP,
SpipPaths::DOC,
SpipPaths::DIR_CACHE,
SpipPaths::DIR_LOG,
];
/**
......@@ -24,19 +31,39 @@ class BaseDirectories
*
* @return void
*/
public static function createBaseDirectories(Event $event)
public static function createBaseDirectories(Event $event, bool $check = false)
{
$event->getIO()->write('Creating base directories ...');
$vendorDir = $event->getComposer()->getConfig()->get('vendor-dir') . '/';
if ($check) {
$event->getIO()->write('Checking base directories ...');
} else {
$event->getIO()->write('Creating base directories ...');
}
$vendorDir = $event->getComposer()->getConfig()->get('vendor-dir') . '/';
$fs = new Filesystem();
foreach (self::$dirs as $dir) {
$toCreate = $vendorDir . '../' . $dir;
foreach (self::$readOnlyDirs as $dir) {
$toCreate = $vendorDir . '../' . SpipPaths::interpolate($dir);
if (!$fs->exists($toCreate)) {
$event->getIO()->write('Creating ' . SpipPaths::interpolate($dir) . ' ...');
$fs->mkdir($toCreate);
} else {
$event->getIO()->write(SpipPaths::interpolate($dir) . ' OK');
}
$event->getIO()->write(\sprintf('Applying chmod %04o on ', SpipPaths::CHMOD & ~0022) . SpipPaths::interpolate($dir) . ' ...');
$fs->chmod($toCreate, SpipPaths::CHMOD, SpipPaths::UMASK | 0022);
}
foreach (self::$writeableDirs as $dir) {
$toCreate = $vendorDir . '../' . SpipPaths::interpolate($dir);
if (!$fs->exists($toCreate)) {
$event->getIO()->write('Creating ' . SpipPaths::interpolate($dir) . ' ...');
$fs->mkdir($toCreate);
$fs->chmod($toCreate, SpipPaths::CHMOD);
$event->getIO()->write($dir . ' ...');
} else {
$event->getIO()->write(SpipPaths::interpolate($dir) . ' OK');
}
$event->getIO()->write(\sprintf('Applying chmod %04o on ', SpipPaths::CHMOD) . SpipPaths::interpolate($dir) . ' ...');
$fs->chmod($toCreate, SpipPaths::CHMOD, SpipPaths::UMASK);
}
$event->getIO()->write('Done.');
......
......@@ -15,7 +15,7 @@ class Security
*
* @deprecated 0.8
*/
public static function copySafetyScreen(Event $event)
public static function copySafetyScreen(Event $event): void
{
$search = array_filter(
$event->getComposer()->getPackage()->getRequires(),
......@@ -32,7 +32,7 @@ class Security
$vendorDir = $event->getComposer()->getConfig()->get('vendor-dir');
try {
copy(
\copy(
$vendorDir . '/spip/security/ecran_securite.php',
$vendorDir . '/../config/ecran_securite.php',
);
......
......@@ -31,15 +31,34 @@ class SpipInstallerPlugin implements PluginInterface, EventSubscriberInterface,
public static function getSubscribedEvents()
{
return [
'post-install-cmd' => [['clearCache']],
'pre-update-cmd' => [['clearCache']],
'post-create-project-cmd' => ['onCreateProject'],
'post-install-cmd' => ['onInstall'],
'post-update-cmd' => ['onUpdate'],
];
}
public function onCreateProject(Event $event): void
{
BaseDirectories::createBaseDirectories($event);
Security::copySafetyScreen($event);
}
public function onInstall(Event $event): void
{
BaseDirectories::createBaseDirectories($event, true);
Security::copySafetyScreen($event);
PluginsClearCache::clearCache($event);
AssetsClearCache::clearCache($event);
WheelsClearCache::clearCache($event);
}
public function onUpdate(Event $event): void
{
BaseDirectories::createBaseDirectories($event, true);
Security::copySafetyScreen($event);
PluginsClearCache::clearCache($event);
AssetsClearCache::clearCache($event);
WheelsClearCache::clearCache($event);
}
/**
......@@ -50,6 +69,9 @@ class SpipInstallerPlugin implements PluginInterface, EventSubscriberInterface,
Security::copySafetyScreen($event);
}
/**
* @deprecated 0.8
*/
public function clearCache(Event $event): void
{
PluginsClearCache::clearCache($event);
......
......@@ -5,6 +5,7 @@ namespace SpipLeague\Composer;
class SpipPaths
{
public const CHMOD = 0777;
public const UMASK = 0000;
public const PLUGINS = 'plugins';
public const EXTENSIONS = 'plugins-dist';
......@@ -20,6 +21,7 @@ class SpipPaths
public const LOCAL_PLUGINS_DIST = 'plugins-dist.json';
public const DIR_CACHE = '%spip.dirs.tmp%/cache';
public const DIR_LOG = '%spip.dirs.tmp%/log';
public const DIR_ASSETS_CSS = '%spip.dirs.var%/cache-css';
public const DIR_ASSETS_JS = '%spip.dirs.var%/cache-js';
......@@ -32,6 +34,7 @@ class SpipPaths
'%spip.dirs.tmp%' => self::TMP,
'%spip.dirs.var%' => self::VAR,
'%spip.dirs.cache%' => self::DIR_CACHE,
'%spip.dirs.log%' => self::DIR_LOG,
];
public static function interpolate(string $path): string
......
......@@ -4,6 +4,7 @@ namespace SpipLeague\Composer;
use Composer\Script\Event;
use Composer\Util\Filesystem;
use Symfony\Component\Filesystem\Filesystem as SymfonyFilesystem;
class WheelsClearCache
{
......@@ -13,9 +14,11 @@ class WheelsClearCache
$vendorDir = $event->getComposer()->getConfig()->get('vendor-dir') . '/';
$fs = new Filesystem($event->getComposer()->getLoop()->getProcessExecutor());
$sffs = new SymfonyFilesystem;
$fs->emptyDirectory(
$vendorDir . '../' . SpipPaths::interpolate(SpipPaths::WHEELS_CACHE)
);
$sffs->chmod($vendorDir . '../' .SpipPaths::interpolate(SpipPaths::WHEELS_CACHE), SpipPaths::CHMOD, SpipPaths::UMASK);
$event->getIO()->write('Done.');
}
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter