Browse Source

Return correct TTRSS error bodies even for HTTP-level errors

TTRSS' error message for these cases (NOT_LOGGED_IN) is not especially helpful, but that's what it returns, so that's what we should return, albeit with correct HTTP status codes.
microsub
J. King 7 years ago
parent
commit
6e19517593
  1. 13
      lib/REST/TinyTinyRSS/API.php

13
lib/REST/TinyTinyRSS/API.php

@ -14,6 +14,11 @@ use JKingWeb\Arsse\REST\Response;
class API extends \JKingWeb\Arsse\REST\AbstractHandler { class API extends \JKingWeb\Arsse\REST\AbstractHandler {
const LEVEL = 14; const LEVEL = 14;
const VERSION = "17.4"; const VERSION = "17.4";
const FATAL_ERR = [
'seq' => null,
'status' => 1,
'content' => ['error' => "NOT_LOGGED_IN"],
];
const OVVERIDE = [ const OVVERIDE = [
'auth' => ["login"], 'auth' => ["login"],
]; ];
@ -24,17 +29,17 @@ class API extends \JKingWeb\Arsse\REST\AbstractHandler {
public function dispatch(\JKingWeb\Arsse\REST\Request $req): Response { public function dispatch(\JKingWeb\Arsse\REST\Request $req): Response {
if ($req->method != "POST") { if ($req->method != "POST") {
// only POST requests are allowed // only POST requests are allowed
return new Response(405, "", "", ["Allow: POST"]); return new Response(405, self::FATAL_ERR, "application/json", ["Allow: POST"]);
} }
if ($req->body) { if ($req->body) {
// only JSON entities are allowed // only JSON entities are allowed
if (!preg_match("<^application/json\b|^$>", $req->type)) { if (!preg_match("<^application/json\b|^$>", $req->type)) {
return new Response(415, "", "", ['Accept: application/json']); return new Response(415, self::FATAL_ERR, "application/json", ['Accept: application/json']);
} }
$data = @json_decode($req->body, true); $data = @json_decode($req->body, true);
if (json_last_error() != \JSON_ERROR_NONE || !is_array($data)) { if (json_last_error() != \JSON_ERROR_NONE || !is_array($data)) {
// non-JSON input indicates an error // non-JSON input indicates an error
return new Response(400); return new Response(400, self::FATAL_ERR);
} }
// layer input over defaults // layer input over defaults
$data = array_merge([ $data = array_merge([
@ -76,7 +81,7 @@ class API extends \JKingWeb\Arsse\REST\AbstractHandler {
} }
} else { } else {
// absence of a request body indicates an error // absence of a request body indicates an error
return new Response(400); return new Response(400, self::FATAL_ERR);
} }
} }

Loading…
Cancel
Save