Update ImageProxy (#201)
Partial follow-up of https://github.com/FreshRSS/Extensions/pull/185#issuecomment-1826134164 Fix regression in typing for `getSrcSetUris`()
This commit is contained in:
parent
4e0155e562
commit
265fd0bb5c
2 changed files with 47 additions and 47 deletions
|
|
@ -12,7 +12,7 @@ final class ImageProxyExtension extends Minz_Extension {
|
|||
private const URL_ENCODE = '1';
|
||||
|
||||
public function init(): void {
|
||||
if (FreshRSS_Context::$system_conf === null) {
|
||||
if (!FreshRSS_Context::hasSystemConf()) {
|
||||
throw new FreshRSS_Context_Exception('System configuration not initialised!');
|
||||
}
|
||||
$this->registerHook(
|
||||
|
|
@ -21,37 +21,37 @@ final class ImageProxyExtension extends Minz_Extension {
|
|||
);
|
||||
// Defaults
|
||||
$save = false;
|
||||
if (is_null(FreshRSS_Context::$user_conf->image_proxy_url)) {
|
||||
FreshRSS_Context::$user_conf->image_proxy_url = self::PROXY_URL;
|
||||
if (is_null(FreshRSS_Context::userConf()->image_proxy_url)) {
|
||||
FreshRSS_Context::userConf()->image_proxy_url = self::PROXY_URL;
|
||||
$save = true;
|
||||
}
|
||||
if (is_null(FreshRSS_Context::$user_conf->image_proxy_scheme_http)) {
|
||||
FreshRSS_Context::$user_conf->image_proxy_scheme_http = self::SCHEME_HTTP;
|
||||
if (is_null(FreshRSS_Context::userConf()->image_proxy_scheme_http)) {
|
||||
FreshRSS_Context::userConf()->image_proxy_scheme_http = self::SCHEME_HTTP;
|
||||
$save = true;
|
||||
}
|
||||
if (is_null(FreshRSS_Context::$user_conf->image_proxy_scheme_https)) {
|
||||
FreshRSS_Context::$user_conf->image_proxy_scheme_https = self::SCHEME_HTTPS;
|
||||
if (is_null(FreshRSS_Context::userConf()->image_proxy_scheme_https)) {
|
||||
FreshRSS_Context::userConf()->image_proxy_scheme_https = self::SCHEME_HTTPS;
|
||||
// Legacy
|
||||
if (!is_null(FreshRSS_Context::$user_conf->image_proxy_force)) {
|
||||
FreshRSS_Context::$user_conf->image_proxy_scheme_https = FreshRSS_Context::$user_conf->image_proxy_force;
|
||||
FreshRSS_Context::$user_conf->image_proxy_force = null; // Minz -> unset
|
||||
if (!is_null(FreshRSS_Context::userConf()->image_proxy_force)) {
|
||||
FreshRSS_Context::userConf()->image_proxy_scheme_https = FreshRSS_Context::userConf()->image_proxy_force;
|
||||
FreshRSS_Context::userConf()->image_proxy_force = null; // Minz -> unset
|
||||
}
|
||||
$save = true;
|
||||
}
|
||||
if (is_null(FreshRSS_Context::$user_conf->image_proxy_scheme_default)) {
|
||||
FreshRSS_Context::$user_conf->image_proxy_scheme_default = self::SCHEME_DEFAULT;
|
||||
if (is_null(FreshRSS_Context::userConf()->image_proxy_scheme_default)) {
|
||||
FreshRSS_Context::userConf()->image_proxy_scheme_default = self::SCHEME_DEFAULT;
|
||||
$save = true;
|
||||
}
|
||||
if (is_null(FreshRSS_Context::$user_conf->image_proxy_scheme_include)) {
|
||||
FreshRSS_Context::$user_conf->image_proxy_scheme_include = self::SCHEME_INCLUDE;
|
||||
if (is_null(FreshRSS_Context::userConf()->image_proxy_scheme_include)) {
|
||||
FreshRSS_Context::userConf()->image_proxy_scheme_include = self::SCHEME_INCLUDE;
|
||||
$save = true;
|
||||
}
|
||||
if (is_null(FreshRSS_Context::$user_conf->image_proxy_url_encode)) {
|
||||
FreshRSS_Context::$user_conf->image_proxy_url_encode = self::URL_ENCODE;
|
||||
if (is_null(FreshRSS_Context::userConf()->image_proxy_url_encode)) {
|
||||
FreshRSS_Context::userConf()->image_proxy_url_encode = self::URL_ENCODE;
|
||||
$save = true;
|
||||
}
|
||||
if ($save) {
|
||||
FreshRSS_Context::$user_conf->save();
|
||||
FreshRSS_Context::userConf()->save();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -59,13 +59,13 @@ final class ImageProxyExtension extends Minz_Extension {
|
|||
$this->registerTranslates();
|
||||
|
||||
if (Minz_Request::isPost()) {
|
||||
FreshRSS_Context::$user_conf->image_proxy_url = Minz_Request::paramString('image_proxy_url', true) ?: self::PROXY_URL;
|
||||
FreshRSS_Context::$user_conf->image_proxy_scheme_http = Minz_Request::paramString('image_proxy_scheme_http');
|
||||
FreshRSS_Context::$user_conf->image_proxy_scheme_https = Minz_Request::paramString('image_proxy_scheme_https');
|
||||
FreshRSS_Context::$user_conf->image_proxy_scheme_default = Minz_Request::paramString('image_proxy_scheme_default') ?: self::SCHEME_DEFAULT;
|
||||
FreshRSS_Context::$user_conf->image_proxy_scheme_include = Minz_Request::paramString('image_proxy_scheme_include');
|
||||
FreshRSS_Context::$user_conf->image_proxy_url_encode = Minz_Request::paramString('image_proxy_url_encode');
|
||||
FreshRSS_Context::$user_conf->save();
|
||||
FreshRSS_Context::userConf()->image_proxy_url = Minz_Request::paramString('image_proxy_url', true) ?: self::PROXY_URL;
|
||||
FreshRSS_Context::userConf()->image_proxy_scheme_http = Minz_Request::paramString('image_proxy_scheme_http');
|
||||
FreshRSS_Context::userConf()->image_proxy_scheme_https = Minz_Request::paramString('image_proxy_scheme_https');
|
||||
FreshRSS_Context::userConf()->image_proxy_scheme_default = Minz_Request::paramString('image_proxy_scheme_default') ?: self::SCHEME_DEFAULT;
|
||||
FreshRSS_Context::userConf()->image_proxy_scheme_include = Minz_Request::paramString('image_proxy_scheme_include');
|
||||
FreshRSS_Context::userConf()->image_proxy_url_encode = Minz_Request::paramString('image_proxy_url_encode');
|
||||
FreshRSS_Context::userConf()->save();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -73,27 +73,27 @@ final class ImageProxyExtension extends Minz_Extension {
|
|||
$parsed_url = parse_url($url);
|
||||
$scheme = isset($parsed_url['scheme']) ? $parsed_url['scheme'] : null;
|
||||
if ($scheme === 'http') {
|
||||
if (!FreshRSS_Context::$user_conf->image_proxy_scheme_http) {
|
||||
if (!FreshRSS_Context::userConf()->image_proxy_scheme_http) {
|
||||
return $url;
|
||||
}
|
||||
if (!FreshRSS_Context::$user_conf->image_proxy_scheme_include) {
|
||||
if (!FreshRSS_Context::userConf()->image_proxy_scheme_include) {
|
||||
$url = substr($url, 7); // http://
|
||||
}
|
||||
} elseif ($scheme === 'https') {
|
||||
if (!FreshRSS_Context::$user_conf->image_proxy_scheme_https) {
|
||||
if (!FreshRSS_Context::userConf()->image_proxy_scheme_https) {
|
||||
return $url;
|
||||
}
|
||||
if (!FreshRSS_Context::$user_conf->image_proxy_scheme_include) {
|
||||
if (!FreshRSS_Context::userConf()->image_proxy_scheme_include) {
|
||||
$url = substr($url, 8); // https://
|
||||
}
|
||||
} elseif (empty($scheme)) {
|
||||
if (FreshRSS_Context::$user_conf->image_proxy_scheme_default === 'auto') {
|
||||
if (FreshRSS_Context::$user_conf->image_proxy_scheme_include) {
|
||||
if (FreshRSS_Context::userConf()->image_proxy_scheme_default === 'auto') {
|
||||
if (FreshRSS_Context::userConf()->image_proxy_scheme_include) {
|
||||
$url = ((!empty($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) !== 'off') ? 'https:' : 'http:') . $url;
|
||||
}
|
||||
} elseif (substr(FreshRSS_Context::$user_conf->image_proxy_scheme_default, 0, 4) === 'http') {
|
||||
if (FreshRSS_Context::$user_conf->image_proxy_scheme_include) {
|
||||
$url = FreshRSS_Context::$user_conf->image_proxy_scheme_default . ':' . $url;
|
||||
} elseif (substr(FreshRSS_Context::userConf()->image_proxy_scheme_default, 0, 4) === 'http') {
|
||||
if (FreshRSS_Context::userConf()->image_proxy_scheme_include) {
|
||||
$url = FreshRSS_Context::userConf()->image_proxy_scheme_default . ':' . $url;
|
||||
}
|
||||
} else { // do not proxy unschemed ("//path/...") URLs
|
||||
return $url;
|
||||
|
|
@ -101,19 +101,17 @@ final class ImageProxyExtension extends Minz_Extension {
|
|||
} else { // unknown/unsupported (non-http) scheme
|
||||
return $url;
|
||||
}
|
||||
if (FreshRSS_Context::$user_conf->image_proxy_url_encode) {
|
||||
if (FreshRSS_Context::userConf()->image_proxy_url_encode) {
|
||||
$url = rawurlencode($url);
|
||||
}
|
||||
return FreshRSS_Context::$user_conf->image_proxy_url . $url;
|
||||
return FreshRSS_Context::userConf()->image_proxy_url . $url;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array<string> $matches
|
||||
* @return array<string>
|
||||
*/
|
||||
public static function getSrcSetUris(array $matches): array {
|
||||
$result = str_replace($matches[1], self::getProxyImageUri($matches[1]), $matches[0]);
|
||||
return is_array($result) ? $result : [$result];
|
||||
public static function getSrcSetUris(array $matches): string {
|
||||
return str_replace($matches[1], self::getProxyImageUri($matches[1]), $matches[0]);
|
||||
}
|
||||
|
||||
public static function swapUris(string $content): string {
|
||||
|
|
@ -131,8 +129,10 @@ final class ImageProxyExtension extends Minz_Extension {
|
|||
$img->setAttribute('src', $newSrc);
|
||||
}
|
||||
if ($img->hasAttribute('srcset')) {
|
||||
$newSrcSet = preg_replace_callback('/(?:([^\s,]+)(\s*(?:\s+\d+[wx])(?:,\s*)?))/', fn($matches) => self::getSrcSetUris($matches), $img->getAttribute('srcset'));
|
||||
$img->setAttribute('srcset', $newSrcSet);
|
||||
$newSrcSet = preg_replace_callback('/(?:([^\s,]+)(\s*(?:\s+\d+[wx])(?:,\s*)?))/', fn (array $matches) => self::getSrcSetUris($matches), $img->getAttribute('srcset'));
|
||||
if ($newSrcSet != null) {
|
||||
$img->setAttribute('srcset', $newSrcSet);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue