add a workaround for make_self_url() when invoked off /api/ endpoint, add unit tests for this method
This commit is contained in:
parent
de2830b241
commit
69c1c62992
|
@ -6,22 +6,30 @@
|
||||||
"label": "phpstan (watcher)",
|
"label": "phpstan (watcher)",
|
||||||
"isBackground": true,
|
"isBackground": true,
|
||||||
"problemMatcher": {
|
"problemMatcher": {
|
||||||
"fileLocation": ["relative", "${workspaceRoot}"],
|
"fileLocation": [
|
||||||
|
"relative",
|
||||||
|
"${workspaceRoot}"
|
||||||
|
],
|
||||||
"owner": "phpstan-watcher",
|
"owner": "phpstan-watcher",
|
||||||
"pattern": {
|
"pattern": {
|
||||||
"regexp": "^/app/(.*?):([0-9\\?]*):(.*)$",
|
"regexp": "^/app/(.*?):([0-9\\?]*):(.*)$",
|
||||||
"file": 1,
|
"file": 1,
|
||||||
"line": 2,
|
"line": 2,
|
||||||
"message": 3
|
"message": 3
|
||||||
},
|
},
|
||||||
"background": {
|
"background": {
|
||||||
"activeOnStart": true,
|
"activeOnStart": true,
|
||||||
"beginsPattern": "Using configuration file",
|
"beginsPattern": "Using configuration file",
|
||||||
"endsPattern": "All done"
|
"endsPattern": "All done"
|
||||||
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"command": "chmod +x ${workspaceRoot}/utils/phpstan-watcher.sh && ${workspaceRoot}/utils/phpstan-watcher.sh",
|
"command": "chmod +x ${workspaceRoot}/utils/phpstan-watcher.sh && ${workspaceRoot}/utils/phpstan-watcher.sh"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "shell",
|
||||||
|
"label": "phpunit",
|
||||||
|
"command": "chmod +x ${workspaceRoot}/utils/phpunit.sh && ${workspaceRoot}/utils/phpunit.sh",
|
||||||
|
"problemMatcher": []
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "gulp",
|
"type": "gulp",
|
||||||
|
@ -30,9 +38,9 @@
|
||||||
"label": "gulp: default",
|
"label": "gulp: default",
|
||||||
"options": {
|
"options": {
|
||||||
"env": {
|
"env": {
|
||||||
"PATH": "${env:PATH}:/usr/lib/sdk/node16/bin/"
|
"PATH": "${env:PATH}:/usr/lib/sdk/node16/bin/"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -479,14 +479,14 @@ class Config {
|
||||||
/** returns fully-qualified external URL to tt-rss (no trailing slash)
|
/** returns fully-qualified external URL to tt-rss (no trailing slash)
|
||||||
* SELF_URL_PATH configuration variable is used as a fallback for the CLI SAPI
|
* SELF_URL_PATH configuration variable is used as a fallback for the CLI SAPI
|
||||||
* */
|
* */
|
||||||
static function get_self_url() : string {
|
static function get_self_url(bool $always_detect = false) : string {
|
||||||
if (php_sapi_name() == "cli") {
|
if (!$always_detect && php_sapi_name() == "cli") {
|
||||||
return self::get(Config::SELF_URL_PATH);
|
return self::get(Config::SELF_URL_PATH);
|
||||||
} else {
|
} else {
|
||||||
$proto = self::is_server_https() ? 'https' : 'http';
|
$proto = self::is_server_https() ? 'https' : 'http';
|
||||||
|
|
||||||
$self_url_path = $proto . '://' . $_SERVER["HTTP_HOST"] . parse_url($_SERVER["REQUEST_URI"], PHP_URL_PATH);
|
$self_url_path = $proto . '://' . $_SERVER["HTTP_HOST"] . parse_url($_SERVER["REQUEST_URI"], PHP_URL_PATH);
|
||||||
$self_url_path = preg_replace("/\w+\.php(\?.*$)?$/", "", $self_url_path);
|
$self_url_path = preg_replace("/(\/api\/{1,})?(\w+\.php)?(\?.*$)?$/", "", $self_url_path);
|
||||||
|
|
||||||
if (substr($self_url_path, -1) === "/") {
|
if (substr($self_url_path, -1) === "/") {
|
||||||
return substr($self_url_path, 0, -1);
|
return substr($self_url_path, 0, -1);
|
||||||
|
|
|
@ -0,0 +1,106 @@
|
||||||
|
<?php
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
|
final class SelfUrlPathTest extends TestCase {
|
||||||
|
public function test_a(): void {
|
||||||
|
$_SERVER = [];
|
||||||
|
|
||||||
|
$_SERVER["HTTP_X_FORWARDED_PROTO"] = "http";
|
||||||
|
$_SERVER["HTTP_HOST"] = "example.com";
|
||||||
|
$_SERVER["REQUEST_URI"] = "/tt-rss/api/index.php";
|
||||||
|
|
||||||
|
$this->assertEquals(
|
||||||
|
'http://example.com/tt-rss',
|
||||||
|
Config::get_self_url(true)
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function test_b(): void {
|
||||||
|
$_SERVER = [];
|
||||||
|
|
||||||
|
$_SERVER["HTTP_X_FORWARDED_PROTO"] = "https";
|
||||||
|
$_SERVER["HTTP_HOST"] = "example.com";
|
||||||
|
$_SERVER["REQUEST_URI"] = "/api/";
|
||||||
|
|
||||||
|
$this->assertEquals(
|
||||||
|
'https://example.com',
|
||||||
|
Config::get_self_url(true)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function test_c(): void {
|
||||||
|
$_SERVER = [];
|
||||||
|
|
||||||
|
$_SERVER["HTTP_X_FORWARDED_PROTO"] = "https";
|
||||||
|
$_SERVER["HTTP_HOST"] = "example.com";
|
||||||
|
$_SERVER["REQUEST_URI"] = "/api/index.php";
|
||||||
|
|
||||||
|
$this->assertEquals(
|
||||||
|
'https://example.com',
|
||||||
|
Config::get_self_url(true)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function test_d(): void {
|
||||||
|
$_SERVER = [];
|
||||||
|
|
||||||
|
$_SERVER["HTTP_X_FORWARDED_PROTO"] = "https";
|
||||||
|
$_SERVER["HTTP_HOST"] = "example.com";
|
||||||
|
$_SERVER["REQUEST_URI"] = "/api//";
|
||||||
|
|
||||||
|
$this->assertEquals(
|
||||||
|
'https://example.com',
|
||||||
|
Config::get_self_url(true)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function test_e(): void {
|
||||||
|
$_SERVER = [];
|
||||||
|
|
||||||
|
$_SERVER["HTTP_X_FORWARDED_PROTO"] = "https";
|
||||||
|
$_SERVER["HTTP_HOST"] = "example.com";
|
||||||
|
$_SERVER["REQUEST_URI"] = "/";
|
||||||
|
|
||||||
|
$this->assertEquals(
|
||||||
|
'https://example.com',
|
||||||
|
Config::get_self_url(true)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function test_f(): void {
|
||||||
|
$_SERVER = [];
|
||||||
|
|
||||||
|
$_SERVER["HTTP_HOST"] = "example.com";
|
||||||
|
$_SERVER["REQUEST_URI"] = "/tt-rss/index.php";
|
||||||
|
|
||||||
|
$this->assertEquals(
|
||||||
|
'http://example.com/tt-rss',
|
||||||
|
Config::get_self_url(true)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function test_g(): void {
|
||||||
|
$_SERVER = [];
|
||||||
|
|
||||||
|
$_SERVER["HTTP_HOST"] = "example.com";
|
||||||
|
$_SERVER["REQUEST_URI"] = "/tt-rss/";
|
||||||
|
|
||||||
|
$this->assertEquals(
|
||||||
|
'http://example.com/tt-rss',
|
||||||
|
Config::get_self_url(true)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function test_h(): void {
|
||||||
|
$_SERVER = [];
|
||||||
|
|
||||||
|
$_SERVER["HTTP_HOST"] = "example.com";
|
||||||
|
$_SERVER["REQUEST_URI"] = "/tt-rss";
|
||||||
|
|
||||||
|
$this->assertEquals(
|
||||||
|
'http://example.com/tt-rss',
|
||||||
|
Config::get_self_url(true)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
docker run --rm -v $(pwd):/app \
|
||||||
|
--workdir /app registry.fakecake.org/ci/php8.2-alpine:3.18 php82 -d memory_limit=-1 ./vendor/bin/phpunit
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue