Commit Graph

133 Commits

Author SHA1 Message Date
Alexandre Alapetite
6887ba0592 API fix continuation type (#3250)
#fix https://github.com/FreshRSS/FreshRSS/issues/3247
2020-11-12 09:36:33 +01:00
Alexandre Alapetite
191cda42e6 Misc. minor
Whitespace...
2020-10-11 10:59:43 +02:00
Alexandre Alapetite
0319cc9d23 Minz allow parallel sessions (#3096)
* 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-06 23:19:45 +02:00
Alexandre Alapetite
5bb47918e3 API Compatbility Reeder (#3073)
#fix
https://github.com/FreshRSS/FreshRSS/issues/3031#issuecomment-646973334
Reeder sends e.g. `feed/feed/247`
2020-06-20 22:46:27 +02:00
Alexandre Alapetite
a0256023a1 API discard common Path Info errors (#3061)
Some apps auto-complete `/api/greader.php` while some do not.
Discard common errors instead of failing, to be more user-friendly.
E.g. if the user types the full API URL in Readrops https://github.com/FreshRSS/FreshRSS/issues/3059#issuecomment-644149548
2020-06-19 23:01:51 +02:00
Alexis Degrugillier
caeb660f29 Add a way to disable/enable users (#3056)
If you want to block users without deleting their account, you can now
disable them from the interface.
2020-06-14 19:50:09 +02:00
Alexandre Alapetite
e6105fdf61 Fix API quickadd (#3051)
* Fix API quickadd

#fix https://github.com/FreshRSS/FreshRSS/issues/3049

* Response query, streamName
2020-06-13 00:21:35 +02:00
Alexandre Alapetite
83b5944dcb Stream instead of memory copy of SimplePie entries (#2972)
* Stream instead of memory copy of SimplePie entries

https://github.com/FreshRSS/FreshRSS/issues/2952

* Undo lines delete

* Typo

* Remove unaccessible code

https://github.com/FreshRSS/FreshRSS/pull/2972/files#r425624163

* Back-compatibility for Feed->entries

https://github.com/FreshRSS/FreshRSS/pull/2972/files#r425631913
2020-05-17 00:04:51 +02:00
Alexandre Alapetite
17539668ea Fix bad relogging clients (#2961)
* Fix bad relogging clients

Some clients (like EasyRSS) are still using the old HTTP Authorization
header after having logged to log in with another user.
We should not attempt to process Authorization headers during a login
request

* Typo

* A bit safer

Avoid null exception
2020-05-08 21:54:45 +02:00
Alexandre Alapetite
0fc71fdf42 API relaxed detection of short/long item ID forms (#2957)
#Fix https://github.com/FreshRSS/FreshRSS/issues/2956
Bug/feature introduced by https://github.com/FreshRSS/FreshRSS/pull/2947 (which was following the specification better)

The original code `strpos($e_id, '/') !== null` was wrong (it can never be null, only false or integer), but the idea was to check whether the client was sending a short form (decimal) or long form of the ID (hexadecimal with prefixes including slashes). Since it has not given problem until my recent typo fix, this means that the short form is apparently not used by the clients we tested. But now that we are back to following the specification better, it looks like a client such as Reeder 4 is sending an hexadecimal form without a prefix, which breaks the detection.

This patch changes the detection, which should work in all known cases AND comply with the specification

https://feedhq.readthedocs.io/en/latest/api/terminology.html#items
2020-05-07 18:33:40 +02:00
Alexandre Alapetite
5e18ca8408 Fix warning with FeedReader (#2947)
FeedReader 2.10.0 sends something like
`T=cd3421a73e8a09f955449d02beaf9593b0c0265cZZZZZZZZZZZZZZZZZ&r=user/-/state/com.google/read&i=-/tag%3Agoogle.com&i=-/2005%3Areader/item/0005a4b97779db22`
to `/api/greader.php/reader/api/0/edit-tag`

The first `i=-/tag/google.com` is wrong and cannot be converted to an entry ID.
This resulted in:

> PHP Warning:  gmp_init(): Unable to convert variable to GMP - string is not an integer in /var/www/FreshRSS/p/api/greader.php on line 35
2020-05-05 17:13:18 +02:00
Alexandre Alapetite
b1aac20839 Fever integer type for numbers (#2946)
* Fever integer type for feed ID

#Fix
https://github.com/FreshRSS/FreshRSS/issues/2940#issuecomment-623022435

* Fix feed_id

* Ensure string for entry ID

To be compatible with 32-bit platforms.
Before, the type was inconsistent depending on architecture + database

* Integer for entry count functions
2020-05-03 13:39:16 +02:00
Alexandre Alapetite
1bb4c75db7 Fever integer type for last_refreshed_on_time (#2944)
#Fix https://github.com/FreshRSS/FreshRSS/issues/2940
https://feedafever.com/api
2020-05-02 20:04:51 +02:00
Alexandre Alapetite
f0db70dcb0 API Use string type for Usec (#2935)
#Fix https://github.com/FreshRSS/FreshRSS/issues/2934
2020-04-30 23:17:46 +02:00
Alexandre Alapetite
bdc4da6ad0 Expose podcast in API (#2898)
* Expose podcast in API

Expose RSS enclosures in our API, e.g. for clients supporting podcasts

* PHP CS?

* Annoying linter

* Light optimisation
2020-04-16 18:11:26 +02:00
Alexandre Alapetite
5858aaf7fc API return proper newestItemTimestampUsec (#2854)
* API return proper newestItemTimestampUsec

#fix https://github.com/FreshRSS/FreshRSS/issues/2853

* Minor naming

* Add newestItemTimestampUsec for labels

* Do not use t.name after all
2020-04-01 02:08:45 +02:00
Alexandre Alapetite
c79c7640a2 API return OK for an empty request (#2855)
Fix https://framateam.org/freshrss/pl/yozcezrnufno9eut3173d4wpry
2020-03-30 19:17:12 +02:00
Alexandre Alapetite
cb4d009ebb GReader API consistent default category (#2840)
* GReader API consistent default category

#Fix https://github.com/FreshRSS/FreshRSS/issues/2839

* Also for subscription/list
2020-03-28 12:35:21 +01:00
Alexandre Alapetite
e7c5b03a4d GReader remove unsused parameter (#2816) 2020-02-29 22:30:19 +01:00
Alexandre Alapetite
0f94402b7e Better performance with yield (#2588)
* Better performance with yield

Largely decrease the time to first byte, and reduced memory consumtion.
Before, we used to make several copies in memory of the whole list of
articles before sending them to the client. Now streamed as they are
processed.

* Travis
2020-02-29 18:19:09 +01:00
Julien-Pierre Avérous
01576e6317 [API, extension] Use 'dateAdded()' to forge 'crawlTimeMsec' & 'timestampUsec' field in greader API. (#2773)
- Add the ability to customize 'dateAdded()', so an extension can change it if needed.
2020-01-18 11:58:46 +01:00
Julien-Pierre Avérous
9819a72293 Pass the entries to 'entry_before_display' extension hook (#2763)
* Pass the entries to 'entry_before_display' extension hook. - #2762

* Fix code-style.

* - Fix 'Whitespace found at end of line'.

Co-authored-by: Frans de Jonge <fransdejonge@gmail.com>
2020-01-16 13:02:05 +01:00
Marien Fressinaud
03ddcf0772 fix: Fix undefined function _t on WebSub (#2743)
I published an article via WebSub, but I never received it. So I checked
my logs to find why and I found the following stacktrace:

```
29/Dec/2019:15:58:32 +0000 "POST /api/pshb.php" 500
NOTICE: PHP message: PHP Fatal error:  Uncaught Error: Call to undefined function _t() in /path/app/Models/Category.php:83
Stack trace:
/path/app/Models/CategoryDAO.php(417): FreshRSS_Category->_id(1)
/path/app/Models/CategoryDAO.php(192): FreshRSS_CategoryDAO::daoToCategory(Array)
/path/app/Models/Feed.php(466): FreshRSS_CategoryDAO->searchById('1')
/path/app/Controllers/feedController.php(416): FreshRSS_Feed->cleanOldEntries()
/path/p/api/pshb.php(141): FreshRSS_feed_Controller::actualizeFeed(0, 'https://flus.io...', false, Object(SimplePie))
{main}
  thrown in /path/app/Models/Category.php on line 83
```

The `_t` function should be loaded with the Minz_Translate class, but
the latter isn't initialized on WebSub endpoint.

In my opinion, we should not have to care about this kind of detail of
implementation and it reveals a deeper architectural misconception, but
for now the fix should be enough. It’s quite difficult to reproduce
locally though.
2019-12-29 18:00:06 +01:00
Alexandre Alapetite
6a317d876c API 64-bit ID as string (#2621)
Fix https://github.com/FreshRSS/FreshRSS/issues/2620
2019-11-02 00:46:58 +01:00
Alexandre Alapetite
b20fddc330 Fix API i18n (#2565)
Fix https://github.com/FreshRSS/FreshRSS/issues/2564
2019-10-09 23:37:47 +02:00
Alexandre Alapetite
ef00513a81 Quick fix: API PDO visibility bug (#2545)
Introduced in https://github.com/FreshRSS/FreshRSS/pull/2522
2019-09-29 17:55:08 +02:00
Alexandre Alapetite
e3e5954394 PDO refactoring for code simplification (#2522)
* PDO refactor

* Automatic prefix when using the syntax `_tableName`
* Uniformity: MySQL is now PDO::ATTR_EMULATE_PREPARES = false just like SQLite and PostgreSQL, with consequences such as only one statement per query
* Use PDO methods exec(), query(), prepare() + execute() in a more efficient way
* Remove auto-update SQL code for versions older than FreshRSS 1.5 (3 years old)
* The name of the default category is set in PHP instead of in the DB (simplies SQL and allows changing the name according to the FreshRSS language)
* Rename `->bd` to `->pdo` (less of a frenshism, and more informative)
* Fix some requests, which were not compatible with MySQL prepared statements

* Whitespace

* Fix syntax for PostgreSQL sequences

+ MySQL install

* Minor formatting

* Fix lastInsertId for PostgreSQL

* Use PHP 5.6+ const

Take advantage of https://github.com/FreshRSS/FreshRSS/pull/2527
https://www.php.net/manual/en/migration56.new-features.php

* A bit of forgotten PHP 5.6 simplification for cURL

* Forgotten $s

* Mini fix custom user config

https://github.com/FreshRSS/FreshRSS/pull/2490/files#r326290346

* More work on install.php but not finished

* install.php working

* More cleaning of PDO in install

* Even more simplification

Take advantage of PDO->exec() to run multiple statements

* Disallow changing the name of the default category

https://github.com/FreshRSS/FreshRSS/pull/2522#discussion_r326967724
2019-09-29 16:22:50 +02:00
Alexandre Alapetite
28ab89146b API Reeder compatibility (#2526)
https://github.com/FreshRSS/FreshRSS/issues/2513
2019-09-18 13:03:53 +02:00
Alexandre Alapetite
fd33d92d41 Require PHP 5.5+ (#2495)
* Require PHP 5.5+

https://github.com/FreshRSS/FreshRSS/issues/2469#issuecomment-522255093
I think it would be reasonable to require PHP 5.5+ for the core of
FreshRSS after all.

As Frenzie said, WordPress currently requires PHP 5.6.20+, and it is the
most popular PHP application.

We would loose about 20% of the PHP servers according to
https://w3techs.com/technologies/details/pl-php/5/all but I expect this
number to drop fast after the release of CentOS 8 (CentOS accounts for
17% of Linux servers
https://w3techs.com/technologies/details/os-linux/all/all ).

Distributions:
* no impact on Ubuntu, Fedora, Alpine, OpenWRT, FreeBSD, OpenSuze,
Mageia, as all active versions have PHP > 7
* no impact on OpenSuze, Synology, as all active versions have PHP > 5.5
* we drop Debian 8 Jessie (-2020) - we keep supporting Debian 9 Stretch
(2017-06) - current is Debian 10 Buster
* we drop Red Hat 7 (-2024) - we keep supporting RHEL 8 (2019-05)
* we drop CentOS 7 (-2024) - we will support CentOS 8 (to be released
soonish)

When dropping older versions, I can better like when it is for a good
reason, and there is actually one with PHP 5.5, namely generators
(yield) https://php.net/language.generators.overview which I consider
using.

* Version note for JSON.php

* hex2bin

* Update .travis.yml

Co-Authored-By: Frans de Jonge <fransdejonge@gmail.com>
2019-08-20 14:55:43 +02:00
Nick Cross
1aa2af9752 Issue #2446 : Fix passing authentication headers (#2449)
* Issue #2446 : Fix passing authentication headers. Use CGIPassAuth is version is high enough

* Issue #2446 : Remove CGIPassAuth due to potential issues with AllowOverride rights.

* Tabs
2019-07-20 23:23:24 +02:00
Alexandre Alapetite
037c385947 Fix API remove category (#2412)
Fix https://github.com/FreshRSS/FreshRSS/issues/2411
2019-06-16 18:59:50 +02:00
Alexandre Alapetite
d26a49bc66 Fix API minor code syntax warning (#2362)
https://github.com/FreshRSS/FreshRSS/issues/2359#issuecomment-480620713
2019-04-07 21:50:26 +02:00
Alexandre Alapetite
cb00eafba0 Fever remove semicolomn from author (#2283)
https://github.com/FreshRSS/FreshRSS/issues/2281
2019-03-19 20:08:56 +01:00
Alexandre Alapetite
69eb651d56 Minor Unicode changes 2019-02-05 09:36:39 +01:00
Alexandre Alapetite
ce62ce0ebd Fever API encoding of special chars
https://github.com/FreshRSS/FreshRSS/issues/2241
2019-02-05 09:30:18 +01:00
Alexandre Alapetite
65602ab193 Case insensitive Authorization
https://github.com/FreshRSS/FreshRSS/issues/2233
2019-01-31 23:00:29 +01:00
Alexandre Alapetite
20223b8b01 Automatic API test (#2207)
* Automatic API test

Easier for end-user, smarter, and the guess testing of greader
authorization token was not reliable.

* Travis + minor
2019-01-05 12:33:18 +01:00
Alexandre Alapetite
a6623b7b2f Apache performance (#2202)
* Apache performance
API: Use SetEnvIf if available and fallback to RewriteRule
Docker: Disable unused modules.
Docker: Hard-include .htaccess to avoid having to scan for changes in
that file.
Docker: Disable security check of symlinks, which we do not use ayway.

* Apache readme

* Docker/Apache tuning
Run cron job with correct www-data user instead of root
Remove PHP GMP module uneeded for 64-bit Docker image
Add option to mount custom .htaccess for HTTP authentication
Re-add Apache module for HTTP authentication
Move Alpine-specific instructions to Docker file (instead of Apache
conf) to make it easier to have other base images than Alpine
2019-01-02 21:36:33 +01:00
Alexandre Alapetite
512d047f02 Update naming to WebSub (#2184)
Instead of PubSubHubbub / PuSH
2018-12-16 17:02:03 +01:00
Alexandre Alapetite
75a0b12c72 Documentation Vienna (#2126)
* Documentation Vienna / Open Reader

https://github.com/FreshRSS/FreshRSS/issues/2091
https://github.com/FreshRSS/FreshRSS/pull/2093
https://github.com/ViennaRSS/vienna-rss/issues/1197

* Remove references to Open Reader API for now
2018-12-16 14:43:32 +01:00
Alexandre Alapetite
0fce9892ff API encoding tuning (#2120)
Use only minimal XML->Unicode encoding for articles title.
Follow-up of https://github.com/FreshRSS/FreshRSS/pull/2093
2018-11-12 09:03:20 +01:00
Alexandre Alapetite
b672fc190d Tweaks for Vienna RSS (#2093)
* Tweaks for Vienna RSS

https://github.com/FreshRSS/FreshRSS/issues/2091
https://github.com/ViennaRSS/vienna-rss/issues/1197

* Fix get feed by URL

* Fix get item ids returning starred elements

* API add item ids by feed URL

* Add API filter `it`

https://feedhq.readthedocs.io/en/latest/api/reference.html#stream-items-ids

* API add `nt=` filter + refactoring

* No ; prefix for author

https://github.com/FreshRSS/FreshRSS/issues/2091#issuecomment-435562495

* Add id long form prefix and accept short id form

https://github.com/FreshRSS/FreshRSS/issues/2091#issuecomment-435631259

* Fix quote problem

https://github.com/FreshRSS/FreshRSS/issues/2091#issuecomment-435683930

* Isolate bug fix for News+

https://github.com/FreshRSS/FreshRSS/issues/2091#issuecomment-435687041

* Rework encoding conventions

https://github.com/FreshRSS/FreshRSS/issues/2091#issuecomment-437441834

* Unicode escaping alternative

Alternative approach to encode XML special characters and other
problematic characters into their Unicode fullwidth version when we
cannot use HTML-encoding because clients disagree wether they should
HTML-decode or not.
https://github.com/FreshRSS/FreshRSS/issues/2091#issuecomment-436059559
2018-11-11 17:31:50 +01:00
Alexandre Alapetite
a1dc5ada67 Add Fever API debug (#2063)
* Add Fever API debug

https://github.com/FreshRSS/FreshRSS/issues/2043

* Default without debug logging
2018-10-24 13:17:28 +02:00
Alexandre Alapetite
ee902ee7c4 Minor Google Reader API comment 2018-10-13 16:41:05 +02:00
Alexandre Alapetite
8ee8a573f1 Custom labels (#2027)
* First draft of custom tags

https://github.com/FreshRSS/FreshRSS/issues/928
https://github.com/FreshRSS/FreshRSS/issues/1367

* SMALLINT to BIGINT for id_entry

And uppercase SQL types

* Fix layout for unreads

* Start UI menu

* Change menu order

* Clean database helpers

https://github.com/FreshRSS/FreshRSS/pull/2027#discussion_r217971535

* Travis rules do not understand PostgreSQL constants

Grrr

* Tag controller + UI

* Add column attributes to tags

* Use only favicon for now, for label

* Fix styling for different themes

* Constant for maximum InnoDB index length in Unicode

https://github.com/FreshRSS/FreshRSS/pull/2027#discussion_r219052200
(I would have personnally prefered keeping the readability of a real
value instead of a constant, in this case of many SQL fields)

* Use FreshRSS_Factory::createCategoryDao

* Add view of all articles containing any tag

* Fix search in tags

* Mark as read tags

* Partial auto-update unread tags

* More auto update tag unreads

* Add tag deletion

* Do not purge tagged articles

* Minor comment

* Fix SQLite and UI bug

* Google Reader API support for user tags

Add SQL check that tag names must be distinct from category names

* whitespace

* Add missing API for EasyRSS

* Compatibility SQLite

Problematic parentheses

* Add SQL DISTINCT for cases with multiple tags

* Fix for PostgreSQL

PostgreSQL needs some additional type hint to avoid "could not determine
data type of parameter $1"

http://www.postgresql-archive.org/Could-not-determine-data-type-of-parameter-1-tp2171092p2171094.html
2018-09-29 20:47:17 +02:00
Alexandre Alapetite
b323ed0846 Improve authors (#2025)
* Links for authors and multiple authors

Favour ';' as a separator instead of ',' to better cope with
multi-author scientific articles.
Follow-up of https://github.com/FreshRSS/FreshRSS/pull/1997 ,
https://github.com/FreshRSS/FreshRSS/issues/1968,
https://github.com/FreshRSS/FreshRSS/pull/2023

* Change i18n authors

* Update layout

* Unicode-compatible search

Example for `author:Loïc`

* author <em> styling

* Final details

* Minor spacing
2018-09-16 10:46:27 +02:00
Alexandre Alapetite
763ceff7ca FeverAPI 32-bit fixes (#1964)
* FeverAPI 32-bit fixes

https://github.com/FreshRSS/FreshRSS/issues/1962

* Small fixes

https://github.com/FreshRSS/FreshRSS/pull/1964#discussion_r204213613
2018-07-23 22:50:16 +02:00
Alexandre Alapetite
82ac9454dd Fix check username in API (#1957)
* Fix check username in API

Fix https://github.com/FreshRSS/FreshRSS/issues/1955

* Changelog 1955

https://github.com/FreshRSS/FreshRSS/issues/1955
https://github.com/FreshRSS/FreshRSS/pull/1957
2018-07-08 11:22:51 +02:00
Alexandre Alapetite
031acde003 Fix extension hook for updated articles (#1932)
* Fix extension hook for updated articles

https://github.com/FreshRSS/FreshRSS/issues/1926

* Enable extensions during PubSubHubbub

* A little array protection

* Changelog 1926

https://github.com/FreshRSS/FreshRSS/issues/1926
https://github.com/FreshRSS/FreshRSS/pull/1932

* Add null check
2018-06-13 09:27:02 +02:00
Alexandre Alapetite
c0f2df3ef0 Fever fixes (#1931)
* Fever fixes

Was hardcoded for MySQL. Bug in "before" parameter. Bug in mark all as
read.

* Fix construct

* Changelog 1930

https://github.com/FreshRSS/FreshRSS/issues/193
https://github.com/FreshRSS/FreshRSS/pull/1931
2018-06-12 21:11:43 +02:00