Merge pull request #3250 from nextcloud/redirect-to-public-calendar-endpoint

Redirect public view to public calendar ics endpoint if requested with Accept: 'text/calendar'
This commit is contained in:
Christoph Wurst 2021-06-22 21:26:13 +02:00 committed by GitHub
commit a04df2e17b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 19 additions and 2 deletions

View File

@ -25,6 +25,8 @@ namespace OCA\Calendar\Controller;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http\ContentSecurityPolicy;
use OCP\AppFramework\Http\RedirectResponse;
use OCP\AppFramework\Http\Response;
use OCP\AppFramework\Http\TemplateResponse;
use OCP\IConfig;
use OCP\IInitialStateService;
@ -79,9 +81,13 @@ class PublicViewController extends Controller {
* @NoCSRFRequired
*
* @param string $token
* @return TemplateResponse
* @return Response
*/
public function publicIndexWithBranding(string $token):TemplateResponse {
public function publicIndexWithBranding(string $token):Response {
$acceptHeader = $this->request->getHeader('Accept');
if (strpos($acceptHeader, 'text/calendar') !== false) {
return new RedirectResponse($this->urlGenerator->linkTo('', 'remote.php') . '/dav/public-calendars/' . $token . '/?export');
}
return $this->publicIndex($token, 'public');
}

View File

@ -23,6 +23,7 @@ declare(strict_types=1);
*/
namespace OCA\Calendar\Controller;
use OCP\AppFramework\Http\RedirectResponse;
use OCP\AppFramework\Http\TemplateResponse;
use OCP\IConfig;
use OCP\IInitialStateService;
@ -129,6 +130,16 @@ class PublicViewControllerTest extends TestCase {
$this->assertEquals('main', $response->getTemplateName());
}
public function testRedirectionIfRequestedWithAcceptCalendarHeader(): void {
$endpoint = 'https://somewhere.net/remote.php';
$this->request->expects(self::once())->method('getHeader')->with('Accept')->willReturn('text/calendar');
$this->urlGenerator->expects(self::once())->method('linkTo')->with('', 'remote.php')->willReturn($endpoint);
$response = $this->controller->publicIndexWithBranding('some-token');
self::assertInstanceOf(RedirectResponse::class, $response);
self::assertEquals($endpoint . '/dav/public-calendars/some-token/?export', $response->getRedirectURL());
}
public function testPublicIndexForEmbedding():void {
$this->config->expects(self::any())
->method('getAppValue')