Page MenuHomePhorge

D5214.1775238392.diff
No OneTemporary

Authored By
Unknown
Size
7 KB
Referenced Files
None
Subscribers
None

D5214.1775238392.diff

diff --git a/src/app/Backends/DAV.php b/src/app/Backends/DAV.php
--- a/src/app/Backends/DAV.php
+++ b/src/app/Backends/DAV.php
@@ -30,12 +30,43 @@
protected $responseHeaders = [];
protected $homes;
+
+ /**
+ * Get object instance for user/password/location
+ *
+ * @param string $user Username
+ * @param string $password Password
+ * @param ?string $url Server location (defaults to services.dav.uri option value)
+ *
+ * @return DAV DAV client instance
+ */
+ public static function getInstance($user, $password, $url = null): DAV
+ {
+ $dav = new self();
+ $dav->setCredentials($user, $password);
+ $dav->setUrl($url ?: \config('services.dav.uri'));
+
+ return $dav;
+ }
+
+ /**
+ * Set DAV server location
+ *
+ * @param string $url Server location (URL)
+ */
+ public function setUrl($url): void
+ {
+ $this->url = $url;
+ }
+
/**
- * Object constructor
+ * Set user name and password
+ *
+ * @param string $user Username
+ * @param string $password Password
*/
- public function __construct($user, $password, $url = null)
+ public function setCredentials($user, $password): void
{
- $this->url = $url ?: \config('services.dav.uri');
$this->user = $user;
$this->password = $password;
}
@@ -378,7 +409,7 @@
throw new \Exception("Failed to create an authentication token for DAV");
}
- $dav = new self($user->email, $password);
+ $dav = self::getInstance($user->email, $password);
foreach ($folders as $props) {
$folder = new DAV\Folder();
diff --git a/src/app/Console/Commands/Status/Health.php b/src/app/Console/Commands/Status/Health.php
--- a/src/app/Console/Commands/Status/Health.php
+++ b/src/app/Console/Commands/Status/Health.php
@@ -5,8 +5,8 @@
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Redis;
-use App\Backends\DAV;
use App\Providers\Payment\Mollie;
+use App\Support\Facades\DAV;
use App\Support\Facades\IMAP;
use App\Support\Facades\LDAP;
use App\Support\Facades\OpenExchangeRates;
diff --git a/src/app/DataMigrator/Driver/DAV.php b/src/app/DataMigrator/Driver/DAV.php
--- a/src/app/DataMigrator/Driver/DAV.php
+++ b/src/app/DataMigrator/Driver/DAV.php
@@ -44,7 +44,7 @@
$username = $account->username . ($account->loginas ? "**{$account->loginas}" : '');
$baseUri = preg_replace('|^dav|', 'http', $account->uri);
- $this->client = new DAVClient($username, $account->password, $baseUri);
+ $this->client = DAVClient::getInstance($username, $account->password, $baseUri);
$this->engine = $engine;
$this->account = $account;
}
diff --git a/src/app/Jobs/User/CreateJob.php b/src/app/Jobs/User/CreateJob.php
--- a/src/app/Jobs/User/CreateJob.php
+++ b/src/app/Jobs/User/CreateJob.php
@@ -3,6 +3,7 @@
namespace App\Jobs\User;
use App\Jobs\UserJob;
+use App\Support\Facades\DAV;
use App\Support\Facades\IMAP;
use App\Support\Facades\LDAP;
@@ -113,7 +114,7 @@
}
// FIXME: Should we ignore exceptions on this operation or introduce DAV_READY status?
- \App\Backends\DAV::initDefaultFolders($user);
+ DAV::initDefaultFolders($user);
// Make user active in non-mandate mode only
if (
diff --git a/src/app/Policy/Mailfilter/Modules/ItipModule.php b/src/app/Policy/Mailfilter/Modules/ItipModule.php
--- a/src/app/Policy/Mailfilter/Modules/ItipModule.php
+++ b/src/app/Policy/Mailfilter/Modules/ItipModule.php
@@ -3,6 +3,7 @@
namespace App\Policy\Mailfilter\Modules;
use App\Backends\DAV;
+use App\Support\Facades\DAV as DAVFacade;
use App\User;
use App\Policy\Mailfilter\MailParser;
use App\Policy\Mailfilter\Result;
@@ -160,7 +161,7 @@
$password = \App\Auth\Utils::tokenCreate((string) $user->id, $this->davTTL);
$this->davTokenExpiresOn = now()->addSeconds($this->davTTL - 1);
- $this->davClient = new DAV($user->email, $password);
+ $this->davClient = DAVFacade::getInstance($user->email, $password);
}
return $this->davClient;
diff --git a/src/app/Providers/AppServiceProvider.php b/src/app/Providers/AppServiceProvider.php
--- a/src/app/Providers/AppServiceProvider.php
+++ b/src/app/Providers/AppServiceProvider.php
@@ -25,6 +25,9 @@
$this->app->bind('ldap', function () {
return new \App\Backends\LDAP();
});
+ $this->app->bind('dav', function () {
+ return new \App\Backends\DAV();
+ });
$this->app->bind('roundcube', function () {
return new \App\Backends\Roundcube();
});
diff --git a/src/app/Support/Facades/DAV.php b/src/app/Support/Facades/DAV.php
new file mode 100644
--- /dev/null
+++ b/src/app/Support/Facades/DAV.php
@@ -0,0 +1,16 @@
+<?php
+
+namespace App\Support\Facades;
+
+use Illuminate\Support\Facades\Facade;
+
+class DAV extends Facade
+{
+ /**
+ * Get the registered name of the component.
+ */
+ protected static function getFacadeAccessor(): string
+ {
+ return 'dav';
+ }
+}
diff --git a/src/tests/BackendsTrait.php b/src/tests/BackendsTrait.php
--- a/src/tests/BackendsTrait.php
+++ b/src/tests/BackendsTrait.php
@@ -213,7 +213,7 @@
if (empty($this->clients[$clientId])) {
$uri = preg_replace('/^dav/', 'http', $account->uri);
- $this->clients[$clientId] = new DAV($account->username, $account->password, $uri);
+ $this->clients[$clientId] = DAV::getInstance($account->username, $account->password, $uri);
}
return $this->clients[$clientId];
diff --git a/src/tests/Feature/Backends/DAVTest.php b/src/tests/Feature/Backends/DAVTest.php
--- a/src/tests/Feature/Backends/DAVTest.php
+++ b/src/tests/Feature/Backends/DAVTest.php
@@ -75,7 +75,7 @@
\config(['services.dav.default_folders' => $dav_folders]);
DAV::initDefaultFolders($user);
- $dav = new DAV($user->email, $props['password']);
+ $dav = DAV::getInstance($user->email, $props['password']);
$folders = $dav->listFolders(DAV::TYPE_VCARD);
$this->assertCount(1, $folders);
diff --git a/src/tests/Feature/Console/Status/HealthTest.php b/src/tests/Feature/Console/Status/HealthTest.php
--- a/src/tests/Feature/Console/Status/HealthTest.php
+++ b/src/tests/Feature/Console/Status/HealthTest.php
@@ -3,6 +3,7 @@
namespace Tests\Feature\Console\Status;
use Tests\TestCase;
+use App\Support\Facades\DAV;
use App\Support\Facades\IMAP;
use App\Support\Facades\LDAP;
use App\Support\Facades\Roundcube;
@@ -21,6 +22,7 @@
\config(['app.with_ldap' => true]);
\config(['app.with_imap' => true]);
+ DAV::shouldReceive('healthcheck')->once()->andReturn(true);
IMAP::shouldReceive('healthcheck')->once()->andReturn(true);
LDAP::shouldReceive('healthcheck')->once()->andReturn(true);
Roundcube::shouldReceive('healthcheck')->once()->andReturn(true);
diff --git a/src/tests/Feature/Jobs/User/CreateTest.php b/src/tests/Feature/Jobs/User/CreateTest.php
--- a/src/tests/Feature/Jobs/User/CreateTest.php
+++ b/src/tests/Feature/Jobs/User/CreateTest.php
@@ -2,6 +2,7 @@
namespace Tests\Feature\Jobs\User;
+use App\Support\Facades\DAV;
use App\Support\Facades\IMAP;
use App\Support\Facades\LDAP;
use App\User;
@@ -48,6 +49,7 @@
$this->assertFalse($user->isActive());
// Test successful creation
+ DAV::shouldReceive('initDefaultFolders')->once()->with($user);
IMAP::shouldReceive('createUser')->once()->with($user)->andReturn(true);
LDAP::shouldReceive('createUser')->once()->with($user)->andReturn(true);

File Metadata

Mime Type
text/plain
Expires
Fri, Apr 3, 5:46 PM (1 h, 44 m ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
18825268
Default Alt Text
D5214.1775238392.diff (7 KB)

Event Timeline