mirror of
https://code.castopod.org/adaures/castopod.git
synced 2024-09-10 12:39:38 +02:00
- 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
156 lines
4.2 KiB
PHP
156 lines
4.2 KiB
PHP
<?php
|
|
|
|
namespace Config;
|
|
|
|
use CodeIgniter\Config\BaseService;
|
|
use CodeIgniter\Model;
|
|
use App\Authorization\FlatAuthorization;
|
|
use App\Authorization\PermissionModel;
|
|
use App\Authorization\GroupModel;
|
|
use App\Libraries\Breadcrumb;
|
|
use App\Libraries\Negotiate;
|
|
use App\Libraries\Router;
|
|
use App\Models\UserModel;
|
|
use CodeIgniter\HTTP\Request;
|
|
use CodeIgniter\HTTP\RequestInterface;
|
|
use CodeIgniter\Router\RouteCollectionInterface;
|
|
use Myth\Auth\Models\LoginModel;
|
|
|
|
/**
|
|
* Services Configuration file.
|
|
*
|
|
* Services are simply other classes/libraries that the system uses
|
|
* to do its job. This is used by CodeIgniter to allow the core of the
|
|
* framework to be swapped out easily without affecting the usage within
|
|
* the rest of your application.
|
|
*
|
|
* This file holds any application-specific services, or service overrides
|
|
* that you might need. An example has been included with the general
|
|
* method format you should use for your service methods. For more examples,
|
|
* see the core Services file at system/Config/Services.php.
|
|
*/
|
|
class Services extends BaseService
|
|
{
|
|
/**
|
|
* The Router class uses a RouteCollection's array of routes, and determines
|
|
* the correct Controller and Method to execute.
|
|
*
|
|
* @param RouteCollectionInterface|null $routes
|
|
* @param Request|null $request
|
|
* @param boolean $getShared
|
|
*
|
|
* @return Router
|
|
*/
|
|
public static function router(
|
|
RouteCollectionInterface $routes = null,
|
|
Request $request = null,
|
|
bool $getShared = true
|
|
) {
|
|
if ($getShared) {
|
|
return static::getSharedInstance('router', $routes, $request);
|
|
}
|
|
|
|
$routes = $routes ?? static::routes();
|
|
$request = $request ?? static::request();
|
|
|
|
return new Router($routes, $request);
|
|
}
|
|
|
|
/**
|
|
* The Negotiate class provides the content negotiation features for
|
|
* working the request to determine correct language, encoding, charset,
|
|
* and more.
|
|
*
|
|
* @param RequestInterface|null $request
|
|
* @param boolean $getShared
|
|
*
|
|
* @return Negotiate
|
|
*/
|
|
public static function negotiator(
|
|
RequestInterface $request = null,
|
|
bool $getShared = true
|
|
) {
|
|
if ($getShared) {
|
|
return static::getSharedInstance('negotiator', $request);
|
|
}
|
|
|
|
$request = $request ?? static::request();
|
|
|
|
return new Negotiate($request);
|
|
}
|
|
|
|
public static function authentication(
|
|
string $lib = 'local',
|
|
Model $userModel = null,
|
|
Model $loginModel = null,
|
|
bool $getShared = true
|
|
) {
|
|
if ($getShared) {
|
|
return self::getSharedInstance(
|
|
'authentication',
|
|
$lib,
|
|
$userModel,
|
|
$loginModel,
|
|
);
|
|
}
|
|
|
|
// config() checks first in app/Config
|
|
$config = config('Auth');
|
|
|
|
$class = $config->authenticationLibs[$lib];
|
|
|
|
$instance = new $class($config);
|
|
|
|
if (empty($userModel)) {
|
|
$userModel = new UserModel();
|
|
}
|
|
|
|
if (empty($loginModel)) {
|
|
$loginModel = new LoginModel();
|
|
}
|
|
|
|
return $instance->setUserModel($userModel)->setLoginModel($loginModel);
|
|
}
|
|
|
|
public static function authorization(
|
|
Model $groupModel = null,
|
|
Model $permissionModel = null,
|
|
Model $userModel = null,
|
|
bool $getShared = true
|
|
) {
|
|
if ($getShared) {
|
|
return self::getSharedInstance(
|
|
'authorization',
|
|
$groupModel,
|
|
$permissionModel,
|
|
$userModel,
|
|
);
|
|
}
|
|
|
|
if (is_null($groupModel)) {
|
|
$groupModel = new GroupModel();
|
|
}
|
|
|
|
if (is_null($permissionModel)) {
|
|
$permissionModel = new PermissionModel();
|
|
}
|
|
|
|
$instance = new FlatAuthorization($groupModel, $permissionModel);
|
|
|
|
if (is_null($userModel)) {
|
|
$userModel = new UserModel();
|
|
}
|
|
|
|
return $instance->setUserModel($userModel);
|
|
}
|
|
|
|
public static function breadcrumb(bool $getShared = true)
|
|
{
|
|
if ($getShared) {
|
|
return self::getSharedInstance('breadcrumb');
|
|
}
|
|
|
|
return new Breadcrumb();
|
|
}
|
|
}
|