69 lines
1.6 KiB
PHP
69 lines
1.6 KiB
PHP
<?php
|
|
|
|
namespace App\Dav;
|
|
|
|
use Illuminate\Support\ServiceProvider as BaseServiceProvider;
|
|
use LaravelSabre\Http\Auth\AuthBackend;
|
|
use LaravelSabre\LaravelSabre;
|
|
use Sabre\CardDAV\AddressBookRoot;
|
|
use Sabre\CardDAV\Plugin as CardDAVPlugin;
|
|
use Sabre\DAV\Auth\Plugin as AuthPlugin;
|
|
use Sabre\DAV\Browser\Plugin as BrowserPlugin;
|
|
use Sabre\DAV\ServerPlugin;
|
|
use Sabre\DAVACL\AbstractPrincipalCollection;
|
|
use Sabre\DAVACL\Plugin as AclPlugin;
|
|
use Sabre\DAVACL\PrincipalCollection;
|
|
|
|
class ServiceProvider extends BaseServiceProvider
|
|
{
|
|
/**
|
|
* Bootstrap any application services.
|
|
*
|
|
* @return void
|
|
*/
|
|
public function boot()
|
|
{
|
|
LaravelSabre::nodes(function () {
|
|
return $this->nodes();
|
|
});
|
|
LaravelSabre::plugins(fn () => $this->plugins());
|
|
LaravelSabre::auth(function () {
|
|
auth()->onceBasic();
|
|
|
|
return true;
|
|
});
|
|
}
|
|
|
|
/**
|
|
* List of nodes for DAV Collection.
|
|
*
|
|
* @return array<int, AbstractPrincipalCollection>
|
|
*/
|
|
private function nodes(): array
|
|
{
|
|
$principalBackend = new Principal();
|
|
$addressBookBackend = new AddressBookBackend();
|
|
|
|
// Directory tree
|
|
return [
|
|
new PrincipalCollection($principalBackend),
|
|
new AddressBookRoot($principalBackend, $addressBookBackend),
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @return array<int, ServerPlugin>
|
|
*/
|
|
private function plugins(): array
|
|
{
|
|
$authBackend = new AuthBackend();
|
|
|
|
return [
|
|
new BrowserPlugin(),
|
|
new AuthPlugin($authBackend),
|
|
new CardDAVPlugin(),
|
|
new AclPlugin(),
|
|
];
|
|
}
|
|
}
|