mirror of
https://github.com/RSS-Bridge/rss-bridge.git
synced 2025-08-01 06:10:22 +02:00
refactor: introduce http Request object (#3926)
This commit is contained in:
@@ -19,13 +19,13 @@ class ConnectivityAction implements ActionInterface
|
||||
$this->bridgeFactory = new BridgeFactory();
|
||||
}
|
||||
|
||||
public function execute(array $request)
|
||||
public function execute(Request $request)
|
||||
{
|
||||
if (!Debug::isEnabled()) {
|
||||
return new Response('This action is only available in debug mode!', 403);
|
||||
}
|
||||
|
||||
$bridgeName = $request['bridge'] ?? null;
|
||||
$bridgeName = $request->get('bridge');
|
||||
if (!$bridgeName) {
|
||||
return render_template('connectivity.html.php');
|
||||
}
|
||||
|
@@ -2,10 +2,10 @@
|
||||
|
||||
class DetectAction implements ActionInterface
|
||||
{
|
||||
public function execute(array $request)
|
||||
public function execute(Request $request)
|
||||
{
|
||||
$targetURL = $request['url'] ?? null;
|
||||
$format = $request['format'] ?? null;
|
||||
$targetURL = $request->get('url');
|
||||
$format = $request->get('format');
|
||||
|
||||
if (!$targetURL) {
|
||||
throw new \Exception('You must specify a url!');
|
||||
|
@@ -11,9 +11,13 @@ class DisplayAction implements ActionInterface
|
||||
$this->logger = RssBridge::getLogger();
|
||||
}
|
||||
|
||||
public function execute(array $request)
|
||||
public function execute(Request $request)
|
||||
{
|
||||
$cacheKey = 'http_' . json_encode($request);
|
||||
$bridgeName = $request->get('bridge');
|
||||
$format = $request->get('format');
|
||||
$noproxy = $request->get('_noproxy');
|
||||
|
||||
$cacheKey = 'http_' . json_encode($request->toArray());
|
||||
/** @var Response $cachedResponse */
|
||||
$cachedResponse = $this->cache->get($cacheKey);
|
||||
if ($cachedResponse) {
|
||||
@@ -31,7 +35,6 @@ class DisplayAction implements ActionInterface
|
||||
return $cachedResponse;
|
||||
}
|
||||
|
||||
$bridgeName = $request['bridge'] ?? null;
|
||||
if (!$bridgeName) {
|
||||
return new Response(render(__DIR__ . '/../templates/error.html.php', ['message' => 'Missing bridge parameter']), 400);
|
||||
}
|
||||
@@ -40,7 +43,7 @@ class DisplayAction implements ActionInterface
|
||||
if (!$bridgeClassName) {
|
||||
return new Response(render(__DIR__ . '/../templates/error.html.php', ['message' => 'Bridge not found']), 404);
|
||||
}
|
||||
$format = $request['format'] ?? null;
|
||||
|
||||
if (!$format) {
|
||||
return new Response(render(__DIR__ . '/../templates/error.html.php', ['message' => 'You must specify a format']), 400);
|
||||
}
|
||||
@@ -48,7 +51,7 @@ class DisplayAction implements ActionInterface
|
||||
return new Response(render(__DIR__ . '/../templates/error.html.php', ['message' => 'This bridge is not whitelisted']), 400);
|
||||
}
|
||||
|
||||
$noproxy = $request['_noproxy'] ?? null;
|
||||
|
||||
if (
|
||||
Configuration::getConfig('proxy', 'url')
|
||||
&& Configuration::getConfig('proxy', 'by_bridge')
|
||||
@@ -65,7 +68,7 @@ class DisplayAction implements ActionInterface
|
||||
$response = $this->createResponse($request, $bridge, $format);
|
||||
|
||||
if ($response->getCode() === 200) {
|
||||
$ttl = $request['_cache_timeout'] ?? null;
|
||||
$ttl = $request->get('_cache_timeout');
|
||||
if (Configuration::getConfig('cache', 'custom_timeout') && $ttl) {
|
||||
$ttl = (int) $ttl;
|
||||
} else {
|
||||
@@ -90,7 +93,7 @@ class DisplayAction implements ActionInterface
|
||||
return $response;
|
||||
}
|
||||
|
||||
private function createResponse(array $request, BridgeAbstract $bridge, FormatAbstract $format)
|
||||
private function createResponse(Request $request, BridgeAbstract $bridge, FormatAbstract $format)
|
||||
{
|
||||
$items = [];
|
||||
$feed = [];
|
||||
@@ -107,7 +110,8 @@ class DisplayAction implements ActionInterface
|
||||
'_error_time',
|
||||
'_', // Some RSS readers add a cache-busting parameter (_=<timestamp>) to feed URLs, detect and ignore them.
|
||||
];
|
||||
$input = array_diff_key($request, array_fill_keys($remove, ''));
|
||||
$requestArray = $request->toArray();
|
||||
$input = array_diff_key($requestArray, array_fill_keys($remove, ''));
|
||||
$bridge->setInput($input);
|
||||
$bridge->collectData();
|
||||
$items = $bridge->getItems();
|
||||
|
@@ -7,10 +7,10 @@
|
||||
*/
|
||||
class FindfeedAction implements ActionInterface
|
||||
{
|
||||
public function execute(array $request)
|
||||
public function execute(Request $request)
|
||||
{
|
||||
$targetURL = $request['url'] ?? null;
|
||||
$format = $request['format'] ?? null;
|
||||
$targetURL = $request->get('url');
|
||||
$format = $request->get('format');
|
||||
|
||||
if (!$targetURL) {
|
||||
return new Response('You must specify a url', 400);
|
||||
|
@@ -2,10 +2,11 @@
|
||||
|
||||
final class FrontpageAction implements ActionInterface
|
||||
{
|
||||
public function execute(array $request)
|
||||
public function execute(Request $request)
|
||||
{
|
||||
$showInactive = (bool) $request->get('show_inactive');
|
||||
|
||||
$messages = [];
|
||||
$showInactive = (bool) ($request['show_inactive'] ?? null);
|
||||
$activeBridges = 0;
|
||||
|
||||
$bridgeFactory = new BridgeFactory();
|
||||
@@ -18,16 +19,13 @@ final class FrontpageAction implements ActionInterface
|
||||
];
|
||||
}
|
||||
|
||||
$formatFactory = new FormatFactory();
|
||||
$formats = $formatFactory->getFormatNames();
|
||||
|
||||
$body = '';
|
||||
foreach ($bridgeClassNames as $bridgeClassName) {
|
||||
if ($bridgeFactory->isEnabled($bridgeClassName)) {
|
||||
$body .= BridgeCard::displayBridgeCard($bridgeClassName);
|
||||
$body .= BridgeCard::render($bridgeClassName);
|
||||
$activeBridges++;
|
||||
} elseif ($showInactive) {
|
||||
$body .= BridgeCard::displayBridgeCard($bridgeClassName, false) . "\n";
|
||||
$body .= BridgeCard::render($bridgeClassName, false) . "\n";
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -4,7 +4,7 @@ declare(strict_types=1);
|
||||
|
||||
class HealthAction implements ActionInterface
|
||||
{
|
||||
public function execute(array $request)
|
||||
public function execute(Request $request)
|
||||
{
|
||||
$response = [
|
||||
'code' => 200,
|
||||
|
@@ -2,7 +2,7 @@
|
||||
|
||||
class ListAction implements ActionInterface
|
||||
{
|
||||
public function execute(array $request)
|
||||
public function execute(Request $request)
|
||||
{
|
||||
$list = new \stdClass();
|
||||
$list->bridges = [];
|
||||
|
@@ -9,15 +9,17 @@ class SetBridgeCacheAction implements ActionInterface
|
||||
$this->cache = RssBridge::getCache();
|
||||
}
|
||||
|
||||
public function execute(array $request)
|
||||
public function execute(Request $request)
|
||||
{
|
||||
$requestArray = $request->toArray();
|
||||
|
||||
// Authentication
|
||||
$accessTokenInConfig = Configuration::getConfig('authentication', 'access_token');
|
||||
if (!$accessTokenInConfig) {
|
||||
return new Response('Access token is not set in this instance', 403, ['content-type' => 'text/plain']);
|
||||
}
|
||||
if (isset($request['access_token'])) {
|
||||
$accessTokenGiven = $request['access_token'];
|
||||
if (isset($requestArray['access_token'])) {
|
||||
$accessTokenGiven = $requestArray['access_token'];
|
||||
} else {
|
||||
$header = trim($_SERVER['HTTP_AUTHORIZATION'] ?? '');
|
||||
$position = strrpos($header, 'Bearer ');
|
||||
@@ -35,33 +37,32 @@ class SetBridgeCacheAction implements ActionInterface
|
||||
}
|
||||
|
||||
// Begin actual work
|
||||
$key = $request['key'] ?? null;
|
||||
$key = $requestArray['key'] ?? null;
|
||||
if (!$key) {
|
||||
returnClientError('You must specify key!');
|
||||
return new Response('You must specify key', 400, ['content-type' => 'text/plain']);
|
||||
}
|
||||
|
||||
$bridgeFactory = new BridgeFactory();
|
||||
|
||||
$bridgeName = $request['bridge'] ?? null;
|
||||
$bridgeName = $requestArray['bridge'] ?? null;
|
||||
$bridgeClassName = $bridgeFactory->createBridgeClassName($bridgeName);
|
||||
if (!$bridgeClassName) {
|
||||
throw new \Exception(sprintf('Bridge not found: %s', $bridgeName));
|
||||
return new Response(sprintf('Bridge not found: %s', $bridgeName), 400, ['content-type' => 'text/plain']);
|
||||
}
|
||||
|
||||
// whitelist control
|
||||
if (!$bridgeFactory->isEnabled($bridgeClassName)) {
|
||||
throw new \Exception('This bridge is not whitelisted', 401);
|
||||
return new Response('This bridge is not whitelisted', 401, ['content-type' => 'text/plain']);
|
||||
}
|
||||
|
||||
$bridge = $bridgeFactory->create($bridgeClassName);
|
||||
$bridge->loadConfiguration();
|
||||
$value = $request['value'];
|
||||
$value = $requestArray['value'];
|
||||
|
||||
$cacheKey = get_class($bridge) . '_' . $key;
|
||||
$ttl = 86400 * 3;
|
||||
$this->cache->set($cacheKey, $value, $ttl);
|
||||
|
||||
header('Content-Type: text/plain');
|
||||
echo 'done';
|
||||
return new Response('done', 200, ['Content-Type' => 'text/plain']);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user