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:
Alexandre Alapetite 2024-02-29 21:51:47 +01:00 committed by GitHub
parent 4e0155e562
commit 265fd0bb5c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 47 additions and 47 deletions

View file

@ -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);
}
}
}