adrema/app/Dav/ServiceProvider.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(),
];
}
}