castopod/app/Libraries/ActivityPub/Config/Routes.php
Yassine Doghri 2f525c0f6e feat(fediverse): implement activitypub protocols + update user interface
- add "ActivityPub" library to handle server to server federation and basic
  client to server protocols using activitypub:
  - add webfinger endpoint to look for actor
  - add actor definition with inbox / outbox / followers
  - remote follow an actor
  - create notes with possible preview cards
  - interract with favourites, reblogs and replies
  - block incoming actors and/or domains
  - broadcast/schedule activities to fediverse followers using a cron task
- For castopod, the podcast is the actor:
  - overwrite the activitypub library for castopod's specific needs
  - perform basic interactions administrating a podcast to interact with fediverse users:
    - create notes with episode attachment
    - favourite and share a note + reply
    - add specific castopod_namespaces for podcasts and episodes definitions
- overwrite CodeIgniter's Route service to include alternate-content option for
  activitystream requests
- update episode publication logic:
  - remove publication inputs in create / edit episode form
  - publish / schedule or unpublish an episode after creation
  - the podcaster publishes a note when publishing an episode
- Javascript / Typescript modules:
  - fix Dropdown.ts to keep dropdown menu in foreground
  - add Modal.ts for funding links modal
  - add Toggler.ts to toggle various css states in ui
- User Interface:
  - update tailwindcss to v2
  - use castopod's pine and rose colors
  - update public layout to a 3 column layout
  - add pages in public for podcast activity, episode list and notes
  - update episode page to include linked notes
  - remove previous and next episodes from episode pages
  - show different public views depending on whether user is authenticated or not
  - use Kumbh Sans and Montserrat fonts
- update CodeIgniter's config files
- with CodeIgniter's new requirements, update docker environments are now based on
  php v7.3 image
- move Image entity to Libraries
- update composer and npm packages to latest versions

closes #69 #65 #85, fixes #51 #91 #92 #88
2021-04-02 17:20:02 +00:00

107 lines
2.9 KiB
PHP

<?php
/**
* @copyright 2021 Podlibre
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/
$routes->addPlaceholder('actorUsername', '[a-zA-Z0-9\_]{1,32}');
$routes->addPlaceholder(
'uuid',
'[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-4[0-9A-Fa-f]{3}-[89ABab][0-9A-Fa-f]{3}-[0-9A-Fa-f]{12}',
);
$routes->addPlaceholder('noteAction', '\bfavourite|\breblog|\breply');
/**
* ActivityPub routes file
*/
$routes->group('', ['namespace' => 'ActivityPub\Controllers'], function (
$routes
) {
// webfinger
$routes->get('.well-known/webfinger', 'WebFingerController', [
'as' => 'webfinger',
]);
// Actor
$routes->group('@(:actorUsername)', function ($routes) {
// Actor
$routes->get('/', 'ActorController/$1', [
'as' => 'actor',
]);
$routes->post('inbox', 'ActorController::inbox/$1', [
'as' => 'inbox',
'filter' =>
'activity-pub:verify-activitystream,verify-blocks,verify-signature',
]);
$routes->get('outbox', 'ActorController::outbox/$1', [
'as' => 'outbox',
'filter' => 'activity-pub:verify-activitystream',
]);
$routes->get('followers', 'ActorController::followers/$1', [
'as' => 'followers',
'filter' => 'activity-pub::activity-stream',
]);
$routes->post('follow', 'ActorController::attemptFollow/$1', [
'as' => 'attempt-follow',
]);
$routes->get('activities/(:uuid)', 'ActorController::activity/$1/$2', [
'as' => 'activity',
]);
});
// Note
$routes->post('notes/new', 'NoteController::attemptCreate/$1', [
'as' => 'note-attempt-create',
]);
$routes->get('notes/(:uuid)', 'NoteController/$1', [
'as' => 'note',
]);
$routes->get('notes/(:uuid)/replies', 'NoteController/$1', [
'as' => 'note-replies',
]);
$routes->post(
'notes/(:uuid)/remote/(:noteAction)',
'NoteController::attemptRemoteAction/$1/$2/$3',
[
'as' => 'note-attempt-remote-action',
],
);
// Blocking actors and domains
$routes->post(
'fediverse-block-actor',
'BlockController::attemptBlockActor',
['as' => 'fediverse-attempt-block-actor'],
);
$routes->post(
'fediverse-block-domain',
'BlockController::attemptBlockDomain',
['as' => 'fediverse-attempt-block-domain'],
);
$routes->post(
'fediverse-unblock-actor',
'BlockController::attemptUnblockActor',
[
'as' => 'fediverse-attempt-unblock-actor',
],
);
$routes->post(
'fediverse-unblock-domain',
'BlockController::attemptUnblockDomain',
[
'as' => 'fediverse-attempt-unblock-domain',
],
);
$routes->cli('scheduled-activities', 'SchedulerController::activity');
});