1<?php
2
3namespace Sabre\DAV\Mount;
4
5use Sabre\DAV;
6use Sabre\HTTP\RequestInterface;
7use Sabre\HTTP\ResponseInterface;
8
9/**
10 * This plugin provides support for RFC4709: Mounting WebDAV servers
11 *
12 * Simply append ?mount to any collection to generate the davmount response.
13 *
14 * @copyright Copyright (C) fruux GmbH (https://fruux.com/)
15 * @author Evert Pot (http://evertpot.com/)
16 * @license http://sabre.io/license/ Modified BSD License
17 */
18class Plugin extends DAV\ServerPlugin {
19
20    /**
21     * Reference to Server class
22     *
23     * @var DAV\Server
24     */
25    protected $server;
26
27    /**
28     * Initializes the plugin and registers event handles
29     *
30     * @param DAV\Server $server
31     * @return void
32     */
33    function initialize(DAV\Server $server) {
34
35        $this->server = $server;
36        $this->server->on('method:GET', [$this, 'httpGet'], 90);
37
38    }
39
40    /**
41     * 'beforeMethod' event handles. This event handles intercepts GET requests ending
42     * with ?mount
43     *
44     * @param RequestInterface $request
45     * @param ResponseInterface $response
46     * @return bool
47     */
48    function httpGet(RequestInterface $request, ResponseInterface $response) {
49
50        $queryParams = $request->getQueryParameters();
51        if (!array_key_exists('mount', $queryParams)) return;
52
53        $currentUri = $request->getAbsoluteUrl();
54
55        // Stripping off everything after the ?
56        list($currentUri) = explode('?', $currentUri);
57
58        $this->davMount($response, $currentUri);
59
60        // Returning false to break the event chain
61        return false;
62
63    }
64
65    /**
66     * Generates the davmount response
67     *
68     * @param ResponseInterface $response
69     * @param string $uri absolute uri
70     * @return void
71     */
72    function davMount(ResponseInterface $response, $uri) {
73
74        $response->setStatus(200);
75        $response->setHeader('Content-Type', 'application/davmount+xml');
76        ob_start();
77        echo '<?xml version="1.0"?>', "\n";
78        echo "<dm:mount xmlns:dm=\"http://purl.org/NET/webdav/mount\">\n";
79        echo "  <dm:url>", htmlspecialchars($uri, ENT_NOQUOTES, 'UTF-8'), "</dm:url>\n";
80        echo "</dm:mount>";
81        $response->setBody(ob_get_clean());
82
83    }
84
85
86}
87