aboutsummaryrefslogtreecommitdiff
path: root/lib
AgeCommit message (Collapse)Author
2021-02-05Add a method to retrieve a configuration value (#3422)Gravatar Alexis Degrugillier
This will simplify extension code by removing a lot of logic from the extension itself when it's not needed. I've tested it on one of my extension with all the other recent extension modifications and I could remove half of the code needed before.
2021-02-02Fix user configuration in extension (#3412)Gravatar Alexis Degrugillier
Before, only one extension could be configured at a time. Thus we were loosing the configuration for other extensions when saving. Now, each extension can be saved without overriding data. See #3397
2021-02-02Add comprehensive user configuration in extensions (#3397)Gravatar Alexis Degrugillier
Before, the extension configuration was handled by its author. There was discrepancies between extensions on how the configuration was stored. Now, we could rely on a single way of storing configuration. This won't invalidate how the extensions are storing their configuration but will allow authors to focus on what is important.
2021-01-31PHP8: SimplePie wrong use of isset (#3404)Gravatar Alexandre Alapetite
#fix https://github.com/FreshRSS/FreshRSS/issues/3401 (crash with PHP 8+) `ceil()` crashes in PHP8+ in case of invalid input such as empty string. `intval()` fixes the problem with almost identical behaviour than `ceil()` in PHP7- (except for floating point values) #fix FreshRSS/FreshRSS#3401 (crash with PHP 8+) Example with feed http://podcast.hr2.de/derTag/podcast.xml ```xml <enclosure url="https://mp3podcasthr-a.akamaihd.net:443/mp3/podcast/derTag/derTag_20210129_87093232.mp3" length="" type="audio/mpeg"/> ``` `isset("")` passes and then `ceil("")` crashes due to wrong type in PHP8+: ``` Uncaught TypeError: ceil(): Argument #1 ($num) must be of type int|float, string given in ./SimplePie/SimplePie/Item.php:2871 ``` Upstream patch https://github.com/simplepie/simplepie/pull/670
2021-01-30Explicit PDO::ERRMODE_SILENT (#3408)Gravatar Alexandre Alapetite
`PDO::ERRMODE_SILENT` is the default value https://php.net/pdo.error-handling We just make it explicit #fix https://github.com/FreshRSS/FreshRSS/issues/3402 But in the issue above, it looks like it is in `PDO::ERRMODE_EXCEPTION` mode
2021-01-17Curlopt fixes (#3381)Gravatar Eris
* sort results in find() method * Update lib/lib_phpQuery.php Co-Authored-By: Alexandre Alapetite <alexandre@alapetite.fr> * Update lib/lib_phpQuery.php Co-Authored-By: Alexandre Alapetite <alexandre@alapetite.fr> * Fix fetching articles Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
2021-01-16CURLOPT parameters per feed (#3367)Gravatar Eris
* 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>
2021-01-14Add constant for PHP requirements (#3369)Gravatar Alexis Degrugillier
* Add constant for PHP requirements This new constant is used for PHP version check. This way, we won't forget to modify some part of the code base. * Remove PHP version checks Some checks were obsolete because they were checking unsupported PHP versions.
2021-01-11Possiblity to autoinstall in Docker Compose (#3353)Gravatar Alexandre Alapetite
* Possiblity to autoinstall in Docker Compose #fix https://github.com/FreshRSS/FreshRSS/issues/3349 It is simply calling our existing CLI: do-install.php and create-user.php https://github.com/FreshRSS/FreshRSS/tree/master/cli FreshRSS will typically be ready a few seconds before the database, so introduce a tolerance when the database is not available / up (yet) by trying a few times to connect. Also useful to avoid service interruption when DB service is restarted. Example: ```yml freshrss-app: image: freshrss/freshrss container_name: freshrss-app hostname: freshrss-app restart: unless-stopped ports: - "8080:80" depends_on: - freshrss-db volumes: - data:/var/www/FreshRSS/data - extensions:/var/www/FreshRSS/extensions environment: CRON_MIN: '*/20' FRESHRSS_ENV: development FRESHRSS_INSTALL: |- --api_enabled --base_url https://rss.example.net --db-base freshrss --db-host freshrss-db --db-password freshrss --db-type pgsql --db-user freshrss --default_user admin --language en FRESHRSS_USER: |- --api_password freshrss --email user@example.net --language en --password freshrss --user admin TZ: Europe/Paris ``` * Minor type f in find * shellcheck
2021-01-09Add class autoload for extension (#3350)Gravatar Alexis Degrugillier
When an extension defines an `autoload` method, it will be registered automatically before enabling the extension. For the extension creator, it's easier because there is no need to register it manually.
2021-01-07two new hooks (#3342)Gravatar Clemens Neubauer
* add two new hooks I develop a new extension and i need 2 new hooks for it * update EN documentation * Correct typing errors * Update app/views/helpers/javascript_vars.phtml Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
2021-01-07Change base extension class type (#3333)Gravatar Alexis Degrugillier
Before, there were some guidelines on how to use the extension class and how to extend it. Those guidelines were defined as comments. Now, those guidelines are enforced by the code itself. There is no need for those comments anymore.
2021-01-04Add a deprecation log error for extensions (#3335)Gravatar Alexis Degrugillier
Extensions must override some parent methods. The rule is just a guideline because only described in comments. The idea is to deprecate that flexibility and add it to the code. To warn users beforehand, we log error message regarding incomplete extensions. See #3333
2021-01-03Fix author search link (#3315)Gravatar Alexis Degrugillier
Before, when clicking on the author link, the search was done on the main stream in the normal view. It's fine until the feed is not visible in the main stream. Now, the current context is used along with the search. See #3314
2021-01-02Avoid manual initialisations of system or user configuration (#3070)Gravatar Alexandre Alapetite
* Avoid manual intialisations of system or user configuration More consistent use of Context * Simplify FreshRSS_Context::initUser * Remove a few manual get_user_configuration * A bit of debugging * Fix context user init * Fix install * Fix concurrency Concurrent requests could lead to bad race condition * Fix actualize cron Fix case when system i initialised several times
2021-01-02Add temp folder check during install (#3312)Gravatar Alexis Degrugillier
Before, the temp path was not check during install. With some configuration, FRSS was not working because of a non-writable temp directory. It happened with XAMPP on MacOS X but it might be the case for other platforms. Now, the temp path is checked during install to make sure it is writable. See #3310
2020-12-29Remove Minz validation during install. (#3302)Gravatar Alexis Degrugillier
As FRSS always comes with Minz, there is no need to validate that it is there during install. If it turns out we need to validate that, we might need to validate other libraries as well.
2020-12-29Add a file for each PDO class (#3301)Gravatar Alexis Degrugillier
Before, we had 5 classes in the ModelPdo file. It was bad for 2 reasons. The first reason is that it is considered bad practice to have multiple class in one file. This is especially true when using autoloading. On top of that it is less readable considering the size of the file. The second reason is that so far we were lucky. Everytime we needed to access the database, it was through the ModelPdo class which loads all the other classes. If we want to access directly the connection, it wont be loaded. On top of that, the system is configured to work on a single database, but as we have every connection definition in a single file, all classes were loaded at the same time. Thus using memory and processing time for nothing. Now, we have a file for each class. To work with autoloading, classes were slightly renamed to match autoloading rules.
2020-12-28Revert "Add a file for each PDO class (#3297)"Gravatar Alexandre Alapetite
This reverts commit e1ee58816ba76734e4115fc12898b13de665b220.
2020-12-28Revert "Extract autoloading process (#3283)"Gravatar Alexandre Alapetite
This reverts commit 46cb89adf842e2fbac254fc99355d6577e4e86eb.
2020-12-28Add a file for each PDO class (#3297)Gravatar Alexis Degrugillier
Before, we had 5 classes in the ModelPdo file. It was bad for 2 reasons. The first reason is that it is considered bad practice to have multiple class in one file. This is especially true when using autoloading. On top of that it is less readable considering the size of the file. The second reason is that so far we were lucky. Everytime we needed to access the database, it was through the ModelPdo class which loads all the other classes. If we want to access directly the connection, it wont be loaded. On top of that, the system is configured to work on a single database, but as we have every connection definition in a single file, all classes were loaded at the same time. Thus using memory and processing time for nothing. Now, we have a file for each class. To work with autoloading, classes were slightly renamed to match autoloading rules.
2020-12-28SimplePie Strip comments (#3288)Gravatar Alexandre Alapetite
#fix https://github.com/FreshRSS/FreshRSS/issues/3282 (workaround an nginx configuration bug) We do not need to keep HTML comments in RSS content.
2020-12-26Extract autoloading process (#3283)Gravatar Alexis Degrugillier
* Extract autoloading process The process sits in its own file now to ease future improvements. * Change the autoload process Before, the autoload process was too restricted. It was really dependant on our code tree. It was hard to add more classes to be loaded automatically. On top of that, it did not support autoloading classes following the PSR-4 recommendation. Now, the autoload process is more open. It supports partially the PSR-4 recommendation, there is no specific code to load Minz classes or PHPMailer classes. This is the starting point to reorganize the codebase to introduce long waiting changes as seen in #789. It would be a nice to later rework the tree, rename classes, and add namespace in a fashion that follows the PSR-4. Then specific FRSS workarounds in the autoload could be dropped.
2020-12-12Session compatibility PHP 7.1 and older (#3273)Gravatar Alexandre Alapetite
#fix https://github.com/FreshRSS/FreshRSS/issues/3239 Reason: https://php.net/session-write-close used to return void and not boolean before PHP 7.2
2020-11-11Fix initI18n (#3249)Gravatar Alexandre Alapetite
* Fix initI18n #fix https://github.com/FreshRSS/FreshRSS/issues/3246#issuecomment-725463337 #fix https://github.com/FreshRSS/FreshRSS/issues/3136 It was due to calling `initI18n()` before `FreshRSS_Context` is intialised in some situations Introduced by https://github.com/FreshRSS/FreshRSS/pull/3022 Will be better fixed when https://github.com/FreshRSS/FreshRSS/pull/3070 lands * Fallback condition
2020-10-11Fix sanitize feed description (#3222)Gravatar Alexandre Alapetite
* Fix sanitize feed description #fix https://github.com/FreshRSS/FreshRSS/issues/3221 * Simplification
2020-10-06Minz allow parallel sessions (#3096)Gravatar Alexandre Alapetite
* Minz allow parallel sessions #fix https://github.com/FreshRSS/FreshRSS/issues/3093 * Array optimisation * Array optimisation missing * Reduce direct access to $_SESSION except in install process * Fix session start headers warning * Use cookie only the first time the session is started: `PHP Warning: session_start(): Cannot start session when headers already sent in /var/www/FreshRSS/lib/Minz/Session.php on line 39` * New concept of volatile session for API calls Optimisation: do not use cookies or local storage at all for API calls without a Web session Fix warning: ``` PHP Warning: session_destroy(): Trying to destroy uninitialized session in Unknown on line 0 ``` * Only call Minz_Session::init once in our index It was called twice (once indirectly via FreshRSS->init()) * Whitespace * Mutex for notifications Implement mutex for notifications https://github.com/FreshRSS/FreshRSS/pull/3208#discussion_r499509809 * Typo * Install script is not ready for using Minz_Session
2020-10-05Minz: Attach a notification to a request (#3208)Gravatar Alexandre Alapetite
* Minz: Attach a notification to a request Notifications should be attached to a request, not to a global session. Fix https://github.com/FreshRSS/FreshRSS/pull/3096#issuecomment-654891906 Prepare https://github.com/FreshRSS/FreshRSS/pull/3096 * Rename array * Avoid string constants Implement https://github.com/FreshRSS/FreshRSS/pull/3208#issuecomment-703243863 * Improved logic * Simplify storage https://github.com/FreshRSS/FreshRSS/pull/3208#discussion_r499511213 * Fix notification bug in configuration/system
2020-10-03Minz: support PHP8 lint (#3207)Gravatar Alexandre Alapetite
* Minz: support PHP8 lint Fix PHP8 Fatal error: Declaration of MinzPDO::query($statement) must be compatible with PDO::query(string $query, ?int $fetch_mode = null, mixed ...$fetch_mode_args) in /FreshRSS/lib/Minz/ModelPdo.php on line 159 Errors parsing /FreshRSS/lib/Minz/ModelPdo.php * Fix argument name * Please phpcs in Travis
2020-10-03Update SimplePie (PHP8) (#3206)Gravatar Alexandre Alapetite
Contributes to https://github.com/FreshRSS/FreshRSS/issues/3082 Includes https://github.com/FreshRSS/FreshRSS/pull/3180 Differences: https://github.com/simplepie/simplepie/compare/aaad78e6da098e14bec4fec552b3a2dbca7a2d45...692e8bc19bc4aca20b57474cca2a1d234ce89d63
2020-10-03lib_phpQuery support PHP 8 (#3186)Gravatar Prashant Tholia
* Update to support PHP 8 Replaced create_function calls with anonymous functions in lib/lib_phpQuery.php Ref Issue: #3082 * Remove commented code blocks * White space * More PHP8 fixes Fix: Fatal error: Array and string offset access syntax with curly braces is no longer supported in /FreshRSS/lib/lib_phpQuery.php on line 2174, etc. Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
2020-09-17SimplePie: Fix HTTP 301 permanent redirection (#3180)Gravatar Alexandre Alapetite
* SimplePie: Fix HTTP 301 permanent redirection When adding feeds it worked fine, but detecting permanent redirects for existing feeds was sometimes broken (only when PHP open_basedir was not set). Indeed, using the built-in CURLOPT_FOLLOWLOCATION instead of the manual method in SimplePie hides the list of HTTP redirects along the way, and prevents the distinction of e.g. 301 vs. 302 redirects. This patch disables CURLOPT_FOLLOWLOCATION in SimplePie, and fixes the manual method at the same time. The use of CURLOPT_FOLLOWLOCATION was nevertheless not systematic (only when open_basedir was not set), so now there is only one logic independent of open_basedir. I will send a PR upstream to SimplePie. How to test: pick a feed with 301 redirection such as HTTP to HTTPS, e.g. http://ing.dk/rss/term/341 Manually change back to previous address (to simulate a feed that is changing address) Refresh feed and observe whether the 301 redirect is obeyed. * Wrong blank
2020-09-03When ssl_verify is false, decrease SSL security (#3171)Gravatar Alexandre Alapetite
When ssl_verify option is set to false for a feed, allow lower security such as SHA-1 signatures. https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=900984 https://stackoverflow.com/questions/58342699/php-curl-curl-error-35-error1414d172ssl-routinestls12-check-peer-sigalgwr Fix error of type `cURL error 35: error:1414D172:SSL routines:tls12_check_peer_sigalg:wrong signature` Example of feeds: https://www.version2.dk/it-nyheder/rss https://ing.dk/rss/nyheder
2020-07-31Relaxed to allow underscore _ in URL hostnames (#3133)Gravatar Alexandre Alapetite
* Relaxed to allow underscore _ in URL hostnames #fix https://github.com/FreshRSS/FreshRSS/issues/3132 https://bugs.php.net/bug.php?id=64948 * Minor fix in favicons redirect * Minor fix in relative HREF for favicons
2020-07-14Add a way to disable shortcuts (#3114)Gravatar Alexis Degrugillier
When the user do not want to use a shortcut, he can let the shortcut value empty. This will save an empty configuration thus disabling the shortcut. The load default action allows to use default shortcut only for disabled shortcuts. See #3110
2020-07-14fix: Test setupMigrations doesn't return false (#3113)Gravatar Marien Fressinaud
`file_put_contents` can return 0 if there’s nothing to write in the `applied_migrations.txt` file, which is equivalent to `false`. Since there are no migrations yet, this is what happens. Because this value (i.e. `0`) is tested next in the `app/install.php` file, the install script was failing.
2020-07-08Add a migration system (#2760)Gravatar Marien Fressinaud
* Add a Minz_Migrator class Until now, we updated the database structure somewhere in the code but it wasn't always consistent and somehow complicated to find. Also, this code was always checked for nothing. The Migrator aims to improve and ease the creation of migrations. It should improve the way we apply the updates, making the update server almost useless. References: - example of migration (before Migrator): https://github.com/FreshRSS/FreshRSS/commit/cc0db9af4f980829faa4bf0960617807b32fb4fa#diff-11a53443fa81512b128c66b065df0679R10 - update server: https://github.com/FreshRSS/update.freshrss.org - PR moving the code of the update server to the core: https://github.com/FreshRSS/FreshRSS/pull/1760 * Automatically apply migrations For now, administrators are used to have nothing to do during an update else than getting the new code. I suggest to keep this behaviour and automatically apply migrations if we detect new ones. Another solution would be to create a CLI command and ask admins to call it after getting the new code. It could hide migrations errors to end users, but admin can forget to apply migrations since there are not used to it. * Add documentation for Minz Migrator * Execute migrations even if next ones are applied * Change mechanism to prevent multiple update at once * Use mkdir to create the lock and to test it exists Reference: https://stackoverflow.com/a/731634 * Append .lock to applied_migrations_path There are no needs to define another file to serve as a lock. * Change migrations naming convention * Apply suggestions from code review Co-Authored-By: Alexandre Alapetite <alexandre@alapetite.fr> * Perform a low-cost migration versions comparaison * Clarify version numbers concerning the migration system Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
2020-06-05Add language detection when the user is not logged in (#3022)Gravatar Alexis Degrugillier
Before, when the user was not logged in, pages where translated with the '_' user language. Now, they are translated with the user preferred language if there is one supported by FreshRSS or with the system default language.
2020-06-01Updates PHPMailer to 6.1.6 (#3024)Gravatar Brooke
* Update PHPMailer to 6.1.6 Fixes a security issue in PHPMailer 6.1.5 and earlier * Remove .DS_Store
2020-05-29Fix PostgreSQL database auto-create with limited rights (#3013)Gravatar Alexandre Alapetite
* Fix PostgreSQL database auto-create with limited rights #fix https://github.com/FreshRSS/FreshRSS/issues/3009 Install would fail if the user is not even allowed to connect to the default `postgres` database. * Confused by custom Minz_PDOConnectionException
2020-05-18Update/php mailer (#2980)Gravatar Brooke
* Update PHPMailer to 6.1.5 This PR update the bundled version of PHPMAiler
2020-05-16Relaxed OPML - allow other elements than outline (#2983)Gravatar Alexandre Alapetite
#fix https://github.com/FreshRSS/FreshRSS/issues/2981 Relax OPML
2020-05-14Improve logs during cron actualization (#2964)Gravatar Alexandre Alapetite
For https://github.com/FreshRSS/FreshRSS/issues/2952#issuecomment-626218921 And fix a little bug writing logs with the wrong user name
2020-04-04sort results in find() method (#2874)Gravatar Eris
* sort results in find() method * Update lib/lib_phpQuery.php Co-Authored-By: Alexandre Alapetite <alexandre@alapetite.fr>
2020-04-01Minor SimplePie merge (#2870)Gravatar Alexandre Alapetite
https://github.com/FreshRSS/FreshRSS/pull/2852 was merged upstream https://github.com/simplepie/simplepie/pull/643 Follow-up of https://github.com/FreshRSS/FreshRSS/pull/2814
2020-04-01Fix fetch content for complex HEAD (#2867)Gravatar Alexandre Alapetite
* Fix contentSelectorPreviewAction Was not compatible with https://github.com/FreshRSS/FreshRSS/pull/2588 * Fix lib_phpQuery for <head ...> #fix https://github.com/FreshRSS/FreshRSS/issues/2864 * Replace split() by explode() for PHP7 compatibility https://php.net/str-split * Fix for document with a `<head>` tag more complicated, like `<head profile="http://www.w3.org/1999/xhtml/vocab">`
2020-03-28SimplePie use distint cache for force_feed (#2852)Gravatar Alexandre Alapetite
#fix https://github.com/FreshRSS/FreshRSS/issues/2524 In general, we should avoid using the same cache for feeds that are fetched with distinct parameters / settings.. PR upstream to SimplePie https://github.com/simplepie/simplepie/pull/643
2020-03-22Add core extension for Google Groups (#2838)Gravatar Alexandre Alapetite
* Add core extension for Google Groups #Fix https://github.com/FreshRSS/FreshRSS/issues/2835 Add ability to discover RSS feeds for Google Groups Based on https://github.com/FreshRSS/FreshRSS/pull/2837 * Allow HTTP in addition of HTTPS
2020-03-22New core-extensions to allow Docker volumes for third-party extensions (#2837)Gravatar Alexandre Alapetite
* New core-extensions to allow Docker volumes for third-party extensions #Fix https://github.com/FreshRSS/FreshRSS/issues/2650 Split our extensions directory into two: 1) Core extensions shipped with FreshRSS in ./lib/core-extensions/ 2) Third-party extensions modified by end-users in ./extensions/ which can easily be mounted as a Docker volume * Example of Docker Compose with extensions * Back-compatibility + fix array merge bug
2020-02-29SimplePie 1.5.4 (#2814)Gravatar Alexandre Alapetite
https://github.com/simplepie/simplepie/compare/1.5.3..a72e1dfafe7870affdae3edf0d9a494e4fa31bc6 Follow up of the update to 1.5.3 https://github.com/FreshRSS/FreshRSS/pull/2702 Requires PHP 5.6+ https://github.com/FreshRSS/FreshRSS/pull/2527#issuecomment-592952451