From 2ddcc702304c1aefacd3f8b82d72aab17fc264c9 Mon Sep 17 00:00:00 2001 From: Bennet Becker Date: Fri, 23 Feb 2024 16:55:36 +0100 Subject: [PATCH] fix prefix and multivalued matching for deny lists --- config.inc.php.dist | 2 +- l10n/de_DE.inc | 21 +++++++-------------- l10n/en_US.inc | 6 ++---- nextcloud_attachments.php | 32 +++++++++++++++++--------------- 4 files changed, 27 insertions(+), 34 deletions(-) diff --git a/config.inc.php.dist b/config.inc.php.dist index 023f7e8..a6eac8d 100644 --- a/config.inc.php.dist +++ b/config.inc.php.dist @@ -107,4 +107,4 @@ $config["nextcloud_attachment_exclude_users_in_addr_book_group"] = []; // Enable/Disable certificate validation for https on WebDAV and API requests // Defaults to true (enabled) -$config["nextcloud_attachment_verify_https"] = false; \ No newline at end of file +$config["nextcloud_attachment_verify_https"] = true; \ No newline at end of file diff --git a/l10n/de_DE.inc b/l10n/de_DE.inc index cb86053..d2852ec 100644 --- a/l10n/de_DE.inc +++ b/l10n/de_DE.inc @@ -10,16 +10,12 @@ $labels['login_and_link_file'] = "Anmelden und Link teilen"; $labels['file_too_big'] = "Datei zu groß"; -$labels['file_too_big_not_logged_in_explain'] = "Die Datei ist größer als %limit% und kann nicht angehangen werden. ". - "Nachdem verbinden Ihres Nextcloud Kontos unten, können Sie die Datei jedoch stattdessen als Datei-Link teilen."; +$labels['file_too_big_not_logged_in_explain'] = "Die Datei ist größer als %limit% und kann nicht angehangen werden. Nachdem verbinden Ihres Nextcloud Kontos unten, können Sie die Datei jedoch stattdessen als Datei-Link teilen."; -$labels['file_too_big_explain'] = " Die Datei ist größer als %limit% und kann nicht angehangen werden. ". - "Sie können die Datei dennoch teilen, in dem Sie sie als Datei-Link versenden."; +$labels['file_too_big_explain'] = " Die Datei ist größer als %limit% und kann nicht angehangen werden. Sie können die Datei dennoch teilen, in dem Sie sie als Datei-Link versenden."; $labels['file_big'] = "Wie möchten Sie diese Datei teilen?"; -$labels['file_big_explain'] = "Die Datei ist ziemlich groß: %size%. Sie können Ihre E-Mails klein halten, ". - "in dem Sie sie über Nextcloud als Datei-Link teilen."; -$labels['file_big_not_logged_in_explain'] = "Die Datei ist ziemlich groß: %size%. Sie können Ihre E-Mails klein halten, in dem Sie unten". - " ihren Nextcloud Account verbinden und stattdessen einen Datei-Link teilen."; +$labels['file_big_explain'] = "Die Datei ist ziemlich groß: %size%. Sie können Ihre E-Mails klein halten, in dem Sie sie über Nextcloud als Datei-Link teilen."; +$labels['file_big_not_logged_in_explain'] = "Die Datei ist ziemlich groß: %size%. Sie können Ihre E-Mails klein halten, in dem Sie unten ihren Nextcloud Account verbinden und stattdessen einen Datei-Link teilen."; $labels['link_file'] = "Hochladen und als Link teilen"; $labels['attach'] = "Als Kopie anfügen"; @@ -32,12 +28,9 @@ $labels['upload_failed'] = "Nextcloud hochladen fehlgeschlagen:"; $labels['missing_config'] = "Nextcloud Erweiterung ist nicht konfiguriert. Bitte kontaktieren Sie den Administrator!"; $labels['cannot_mkdir'] = "Unterordner zum Hochladen konnte nicht erstellt werden:"; -$labels['folder_access'] = "Es konnte nicht auf den Ordner zugegriffen werden! ". - "Bitte prüfen Sie die Berechtigungen oder fragen Sie einen Administrator"; -$labels['cannot_find_unique_name'] = "Es konnte kein einzigartiger Dateiname gefunden werden. ". - "Versuchen Sie die Datei umzubenennen oder den Ordner in Nextcloud aufzuräumen"; -$labels['cannot_link'] = "Das hochladen der Datei war erfolgreich, es konnte aber kein Link erstellt werden. ". - "Bitte versuchen Sie manuell einen Link zu erstellen oder fragen Sie den Administrator."; +$labels['folder_access'] = "Es konnte nicht auf den Ordner zugegriffen werden! Bitte prüfen Sie die Berechtigungen oder fragen Sie einen Administrator"; +$labels['cannot_find_unique_name'] = "Es konnte kein einzigartiger Dateiname gefunden werden. Versuchen Sie die Datei umzubenennen oder den Ordner in Nextcloud aufzuräumen"; +$labels['cannot_link'] = "Das hochladen der Datei war erfolgreich, es konnte aber kein Link erstellt werden. Bitte versuchen Sie manuell einen Link zu erstellen oder fragen Sie den Administrator."; $labels['cloud_attachments'] = "Cloud Anhänge"; $labels['cloud_server'] = "Cloud Server"; diff --git a/l10n/en_US.inc b/l10n/en_US.inc index d493c03..26c6776 100644 --- a/l10n/en_US.inc +++ b/l10n/en_US.inc @@ -9,15 +9,13 @@ $labels['login_and_link_file'] = "Login and share Link"; $labels['file_too_big'] = "File Too Big"; -$labels['file_too_big_not_logged_in_explain'] = "The file is larger then %limit% and can't be attached. ". - "After connecting the your Nextcloud account below, you may send it anyway, by sharing it as file-link instead."; +$labels['file_too_big_not_logged_in_explain'] = "The file is larger then %limit% and can't be attached. After connecting the your Nextcloud account below, you may send it anyway, by sharing it as file-link instead."; $labels['file_too_big_explain'] = "The file is larger then %limit% and can't be attached. You can share it as Nextcloud file-link instead."; $labels['file_big'] = "How do You Want to Share the File?"; $labels['file_big_explain'] = "The file is quite large: %size%. You can keep your emails small by sharing it as a file-link instead."; -$labels['file_big_not_logged_in_explain'] = "The file is quite large: %size%. You can keep your emails small by connecting". - " your Nextcloud account below and sharing it as a file-link instead."; +$labels['file_big_not_logged_in_explain'] = "The file is quite large: %size%. You can keep your emails small by connecting your Nextcloud account below and sharing it as a file-link instead."; $labels['link_file'] = "Upload and share link"; $labels['attach'] = "Attach copy"; diff --git a/nextcloud_attachments.php b/nextcloud_attachments.php index cb43957..694ebed 100644 --- a/nextcloud_attachments.php +++ b/nextcloud_attachments.php @@ -28,7 +28,7 @@ use GuzzleHttp\Exception\GuzzleException; use GuzzleHttp\Psr7; -const NC_PREFIX = "nextcloud_attachments"; +const NC_PREFIX = "nextcloud_attachment"; const NC_LOG_FILE = "ncattach"; const VERSION = "1.2.1"; @@ -67,19 +67,23 @@ private function is_disabled() : bool $exa = $this->rcmail->config->get(__("exclude_users_with_addr_book_value"), []); $exag = $this->rcmail->config->get(__("exclude_users_in_addr_book_group"), []); - // exclude directly denylisted users + // exclude directly deny listed users if (is_array($ex) && (in_array($this->rcmail->get_user_name(), $ex) || in_array($this->resolve_username(), $ex) || in_array($this->rcmail->get_user_email(), $ex))) { self::log("access for ".$this->resolve_username()." disabled via direct deny list"); return true; } - // exclude directly denylisted address books + // exclude directly deny listed address books if (is_array($exg)) { foreach ($exg as $book) { $abook = $this->rcmail->get_address_book($book); if ($abook) { - if ($abook->search("email", $this->rcmail->get_user_name())) { - //TODO: searching via email is suboptimal if some aliasing is taking place + if (array_key_exists("uid", $book->coltypes)) { + $entries = $book->search(["email", "uid"], [$this->rcmail->get_user_email(), $this->resolve_username()]); + } else { + $entries = $book->search("email", $this->rcmail->get_user_email()); + } + if ($entries) { self::log("access for ".$this->resolve_username(). " disabled in ".$book->get_name()." because they exist in there"); return true; @@ -105,10 +109,11 @@ private function is_disabled() : bool } else { $entries = $book->search("email", $this->rcmail->get_user_email()); } + if($entries) { while ($e = $entries->iterate()) { - //TODO: what happens if it is a multi value attribute - if (array_key_exists($attr, $e) && $e[$attr] == $match) { + if (array_key_exists($attr, $e) && ($e[$attr] == $match || + (is_array($e[$attr]) && in_array($match, $e[$attr])))) { self::log("access for ".$this->resolve_username(). " disabled in ".$book->get_name()." because of ".$attr."=".$match); return true; @@ -145,15 +150,13 @@ private function is_disabled() : bool public function init(): void { $this->rcmail = rcmail::get_instance(); + $this->load_config("config.inc.php.dist"); $this->load_config(); -// self::log($_SESSION); -// self::log([$this->rcmail->get_user_name(), $this->rcmail->get_user_email()]); - - $this->add_hook("storage_connected", function ($data) { - $_SESSION['storage_user'] = $data['user']; - return $data; - }); + if (empty($this->rcmail->config->get(__("server")))) { + self::log("invalid config. server is empty"); + return; + } $this->client = new GuzzleHttp\Client([ 'headers' => [ @@ -281,7 +284,6 @@ public function add_preferences(array $param): array { $prefs = $this->rcmail->user->get_prefs(); -// $this->load_config(); $server = $this->rcmail->config->get(__("server")); $blocks = $param["blocks"];