From ee175dd6169a016fc898fac62d046e22c205dec0 Mon Sep 17 00:00:00 2001 From: Eris <36680203+printfuck@users.noreply.github.com> Date: Sat, 16 Jan 2021 16:32:18 -0500 Subject: 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 Co-authored-by: Aeris Co-authored-by: Alexandre Alapetite --- app/Controllers/subscriptionController.php | 13 +++++++++++ app/Models/Entry.php | 6 +++++ app/i18n/cz/sub.php | 4 ++++ app/i18n/de/sub.php | 4 ++++ app/i18n/en-us/sub.php | 4 ++++ app/i18n/en/sub.php | 4 ++++ app/i18n/es/sub.php | 4 ++++ app/i18n/fr/sub.php | 4 ++++ app/i18n/he/sub.php | 4 ++++ app/i18n/it/sub.php | 4 ++++ app/i18n/kr/sub.php | 4 ++++ app/i18n/nl/sub.php | 4 ++++ app/i18n/oc/sub.php | 4 ++++ app/i18n/pl/sub.php | 4 ++++ app/i18n/pt-br/sub.php | 4 ++++ app/i18n/ru/sub.php | 4 ++++ app/i18n/sk/sub.php | 4 ++++ app/i18n/tr/sub.php | 4 ++++ app/i18n/zh-cn/sub.php | 4 ++++ app/views/helpers/feed/update.phtml | 36 ++++++++++++++++++++++++++++++ lib/lib_rss.php | 5 +++++ 21 files changed, 128 insertions(+) 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: foo=bar; gdpr_consent=true; cookie=value', // 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: 127.0.0.1:1080)', // 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: foo=bar; gdpr_consent=true; cookie=value', '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. 127.0.0.1:1080)', '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: foo=bar; gdpr_consent=true; cookie=value', // 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: 127.0.0.1:1080)', // 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: foo=bar; gdpr_consent=true; cookie=value', '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: 127.0.0.1:1080)', '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: foo=bar; gdpr_consent=true; cookie=value', // 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: 127.0.0.1:1080)', // 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 : foo=bar; gdpr_consent=true; cookie=value', '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. : 127.0.0.1:1080)', '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: foo=bar; gdpr_consent=true; cookie=value', // 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: 127.0.0.1:1080)', // 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: foo=bar; gdpr_consent=true; cookie=value', // 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: 127.0.0.1:1080)', // 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: foo=bar; gdpr_consent=true; cookie=value', // 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: 127.0.0.1:1080)', // 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: foo=bar; gdpr_consent=true; cookie=value', // 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: 127.0.0.1:1080)', // 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: foo=bar; gdpr_consent=true; cookie=value', // 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: 127.0.0.1:1080)', // 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: foo=bar; gdpr_consent=true; cookie=value', // 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: 127.0.0.1:1080)', // 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: foo=bar; gdpr_consent=true; cookie=value', // 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: 127.0.0.1:1080)', // 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: foo=bar; gdpr_consent=true; cookie=value', // 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: 127.0.0.1:1080)', // 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: foo=bar; gdpr_consent=true; cookie=value', // 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: 127.0.0.1:1080)', // 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: foo=bar; gdpr_consent=true; cookie=value', // 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: 127.0.0.1:1080)', // 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: foo=bar; gdpr_consent=true; cookie=value', // 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: 127.0.0.1:1080)', // 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 @@ -286,6 +286,42 @@ +
+ +
+
+ +
+

+
+
+ +
+ +
+ +
+ +
+

+
+
+
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); -- cgit v1.2.3