Skip to content

Commit

Permalink
fix prefix and multivalued matching for deny lists
Browse files Browse the repository at this point in the history
  • Loading branch information
bennet0496 committed Feb 23, 2024
1 parent 80ea9e8 commit 2ddcc70
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 34 deletions.
2 changes: 1 addition & 1 deletion config.inc.php.dist
Original file line number Diff line number Diff line change
Expand Up @@ -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;
$config["nextcloud_attachment_verify_https"] = true;
21 changes: 7 additions & 14 deletions l10n/de_DE.inc
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand All @@ -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";
Expand Down
6 changes: 2 additions & 4 deletions l10n/en_US.inc
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand Down
32 changes: 17 additions & 15 deletions nextcloud_attachments.php
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand Down Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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' => [
Expand Down Expand Up @@ -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"];
Expand Down

0 comments on commit 2ddcc70

Please sign in to comment.