Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions cliupdate.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@

declare(strict_types=1);

use helpers\UpdateVisitor;
use Psr\Container\ContainerInterface;
use Selfoss\helpers\UpdateVisitor;

chdir(__DIR__);
require __DIR__ . '/src/common.php';

/** @var ContainerInterface $container */
$loader = $container->get(helpers\ContentLoader::class);
$loader = $container->get(Selfoss\helpers\ContentLoader::class);
$updateVisitor = new class implements UpdateVisitor {
public function started(int $count): void {
}
Expand Down
4 changes: 1 addition & 3 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,8 @@
],
"autoload": {
"psr-4": {
"controllers\\": "src/controllers/",
"daos\\": "src/daos/",
"helpers\\": "src/helpers/",
"spouts\\": "src/spouts/",
"Selfoss\\": "src/",
"Tests\\": "tests/"
}
},
Expand Down
171 changes: 5 additions & 166 deletions index.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,170 +2,9 @@

declare(strict_types=1);

use Psr\Container\ContainerInterface;
require __DIR__ . '/vendor/autoload.php';

require __DIR__ . '/src/common.php';

/** @var ContainerInterface $container */
$router = $container->get(Bramus\Router\Router::class);

// define routes

// all users
$router->get('/', function() use ($container): void {
// json
$container->get(controllers\Index::class)->home();
});
$router->get('/api/about', function() use ($container): void {
// json
$container->get(controllers\About::class)->about();
});
$router->post('/api/private/hash-password', function() use ($container): void {
// json
$container->get(controllers\Helpers\HashPassword::class)->hash();
});
$router->get('/login', function() use ($container): void {
// json, deprecated
$container->get(controllers\Authentication::class)->login();
});
$router->post('/login', function() use ($container): void {
// json
$container->get(controllers\Authentication::class)->login();
});
$router->get('/logout', function() use ($container): void {
// json, deprecated
$container->get(controllers\Authentication::class)->logout();
});
$router->delete('/api/session/current', function() use ($container): void {
// json
$container->get(controllers\Authentication::class)->logout();
});
$router->get('/update', function() use ($container): void {
// text
$container->get(controllers\Sources\Update::class)->updateAll();
});

// only for loggedin users or on public mode
$router->get('/rss', function() use ($container): void {
// rss
$container->get(controllers\Rss::class)->rss();
});
$router->get('/feed', function() use ($container): void {
// rss
$container->get(controllers\Rss::class)->rss();
});
$router->get('/items', function() use ($container): void {
// json
$container->get(controllers\Items::class)->listItems();
});
$router->get('/tags', function() use ($container): void {
// json
$container->get(controllers\Tags::class)->listTags();
});
$router->get('/stats', function() use ($container): void {
// json
$container->get(controllers\Items\Stats::class)->stats();
});
$router->get('/items/sync', function() use ($container): void {
// json
$container->get(controllers\Items\Sync::class)->sync();
});
$router->get('/sources/stats', function() use ($container): void {
// json
$container->get(controllers\Sources::class)->stats();
});

// only loggedin users
$router->post('/mark/([0-9]+)', function(string $itemId) use ($container): void {
// json
$container->get(controllers\Items::class)->mark($itemId);
});
$router->post('/mark', function() use ($container): void {
// json
$container->get(controllers\Items::class)->mark();
});
$router->post('/unmark/([0-9]+)', function(string $itemId) use ($container): void {
// json
$container->get(controllers\Items::class)->unmark($itemId);
});
$router->post('/starr/([0-9]+)', function(string $itemId) use ($container): void {
// json
$container->get(controllers\Items::class)->starr($itemId);
});
$router->post('/unstarr/([0-9]+)', function(string $itemId) use ($container): void {
// json
$container->get(controllers\Items::class)->unstarr($itemId);
});
$router->post('/items/sync', function() use ($container): void {
// json
$container->get(controllers\Items\Sync::class)->updateStatuses();
});

$router->get('/source/params', function() use ($container): void {
// json
$container->get(controllers\Sources::class)->params();
});
$router->get('/sources', function() use ($container): void {
// json
$container->get(controllers\Sources::class)->show();
});
$router->get('/source', function() use ($container): void {
// json
$container->get(controllers\Sources::class)->add();
});
$router->get('/sources/list', function() use ($container): void {
// json
$container->get(controllers\Sources::class)->listSources();
});
$router->post('/source/((?:new-)?[0-9]+)', function(string $id) use ($container): void {
// json
$container->get(controllers\Sources\Write::class)->write($id);
});
$router->post('/source', function() use ($container): void {
// json
$container->get(controllers\Sources\Write::class)->write();
});
$router->delete('/source/([0-9]+)', function(string $id) use ($container): void {
// json
$container->get(controllers\Sources::class)->remove($id);
});
$router->post('/source/delete/([0-9]+)', function(string $id) use ($container): void {
// json, deprecated
$container->get(controllers\Sources::class)->remove($id);
});
$router->post('/source/([0-9]+)/update', function(string $id) use ($container): void {
// json
$container->get(controllers\Sources\Update::class)->update($id);
});
$router->get('/sources/spouts', function() use ($container): void {
// json
$container->get(controllers\Sources::class)->spouts();
});

$router->post('/tags/color', function() use ($container): void {
// json
$container->get(controllers\Tags::class)->color();
});

$router->post('/opml', function() use ($container): void {
// json
$container->get(controllers\Opml\Import::class)->add();
});
$router->get('/opmlexport', function() use ($container): void {
// xml
$container->get(controllers\Opml\Export::class)->export();
});

// Client side routes need to be directed to index.html.
$router->get('/sign/in|/opml|/password|/manage/sources(/add)?|/(newest|unread|starred)(/(all|tag-[^/]+|source-[0-9]+)(/[0-9]+)?)?', function() use ($container): void {
// html
$container->get(controllers\Index::class)->home();
});

$router->set404(function(): void {
header('HTTP/1.1 404 Not Found');
echo 'Page not found.';
});

// dispatch
$router->run();
$bootstrap = new Selfoss\Bootstrap();
$container = $bootstrap->bootWebApplication();
$routes = $container->getByType(Selfoss\Routes::class);
$routes->run();
183 changes: 183 additions & 0 deletions src/Routes.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,183 @@
<?php

declare(strict_types=1);

namespace Selfoss;

use Bramus\Router\Router;
use Psr\Container\ContainerInterface;

final class Routes {
private Router $router;
private ContainerInterface $container;

public function __construct(Router $router, ContainerInterface $container) {
$this->router = $router;
$this->container = $container;
}

private function setupRoutes(): void {
// all users
$this->router->get('/', function(): void {
// json
$this->container->get(controllers\Index::class)->home();
});
$this->router->get('/api/about', function(): void {
// json
$this->container->get(controllers\About::class)->about();
});
$this->router->post('/api/private/hash-password', function(): void {
// json
$this->container->get(controllers\Helpers\HashPassword::class)->hash();
});
$this->router->get('/login', function(): void {
// json, deprecated
$this->container->get(controllers\Authentication::class)->login();
});
$this->router->post('/login', function(): void {
// json
$this->container->get(controllers\Authentication::class)->login();
});
$this->router->get('/logout', function(): void {
// json, deprecated
$this->container->get(controllers\Authentication::class)->logout();
});
$this->router->delete('/api/session/current', function(): void {
// json
$this->container->get(controllers\Authentication::class)->logout();
});
$this->router->get('/update', function(): void {
// text
$this->container->get(controllers\Sources\Update::class)->updateAll();
});

// only for loggedin users or on public mode
$this->router->get('/rss', function(): void {
// rss
$this->container->get(controllers\Rss::class)->rss();
});
$this->router->get('/feed', function(): void {
// rss
$this->container->get(controllers\Rss::class)->rss();
});
$this->router->get('/items', function(): void {
// json
$this->container->get(controllers\Items::class)->listItems();
});
$this->router->get('/tags', function(): void {
// json
$this->container->get(controllers\Tags::class)->listTags();
});
$this->router->get('/stats', function(): void {
// json
$this->container->get(controllers\Items\Stats::class)->stats();
});
$this->router->get('/items/sync', function(): void {
// json
$this->container->get(controllers\Items\Sync::class)->sync();
});
$this->router->get('/sources/stats', function(): void {
// json
$this->container->get(controllers\Sources::class)->stats();
});

// only loggedin users
$this->router->post('/mark/([0-9]+)', function(string $itemId): void {
// json
$this->container->get(controllers\Items::class)->mark($itemId);
});
$this->router->post('/mark', function(): void {
// json
$this->container->get(controllers\Items::class)->mark();
});
$this->router->post('/unmark/([0-9]+)', function(string $itemId): void {
// json
$this->container->get(controllers\Items::class)->unmark($itemId);
});
$this->router->post('/starr/([0-9]+)', function(string $itemId): void {
// json
$this->container->get(controllers\Items::class)->starr($itemId);
});
$this->router->post('/unstarr/([0-9]+)', function(string $itemId): void {
// json
$this->container->get(controllers\Items::class)->unstarr($itemId);
});
$this->router->post('/items/sync', function(): void {
// json
$this->container->get(controllers\Items\Sync::class)->updateStatuses();
});

$this->router->get('/source/params', function(): void {
// json
$this->container->get(controllers\Sources::class)->params();
});
$this->router->get('/sources', function(): void {
// json
$this->container->get(controllers\Sources::class)->show();
});
$this->router->get('/source', function(): void {
// json
$this->container->get(controllers\Sources::class)->add();
});
$this->router->get('/sources/list', function(): void {
// json
$this->container->get(controllers\Sources::class)->listSources();
});
$this->router->post('/source/((?:new-)?[0-9]+)', function(string $id): void {
// json
$this->container->get(controllers\Sources\Write::class)->write($id);
});
$this->router->post('/source', function(): void {
// json
$this->container->get(controllers\Sources\Write::class)->write();
});
$this->router->delete('/source/([0-9]+)', function(string $id): void {
// json
$this->container->get(controllers\Sources::class)->remove($id);
});
$this->router->post('/source/delete/([0-9]+)', function(string $id): void {
// json, deprecated
$this->container->get(controllers\Sources::class)->remove($id);
});
$this->router->post('/source/([0-9]+)/update', function(string $id): void {
// json
$this->container->get(controllers\Sources\Update::class)->update($id);
});
$this->router->get('/sources/spouts', function(): void {
// json
$this->container->get(controllers\Sources::class)->spouts();
});

$this->router->post('/tags/color', function(): void {
// json
$this->container->get(controllers\Tags::class)->color();
});

$this->router->post('/opml', function(): void {
// json
$this->container->get(controllers\Opml\Import::class)->add();
});
$this->router->get('/opmlexport', function(): void {
// xml
$this->container->get(controllers\Opml\Export::class)->export();
});

// Client side routes need to be directed to index.html.
$this->router->get('/sign/in|/opml|/password|/manage/sources(/add)?|/(newest|unread|starred)(/(all|tag-[^/]+|source-[0-9]+)(/[0-9]+)?)?', function(): void {
// html
$this->container->get(controllers\Index::class)->home();
});

$this->router->set404(function(): void {
header('HTTP/1.1 404 Not Found');
echo 'Page not found.';
});
}

public function run(): bool {
$this->setupRoutes();

// dispatch
return $this->router->run();
}
}
Loading
Loading