Unverified Commit eb74e81c authored by Yassine Doghri's avatar Yassine Doghri
Browse files

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

fix signature regex
parent cacd2280
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -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]);
+8 −12
Original line number Diff line number Diff line
@@ -39,28 +39,24 @@ 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]);
        }

        return $this->{$method}(...$params);
    }
+1 −0
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ class PodcastController extends BaseController
        $this->podcast = $podcast;

        unset($params[0]);

        return $this->{$method}(...$params);
    }

+4 −4
Original line number Diff line number Diff line
@@ -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);
+2 −6
Original line number Diff line number Diff line
@@ -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);
Loading