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(),
 | 
						|
        ];
 | 
						|
    }
 | 
						|
}
 |