mirror of
https://code.mensbeam.com/MensBeam/Arsse.git
synced 2024-12-22 21:22:40 +00:00
CS fixes and version bump
This commit is contained in:
parent
34b508171b
commit
cbc9491f75
11 changed files with 26 additions and 28 deletions
|
@ -7,7 +7,7 @@ declare(strict_types=1);
|
||||||
namespace JKingWeb\Arsse;
|
namespace JKingWeb\Arsse;
|
||||||
|
|
||||||
class Arsse {
|
class Arsse {
|
||||||
const VERSION = "0.2.1";
|
const VERSION = "0.3.0";
|
||||||
|
|
||||||
/** @var Lang */
|
/** @var Lang */
|
||||||
public static $lang;
|
public static $lang;
|
||||||
|
|
|
@ -13,7 +13,7 @@ class Date {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
$out = ValueInfo::normalize($date, ValueInfo::T_STRING, null, $outFormat);
|
$out = ValueInfo::normalize($date, ValueInfo::T_STRING, null, $outFormat);
|
||||||
if($outFormat=="unix") {
|
if ($outFormat=="unix") {
|
||||||
$out = (int) $out;
|
$out = (int) $out;
|
||||||
} elseif ($outFormat=="float") {
|
} elseif ($outFormat=="float") {
|
||||||
$out = (float) $out;
|
$out = (float) $out;
|
||||||
|
|
|
@ -6,7 +6,6 @@
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
namespace JKingWeb\Arsse;
|
namespace JKingWeb\Arsse;
|
||||||
|
|
||||||
|
|
||||||
use JKingWeb\Arsse\Arsse;
|
use JKingWeb\Arsse\Arsse;
|
||||||
use Psr\Http\Message\RequestInterface;
|
use Psr\Http\Message\RequestInterface;
|
||||||
use Psr\Http\Message\ServerRequestInterface;
|
use Psr\Http\Message\ServerRequestInterface;
|
||||||
|
@ -67,9 +66,9 @@ class REST {
|
||||||
public function dispatch(ServerRequestInterface $req = null): ResponseInterface {
|
public function dispatch(ServerRequestInterface $req = null): ResponseInterface {
|
||||||
// create a request object if not provided
|
// create a request object if not provided
|
||||||
$req = $req ?? ServerRequestFactory::fromGlobals();
|
$req = $req ?? ServerRequestFactory::fromGlobals();
|
||||||
// find the API to handle
|
// find the API to handle
|
||||||
try {
|
try {
|
||||||
list ($api, $target, $class) = $this->apiMatch($req->getRequestTarget(), $this->apis);
|
list($api, $target, $class) = $this->apiMatch($req->getRequestTarget(), $this->apis);
|
||||||
// authenticate the request pre-emptively
|
// authenticate the request pre-emptively
|
||||||
$req = $this->authenticateRequest($req);
|
$req = $this->authenticateRequest($req);
|
||||||
// modify the request to have an uppercase method and a stripped target
|
// modify the request to have an uppercase method and a stripped target
|
||||||
|
@ -119,7 +118,7 @@ class REST {
|
||||||
return [$id, $target, $api['class']];
|
return [$id, $target, $api['class']];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// or throw an exception otherwise
|
// or throw an exception otherwise
|
||||||
throw new REST\Exception501();
|
throw new REST\Exception501();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -197,7 +196,7 @@ class REST {
|
||||||
if ($req->hasHeader("Access-Control-Request-Headers")) {
|
if ($req->hasHeader("Access-Control-Request-Headers")) {
|
||||||
$res = $res->withHeader("Access-Control-Allow-Headers", $req->getHeaderLine("Access-Control-Request-Headers"));
|
$res = $res->withHeader("Access-Control-Allow-Headers", $req->getHeaderLine("Access-Control-Request-Headers"));
|
||||||
}
|
}
|
||||||
$res = $res->withHeader("Access-Control-Max-Age", (string) (60 *60 *24) ); // one day
|
$res = $res->withHeader("Access-Control-Max-Age", (string) (60 *60 *24)); // one day
|
||||||
}
|
}
|
||||||
$res = $res->withHeader("Access-Control-Allow-Origin", $req->getHeaderLine("Origin"));
|
$res = $res->withHeader("Access-Control-Allow-Origin", $req->getHeaderLine("Origin"));
|
||||||
$res = $res->withHeader("Access-Control-Allow-Credentials", "true");
|
$res = $res->withHeader("Access-Control-Allow-Credentials", "true");
|
||||||
|
|
|
@ -62,7 +62,7 @@ class Target {
|
||||||
|
|
||||||
protected function parseFragment(string $target): string {
|
protected function parseFragment(string $target): string {
|
||||||
// store and strip off any fragment identifier and return the target without a fragment
|
// store and strip off any fragment identifier and return the target without a fragment
|
||||||
$pos = strpos($target,"#");
|
$pos = strpos($target, "#");
|
||||||
if ($pos !== false) {
|
if ($pos !== false) {
|
||||||
$this->fragment = rawurldecode(substr($target, $pos + 1));
|
$this->fragment = rawurldecode(substr($target, $pos + 1));
|
||||||
$target = substr($target, 0, $pos);
|
$target = substr($target, 0, $pos);
|
||||||
|
@ -74,7 +74,7 @@ class Target {
|
||||||
// store and strip off any query string and return the target without a query
|
// store and strip off any query string and return the target without a query
|
||||||
// note that the function assumes any fragment identifier has already been stripped off
|
// note that the function assumes any fragment identifier has already been stripped off
|
||||||
// unlike the other parts the query string is currently neither parsed nor normalized
|
// unlike the other parts the query string is currently neither parsed nor normalized
|
||||||
$pos = strpos($target,"?");
|
$pos = strpos($target, "?");
|
||||||
if ($pos !== false) {
|
if ($pos !== false) {
|
||||||
$this->query = substr($target, $pos + 1);
|
$this->query = substr($target, $pos + 1);
|
||||||
$target = substr($target, 0, $pos);
|
$target = substr($target, 0, $pos);
|
||||||
|
@ -106,7 +106,7 @@ class Target {
|
||||||
$target = explode("/", $target);
|
$target = explode("/", $target);
|
||||||
$out = [];
|
$out = [];
|
||||||
// resolve relative path segments and decode each retained segment
|
// resolve relative path segments and decode each retained segment
|
||||||
foreach($target as $index => $segment) {
|
foreach ($target as $index => $segment) {
|
||||||
if ($segment==".") {
|
if ($segment==".") {
|
||||||
// self-referential segments can be ignored
|
// self-referential segments can be ignored
|
||||||
continue;
|
continue;
|
||||||
|
@ -128,4 +128,4 @@ class Target {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,6 @@ namespace JKingWeb\Arsse\TestCase\Lang;
|
||||||
use JKingWeb\Arsse\Lang as TestClass;
|
use JKingWeb\Arsse\Lang as TestClass;
|
||||||
use org\bovigo\vfs\vfsStream;
|
use org\bovigo\vfs\vfsStream;
|
||||||
|
|
||||||
|
|
||||||
/** @covers \JKingWeb\Arsse\Lang */
|
/** @covers \JKingWeb\Arsse\Lang */
|
||||||
class TestBasic extends \JKingWeb\Arsse\Test\AbstractTest {
|
class TestBasic extends \JKingWeb\Arsse\Test\AbstractTest {
|
||||||
use \JKingWeb\Arsse\Test\Lang\Setup;
|
use \JKingWeb\Arsse\Test\Lang\Setup;
|
||||||
|
|
|
@ -14,7 +14,7 @@ class TestDate extends \JKingWeb\Arsse\Test\AbstractTest {
|
||||||
$this->clearData();
|
$this->clearData();
|
||||||
}
|
}
|
||||||
|
|
||||||
function testNormalizeADate() {
|
public function testNormalizeADate() {
|
||||||
$exp = new \DateTimeImmutable("2018-01-01T00:00:00Z");
|
$exp = new \DateTimeImmutable("2018-01-01T00:00:00Z");
|
||||||
$this->assertEquals($exp, Date::normalize(1514764800));
|
$this->assertEquals($exp, Date::normalize(1514764800));
|
||||||
$this->assertEquals($exp, Date::normalize("2018-01-01T00:00:00"));
|
$this->assertEquals($exp, Date::normalize("2018-01-01T00:00:00"));
|
||||||
|
@ -26,7 +26,7 @@ class TestDate extends \JKingWeb\Arsse\Test\AbstractTest {
|
||||||
$this->assertNull(Date::normalize("2018-01-01T00:00:00Z", "http"));
|
$this->assertNull(Date::normalize("2018-01-01T00:00:00Z", "http"));
|
||||||
}
|
}
|
||||||
|
|
||||||
function testFormatADate() {
|
public function testFormatADate() {
|
||||||
$test = new \DateTimeImmutable("2018-01-01T00:00:00Z");
|
$test = new \DateTimeImmutable("2018-01-01T00:00:00Z");
|
||||||
$this->assertNull(Date::transform(null, "http"));
|
$this->assertNull(Date::transform(null, "http"));
|
||||||
$this->assertNull(Date::transform("ook", "http"));
|
$this->assertNull(Date::transform("ook", "http"));
|
||||||
|
@ -40,7 +40,7 @@ class TestDate extends \JKingWeb\Arsse\Test\AbstractTest {
|
||||||
$this->assertSame(1514764800.265579, Date::transform("2018-01-01T00:00:00.265579Z", "float", "iso8601m"));
|
$this->assertSame(1514764800.265579, Date::transform("2018-01-01T00:00:00.265579Z", "float", "iso8601m"));
|
||||||
}
|
}
|
||||||
|
|
||||||
function testMoveDateForward() {
|
public function testMoveDateForward() {
|
||||||
$test = new \DateTimeImmutable("2018-01-01T00:00:00Z");
|
$test = new \DateTimeImmutable("2018-01-01T00:00:00Z");
|
||||||
$this->assertNull(Date::add("P1D", null));
|
$this->assertNull(Date::add("P1D", null));
|
||||||
$this->assertNull(Date::add("P1D", "ook"));
|
$this->assertNull(Date::add("P1D", "ook"));
|
||||||
|
@ -49,7 +49,7 @@ class TestDate extends \JKingWeb\Arsse\Test\AbstractTest {
|
||||||
$this->assertNull(Date::add("ook", $test));
|
$this->assertNull(Date::add("ook", $test));
|
||||||
}
|
}
|
||||||
|
|
||||||
function testMoveDateBack() {
|
public function testMoveDateBack() {
|
||||||
$test = new \DateTimeImmutable("2018-01-01T00:00:00Z");
|
$test = new \DateTimeImmutable("2018-01-01T00:00:00Z");
|
||||||
$this->assertNull(Date::sub("P1D", null));
|
$this->assertNull(Date::sub("P1D", null));
|
||||||
$this->assertNull(Date::sub("P1D", "ook"));
|
$this->assertNull(Date::sub("P1D", "ook"));
|
||||||
|
|
|
@ -317,7 +317,7 @@ class TestV1_2 extends \JKingWeb\Arsse\Test\AbstractTest {
|
||||||
if (Arsse::$user->auth()) {
|
if (Arsse::$user->auth()) {
|
||||||
$req = $req->withAttribute("authenticated", true)->withAttribute("authenticatedUser", "john.doe@example.com");
|
$req = $req->withAttribute("authenticated", true)->withAttribute("authenticatedUser", "john.doe@example.com");
|
||||||
}
|
}
|
||||||
foreach($headers as $key => $value) {
|
foreach ($headers as $key => $value) {
|
||||||
if (!is_null($value)) {
|
if (!is_null($value)) {
|
||||||
$req = $req->withHeader($key, $value);
|
$req = $req->withHeader($key, $value);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -264,7 +264,7 @@ class TestREST extends \JKingWeb\Arsse\Test\AbstractTest {
|
||||||
|
|
||||||
public function provideUnnormalizedResponses() {
|
public function provideUnnormalizedResponses() {
|
||||||
$stream = fopen("php://memory", "w+b");
|
$stream = fopen("php://memory", "w+b");
|
||||||
fwrite($stream,"ook");
|
fwrite($stream, "ook");
|
||||||
return [
|
return [
|
||||||
[new EmptyResponse(204), new EmptyResponse(204)],
|
[new EmptyResponse(204), new EmptyResponse(204)],
|
||||||
[new EmptyResponse(401), new EmptyResponse(401, ['WWW-Authenticate' => "Fake Value"])],
|
[new EmptyResponse(401), new EmptyResponse(401, ['WWW-Authenticate' => "Fake Value"])],
|
||||||
|
@ -322,13 +322,13 @@ class TestREST extends \JKingWeb\Arsse\Test\AbstractTest {
|
||||||
|
|
||||||
public function provideMockRequests() {
|
public function provideMockRequests() {
|
||||||
return [
|
return [
|
||||||
[new ServerRequest([], [], "/index.php/apps/news/api/v1-2/feeds", "GET"), "GET", true, NCN::Class, "/feeds"],
|
[new ServerRequest([], [], "/index.php/apps/news/api/v1-2/feeds", "GET"), "GET", true, NCN::class, "/feeds"],
|
||||||
[new ServerRequest([], [], "/index.php/apps/news/api/v1-2/feeds", "HEAD"), "GET", true, NCN::Class, "/feeds"],
|
[new ServerRequest([], [], "/index.php/apps/news/api/v1-2/feeds", "HEAD"), "GET", true, NCN::class, "/feeds"],
|
||||||
[new ServerRequest([], [], "/index.php/apps/news/api/v1-2/feeds", "get"), "GET", true, NCN::Class, "/feeds"],
|
[new ServerRequest([], [], "/index.php/apps/news/api/v1-2/feeds", "get"), "GET", true, NCN::class, "/feeds"],
|
||||||
[new ServerRequest([], [], "/index.php/apps/news/api/v1-2/feeds", "head"), "GET", true, NCN::Class, "/feeds"],
|
[new ServerRequest([], [], "/index.php/apps/news/api/v1-2/feeds", "head"), "GET", true, NCN::class, "/feeds"],
|
||||||
[new ServerRequest([], [], "/tt-rss/api/", "POST"), "POST", true, TTRSS::Class, "/"],
|
[new ServerRequest([], [], "/tt-rss/api/", "POST"), "POST", true, TTRSS::class, "/"],
|
||||||
[new ServerRequest([], [], "/no/such/api/", "HEAD"), "GET", false],
|
[new ServerRequest([], [], "/no/such/api/", "HEAD"), "GET", false],
|
||||||
[new ServerRequest([], [], "/no/such/api/", "GET"), "GET", false],
|
[new ServerRequest([], [], "/no/such/api/", "GET"), "GET", false],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,4 +63,4 @@ class TestTarget extends \JKingWeb\Arsse\Test\AbstractTest {
|
||||||
["#%2e?%2f", [], true, true, "", ".?/", "#.%3F%2F"],
|
["#%2e?%2f", [], true, true, "", ".?/", "#.%3F%2F"],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,4 +10,4 @@ namespace JKingWeb\Arsse\TestCase\REST\TinyTinyRSS\PDO;
|
||||||
* @covers \JKingWeb\Arsse\REST\TinyTinyRSS\Exception */
|
* @covers \JKingWeb\Arsse\REST\TinyTinyRSS\Exception */
|
||||||
class TestAPI extends \JKingWeb\Arsse\TestCase\REST\TinyTinyRSS\TestAPI {
|
class TestAPI extends \JKingWeb\Arsse\TestCase\REST\TinyTinyRSS\TestAPI {
|
||||||
use \JKingWeb\Arsse\Test\PDOTest;
|
use \JKingWeb\Arsse\Test\PDOTest;
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,7 @@ trait PDOTest {
|
||||||
if (!is_array($value)) {
|
if (!is_array($value)) {
|
||||||
return $value;
|
return $value;
|
||||||
}
|
}
|
||||||
foreach($value as $k => $v) {
|
foreach ($value as $k => $v) {
|
||||||
if (is_array($v)) {
|
if (is_array($v)) {
|
||||||
$value[$k] = $this->v($v);
|
$value[$k] = $this->v($v);
|
||||||
} elseif (is_int($v) || is_float($v)) {
|
} elseif (is_int($v) || is_float($v)) {
|
||||||
|
@ -20,4 +20,4 @@ trait PDOTest {
|
||||||
}
|
}
|
||||||
return $value;
|
return $value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue