aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Eris <36680203+printfuck@users.noreply.github.com> 2021-01-16 16:32:18 -0500
committerGravatar GitHub <noreply@github.com> 2021-01-16 22:32:18 +0100
commitee175dd6169a016fc898fac62d046e22c205dec0 (patch)
treec9b1f31f47dac1ec2d12f186e9df8831d5504eca
parent5c18c64afbdc8b888fdedf2d7cc45e1930225f02 (diff)
CURLOPT parameters per feed (#3367)
* Working curlopt_params * Examples * curl_params for fetching the article * cleanup * clarification * Remove debugging * Options corrected * Removed Debugging * i18n not needed (right now) * Translations and UI rework * Checks in update.phtml * Unset Proxy&Cookies * remove clutter * minor fuckup * i18n added properly * resolve Errors * linting errors * linting errors, again * Review * Minor revert * Minor i18n: de Co-authored-by: maru <maru@nyx.im> Co-authored-by: Aeris <a3x@eris.cc> Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
-rw-r--r--app/Controllers/subscriptionController.php13
-rw-r--r--app/Models/Entry.php6
-rw-r--r--app/i18n/cz/sub.php4
-rw-r--r--app/i18n/de/sub.php4
-rw-r--r--app/i18n/en-us/sub.php4
-rw-r--r--app/i18n/en/sub.php4
-rwxr-xr-xapp/i18n/es/sub.php4
-rw-r--r--app/i18n/fr/sub.php4
-rw-r--r--app/i18n/he/sub.php4
-rw-r--r--app/i18n/it/sub.php4
-rw-r--r--app/i18n/kr/sub.php4
-rw-r--r--app/i18n/nl/sub.php4
-rw-r--r--app/i18n/oc/sub.php4
-rw-r--r--app/i18n/pl/sub.php4
-rw-r--r--app/i18n/pt-br/sub.php4
-rw-r--r--app/i18n/ru/sub.php4
-rw-r--r--app/i18n/sk/sub.php4
-rw-r--r--app/i18n/tr/sub.php4
-rw-r--r--app/i18n/zh-cn/sub.php4
-rw-r--r--app/views/helpers/feed/update.phtml36
-rw-r--r--lib/lib_rss.php5
21 files changed, 128 insertions, 0 deletions
diff --git a/app/Controllers/subscriptionController.php b/app/Controllers/subscriptionController.php
index 6c03084c3..7435f70b2 100644
--- a/app/Controllers/subscriptionController.php
+++ b/app/Controllers/subscriptionController.php
@@ -112,6 +112,19 @@ class FreshRSS_subscription_Controller extends Minz_ActionController {
$feed->_attributes('read_upon_reception', Minz_Request::paramTernary('read_upon_reception'));
$feed->_attributes('clear_cache', Minz_Request::paramTernary('clear_cache'));
+ $cookie = Minz_Request::param('curl_params_cookie', '');
+ $proxy_address = Minz_Request::param('curl_params', '');
+ $proxy_type = Minz_Request::param('proxy_type', '');
+ $opts = [];
+ if ($proxy_address != '' && $proxy_type != '' && in_array($proxy_type, [0, 2, 4, 5, 6, 7])) {
+ $opts[CURLOPT_PROXY] = $proxy_address;
+ $opts[CURLOPT_PROXYTYPE] = intval($proxy_type);
+ }
+ if ($cookie != '') {
+ $opts[CURLOPT_COOKIE] = $cookie;
+ }
+ $feed->_attributes('curl_params', empty($opts) ? null : $opts);
+
if (FreshRSS_Auth::hasAccess('admin')) {
$feed->_attributes('ssl_verify', Minz_Request::paramTernary('ssl_verify'));
$timeout = intval(Minz_Request::param('timeout', 0));
diff --git a/app/Models/Entry.php b/app/Models/Entry.php
index 2f43c19cd..784576455 100644
--- a/app/Models/Entry.php
+++ b/app/Models/Entry.php
@@ -376,7 +376,13 @@ class FreshRSS_Entry extends Minz_Model {
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_ENCODING => '', //Enable all encodings
]);
+
curl_setopt_array($ch, FreshRSS_Context::$system_conf->curl_options);
+
+ if (isset($attributes['curl_params']) && is_array($attributes['curl_params'])) {
+ curl_setopt_array($ch, $attributes['curl_params']);
+ }
+
if (isset($attributes['ssl_verify'])) {
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, $attributes['ssl_verify'] ? 2 : 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, $attributes['ssl_verify'] ? true : false);
diff --git a/app/i18n/cz/sub.php b/app/i18n/cz/sub.php
index 9f8bf0516..eb1fa7607 100644
--- a/app/i18n/cz/sub.php
+++ b/app/i18n/cz/sub.php
@@ -33,6 +33,8 @@ return array(
'username' => 'Přihlašovací jméno',
),
'clear_cache' => 'Always clear cache', // TODO - Translation
+ 'css_cookie' => 'Use Cookies when fetching the article content', // TODO - Translation
+ 'css_cookie_help' => 'Example: <kbd>foo=bar; gdpr_consent=true; cookie=value</kbd>', // TODO - Translation
'css_help' => 'Stáhne zkrácenou verzi RSS kanálů (pozor, náročnější na čas!)',
'css_path' => 'Původní CSS soubor článku z webových stránek',
'description' => 'Popis',
@@ -61,6 +63,8 @@ return array(
'main_stream' => 'Zobrazit ve “Všechny kanály”',
'normal' => 'Show in its category', // TODO - Translation
),
+ 'proxy' => 'Set a proxy for fetching this feed', // TODO - Translation
+ 'proxy_help' => 'Select a protocol (e.g: SOCKS5) and enter the proxy address (e.g: <kbd>127.0.0.1:1080</kbd>)', // TODO - Translation
'selector_preview' => array(
'show_raw' => 'Show source code', // TODO - Translation
'show_rendered' => 'Show content', // TODO - Translation
diff --git a/app/i18n/de/sub.php b/app/i18n/de/sub.php
index 3d28ef492..0adc6de2a 100644
--- a/app/i18n/de/sub.php
+++ b/app/i18n/de/sub.php
@@ -33,6 +33,8 @@ return array(
'username' => 'HTTP-Nutzername',
),
'clear_cache' => 'Nicht cachen (für defekte Feeds)',
+ 'css_cookie' => 'Verwende Cookies beim Herunterladen des Feed-Inhalts mit CSS-Filtern',
+ 'css_cookie_help' => 'Beispiel: <kbd>foo=bar; gdpr_consent=true; cookie=value</kbd>',
'css_help' => 'Ruft bei gekürzten RSS-Feeds den vollständigen Artikelinhalt ab (Achtung, benötigt mehr Zeit!)',
'css_path' => 'CSS-Selektor des Artikelinhaltes auf der Original-Webseite',
'description' => 'Beschreibung',
@@ -61,6 +63,8 @@ return array(
'main_stream' => 'In Haupt-Feeds zeigen',
'normal' => 'Zeige in eigener Kategorie',
),
+ 'proxy' => 'Verwende einen Proxy, um den Feed abzuholen',
+ 'proxy_help' => 'Wähle ein Protokoll (z.B. SOCKS5) und einen Proxy mit Port (z.B. <kbd>127.0.0.1:1080</kbd>)',
'selector_preview' => array(
'show_raw' => 'Quellcode anzeigen',
'show_rendered' => 'Inhalt anzeigen',
diff --git a/app/i18n/en-us/sub.php b/app/i18n/en-us/sub.php
index 0ce87b43f..c8912adff 100644
--- a/app/i18n/en-us/sub.php
+++ b/app/i18n/en-us/sub.php
@@ -33,6 +33,8 @@ return array(
'username' => 'HTTP username',
),
'clear_cache' => 'Always clear cache',
+ 'css_cookie' => 'Use Cookies when fetching the article content', // TODO - Translation
+ 'css_cookie_help' => 'Example: <kbd>foo=bar; gdpr_consent=true; cookie=value</kbd>', // TODO - Translation
'css_help' => 'Retrieves truncated RSS feeds (caution, requires more time!)',
'css_path' => 'Article CSS selector on original website',
'description' => 'Description',
@@ -61,6 +63,8 @@ return array(
'main_stream' => 'Show in main stream',
'normal' => 'Show in its category',
),
+ 'proxy' => 'Set a proxy for fetching this feed', // TODO - Translation
+ 'proxy_help' => 'Select a protocol (e.g: SOCKS5) and enter the proxy address (e.g: <kbd>127.0.0.1:1080</kbd>)', // TODO - Translation
'selector_preview' => array(
'show_raw' => 'Show source code',
'show_rendered' => 'Show content',
diff --git a/app/i18n/en/sub.php b/app/i18n/en/sub.php
index 27fc8be36..92e88e7a1 100644
--- a/app/i18n/en/sub.php
+++ b/app/i18n/en/sub.php
@@ -33,6 +33,8 @@ return array(
'username' => 'HTTP username',
),
'clear_cache' => 'Always clear cache',
+ 'css_cookie' => 'Use Cookies when fetching the article content',
+ 'css_cookie_help' => 'Example: <kbd>foo=bar; gdpr_consent=true; cookie=value</kbd>',
'css_help' => 'Retrieves truncated RSS feeds (caution, requires more time!)',
'css_path' => 'Article CSS selector on original website',
'description' => 'Description',
@@ -61,6 +63,8 @@ return array(
'main_stream' => 'Show in main stream',
'normal' => 'Show in its category',
),
+ 'proxy' => 'Set a proxy for fetching this feed',
+ 'proxy_help' => 'Select a protocol (e.g: SOCKS5) and enter the proxy address (e.g: <kbd>127.0.0.1:1080</kbd>)',
'selector_preview' => array(
'show_raw' => 'Show source code',
'show_rendered' => 'Show content',
diff --git a/app/i18n/es/sub.php b/app/i18n/es/sub.php
index 8003b8c7d..2612e5929 100755
--- a/app/i18n/es/sub.php
+++ b/app/i18n/es/sub.php
@@ -33,6 +33,8 @@ return array(
'username' => 'Nombre de usuario HTTP',
),
'clear_cache' => 'Always clear cache', // TODO - Translation
+ 'css_cookie' => 'Use Cookies when fetching the article content', // TODO - Translation
+ 'css_cookie_help' => 'Example: <kbd>foo=bar; gdpr_consent=true; cookie=value</kbd>', // TODO - Translation
'css_help' => 'Recibir fuentes RSS truncadas (aviso, ¡necesita más tiempo!)',
'css_path' => 'Ruta a la CSS de los artículos en la web original',
'description' => 'Descripción',
@@ -61,6 +63,8 @@ return array(
'main_stream' => 'Mostrar en salida principal',
'normal' => 'Show in its category', // TODO - Translation
),
+ 'proxy' => 'Set a proxy for fetching this feed', // TODO - Translation
+ 'proxy_help' => 'Select a protocol (e.g: SOCKS5) and enter the proxy address (e.g: <kbd>127.0.0.1:1080</kbd>)', // TODO - Translation
'selector_preview' => array(
'show_raw' => 'Show source code', // TODO - Translation
'show_rendered' => 'Show content', // TODO - Translation
diff --git a/app/i18n/fr/sub.php b/app/i18n/fr/sub.php
index 25f668f68..dfb64fb32 100644
--- a/app/i18n/fr/sub.php
+++ b/app/i18n/fr/sub.php
@@ -33,6 +33,8 @@ return array(
'username' => 'Identifiant HTTP',
),
'clear_cache' => 'Toujours vider le cache',
+ 'css_cookie' => 'Utiliser des cookies pour la réception du contenu des articles',
+ 'css_cookie_help' => 'Exemple : <kbd>foo=bar; gdpr_consent=true; cookie=value</kbd>',
'css_help' => 'Permet de récupérer les flux tronqués (attention, demande plus de temps !)',
'css_path' => 'Sélecteur CSS des articles sur le site d’origine',
'description' => 'Description',
@@ -61,6 +63,8 @@ return array(
'main_stream' => 'Afficher dans le flux principal',
'normal' => 'Afficher dans sa catégorie',
),
+ 'proxy' => 'Utiliser un proxy pour télécharger ce flux',
+ 'proxy_help' => 'Sélectionner un protocole (ex : SOCKS5) et entrer l’adresse du proxy (ex. : <kbd>127.0.0.1:1080</kbd>)',
'selector_preview' => array(
'show_raw' => 'Afficher le code source',
'show_rendered' => 'Afficher le contenu',
diff --git a/app/i18n/he/sub.php b/app/i18n/he/sub.php
index 9c563a336..9893a89f8 100644
--- a/app/i18n/he/sub.php
+++ b/app/i18n/he/sub.php
@@ -33,6 +33,8 @@ return array(
'username' => 'HTTP שם משתמש',
),
'clear_cache' => 'Always clear cache', // TODO - Translation
+ 'css_cookie' => 'Use Cookies when fetching the article content', // TODO - Translation
+ 'css_cookie_help' => 'Example: <kbd>foo=bar; gdpr_consent=true; cookie=value</kbd>', // TODO - Translation
'css_help' => 'קבלת הזנות RSS קטומות (זהירות, לוקח זמן רב יותר!)',
'css_path' => 'נתיב הCSS של המאמר באתר המקורי',
'description' => 'תיאור',
@@ -61,6 +63,8 @@ return array(
'main_stream' => 'הצגה בזרם המרכזי',
'normal' => 'Show in its category', // TODO - Translation
),
+ 'proxy' => 'Set a proxy for fetching this feed', // TODO - Translation
+ 'proxy_help' => 'Select a protocol (e.g: SOCKS5) and enter the proxy address (e.g: <kbd>127.0.0.1:1080</kbd>)', // TODO - Translation
'selector_preview' => array(
'show_raw' => 'Show source code', // TODO - Translation
'show_rendered' => 'Show content', // TODO - Translation
diff --git a/app/i18n/it/sub.php b/app/i18n/it/sub.php
index cbcba647b..ad1303b22 100644
--- a/app/i18n/it/sub.php
+++ b/app/i18n/it/sub.php
@@ -33,6 +33,8 @@ return array(
'username' => 'HTTP username', // TODO - Translation
),
'clear_cache' => 'Always clear cache', // TODO - Translation
+ 'css_cookie' => 'Use Cookies when fetching the article content', // TODO - Translation
+ 'css_cookie_help' => 'Example: <kbd>foo=bar; gdpr_consent=true; cookie=value</kbd>', // TODO - Translation
'css_help' => 'In caso di RSS feeds troncati (attenzione, richiede molto tempo!)',
'css_path' => 'Percorso del foglio di stile CSS del sito di origine',
'description' => 'Descrizione',
@@ -61,6 +63,8 @@ return array(
'main_stream' => 'Mostra in homepage',
'normal' => 'Show in its category', // TODO - Translation
),
+ 'proxy' => 'Set a proxy for fetching this feed', // TODO - Translation
+ 'proxy_help' => 'Select a protocol (e.g: SOCKS5) and enter the proxy address (e.g: <kbd>127.0.0.1:1080</kbd>)', // TODO - Translation
'selector_preview' => array(
'show_raw' => 'Show source code', // TODO - Translation
'show_rendered' => 'Show content', // TODO - Translation
diff --git a/app/i18n/kr/sub.php b/app/i18n/kr/sub.php
index ff80f5a5b..73ca3ff2f 100644
--- a/app/i18n/kr/sub.php
+++ b/app/i18n/kr/sub.php
@@ -33,6 +33,8 @@ return array(
'username' => 'HTTP 사용자 이름',
),
'clear_cache' => '항상 캐시 지우기',
+ 'css_cookie' => 'Use Cookies when fetching the article content', // TODO - Translation
+ 'css_cookie_help' => 'Example: <kbd>foo=bar; gdpr_consent=true; cookie=value</kbd>', // TODO - Translation
'css_help' => '글의 일부가 포함된 RSS 피드를 가져옵니다 (주의, 시간이 좀 더 걸립니다!)',
'css_path' => '웹사이트 상의 글 본문에 해당하는 CSS 경로',
'description' => '설명',
@@ -61,6 +63,8 @@ return array(
'main_stream' => '메인 스트림에 표시하기',
'normal' => '피드가 속한 카테고리에만 표시하기',
),
+ 'proxy' => 'Set a proxy for fetching this feed', // TODO - Translation
+ 'proxy_help' => 'Select a protocol (e.g: SOCKS5) and enter the proxy address (e.g: <kbd>127.0.0.1:1080</kbd>)', // TODO - Translation
'selector_preview' => array(
'show_raw' => 'Show source code', // TODO - Translation
'show_rendered' => 'Show content', // TODO - Translation
diff --git a/app/i18n/nl/sub.php b/app/i18n/nl/sub.php
index 9acced002..5ab275db4 100644
--- a/app/i18n/nl/sub.php
+++ b/app/i18n/nl/sub.php
@@ -33,6 +33,8 @@ return array(
'username' => 'HTTP gebruikers naam',
),
'clear_cache' => 'Cache altijd leegmaken',
+ 'css_cookie' => 'Use Cookies when fetching the article content', // TODO - Translation
+ 'css_cookie_help' => 'Example: <kbd>foo=bar; gdpr_consent=true; cookie=value</kbd>', // TODO - Translation
'css_help' => 'Haalt onvolledige RSS-feeds op (attentie, heeft meer tijd nodig!)',
'css_path' => 'CSS-pad van artikelen op originele website',
'description' => 'Omschrijving',
@@ -61,6 +63,8 @@ return array(
'main_stream' => 'Zichtbaar in het overzicht',
'normal' => 'Toon in categorie',
),
+ 'proxy' => 'Set a proxy for fetching this feed', // TODO - Translation
+ 'proxy_help' => 'Select a protocol (e.g: SOCKS5) and enter the proxy address (e.g: <kbd>127.0.0.1:1080</kbd>)', // TODO - Translation
'selector_preview' => array(
'show_raw' => 'Broncode tonen',
'show_rendered' => 'Inhoud tonen',
diff --git a/app/i18n/oc/sub.php b/app/i18n/oc/sub.php
index d8e4ac76e..afd43d592 100644
--- a/app/i18n/oc/sub.php
+++ b/app/i18n/oc/sub.php
@@ -33,6 +33,8 @@ return array(
'username' => 'Identificant HTTP',
),
'clear_cache' => 'Totjorn escafar lo cache',
+ 'css_cookie' => 'Use Cookies when fetching the article content', // TODO - Translation
+ 'css_cookie_help' => 'Example: <kbd>foo=bar; gdpr_consent=true; cookie=value</kbd>', // TODO - Translation
'css_help' => 'Permet de recuperar los fluxes troncats (atencion, demanda mai de temps !)',
'css_path' => 'Selector CSS dels articles sul site d’origina',
'description' => 'Descripcion',
@@ -61,6 +63,8 @@ return array(
'main_stream' => 'Mostar al flux màger',
'normal' => 'Mostar dins sa categoria',
),
+ 'proxy' => 'Set a proxy for fetching this feed', // TODO - Translation
+ 'proxy_help' => 'Select a protocol (e.g: SOCKS5) and enter the proxy address (e.g: <kbd>127.0.0.1:1080</kbd>)', // TODO - Translation
'selector_preview' => array(
'show_raw' => 'Veire lo còdi font',
'show_rendered' => 'Veire lo contengut',
diff --git a/app/i18n/pl/sub.php b/app/i18n/pl/sub.php
index 2980a7168..4817f990c 100644
--- a/app/i18n/pl/sub.php
+++ b/app/i18n/pl/sub.php
@@ -33,6 +33,8 @@ return array(
'username' => 'Użytkownik HTTP',
),
'clear_cache' => 'Zawsze czyść pamięć podręczną',
+ 'css_cookie' => 'Use Cookies when fetching the article content', // TODO - Translation
+ 'css_cookie_help' => 'Example: <kbd>foo=bar; gdpr_consent=true; cookie=value</kbd>', // TODO - Translation
'css_help' => 'Pozwala na ograniczenie zawartości kanałów (uwaga, wymaga więcej czasu!)',
'css_path' => 'Selektor CSS dla wiadomości na pierwotnej stronie',
'description' => 'Opis',
@@ -61,6 +63,8 @@ return array(
'main_stream' => 'Pokaż w kanale głównym',
'normal' => 'Pokaż w kategorii kanału',
),
+ 'proxy' => 'Set a proxy for fetching this feed', // TODO - Translation
+ 'proxy_help' => 'Select a protocol (e.g: SOCKS5) and enter the proxy address (e.g: <kbd>127.0.0.1:1080</kbd>)', // TODO - Translation
'selector_preview' => array(
'show_raw' => 'Pokaż źródło',
'show_rendered' => 'Pokaż zawartość',
diff --git a/app/i18n/pt-br/sub.php b/app/i18n/pt-br/sub.php
index bfd731a69..a7686da63 100644
--- a/app/i18n/pt-br/sub.php
+++ b/app/i18n/pt-br/sub.php
@@ -33,6 +33,8 @@ return array(
'username' => 'Usuário HTTP',
),
'clear_cache' => 'Sempre limpar o cache',
+ 'css_cookie' => 'Use Cookies when fetching the article content', // TODO - Translation
+ 'css_cookie_help' => 'Example: <kbd>foo=bar; gdpr_consent=true; cookie=value</kbd>', // TODO - Translation
'css_help' => 'Retorna RSS feeds truncados (atenção, requer mais tempo!)',
'css_path' => 'Caminho do CSS do artigo no site original',
'description' => 'Descrição',
@@ -61,6 +63,8 @@ return array(
'main_stream' => 'Mostrar na tela principal',
'normal' => 'Mostrar na sua categoria',
),
+ 'proxy' => 'Set a proxy for fetching this feed', // TODO - Translation
+ 'proxy_help' => 'Select a protocol (e.g: SOCKS5) and enter the proxy address (e.g: <kbd>127.0.0.1:1080</kbd>)', // TODO - Translation
'selector_preview' => array(
'show_raw' => 'Mostrar fonte',
'show_rendered' => 'Mostrar conteúdo',
diff --git a/app/i18n/ru/sub.php b/app/i18n/ru/sub.php
index 27234c361..f5dc251c3 100644
--- a/app/i18n/ru/sub.php
+++ b/app/i18n/ru/sub.php
@@ -33,6 +33,8 @@ return array(
'username' => 'HTTP username', // TODO - Translation
),
'clear_cache' => 'Always clear cache', // TODO - Translation
+ 'css_cookie' => 'Use Cookies when fetching the article content', // TODO - Translation
+ 'css_cookie_help' => 'Example: <kbd>foo=bar; gdpr_consent=true; cookie=value</kbd>', // TODO - Translation
'css_help' => 'Retrieves truncated RSS feeds (caution, requires more time!)', // TODO - Translation
'css_path' => 'Article CSS selector on original website', // TODO - Translation
'description' => 'Description', // TODO - Translation
@@ -61,6 +63,8 @@ return array(
'main_stream' => 'Show in main stream', // TODO - Translation
'normal' => 'Show in its category', // TODO - Translation
),
+ 'proxy' => 'Set a proxy for fetching this feed', // TODO - Translation
+ 'proxy_help' => 'Select a protocol (e.g: SOCKS5) and enter the proxy address (e.g: <kbd>127.0.0.1:1080</kbd>)', // TODO - Translation
'selector_preview' => array(
'show_raw' => 'Show source code', // TODO - Translation
'show_rendered' => 'Show content', // TODO - Translation
diff --git a/app/i18n/sk/sub.php b/app/i18n/sk/sub.php
index 68df8c6f3..973220547 100644
--- a/app/i18n/sk/sub.php
+++ b/app/i18n/sk/sub.php
@@ -33,6 +33,8 @@ return array(
'username' => 'Používateľské meno pre HTTP',
),
'clear_cache' => 'Vždy vymazať vyrovnávaciu pamäť',
+ 'css_cookie' => 'Use Cookies when fetching the article content', // TODO - Translation
+ 'css_cookie_help' => 'Example: <kbd>foo=bar; gdpr_consent=true; cookie=value</kbd>', // TODO - Translation
'css_help' => 'Stiahnuť skrátenú verziu RSS kanála (pozor, vyžaduje viac času!)',
'css_path' => 'Pôvodný CSS súbor článku z webovej stránky',
'description' => 'Popis',
@@ -61,6 +63,8 @@ return array(
'main_stream' => 'Zobraziť v prehľade kanálov',
'normal' => 'Zobraziť vo svojej kategórii',
),
+ 'proxy' => 'Set a proxy for fetching this feed', // TODO - Translation
+ 'proxy_help' => 'Select a protocol (e.g: SOCKS5) and enter the proxy address (e.g: <kbd>127.0.0.1:1080</kbd>)', // TODO - Translation
'selector_preview' => array(
'show_raw' => 'Show source code', // TODO - Translation
'show_rendered' => 'Show content', // TODO - Translation
diff --git a/app/i18n/tr/sub.php b/app/i18n/tr/sub.php
index c1da28d42..0507cad9f 100644
--- a/app/i18n/tr/sub.php
+++ b/app/i18n/tr/sub.php
@@ -33,6 +33,8 @@ return array(
'username' => 'HTTP kullanıcı adı',
),
'clear_cache' => 'Always clear cache', // TODO - Translation
+ 'css_cookie' => 'Use Cookies when fetching the article content', // TODO - Translation
+ 'css_cookie_help' => 'Example: <kbd>foo=bar; gdpr_consent=true; cookie=value</kbd>', // TODO - Translation
'css_help' => 'Dikkat, daha çok zaman gerekir!',
'css_path' => 'Makaleleri kendi CSS görünümü ile göster',
'description' => 'Tanım',
@@ -61,6 +63,8 @@ return array(
'main_stream' => 'Ana akışda göster',
'normal' => 'Show in its category', // TODO - Translation
),
+ 'proxy' => 'Set a proxy for fetching this feed', // TODO - Translation
+ 'proxy_help' => 'Select a protocol (e.g: SOCKS5) and enter the proxy address (e.g: <kbd>127.0.0.1:1080</kbd>)', // TODO - Translation
'selector_preview' => array(
'show_raw' => 'Show source code', // TODO - Translation
'show_rendered' => 'Show content', // TODO - Translation
diff --git a/app/i18n/zh-cn/sub.php b/app/i18n/zh-cn/sub.php
index ae427575f..1593a77ae 100644
--- a/app/i18n/zh-cn/sub.php
+++ b/app/i18n/zh-cn/sub.php
@@ -33,6 +33,8 @@ return array(
'username' => 'HTTP 用户名',
),
'clear_cache' => '总是清除缓存',
+ 'css_cookie' => 'Use Cookies when fetching the article content', // TODO - Translation
+ 'css_cookie_help' => 'Example: <kbd>foo=bar; gdpr_consent=true; cookie=value</kbd>', // TODO - Translation
'css_help' => '用于获取全文(注意,这将耗费更多时间!)',
'css_path' => '原文的 CSS 选择器',
'description' => '描述',
@@ -61,6 +63,8 @@ return array(
'main_stream' => '在首页中显示',
'normal' => '在分类中显示',
),
+ 'proxy' => 'Set a proxy for fetching this feed', // TODO - Translation
+ 'proxy_help' => 'Select a protocol (e.g: SOCKS5) and enter the proxy address (e.g: <kbd>127.0.0.1:1080</kbd>)', // TODO - Translation
'selector_preview' => array(
'show_raw' => '显示源码',
'show_rendered' => '显示内容',
diff --git a/app/views/helpers/feed/update.phtml b/app/views/helpers/feed/update.phtml
index 002298b06..184d78114 100644
--- a/app/views/helpers/feed/update.phtml
+++ b/app/views/helpers/feed/update.phtml
@@ -287,6 +287,42 @@
</div>
<div class="form-group">
+ <label class="group-name" for="path_entries"><?= _t('sub.feed.css_cookie') ?></label>
+ <div class="group-controls">
+ <div class="stick">
+ <input type="text" name="curl_params_cookie" id="curl_params_cookie" class="extend" value="<?=
+ is_array($this->feed->attributes('curl_params')) && !empty($this->feed->attributes('curl_params')[CURLOPT_COOKIE]) ?
+ $this->feed->attributes('curl_params')[CURLOPT_COOKIE] : ''
+ ?>" placeholder="<?= _t('gen.short.blank_to_disable') ?>" />
+ </div>
+ <p class="help"><?= _i('help') ?> <?= _t('sub.feed.css_cookie_help') ?></p>
+ </div>
+ </div>
+
+ <div class="form-group">
+ <label class="group-name" for="path_entries"><?= _t('sub.feed.proxy') ?></label>
+ <div class="group-controls">
+ <select class="number" name="proxy_type" id="proxy_type"><?php
+ $type = '';
+ if (is_array($this->feed->attributes('curl_params')) && isset($this->feed->attributes('curl_params')[CURLOPT_PROXYTYPE])) {
+ $type = $this->feed->attributes('curl_params')[CURLOPT_PROXYTYPE];
+ }
+ foreach(['' => '', 3 => 'NONE', 0 => 'HTTP', 2 => 'HTTPS', 4 => 'SOCKS4', 6 => 'SOCKS4A', 5 => 'SOCKS5', 7 => 'SOCKS5H'] as $k => $v) {
+ echo '<option value="' . $k . ($type === $k ? '" selected="selected' : '' ) . '">' . $v . '</option>';
+ }
+ ?>
+ </select>
+ <div class="stick">
+ <input type="text" name="curl_params" id="curl_params" class="extend" value="<?=
+ is_array($this->feed->attributes('curl_params')) && !empty($this->feed->attributes('curl_params')[CURLOPT_PROXY]) ?
+ $this->feed->attributes('curl_params')[CURLOPT_PROXY] : ''
+ ?>" placeholder="<?= _t('gen.short.blank_to_disable') ?>" />
+ </div>
+ <p class="help"><?= _i('help') ?> <?= _t('sub.feed.proxy_help') ?></p>
+ </div>
+ </div>
+
+ <div class="form-group">
<label class="group-name" for="mark_updated_article_unread"><?= _t('conf.reading.mark_updated_article_unread') ?></label>
<div class="group-controls">
<label class="checkbox" for="mark_updated_article_unread">
diff --git a/lib/lib_rss.php b/lib/lib_rss.php
index aaa644faf..d734f722c 100644
--- a/lib/lib_rss.php
+++ b/lib/lib_rss.php
@@ -187,6 +187,11 @@ function customSimplePie($attributes = array()) {
$curl_options[CURLOPT_SSL_CIPHER_LIST] = 'DEFAULT@SECLEVEL=1';
}
}
+ if (!empty($attributes['curl_params']) && is_array($attributes['curl_params'])) {
+ foreach ($attributes['curl_params'] as $co => $v) {
+ curl_setopt($ch, $co, $v);
+ }
+ }
$simplePie->set_curl_options($curl_options);
$simplePie->strip_comments(true);