-
Notifications
You must be signed in to change notification settings - Fork 0
/
server.php
101 lines (73 loc) · 3.15 KB
/
server.php
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
<?php
use Sabre\CalDAV;
use Sabre\CardDAV;
use Sabre\DAV;
use Sabre\DAVACL;
require 'vendor/autoload.php';
require 'config.php';
require 'dbstring.php';
/*************************** Setup ****************************/
// settings
date_default_timezone_set('Europe/Paris');
$pdo = new PDO($dbstring);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Backends
$authBackend = new DAV\Auth\Backend\Apache(); // Let apache manage the auth.
$lockBackend = new DAV\Locks\Backend\PDO($pdo);
$principalBackend = new DAVACL\PrincipalBackend\PDO($pdo);
$calendarBackend = new CalDAV\Backend\PDO($pdo);
$carddavBackend = new CardDAV\Backend\PDO($pdo);
// Default entries
$pdo->exec("INSERT INTO principals (uri,email,displayname) VALUES ('principals/$user', '$user@$host','$user') ON CONFLICT DO NOTHING;");
$pdo->exec("INSERT INTO principals (uri,email,displayname) VALUES ('principals/$user/calendar-proxy-read', null, null) ON CONFLICT DO NOTHING;");
$pdo->exec("INSERT INTO principals (uri,email,displayname) VALUES ('principals/$user/calendar-proxy-write', null, null) ON CONFLICT DO NOTHING;");
if (count($calendarBackend->getCalendarsForUser("principals/$user")) == 0) {
$calendarBackend->createCalendar("principals/$user", 'default', ['{DAV:}displayname' => 'Default']);
}
if (count($carddavBackend->getAddressBooksForUser("principals/$user")) == 0) {
$carddavBackend->createAddressBook("principals/$user", 'default', ['{DAV:}displayname' => 'Default']);
}
// Directory structure
$tree = [
new CalDAV\Principal\Collection($principalBackend),
new CalDAV\CalendarRoot($principalBackend, $calendarBackend),
new CardDAV\AddressBookRoot($principalBackend, $carddavBackend),
];
if ($user != $anonymous) {
// Empty files collection as it is served by fileserver.php
array_push($tree, new DAV\SimpleCollection('files'));
}
$server = new DAV\Server($tree);
$server->setBaseUri('/');
/********************** General Plugins ***********************/
// Auth plugin
$server->addPlugin(new DAV\Auth\Plugin($authBackend));
// The lock manager is reponsible for making sure users don't overwrite
// each others changes.
$server->addPlugin(new DAV\Locks\Plugin($lockBackend));
// WebDAV-Sync plugin
$server->addPlugin(new DAV\Sync\Plugin());
// Sharing
$server->addPlugin(new DAV\Sharing\Plugin());
// Access control list plugin
$server->addPlugin(new AclPlugin($anonymous));
// Support for html frontend
$server->addPlugin(new DAV\Browser\Plugin());
/********************** Calendar Plugins **********************/
// CalDAV support
$server->addPlugin(new CalDAV\Plugin());
// Calendar subscription support
$server->addPlugin(new CalDAV\Subscriptions\Plugin());
// Calendar scheduling support
$server->addPlugin(new CalDAV\Schedule\Plugin());
// CalDAV Sharing support
$server->addPlugin(new CalDAV\SharingPlugin());
// Export
$server->addPlugin(new \Sabre\CalDAV\ICSExportPlugin());
/******************** Addressbook Plugins *********************/
// CardDAV support
$server->addPlugin(new \Sabre\CardDAV\Plugin());
// Export
$server->addPlugin(new \Sabre\CardDAV\VCFExportPlugin());
/************************ Start server ************************/
$server->start();