30
30
namespace OCA \DAV \Connector \Sabre ;
31
31
32
32
use OC \Files \Node \Folder ;
33
+ use OCA \DAV \AppInfo \PluginManager ;
33
34
use OCA \DAV \Files \BrowserErrorPagePlugin ;
34
35
use OCP \Files \Mount \IMountManager ;
35
36
use OCP \IConfig ;
39
40
use OCP \IRequest ;
40
41
use OCP \ITagManager ;
41
42
use OCP \IUserSession ;
43
+ use OCP \SabrePluginEvent ;
42
44
use Sabre \DAV \Auth \Plugin ;
45
+ use Symfony \Component \EventDispatcher \EventDispatcherInterface ;
43
46
44
47
class ServerFactory {
45
48
/** @var IConfig */
@@ -58,6 +61,8 @@ class ServerFactory {
58
61
private $ request ;
59
62
/** @var IPreview */
60
63
private $ previewManager ;
64
+ /** @var EventDispatcherInterface */
65
+ private $ eventDispatcher ;
61
66
62
67
/**
63
68
* @param IConfig $config
@@ -77,7 +82,8 @@ public function __construct(
77
82
IMountManager $ mountManager ,
78
83
ITagManager $ tagManager ,
79
84
IRequest $ request ,
80
- IPreview $ previewManager
85
+ IPreview $ previewManager ,
86
+ EventDispatcherInterface $ eventDispatcher
81
87
) {
82
88
$ this ->config = $ config ;
83
89
$ this ->logger = $ logger ;
@@ -87,6 +93,7 @@ public function __construct(
87
93
$ this ->tagManager = $ tagManager ;
88
94
$ this ->request = $ request ;
89
95
$ this ->previewManager = $ previewManager ;
96
+ $ this ->eventDispatcher = $ eventDispatcher ;
90
97
}
91
98
92
99
/**
@@ -134,7 +141,7 @@ public function createServer($baseUri,
134
141
$ server ->on ('beforeMethod ' , function () use ($ server , $ objectTree , $ viewCallBack ) {
135
142
// ensure the skeleton is copied
136
143
$ userFolder = \OC ::$ server ->getUserFolder ();
137
-
144
+
138
145
/** @var \OC\Files\View $view */
139
146
$ view = $ viewCallBack ($ server );
140
147
if ($ userFolder instanceof Folder && $ userFolder ->getPath () === $ view ->getRoot ()) {
@@ -195,6 +202,18 @@ public function createServer($baseUri,
195
202
);
196
203
}
197
204
$ server ->addPlugin (new \OCA \DAV \Connector \Sabre \CopyEtagHeaderPlugin ());
205
+
206
+ // Load dav plugins from apps
207
+ $ event = new SabrePluginEvent ($ server );
208
+ $ this ->eventDispatcher ->dispatch ($ event );
209
+ $ pluginManager = new PluginManager (
210
+ \OC ::$ server ,
211
+ \OC ::$ server ->getAppManager ()
212
+ );
213
+ foreach ($ pluginManager ->getAppPlugins () as $ appPlugin ) {
214
+ $ server ->addPlugin ($ appPlugin );
215
+ }
216
+
198
217
}, 30 ); // priority 30: after auth (10) and acl(20), before lock(50) and handling the request
199
218
return $ server ;
200
219
}
0 commit comments