]> git.mxchange.org Git - friendica.git/blobdiff - src/Core/System.php
Merge pull request #6767 from MrPetovan/bug/fatal-errors
[friendica.git] / src / Core / System.php
index 44419ad1796a95cb9c3fd2055217d7a2c69a3c70..45a88fe0937b6d92c349d527c8985eab28e04c05 100644 (file)
@@ -5,8 +5,6 @@
 namespace Friendica\Core;
 
 use Friendica\BaseObject;
-use Friendica\Core\Logger;
-use Friendica\Core\Renderer;
 use Friendica\Network\HTTPException\InternalServerErrorException;
 use Friendica\Util\XML;
 
@@ -61,7 +59,6 @@ class System extends BaseObject
                array_shift($trace);
 
                $callstack = [];
-               $counter = 0;
                $previous = ['class' => '', 'function' => ''];
 
                // The ignore list contains all functions that are only wrapper functions
@@ -179,6 +176,12 @@ class System extends BaseObject
                exit();
        }
 
+       public static function jsonError($httpCode, $data, $content_type = 'application/json')
+       {
+               header($_SERVER["SERVER_PROTOCOL"] . ' ' . $httpCode);
+               self::jsonExit($data, $content_type);
+       }
+
        /**
         * @brief Encodes content to json.
         *
@@ -237,21 +240,6 @@ class System extends BaseObject
                }
        }
 
-       /**
-        * Generates a process identifier for the logging
-        *
-        * @param string $prefix A given prefix
-        *
-        * @return string a generated process identifier
-        */
-       public static function processID($prefix)
-       {
-               // We aren't calling any other function here.
-               // Doing so could easily create an endless loop
-               $trailer = $prefix . ':' . getmypid() . ':';
-               return substr($trailer . uniqid('') . mt_rand(), 0, 26);
-       }
-
        /**
         * Returns the current Load of the System
         *
@@ -289,6 +277,61 @@ class System extends BaseObject
                exit();
        }
 
+       /**
+        * @brief Returns the system user that is executing the script
+        *
+        * This mostly returns something like "www-data".
+        *
+        * @return string system username
+        */
+       public static function getUser()
+       {
+               if (!function_exists('posix_getpwuid') || !function_exists('posix_geteuid')) {
+                       return '';
+               }
+
+               $processUser = posix_getpwuid(posix_geteuid());
+               return $processUser['name'];
+       }
+
+       /**
+        * @brief Checks if a given directory is usable for the system
+        *
+        * @param      $directory
+        * @param bool $check_writable
+        *
+        * @return boolean the directory is usable
+        */
+       public static function isDirectoryUsable($directory, $check_writable = true)
+       {
+               if ($directory == '') {
+                       Logger::log('Directory is empty. This shouldn\'t happen.', Logger::DEBUG);
+                       return false;
+               }
+
+               if (!file_exists($directory)) {
+                       Logger::log('Path "' . $directory . '" does not exist for user ' . static::getUser(), Logger::DEBUG);
+                       return false;
+               }
+
+               if (is_file($directory)) {
+                       Logger::log('Path "' . $directory . '" is a file for user ' . static::getUser(), Logger::DEBUG);
+                       return false;
+               }
+
+               if (!is_dir($directory)) {
+                       Logger::log('Path "' . $directory . '" is not a directory for user ' . static::getUser(), Logger::DEBUG);
+                       return false;
+               }
+
+               if ($check_writable && !is_writable($directory)) {
+                       Logger::log('Path "' . $directory . '" is not writable for user ' . static::getUser(), Logger::DEBUG);
+                       return false;
+               }
+
+               return true;
+       }
+
        /// @todo Move the following functions from boot.php
        /*
        function killme()