mirror of
https://code.castopod.org/adaures/castopod.git
synced 2024-09-30 13:41:14 +02:00
fix(cors): add preflight option routes for episode, podcast and status objects
This commit is contained in:
parent
a09853ef14
commit
a281abfda4
@ -690,6 +690,7 @@ $routes->group('@(:podcastName)', function ($routes): void {
|
|||||||
'as' => 'podcast-activity',
|
'as' => 'podcast-activity',
|
||||||
]);
|
]);
|
||||||
// override default ActivityPub Library's actor route
|
// override default ActivityPub Library's actor route
|
||||||
|
$routes->options('/', 'ActivityPubController::preflight');
|
||||||
$routes->get('/', 'PodcastController::activity/$1', [
|
$routes->get('/', 'PodcastController::activity/$1', [
|
||||||
'as' => 'actor',
|
'as' => 'actor',
|
||||||
'alternate-content' => [
|
'alternate-content' => [
|
||||||
@ -707,6 +708,7 @@ $routes->group('@(:podcastName)', function ($routes): void {
|
|||||||
],
|
],
|
||||||
],
|
],
|
||||||
]);
|
]);
|
||||||
|
$routes->options('episodes', 'ActivityPubController::preflight');
|
||||||
$routes->get('episodes', 'PodcastController::episodes/$1', [
|
$routes->get('episodes', 'PodcastController::episodes/$1', [
|
||||||
'as' => 'podcast-episodes',
|
'as' => 'podcast-episodes',
|
||||||
'alternate-content' => [
|
'alternate-content' => [
|
||||||
@ -722,6 +724,7 @@ $routes->group('@(:podcastName)', function ($routes): void {
|
|||||||
],
|
],
|
||||||
]);
|
]);
|
||||||
$routes->group('episodes/(:slug)', function ($routes): void {
|
$routes->group('episodes/(:slug)', function ($routes): void {
|
||||||
|
$routes->options('/', 'ActivityPubController::preflight');
|
||||||
$routes->get('/', 'EpisodeController/$1/$2', [
|
$routes->get('/', 'EpisodeController/$1/$2', [
|
||||||
'as' => 'episode',
|
'as' => 'episode',
|
||||||
'alternate-content' => [
|
'alternate-content' => [
|
||||||
@ -736,7 +739,7 @@ $routes->group('@(:podcastName)', function ($routes): void {
|
|||||||
],
|
],
|
||||||
],
|
],
|
||||||
]);
|
]);
|
||||||
$routes->options('comments', 'EpisodeController::commentsPreflight/$1/$2');
|
$routes->options('comments', 'ActivityPubController::preflight');
|
||||||
$routes->get('comments', 'EpisodeController::comments/$1/$2', [
|
$routes->get('comments', 'EpisodeController::comments/$1/$2', [
|
||||||
'as' => 'episode-comments',
|
'as' => 'episode-comments',
|
||||||
'application/activity+json' => [
|
'application/activity+json' => [
|
||||||
@ -806,6 +809,7 @@ $routes->group('@(:podcastName)', function ($routes): void {
|
|||||||
]);
|
]);
|
||||||
// Status
|
// Status
|
||||||
$routes->group('statuses/(:uuid)', function ($routes): void {
|
$routes->group('statuses/(:uuid)', function ($routes): void {
|
||||||
|
$routes->options('/', 'ActivityPubController::preflight');
|
||||||
$routes->get('/', 'StatusController::view/$1/$2', [
|
$routes->get('/', 'StatusController::view/$1/$2', [
|
||||||
'as' => 'status',
|
'as' => 'status',
|
||||||
'alternate-content' => [
|
'alternate-content' => [
|
||||||
@ -819,6 +823,7 @@ $routes->group('@(:podcastName)', function ($routes): void {
|
|||||||
],
|
],
|
||||||
],
|
],
|
||||||
]);
|
]);
|
||||||
|
$routes->options('replies', 'ActivityPubController::preflight');
|
||||||
$routes->get('replies', 'StatusController/$1/$2', [
|
$routes->get('replies', 'StatusController/$1/$2', [
|
||||||
'as' => 'status-replies',
|
'as' => 'status-replies',
|
||||||
'alternate-content' => [
|
'alternate-content' => [
|
||||||
|
30
app/Controllers/ActivityPubController.php
Normal file
30
app/Controllers/ActivityPubController.php
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @copyright 2021 Podlibre
|
||||||
|
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
||||||
|
* @link https://castopod.org/
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace App\Controllers;
|
||||||
|
|
||||||
|
use CodeIgniter\Controller;
|
||||||
|
use CodeIgniter\HTTP\Response;
|
||||||
|
|
||||||
|
class ActivityPubController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @noRector ReturnTypeDeclarationRector
|
||||||
|
*/
|
||||||
|
public function preflight(): Response
|
||||||
|
{
|
||||||
|
return $this->response->setHeader('Access-Control-Allow-Origin', '*') // for allowing any domain, insecure
|
||||||
|
->setHeader('Access-Control-Allow-Headers', '*') // for allowing any headers, insecure
|
||||||
|
->setHeader('Access-Control-Allow-Methods', 'GET, OPTIONS') // allows GET and OPTIONS methods only
|
||||||
|
->setHeader('Access-Control-Max-Age', '86400')
|
||||||
|
->setHeader('Cache-Control', 'public, max-age=86400')
|
||||||
|
->setStatusCode(200);
|
||||||
|
}
|
||||||
|
}
|
@ -210,19 +210,6 @@ class EpisodeController extends BaseController
|
|||||||
->setBody($podcastObject->toJSON());
|
->setBody($podcastObject->toJSON());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @noRector ReturnTypeDeclarationRector
|
|
||||||
*/
|
|
||||||
public function commentsPreflight(): Response
|
|
||||||
{
|
|
||||||
return $this->response->setHeader('Access-Control-Allow-Origin', '*') // for allowing any domain, insecure
|
|
||||||
->setHeader('Access-Control-Allow-Headers', '*') // for allowing any headers, insecure
|
|
||||||
->setHeader('Access-Control-Allow-Methods', 'GET, OPTIONS') // allows GET and OPTIONS methods only
|
|
||||||
->setHeader('Access-Control-Max-Age', '86400')
|
|
||||||
->setHeader('Cache-Control', 'public, max-age=86400')
|
|
||||||
->setStatusCode(200);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @noRector ReturnTypeDeclarationRector
|
* @noRector ReturnTypeDeclarationRector
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user