Page MenuHomePhorge

D5508.1775227351.diff
No OneTemporary

Authored By
Unknown
Size
5 KB
Referenced Files
None
Subscribers
None

D5508.1775227351.diff

diff --git a/src/app/Policy/Utils.php b/src/app/Policy/Utils.php
--- a/src/app/Policy/Utils.php
+++ b/src/app/Policy/Utils.php
@@ -99,12 +99,12 @@
}
/**
- * Get user setting with a fallback to account policy
+ * Get recipient's setting with a fallback to account policy
*
- * @param User $user User to get the setting for
- * @param string $name Setting name
+ * @param User|Resource|SharedFolder $recipient Recipient to get the setting for
+ * @param string $name Setting name
*/
- public static function getPolicySetting(User $user, $name): bool|string
+ public static function getPolicySetting(Resource|SharedFolder|User $recipient, $name): bool|string
{
// Fallback default values for policies
// TODO: This probably should be configurable
@@ -113,14 +113,14 @@
];
$policy_name = str_replace(['_enabled', '_config'], '_policy', $name);
- $settings = $user->getSettings([$name, $policy_name]);
+ $settings = $recipient->getSettings([$name, $policy_name]);
$value = $settings[$name] ?? null;
if ($value === null) {
- $owner = $user->walletOwner();
+ $owner = $recipient->walletOwner();
- if ($owner && $owner->id != $user->id) {
+ if ($owner && ($owner->id != $recipient->id || !$recipient instanceof User)) {
$value = $owner->getSetting($policy_name);
} elseif (isset($settings[$policy_name])) {
$value = $settings[$policy_name];
diff --git a/src/tests/Feature/Policy/GreylistTest.php b/src/tests/Feature/Policy/GreylistTest.php
--- a/src/tests/Feature/Policy/GreylistTest.php
+++ b/src/tests/Feature/Policy/GreylistTest.php
@@ -16,6 +16,8 @@
{
private $clientAddress;
private $net;
+ private $testResource;
+ private $testSharedFolder;
protected function setUp(): void
{
@@ -44,6 +46,13 @@
Greylist\Connect::where('sender_domain', 'sender.domain')->delete();
Greylist\Whitelist::where('sender_domain', 'sender.domain')->delete();
+ if ($this->testSharedFolder) {
+ $this->deleteTestSharedFolder($this->testSharedFolder->email);
+ }
+ if ($this->testResource) {
+ $this->deleteTestResource($this->testResource->email);
+ }
+
parent::tearDown();
}
@@ -375,4 +384,76 @@
}
}
}
+
+ /**
+ * Test shouldDefer() method against non-user recipient
+ */
+ public function testShouldDeferSharedFolder()
+ {
+ $this->testSharedFolder = $this->getTestSharedFolder('folder-test@kolabnow.com');
+ $this->testSharedFolder->assignToWallet($this->domainOwner->wallets->first());
+ $this->testResource = $this->getTestResource('resource-test@kolabnow.com');
+ $this->testResource->assignToWallet($this->domainOwner->wallets->first());
+
+ // Test a SharedFolder recipient
+ $whitelist = Greylist\Whitelist::where('sender_domain', 'sender.domain')->first();
+ $this->assertNull($whitelist);
+
+ for ($i = 0; $i < 5; $i++) {
+ $request = new Greylist([
+ 'sender' => "someone{$i}@sender.domain",
+ 'recipient' => $this->testSharedFolder->email,
+ 'client_address' => $this->clientAddress,
+ 'client_name' => 'some.mx',
+ 'timestamp' => Carbon::now()->subDays(1),
+ ]);
+
+ $this->assertTrue($request->shouldDefer());
+ }
+
+ $whitelist = Greylist\Whitelist::where('sender_domain', 'sender.domain')->first();
+ $this->assertNotNull($whitelist);
+
+ $request = new Greylist([
+ 'sender' => "someone5@sender.domain",
+ 'recipient' => $this->testSharedFolder->email,
+ 'client_address' => $this->clientAddress,
+ 'client_name' => 'some.mx',
+ 'timestamp' => Carbon::now()->subDays(1),
+ ]);
+
+ $this->assertFalse($request->shouldDefer());
+
+ Greylist\Connect::where('sender_domain', 'sender.domain')->delete();
+ Greylist\Whitelist::where('sender_domain', 'sender.domain')->delete();
+
+ // Test a Resource recipient
+ $whitelist = Greylist\Whitelist::where('sender_domain', 'sender.domain')->first();
+ $this->assertNull($whitelist);
+
+ for ($i = 0; $i < 5; $i++) {
+ $request = new Greylist([
+ 'sender' => "someone{$i}@sender.domain",
+ 'recipient' => $this->testResource->email,
+ 'client_address' => $this->clientAddress,
+ 'client_name' => 'some.mx',
+ 'timestamp' => Carbon::now()->subDays(1),
+ ]);
+
+ $this->assertTrue($request->shouldDefer());
+ }
+
+ $whitelist = Greylist\Whitelist::where('sender_domain', 'sender.domain')->first();
+ $this->assertNotNull($whitelist);
+
+ $request = new Greylist([
+ 'sender' => "someone5@sender.domain",
+ 'recipient' => $this->testResource->email,
+ 'client_address' => $this->clientAddress,
+ 'client_name' => 'some.mx',
+ 'timestamp' => Carbon::now()->subDays(1),
+ ]);
+
+ $this->assertFalse($request->shouldDefer());
+ }
}

File Metadata

Mime Type
text/plain
Expires
Fri, Apr 3, 2:42 PM (14 m, 22 s ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
18824337
Default Alt Text
D5508.1775227351.diff (5 KB)

Event Timeline