fix: check for database connection and podcasts table existence before redirecting to install

fix signature regex
This commit is contained in:
Yassine Doghri 2021-06-10 13:18:58 +00:00
parent cacd228098
commit eb74e81c3d
No known key found for this signature in database
GPG Key ID: 3E7F89498B960C9F
6 changed files with 22 additions and 29 deletions

View File

@ -11,25 +11,25 @@ declare(strict_types=1);
namespace App\Controllers;
use App\Models\PodcastModel;
use CodeIgniter\Database\Exceptions\DatabaseException;
use CodeIgniter\HTTP\RedirectResponse;
use Config\Services;
use mysqli_sql_exception;
class HomeController extends BaseController
{
public function index(): RedirectResponse | string
{
try {
$allPodcasts = (new PodcastModel())->findAll();
} catch (mysqli_sql_exception | DatabaseException) {
// An error was caught when retrieving the podcasts from the database.
$connections = \CodeIgniter\Database\Config::getConnections();
$db = db_connect();
if ($connections === [] || ! $db->tableExists('podcasts')) {
// Cannot connect to the database or cannot find the podcasts table
// Redirecting to install page because it is likely that Castopod Host has not been installed yet.
// NB: as base_url wouldn't have been defined here, redirect to install wizard manually
$route = Services::routes()->reverseRoute('install');
return redirect()->to(rtrim(host_url(), '/') . $route);
}
$allPodcasts = (new PodcastModel())->findAll();
// check if there's only one podcast to redirect user to it
if (count($allPodcasts) === 1) {
return redirect()->route('podcast-activity', [$allPodcasts[0]->name]);

View File

@ -39,29 +39,25 @@ class NoteController extends ActivityPubNoteController
public function _remap(string $method, string ...$params): mixed
{
if (count($params) < 2) {
throw PageNotFoundException::forPageNotFound();
}
if (
($this->podcast = (new PodcastModel())->getPodcastByName($params[0])) === null
($podcast = (new PodcastModel())->getPodcastByName($params[0],)) === null
) {
throw PageNotFoundException::forPageNotFound();
}
$this->podcast = $podcast;
$this->actor = $this->podcast->actor;
if (
($note = (new NoteModel())->getNoteById($params[1])) === null
count($params) > 1 &&
($note = (new NoteModel())->getNoteById($params[1])) !== null
) {
throw PageNotFoundException::forPageNotFound();
$this->note = $note;
unset($params[0]);
unset($params[1]);
}
$this->note = $note;
unset($params[0]);
unset($params[1]);
return $this->{$method}(...$params);
}

View File

@ -38,6 +38,7 @@ class PodcastController extends BaseController
$this->podcast = $podcast;
unset($params[0]);
return $this->{$method}(...$params);
}

View File

@ -272,9 +272,9 @@ class ActorController extends Controller
->where('`created_at` <= NOW()', null, false)
->orderBy('created_at', 'DESC');
$pageNumber = $this->request->getGet('page');
$pageNumber = (int) $this->request->getGet('page');
if (! isset($pageNumber)) {
if ($pageNumber < 1) {
$actorActivity->paginate(12);
$pager = $actorActivity->pager;
$collection = new OrderedCollectionObject(null, $pager);
@ -304,9 +304,9 @@ class ActorController extends Controller
->where('activitypub_follows.target_actor_id', $this->actor->id)
->orderBy('activitypub_follows.created_at', 'DESC');
$pageNumber = $this->request->getGet('page');
$pageNumber = (int) $this->request->getGet('page');
if (! isset($pageNumber)) {
if ($pageNumber < 1) {
$followers->paginate(12);
$pager = $followers->pager;
$followersCollection = new OrderedCollectionObject(null, $pager);

View File

@ -39,10 +39,6 @@ class NoteController extends Controller
public function _remap(string $method, string ...$params): mixed
{
if (count($params) < 1) {
throw PageNotFoundException::forPageNotFound();
}
if (($note = model('NoteModel')->getNoteById($params[0])) === null) {
throw PageNotFoundException::forPageNotFound();
}
@ -80,9 +76,9 @@ class NoteController extends Controller
->where('`published_at` <= NOW()', null, false)
->orderBy('published_at', 'ASC');
$pageNumber = $this->request->getGet('page');
$pageNumber = (int) $this->request->getGet('page');
if (! isset($pageNumber)) {
if ($pageNumber < 1) {
$noteReplies->paginate(12);
$pager = $noteReplies->pager;
$collection = new OrderedCollectionObject(null, $pager);

View File

@ -35,7 +35,7 @@ class HttpSignature
([\w\-\.#\/@]+)
)",
algorithm="(?P<algorithm>[\w\-]+)",
(headers="\(request-target\) (?P<headers>[\w\\-\s]+)")?
(headers="\(request-target\) (?P<headers>[\w\\-\s]+)",)?
signature="(?P<signature>[\w+\/]+={0,2})"
/x';