nodes(); }); LaravelSabre::plugins(function () { return $this->plugins(); }); LaravelSabre::auth(function (\Illuminate\Http\Request $request): bool { if (! $request->user()) { return false; } if ($request->user()->admin || config('laravelsabre.users') == null) { return true; } $users = explode(',', config('laravelsabre.users')); $filtered = Arr::where($users, function ($value, $key) use ($request) { return $value === $request->user()->email; }); return count($filtered) > 0; }); } /** * List of nodes for DAV Collection. */ private function nodes(): array { $user = Auth::user(); // Initiate custom backends for link between Sabre and Monica $principalBackend = app(PrincipalBackend::class)->init($user); // User rights $carddavBackend = app(CardDAVBackend::class)->init($user); // Contacts $caldavBackend = app(CalDAVBackend::class)->init($user); // Calendar return [ new PrincipalCollection($principalBackend), new AddressBookRoot($principalBackend, $carddavBackend), new CalendarRoot($principalBackend, $caldavBackend), ]; } /** * List of Sabre plugins. */ private function plugins() { // Authentication backend $authBackend = new AuthBackend(); yield new AuthPlugin($authBackend); // CardDAV plugin yield new CardDAVPlugin(); yield new VCFExportPlugin(); // CalDAV plugin yield new CalDAVPlugin(); yield new ICSExportPlugin(); // Sync Plugin - rfc6578 yield new SyncPlugin(); // ACL plugnin $aclPlugin = new AclPlugin(); $aclPlugin->allowUnauthenticatedAccess = false; $aclPlugin->hideNodesFromListings = true; yield $aclPlugin; // In local environment add browser plugin if (App::environment('local')) { yield new BrowserPlugin(false); } else { yield new DAVRedirect(); } } }