aboutsummaryrefslogtreecommitdiffstats
path: root/roles/sabredav/templates/var/www/sabredav/server.php.j2
blob: 36bc973c6d24344557776f4ed331201bc610549f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<?php

// timezone
date_default_timezone_set('UTC');

// database
$pdo = new PDO('pgsql:dbname={{ sabredav_db_name }};host={{ sabredav_db_host }}', '{{ sabredav_user }}');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

// autoloader
require_once 'vendor/autoload.php';

// freeipa
$ipa = new \FreeIPA\Connection();
$allowedGroups = ['{{ sabredav_access_group }}'];

// backends
$principalBackend = new \FreeIPA\PrincipalBackend($ipa, $allowedGroups);
$caldavBackend    = new \Sabre\CalDAV\Backend\PDO($pdo);
$carddavBackend   = new \Sabre\CardDAV\Backend\PDO($pdo);
$authBackend      = new \FreeIPA\AuthBackend($ipa, $caldavBackend, $carddavBackend, $allowedGroups);
$lockBackend      = new \Sabre\DAV\Locks\Backend\PDO($pdo);

// directory structure
$server = new Sabre\DAV\Server([
  new \Sabre\CalDAV\Principal\Collection($principalBackend),
  new \Sabre\CalDAV\CalendarRoot($principalBackend, $caldavBackend),
  new \Sabre\CardDAV\AddressBookRoot($principalBackend, $carddavBackend),
  new \Sabre\DAVACL\FS\HomeCollection($principalBackend, __DIR__.'/webdav')
]);

// plugins
$server->addPlugin(new \Sabre\DAV\Auth\Plugin($authBackend,'SabreDAV'));
$server->addPlugin(new \Sabre\DAV\Browser\Plugin());
$server->addPlugin(new \Sabre\DAV\Sync\Plugin());
$server->addPlugin(new \Sabre\DAV\Sharing\Plugin());

$aclPlugin = new \Sabre\DAVACL\Plugin();
$aclPlugin->hideNodesFromListings = true;
$server->addPlugin($aclPlugin);

// webdav plugins
$server->addPlugin(new \Sabre\DAV\Locks\Plugin($lockBackend));
$server->addPlugin(new \Sabre\DAV\Browser\GuessContentType());
$server->addPlugin(new \Sabre\DAV\TemporaryFileFilterPlugin(__DIR__.'/tmpdata'));

// caldav plugins
$server->addPlugin(new \Sabre\CalDAV\Plugin());
$server->addPlugin(new \Sabre\CalDAV\Schedule\Plugin());
$server->addPlugin(new \Sabre\CalDAV\Schedule\IMipPlugin('{{ sabredav_imip_from }}'));
$server->addPlugin(new \Sabre\CalDAV\Subscriptions\Plugin());
$server->addPlugin(new \Sabre\CalDAV\Notifications\Plugin());
$server->addPlugin(new \Sabre\CalDAV\SharingPlugin());
$server->addPlugin(new \Sabre\CalDAV\ICSExportPlugin());

// carddav plugins
$server->addPlugin(new \Sabre\CardDAV\Plugin());
$server->addPlugin(new \Sabre\CardDAV\VCFExportPlugin());

// lets goooooo
$server->exec();