Fix requests for browser plugin as well as for the public calendar root folder
This commit is contained in:
parent
e7085aab38
commit
00dc157b19
|
@ -91,7 +91,6 @@ class PublishPlugin extends ServerPlugin
|
||||||
|
|
||||||
$this->server->on('method:POST', [$this, 'httpPost']);
|
$this->server->on('method:POST', [$this, 'httpPost']);
|
||||||
$this->server->on('propFind', [$this, 'propFind']);
|
$this->server->on('propFind', [$this, 'propFind']);
|
||||||
$this->server->on('method:GET', [$this, 'httpGet'], 90); // 90 because it needs to be called before auth
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function propFind(PropFind $propFind, INode $node)
|
public function propFind(PropFind $propFind, INode $node)
|
||||||
|
@ -210,31 +209,4 @@ class PublishPlugin extends ServerPlugin
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* We intercept the GET requests to provide our shared calendars.
|
|
||||||
*
|
|
||||||
* @param Sabre\HTTP\RequestInterface $request
|
|
||||||
* @param Sabre\HTTP\ResponseInterface $response
|
|
||||||
*/
|
|
||||||
public function httpGet(RequestInterface $request, ResponseInterface $response)
|
|
||||||
{
|
|
||||||
$path = $request->getPath();
|
|
||||||
|
|
||||||
// TODO : Find a better way to do this
|
|
||||||
list($path, $token) = explode('/', $path);
|
|
||||||
if ($path !== 'public-calendars') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// This is where the magic happens
|
|
||||||
// Find a place to put the functions getResourceIdFromToken($token) and getRessource($id)
|
|
||||||
|
|
||||||
$this->server->transactionType = 'access-published-calendar';
|
|
||||||
|
|
||||||
$response->setStatus(200);
|
|
||||||
$response->setBody('Success !');
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,7 +34,7 @@ class PublicAuth implements BackendInterface {
|
||||||
*/
|
*/
|
||||||
public function __construct() {
|
public function __construct() {
|
||||||
$this->publicURLs = [
|
$this->publicURLs = [
|
||||||
'public-calendars/'
|
'public-calendars'
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -67,12 +67,8 @@ class PublicAuth implements BackendInterface {
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
function check(RequestInterface $request, ResponseInterface $response) {
|
function check(RequestInterface $request, ResponseInterface $response) {
|
||||||
$url = $request->getPath();
|
|
||||||
$matchingUrls = array_filter($this->publicURLs, function ($publicUrl) use ($url) {
|
|
||||||
return strpos($url, $publicUrl, 0) === 0;
|
|
||||||
});
|
|
||||||
|
|
||||||
if ($matchingUrls) {
|
if ($this->isRequestPublic($request)) {
|
||||||
return [true, "principals/system/public"];
|
return [true, "principals/system/public"];
|
||||||
}
|
}
|
||||||
return [false, "No public access to this resource."];
|
return [false, "No public access to this resource."];
|
||||||
|
@ -83,4 +79,20 @@ class PublicAuth implements BackendInterface {
|
||||||
*/
|
*/
|
||||||
function challenge(RequestInterface $request, ResponseInterface $response) {
|
function challenge(RequestInterface $request, ResponseInterface $response) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param RequestInterface $request
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
private function isRequestPublic(RequestInterface $request) {
|
||||||
|
$params = $request->getQueryParameters();
|
||||||
|
if (isset($params['sabreAction']) && $params['sabreAction'] == 'asset') {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
$url = $request->getPath();
|
||||||
|
$matchingUrls = array_filter($this->publicURLs, function ($publicUrl) use ($url) {
|
||||||
|
return strpos($url, $publicUrl, 0) === 0;
|
||||||
|
});
|
||||||
|
return $matchingUrls;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue