Browse Source

several bugfixes

Roman Hergenreder 3 weeks ago
parent
commit
a238ad3b7f

+ 1 - 0
Core/API/LogsAPI.class.php

@@ -29,6 +29,7 @@ namespace Core\API\Logs {
   use Core\Objects\DatabaseEntity\Group;
   use Core\Objects\DatabaseEntity\SystemLog;
 
+  // TODO: how to handle pagination here for log entries stored in files?
   class Get extends LogsAPI {
 
     use Pagination;

+ 5 - 0
Core/API/Request.class.php

@@ -585,4 +585,9 @@ abstract class Request {
 
     return $classes;
   }
+
+  protected function logUserId(): string {
+    $currentUser = $this->context->getUser();
+    return $currentUser ? "userId='" . $currentUser->getId() . "'" : "SYSTEM";
+  }
 }

+ 6 - 6
Core/API/UserAPI.class.php

@@ -185,7 +185,6 @@ namespace Core\API\User {
       $groups = [];
       $sql = $this->context->getSQL();
       $currentUser = $this->context->getUser();
-      $currentUserId = $currentUser->getId();
 
       $requestedGroups = array_unique($this->getParam("groups"));
       if (!empty($requestedGroups)) {
@@ -193,8 +192,10 @@ namespace Core\API\User {
         foreach ($requestedGroups as $groupId) {
           if (!isset($availableGroups[$groupId])) {
             return $this->createError("Group with id=$groupId does not exist.");
-          } else if ($groupId === Group::ADMIN && !$currentUser->hasGroup(Group::ADMIN)) {
+          } else if ($this->externalCall && $groupId === Group::ADMIN && !$currentUser->hasGroup(Group::ADMIN)) {
             return $this->createError("You cannot create users with administrator groups.");
+          } else {
+            $groups[] = $groupId;
           }
         }
       }
@@ -205,7 +206,7 @@ namespace Core\API\User {
       if ($user !== false) {
         $this->user = $user;
         $this->result["userId"] = $user->getId();
-        $this->logger->info("A new user with username='$username' and email='$email' was created by userId='$currentUserId'");
+        $this->logger->info("A new user with username='$username' and email='$email' was created by " . $this->logUserId());
       }
 
       return $this->success;
@@ -354,7 +355,7 @@ namespace Core\API\User {
     }
 
     public static function getDefaultACL(Insert $insert): void {
-      $insert->addRow(self::getEndpoint(), "Allows users to search other users", [Group::ADMIN, Group::SUPPORT], true);
+      $insert->addRow(self::getEndpoint(), [Group::ADMIN, Group::SUPPORT], "Allows users to search other users", true);
     }
   }
 
@@ -433,8 +434,7 @@ namespace Core\API\User {
         return false;
       }
 
-      $currentUserId = $this->context->getUser()->getId();
-      $this->logger->info("A new user with username='$username' and email='$email' was invited by userId='$currentUserId'");
+      $this->logger->info("A new user with username='$username' and email='$email' was invited by " . $this->logUserId());
 
       // Create Token
       $token = generateRandomString(36);

+ 1 - 1
Core/Configuration/Settings.class.php

@@ -85,7 +85,7 @@ class Settings {
 
   public static function loadDefaults(): Settings {
     $protocol = getProtocol();
-    $hostname = getHostName();
+    $hostname = getCurrentHostName();
     $settings = new Settings();
 
     // General

+ 5 - 0
README.md

@@ -33,6 +33,11 @@ I actually don't know what i want to implement here. There are quite to many CMS
 1. `docker-compose build`
 2. `docker-compose up`
 3. Open the webapp in your browser and follow the installation guide
+3a. Since the docker runs as user www-data (33), the following permissions are recommended and at least necessary for the installation process:
+```
+chown -R :33 .
+chmod -R 775 .
+```
 
 ### Afterwards
 

+ 1 - 1
cli.php

@@ -959,7 +959,7 @@ $registeredCommands = [
   "mail" => ["handler" => "onMail", "description" => "send mails and process the pipeline", "requiresDocker" => true],
   "settings" => ["handler" => "onSettings", "description" => "change and view settings"],
   "impersonate" => ["handler" => "onImpersonate", "description" => "create a session and print cookies and csrf tokens", "requiresDocker" => true],
-  "frontend" => ["handler" => "onFrontend", "description" => "build and manage frontend modules"],
+  "frontend" => ["handler" => "onFrontend", "description" => "build and manage frontend modules", "requiresDocker" => true],
   "api" => ["handler" => "onAPI", "description" => "view and create API endpoints"],
 ];
 

+ 2 - 2
docker/php/Dockerfile

@@ -20,7 +20,7 @@ RUN mkdir -p /usr/local/etc/php/extra/ && \
     curl -s "https://browscap.org/stream?q=Full_PHP_BrowsCapINI" -o /usr/local/etc/php/extra/browscap.ini
 
 # NodeJS
-RUN curl -sL https://deb.nodesource.com/setup_14.x | bash - && \
+RUN curl -sL https://deb.nodesource.com/setup_21.x | bash - && \
     apt-get update && \
     apt-get -y install nodejs && \
     curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | tee /usr/share/keyrings/yarnkey.gpg >/dev/null && \
@@ -41,4 +41,4 @@ RUN apt-get clean
 RUN if [[ ! -z "$ADDITIONAL_SCRIPT" ]]; then $ADDITIONAL_SCRIPT; fi
 
 COPY --from=composer /usr/bin/composer /usr/bin/composer
-USER www-data
+USER www-data

+ 1 - 1
react/admin-panel/src/views/overview.js

@@ -9,7 +9,7 @@ import {CircularProgress} from "@mui/material";
 const StatBox = (props) => <div className={"col-lg-3 col-6"}>
     <div className={"small-box bg-" + props.color}>
         <div className={"inner"}>
-            {props.count ?
+            {!isNaN(props.count) ?
                 <>
                     <h3>{props.count}</h3>
                     <p>{props.text}</p>