Typing IHandler methods, typing Handler_Public, fix type of $feed_id (might be tag).
This commit is contained in:
parent
25775bb407
commit
1ec003ce35
|
@ -27,7 +27,7 @@ class API extends Handler {
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
function before($method) {
|
function before(string $method): bool {
|
||||||
if (parent::before($method)) {
|
if (parent::before($method)) {
|
||||||
header("Content-Type: text/json");
|
header("Content-Type: text/json");
|
||||||
|
|
||||||
|
|
|
@ -2067,7 +2067,12 @@ class Feeds extends Handler_Protected {
|
||||||
->delete_many();
|
->delete_many();
|
||||||
}
|
}
|
||||||
|
|
||||||
static function _update_access_key(int $feed_id, bool $is_cat, int $owner_uid): ?string {
|
/**
|
||||||
|
* @param string $feed_id may be a feed ID or tag
|
||||||
|
*
|
||||||
|
* @see Handler_Public#generate_syndicated_feed()
|
||||||
|
*/
|
||||||
|
static function _update_access_key(string $feed_id, bool $is_cat, int $owner_uid): ?string {
|
||||||
$key = ORM::for_table('ttrss_access_keys')
|
$key = ORM::for_table('ttrss_access_keys')
|
||||||
->where('owner_uid', $owner_uid)
|
->where('owner_uid', $owner_uid)
|
||||||
->where('feed_id', $feed_id)
|
->where('feed_id', $feed_id)
|
||||||
|
@ -2077,7 +2082,12 @@ class Feeds extends Handler_Protected {
|
||||||
return self::_get_access_key($feed_id, $is_cat, $owner_uid);
|
return self::_get_access_key($feed_id, $is_cat, $owner_uid);
|
||||||
}
|
}
|
||||||
|
|
||||||
static function _get_access_key(int $feed_id, bool $is_cat, int $owner_uid): ?string {
|
/**
|
||||||
|
* @param string $feed_id may be a feed ID or tag
|
||||||
|
*
|
||||||
|
* @see Handler_Public#generate_syndicated_feed()
|
||||||
|
*/
|
||||||
|
static function _get_access_key(string $feed_id, bool $is_cat, int $owner_uid): ?string {
|
||||||
$key = ORM::for_table('ttrss_access_keys')
|
$key = ORM::for_table('ttrss_access_keys')
|
||||||
->where('owner_uid', $owner_uid)
|
->where('owner_uid', $owner_uid)
|
||||||
->where('feed_id', $feed_id)
|
->where('feed_id', $feed_id)
|
||||||
|
|
|
@ -1,9 +1,16 @@
|
||||||
<?php
|
<?php
|
||||||
class Handler implements IHandler {
|
class Handler implements IHandler {
|
||||||
|
// TODO: class properties can be switched to PHP typing if/when the minimum PHP_VERSION is raised to 7.4.0+
|
||||||
|
/** @var PDO */
|
||||||
protected $pdo;
|
protected $pdo;
|
||||||
|
|
||||||
|
/** @var array<int|string, mixed> */
|
||||||
protected $args;
|
protected $args;
|
||||||
|
|
||||||
function __construct($args) {
|
/**
|
||||||
|
* @param array<int|string, mixed> $args
|
||||||
|
*/
|
||||||
|
function __construct(array $args) {
|
||||||
$this->pdo = Db::pdo();
|
$this->pdo = Db::pdo();
|
||||||
$this->args = $args;
|
$this->args = $args;
|
||||||
}
|
}
|
||||||
|
@ -12,11 +19,11 @@ class Handler implements IHandler {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
function before($method) {
|
function before(string $method): bool {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function after() {
|
function after(): bool {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
class Handler_Administrative extends Handler_Protected {
|
class Handler_Administrative extends Handler_Protected {
|
||||||
function before($method) {
|
function before(string $method): bool {
|
||||||
if (parent::before($method)) {
|
if (parent::before($method)) {
|
||||||
if (($_SESSION["access_level"] ?? 0) >= UserHelper::ACCESS_LEVEL_ADMIN) {
|
if (($_SESSION["access_level"] ?? 0) >= UserHelper::ACCESS_LEVEL_ADMIN) {
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
class Handler_Protected extends Handler {
|
class Handler_Protected extends Handler {
|
||||||
|
|
||||||
function before($method) {
|
function before(string $method): bool {
|
||||||
return parent::before($method) && !empty($_SESSION['uid']);
|
return parent::before($method) && !empty($_SESSION['uid']);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
<?php
|
<?php
|
||||||
class Handler_Public extends Handler {
|
class Handler_Public extends Handler {
|
||||||
|
|
||||||
// $feed may be a tag
|
/**
|
||||||
|
* @param string $feed may be a feed ID or tag
|
||||||
|
*/
|
||||||
private function generate_syndicated_feed(int $owner_uid, string $feed, bool $is_cat,
|
private function generate_syndicated_feed(int $owner_uid, string $feed, bool $is_cat,
|
||||||
int $limit, int $offset, string $search, string $view_mode = "",
|
int $limit, int $offset, string $search, string $view_mode = "",
|
||||||
string $format = 'atom', string $order = "", string $orig_guid = "", string $start_ts = "") {
|
string $format = 'atom', string $order = "", string $orig_guid = "", string $start_ts = ""): void {
|
||||||
|
|
||||||
$note_style = "background-color : #fff7d5;
|
$note_style = "background-color : #fff7d5;
|
||||||
border-width : 1px; ".
|
border-width : 1px; ".
|
||||||
|
@ -52,11 +54,13 @@ class Handler_Public extends Handler {
|
||||||
PluginHost::feed_to_pfeed_id((int)$feed));
|
PluginHost::feed_to_pfeed_id((int)$feed));
|
||||||
|
|
||||||
if ($handler) {
|
if ($handler) {
|
||||||
|
// 'get_headlines' is implemented by the plugin.
|
||||||
|
// @phpstan-ignore-next-line
|
||||||
$qfh_ret = $handler->get_headlines(PluginHost::feed_to_pfeed_id((int)$feed), $params);
|
$qfh_ret = $handler->get_headlines(PluginHost::feed_to_pfeed_id((int)$feed), $params);
|
||||||
} else {
|
} else {
|
||||||
user_error("Failed to find handler for plugin feed ID: $feed", E_USER_ERROR);
|
user_error("Failed to find handler for plugin feed ID: $feed", E_USER_ERROR);
|
||||||
|
|
||||||
return false;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
@ -247,7 +251,7 @@ class Handler_Public extends Handler {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function getUnread() {
|
function getUnread(): void {
|
||||||
$login = clean($_REQUEST["login"]);
|
$login = clean($_REQUEST["login"]);
|
||||||
$fresh = clean($_REQUEST["fresh"]) == "1";
|
$fresh = clean($_REQUEST["fresh"]) == "1";
|
||||||
|
|
||||||
|
@ -265,7 +269,7 @@ class Handler_Public extends Handler {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function getProfiles() {
|
function getProfiles(): void {
|
||||||
$login = clean($_REQUEST["login"]);
|
$login = clean($_REQUEST["login"]);
|
||||||
$rv = [];
|
$rv = [];
|
||||||
|
|
||||||
|
@ -288,7 +292,7 @@ class Handler_Public extends Handler {
|
||||||
print json_encode($rv);
|
print json_encode($rv);
|
||||||
}
|
}
|
||||||
|
|
||||||
function logout() {
|
function logout(): void {
|
||||||
if (validate_csrf($_POST["csrf_token"])) {
|
if (validate_csrf($_POST["csrf_token"])) {
|
||||||
UserHelper::logout();
|
UserHelper::logout();
|
||||||
header("Location: index.php");
|
header("Location: index.php");
|
||||||
|
@ -298,7 +302,7 @@ class Handler_Public extends Handler {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function rss() {
|
function rss(): void {
|
||||||
$feed = clean($_REQUEST["id"]);
|
$feed = clean($_REQUEST["id"]);
|
||||||
$key = clean($_REQUEST["key"]);
|
$key = clean($_REQUEST["key"]);
|
||||||
$is_cat = clean($_REQUEST["is_cat"] ?? false);
|
$is_cat = clean($_REQUEST["is_cat"] ?? false);
|
||||||
|
@ -333,21 +337,21 @@ class Handler_Public extends Handler {
|
||||||
header('HTTP/1.1 403 Forbidden');
|
header('HTTP/1.1 403 Forbidden');
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateTask() {
|
function updateTask(): void {
|
||||||
PluginHost::getInstance()->run_hooks(PluginHost::HOOK_UPDATE_TASK);
|
PluginHost::getInstance()->run_hooks(PluginHost::HOOK_UPDATE_TASK);
|
||||||
}
|
}
|
||||||
|
|
||||||
function housekeepingTask() {
|
function housekeepingTask(): void {
|
||||||
PluginHost::getInstance()->run_hooks(PluginHost::HOOK_HOUSE_KEEPING);
|
PluginHost::getInstance()->run_hooks(PluginHost::HOOK_HOUSE_KEEPING);
|
||||||
}
|
}
|
||||||
|
|
||||||
function globalUpdateFeeds() {
|
function globalUpdateFeeds(): void {
|
||||||
RPC::updaterandomfeed_real();
|
RPC::updaterandomfeed_real();
|
||||||
|
|
||||||
PluginHost::getInstance()->run_hooks(PluginHost::HOOK_UPDATE_TASK);
|
PluginHost::getInstance()->run_hooks(PluginHost::HOOK_UPDATE_TASK);
|
||||||
}
|
}
|
||||||
|
|
||||||
function login() {
|
function login(): void {
|
||||||
if (!Config::get(Config::SINGLE_USER_MODE)) {
|
if (!Config::get(Config::SINGLE_USER_MODE)) {
|
||||||
|
|
||||||
$login = clean($_POST["login"]);
|
$login = clean($_POST["login"]);
|
||||||
|
@ -403,12 +407,12 @@ class Handler_Public extends Handler {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function index() {
|
function index(): void {
|
||||||
header("Content-Type: text/plain");
|
header("Content-Type: text/plain");
|
||||||
print Errors::to_json(Errors::E_UNKNOWN_METHOD);
|
print Errors::to_json(Errors::E_UNKNOWN_METHOD);
|
||||||
}
|
}
|
||||||
|
|
||||||
function forgotpass() {
|
function forgotpass(): void {
|
||||||
startup_gettext();
|
startup_gettext();
|
||||||
session_start();
|
session_start();
|
||||||
|
|
||||||
|
@ -587,7 +591,7 @@ class Handler_Public extends Handler {
|
||||||
print "</html>";
|
print "</html>";
|
||||||
}
|
}
|
||||||
|
|
||||||
function dbupdate() {
|
function dbupdate(): void {
|
||||||
startup_gettext();
|
startup_gettext();
|
||||||
|
|
||||||
if (!Config::get(Config::SINGLE_USER_MODE) && ($_SESSION["access_level"] ?? 0) < 10) {
|
if (!Config::get(Config::SINGLE_USER_MODE) && ($_SESSION["access_level"] ?? 0) < 10) {
|
||||||
|
@ -730,7 +734,7 @@ class Handler_Public extends Handler {
|
||||||
<?php
|
<?php
|
||||||
}
|
}
|
||||||
|
|
||||||
function cached() {
|
function cached(): void {
|
||||||
list ($cache_dir, $filename) = explode("/", $_GET["file"], 2);
|
list ($cache_dir, $filename) = explode("/", $_GET["file"], 2);
|
||||||
|
|
||||||
// we do not allow files with extensions at the moment
|
// we do not allow files with extensions at the moment
|
||||||
|
@ -746,7 +750,7 @@ class Handler_Public extends Handler {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private function _make_article_tag_uri($id, $timestamp) {
|
private function _make_article_tag_uri(int $id, string $timestamp): string {
|
||||||
|
|
||||||
$timestamp = date("Y-m-d", strtotime($timestamp));
|
$timestamp = date("Y-m-d", strtotime($timestamp));
|
||||||
|
|
||||||
|
@ -756,7 +760,7 @@ class Handler_Public extends Handler {
|
||||||
// this should be used very carefully because this endpoint is exposed to unauthenticated users
|
// this should be used very carefully because this endpoint is exposed to unauthenticated users
|
||||||
// plugin data is not loaded because there's no user context and owner_uid/session may or may not be available
|
// plugin data is not loaded because there's no user context and owner_uid/session may or may not be available
|
||||||
// in general, don't do anything user-related in here and do not modify $_SESSION
|
// in general, don't do anything user-related in here and do not modify $_SESSION
|
||||||
public function pluginhandler() {
|
public function pluginhandler(): void {
|
||||||
$host = new PluginHost();
|
$host = new PluginHost();
|
||||||
|
|
||||||
$plugin_name = basename(clean($_REQUEST["plugin"]));
|
$plugin_name = basename(clean($_REQUEST["plugin"]));
|
||||||
|
@ -788,7 +792,7 @@ class Handler_Public extends Handler {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static function _render_login_form(string $return_to = "") {
|
static function _render_login_form(string $return_to = ""): void {
|
||||||
header('Cache-Control: public');
|
header('Cache-Control: public');
|
||||||
|
|
||||||
if ($return_to)
|
if ($return_to)
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
interface IHandler {
|
interface IHandler {
|
||||||
function csrf_ignore(string $method): bool;
|
function csrf_ignore(string $method): bool;
|
||||||
function before($method);
|
function before(string $method): bool;
|
||||||
function after();
|
function after(): bool;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue