From fa31416932c6abf0d5937f51f590f6841892e0a0 Mon Sep 17 00:00:00 2001 From: Netkas Date: Thu, 22 Dec 2022 17:32:15 -0500 Subject: [PATCH] Added a shutdown task to finalize permissions for some directories that could be made un-writable after certain operations. --- src/ncc/CLI/Main.php | 3 ++- src/ncc/Utilities/Functions.php | 36 ++++++++++++++++++++++++++++++ src/ncc/Utilities/RuntimeCache.php | 2 ++ 3 files changed, 40 insertions(+), 1 deletion(-) diff --git a/src/ncc/CLI/Main.php b/src/ncc/CLI/Main.php index 00cc511..dc87436 100644 --- a/src/ncc/CLI/Main.php +++ b/src/ncc/CLI/Main.php @@ -17,6 +17,7 @@ use ncc\Exceptions\RuntimeException; use ncc\ncc; use ncc\Utilities\Console; + use ncc\Utilities\Functions; use ncc\Utilities\Resolver; use ncc\Utilities\RuntimeCache; @@ -182,8 +183,8 @@ */ public static function shutdown(): void { - Console::outDebug('clearing cache'); RuntimeCache::clearCache(); + Functions::finalizePermissions(); } } \ No newline at end of file diff --git a/src/ncc/Utilities/Functions.php b/src/ncc/Utilities/Functions.php index 226bcbe..9f6f6b0 100644 --- a/src/ncc/Utilities/Functions.php +++ b/src/ncc/Utilities/Functions.php @@ -942,4 +942,40 @@ return (string)$input; } + + /** + * Finalizes the permissions + * + * @return void + * @throws InvalidScopeException + */ + public static function finalizePermissions() + { + if(Resolver::resolveScope() !== Scopes::System) + return; + + Console::outVerbose('Finalizing permissions...'); + $filesystem = new Filesystem(); + + try + { + if($filesystem->exists(PathFinder::getDataPath() . DIRECTORY_SEPARATOR . 'data')) + $filesystem->chmod(PathFinder::getDataPath() . DIRECTORY_SEPARATOR . 'data', 0777, 0000, true); + } + catch(Exception $e) + { + Console::outWarning(sprintf('Failed to finalize permissions for %s: %s', PathFinder::getDataPath() . DIRECTORY_SEPARATOR . 'data', $e->getMessage())); + } + + try + { + if($filesystem->exists(PathFinder::getCachePath())) + $filesystem->chmod(PathFinder::getCachePath(), 0777, 0000, true); + } + catch(Exception $e) + { + Console::outWarning(sprintf('Failed to finalize permissions for %s: %s', PathFinder::getDataPath() . DIRECTORY_SEPARATOR . 'data', $e->getMessage())); + } + + } } \ No newline at end of file diff --git a/src/ncc/Utilities/RuntimeCache.php b/src/ncc/Utilities/RuntimeCache.php index 48708c8..0371b03 100644 --- a/src/ncc/Utilities/RuntimeCache.php +++ b/src/ncc/Utilities/RuntimeCache.php @@ -86,6 +86,8 @@ */ public static function clearCache(bool $clear_memory=true, bool $clear_files=true): void { + Console::outDebug('clearing cache'); + if($clear_memory) { Console::outDebug(sprintf('clearing memory cache (%d entries)', count(self::$cache)));