Commit Graph

7238 Commits

Author SHA1 Message Date
Mohammad Lashkari
53ca983ef2 Complete the Persian translation (#8923)
Translate remaining TODO and DIRTY entries in the Persian locale.
2026-06-14 21:30:56 +02:00
Inverle
1349c7c1a9 SimplePie: Disallow javascript: URI protocol (#8263)
Follow-up of https://github.com/FreshRSS/FreshRSS/pull/7924
https://github.com/FreshRSS/simplepie/pull/80
https://github.com/FreshRSS/simplepie/pull/65

* SimplePie: Disallow `javascript:` URI protocol

* Sync SimplePie

* Update code to work with SimplePie again

* Partial revert previous commit

* Bump SimplePie

---------

Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
2026-06-13 21:15:36 +02:00
Fripix
0d5cc039cb Self-hosted web frontend for FreshRSS (Google Reader API), as discussed in #8917. (#8921)
Changes proposed in this pull request:

- Add FriRSS to the list of compatible clients (APIs & native apps table) in the README.

How to test the feature manually:

1. Render the README and check the new FriRSS row displays correctly in the table.
2. FriRSS itself (a working GReader client): https://github.com/Fripix/frirss

Pull request checklist:

- [x] clear commit messages
- [ ] code manually tested (N/A — documentation only)
- [ ] unit tests written (N/A — documentation only)
- [x] documentation updated
2026-06-13 20:09:39 +02:00
Fripix
2578befbf6 Add FriRSS to the list of clients (#8920)
Self-hosted web frontend for FreshRSS (GReader API), as discussed in #8917.
2026-06-13 19:58:21 +02:00
Alexandre Alapetite
941f30b24d Fix PHPStan 2.2.2 in CLI (#8911) 2026-06-11 22:19:55 +02:00
Alexandre Alapetite
8e27fb1c09 Docker Alpine 3.24.0 (#8916)
https://alpinelinux.org/posts/Alpine-3.24.0-released.html
Revert to using default PHP version, which is now PHP 8.5.7
2026-06-11 22:17:16 +02:00
Alexandre Alapetite
d40917b6d8 Bump SimplePie (fix PHP 8.5 bug) (#8918)
* https://github.com/simplepie/simplepie/pull/979
2026-06-11 22:16:33 +02:00
Inverle
5e18e96887 Set limits for regex during search (#8913)
Prevents regex searches from running for too long
2026-06-05 23:12:59 +02:00
Inverle
bf2de1baea Fix access control in rss and opml actions (#8912)
Due to missing `return` statement while using `redirect: false`, no `exit()` is done during `Minz_Error::error()`

Regression from https://github.com/FreshRSS/FreshRSS/pull/8434
2026-06-05 22:38:17 +02:00
Frans de Jonge
aaae9ee388 Always jump article to top when header is offscreen, also when 'Stick the article to the top when opened' is disabled (#8870)
* Always jump article to top when header is offscreen

Closes #4069.

How to test the feature manually:

1. Disable 'Stick the article to the top when opened'
2. Open a very long article
3. No scrolling will occur if you close it again while the header is still onscreen
4. If the header left the screen, opening another article will scroll to it to top 
5. Same for collapsing the current article, but then it'll put the current header at the top

* Compensate for layout shift

* Fix going back to previous article above viewport

* clarify variable name: header_off_screen → header_above_viewport
2026-06-05 15:31:42 +02:00
Alexandre Alapetite
48cf86eaec Apache condition mod_remoteip (#8890)
Fix https://github.com/FreshRSS/FreshRSS/issues/8887
Follow-up of https://github.com/FreshRSS/FreshRSS/pull/5549
2026-06-05 13:26:16 +02:00
Satyam
10a976efbe fix(themes): padding for .nav_menu in Alternative-Dark, Flat, and Nord themes (#8901)
Closes #8898

Changes proposed in this pull request:

- Removed position: static, and update the .nav_menu padding.
- Generated RTL CSS.

Tested the feature manually:

1. Flat
<img width="1351" height="73" alt="image" src="https://github.com/user-attachments/assets/f7627d6b-7816-4344-9b26-db0892b76d1e" />

2. Alternative Dark
<img width="1391" height="57" alt="image" src="https://github.com/user-attachments/assets/239d7e77-9b9f-46c2-8d25-c37fd603ea5d" />

4. Nord
<img width="1367" height="100" alt="nord" src="https://github.com/user-attachments/assets/5ec36e94-6ee5-448c-8321-809c288741d1" />

Co-authored-by: Satyam <>
2026-06-04 08:35:42 +02:00
dependabot[bot]
7d7e502603 chore(deps): update phpmailer/phpmailer requirement from 7.0.2 to 7.1.1 in /lib (#8907)
* chore(deps): update phpmailer/phpmailer requirement in /lib

Updates the requirements on [phpmailer/phpmailer](https://github.com/PHPMailer/PHPMailer) to permit the latest version.
- [Release notes](https://github.com/PHPMailer/PHPMailer/releases)
- [Changelog](https://github.com/PHPMailer/PHPMailer/blob/master/changelog.md)
- [Commits](https://github.com/PHPMailer/PHPMailer/compare/v7.0.2...v7.1.1)

---
updated-dependencies:
- dependency-name: phpmailer/phpmailer
  dependency-version: 7.1.1
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

* Bump PHPMailer
https://github.com/PHPMailer/PHPMailer/releases/tag/v7.1.0

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
2026-06-03 13:06:28 +02:00
dependabot[bot]
f04788cb3a chore(deps-dev): bump phpstan/phpstan from 2.1.55 to 2.2.1 (#8906)
* chore(deps-dev): bump phpstan/phpstan from 2.1.55 to 2.2.1

---
updated-dependencies:
- dependency-name: phpstan/phpstan
  dependency-version: 2.2.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* Fix bug in URL unserialize, json_decode

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
2026-06-03 12:52:45 +02:00
dependabot[bot]
232eee3341 chore(deps-dev): bump the stylelint group with 2 updates (#8904)
Bumps the stylelint group with 2 updates: [stylelint](https://github.com/stylelint/stylelint) and [@stylistic/stylelint-plugin](https://github.com/stylelint-stylistic/stylelint-stylistic).


Updates `stylelint` from 17.9.1 to 17.12.0
- [Release notes](https://github.com/stylelint/stylelint/releases)
- [Changelog](https://github.com/stylelint/stylelint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/stylelint/stylelint/compare/17.9.1...17.12.0)

Updates `@stylistic/stylelint-plugin` from 5.1.0 to 5.2.0
- [Release notes](https://github.com/stylelint-stylistic/stylelint-stylistic/releases)
- [Changelog](https://github.com/stylelint-stylistic/stylelint-stylistic/blob/main/CHANGELOG.md)
- [Commits](https://github.com/stylelint-stylistic/stylelint-stylistic/compare/v5.1.0...v5.2.0)

---
updated-dependencies:
- dependency-name: stylelint
  dependency-version: 17.12.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: stylelint
- dependency-name: "@stylistic/stylelint-plugin"
  dependency-version: 5.2.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: stylelint
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-03 08:30:23 +02:00
dependabot[bot]
7d1a76da6b chore(deps): bump ruby/setup-ruby from 1.306.0 to 1.310.0 (#8905)
Bumps [ruby/setup-ruby](https://github.com/ruby/setup-ruby) from 1.306.0 to 1.310.0.
- [Release notes](https://github.com/ruby/setup-ruby/releases)
- [Changelog](https://github.com/ruby/setup-ruby/blob/master/release.rb)
- [Commits](c4e5b13161...afeafc3d1a)

---
updated-dependencies:
- dependency-name: ruby/setup-ruby
  dependency-version: 1.310.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-03 08:29:39 +02:00
Mass Krdjn
6592f45163 i18n: complete Spanish (es) translation (#8878)
* i18n: complete Spanish (es) translation

* Apply suggestions from pe1uca

Co-authored-by: pe1uca <15692727+pe1uca@users.noreply.github.com>

* make fix-all

---------

Co-authored-by: Mass Krdjn <172580248+masskrdjn@users.noreply.github.com>
Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
Co-authored-by: pe1uca <15692727+pe1uca@users.noreply.github.com>
2026-06-01 16:31:25 +02:00
Alexandre Alapetite
c5d3954989 Update security policy due to many duplicated AI reports (#8900)
Inspired by <https://lkml.org/lkml/2026/5/17/896>
2026-06-01 01:33:32 +02:00
Kidd Lee
7cbf597585 Add Kidd Lee to CREDITS.md (#8895)
Asked in https://github.com/FreshRSS/FreshRSS/pull/8710#issuecomment-4548630996
2026-05-27 08:11:25 +02:00
Alexandre Alapetite
3996c8fca0 Changelog 2026-05-26 22:47:21 +02:00
Alexandre Alapetite
a499778e12 SimplePie: XML_OPTION_PARSE_HUGE (#8894)
* https://github.com/FreshRSS/FreshRSS/pull/8710
* https://github.com/simplepie/simplepie/pull/977

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

Co-authored-by: Kidd Lee <LeeXiaolan@users.noreply.github.com>
2026-05-26 22:28:59 +02:00
Alexandre Alapetite
ff2add14a2 SimplePie: Fix wrong player_parent logic leading to invalid type (#8893)
```
PHP Fatal error: Uncaught TypeError:
SimplePie\Enclosure::__construct(): Argument #20 ($player) must be of type ?string, array given
in /opt/freshrss/lib/simplepie/simplepie/src/Enclosure.php:199
```

This happens when there is no`url` parameter.

Example of feed:
* https://feeds.feedburner.com/crunchyroll/rss/anime?lang=deDE

fix https://github.com/FreshRSS/FreshRSS/issues/8892

Upstream PR:
* https://github.com/simplepie/simplepie/pull/978
2026-05-26 22:16:01 +02:00
Mass Krdjn
159894f9f6 i18n: complete Italian (it) translation (#8880)
* i18n: complete Italian (it) translation

* make fix-all

---------

Co-authored-by: Mass Krdjn <172580248+masskrdjn@users.noreply.github.com>
Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
2026-05-25 16:59:49 +02:00
Julien Herr
f910dce35c Add Julien Herr to CREDITS.md (#8885)
As asked: https://github.com/FreshRSS/FreshRSS/pull/8873#issuecomment-4528363148
2026-05-24 23:23:28 +02:00
Alexandre Alapetite
8aa1b0a648 Changelog 2026-05-24 22:07:30 +02:00
Alexandre Alapetite
542f4920e7 Fix lost elements while parsing search query (#8884)
Fix https://github.com/FreshRSS/FreshRSS/issues/8876
2026-05-24 20:23:58 +02:00
Mass Krdjn
63b106595d docs: add masskrdjn to credits (#8883)
* docs: add masskrdjn to credits

* docs: update contributor name format for masskrdjn

---------

Co-authored-by: Mass Krdjn <172580248+masskrdjn@users.noreply.github.com>
2026-05-24 17:26:19 +02:00
Mass Krdjn
803f92e6d3 i18n: complete Hungarian (hu) translation (#8879)
* i18n: complete Hungarian (hu) translation

* make fix-all

---------

Co-authored-by: Mass Krdjn <172580248+masskrdjn@users.noreply.github.com>
Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
2026-05-24 13:26:31 +02:00
Julien Herr
5bddc6bed5 feat(cli): add reconfigure-user.php to read/write per-user config attributes (#8873)
* feat(cli): add reconfigure-user.php to read/write per-user config attributes

Closes #8869.

Adds `cli/reconfigure-user.php`, a first-class CLI for per-user configuration attributes — the user-level equivalent of the existing `reconfigure.php` (system config).

### Usage

```sh
# List all attributes (sensitive keys redacted by default)
./cli/reconfigure-user.php --user alice --list
./cli/reconfigure-user.php --user alice --list --show-secrets

# Read a single attribute (exit 2 if key not found)
./cli/reconfigure-user.php --user alice --key language

# Set an attribute (type inferred from existing value: bool, int, string)
./cli/reconfigure-user.php --user alice --key language --set --value fr

# Set from stdin (recommended for secrets — keeps value out of shell history / ps)
./cli/reconfigure-user.php --user alice --key some_token --set --value-stdin < token.txt

# Create a new key, e.g. for an extension (unknown keys rejected by default)
./cli/reconfigure-user.php --user alice --key my_ext_setting --set --value hello --force

# Delete an attribute (exit 2 if key not found)
./cli/reconfigure-user.php --user alice --key some_token --unset
```

### Changes

- `cli/reconfigure-user.php` — new command
- `lib/Minz/Configuration::toArray()` — exposes the full config array (used by `--list`)
- `cli/README.md` — documents the new command
- `tests/cli/UserConfigOptionsParserTest.php` — PHPUnit tests for the options parser, following the existing `CliOptionsParserTest` pattern (shared `cli-parser-test.php` helper)

### Test plan

- `make test-all` passes
- Tested manually against a local FreshRSS instance: `--list`, `--key` (get), `--set` (bool/int/string inference), `--value-stdin`, `--unset`, `--force`, error paths (unknown key without `--force`, wrong type)

* unserialize allowed_classes

---------

Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
2026-05-24 13:25:04 +02:00
polybjorn
c222a8463c refactor(themes): convert article-row inner layout to CSS Grid (#8824)
Replace absolute positioning inside `.titleAuthorSummaryDate` with CSS Grid. Title, date, and summary use `grid-area` instead of `position: absolute` + `margin-top: 2.25rem`.

Drops magic numbers that had to stay in sync:
- Three uses of `155px` (date width, title min, title padding) all describing the same column
- `2.25rem` margin-top on summary that had to clear the absolute title
- `90%` summary max-width to keep it off the date

Truncated-title hover-extend now uses `grid-column: 1 / -1` instead of `padding-right: 0.5rem`.

Depends on #8823: grid inside `display: table` mis-sizes in older Gecko, causing summary to misbehave. With the flex base from that PR, the grid sizes correctly in SeaMonkey 2.53.

## Test plan
- `make test-all` passes
- Verified in LibreWolf and SeaMonkey 2.53 with Nord and Origine themes
- Wide, narrow, and mobile viewports
- Toggle combinations: date on/off, summary on/off, hover-extend on truncated titles

Co-authored-by: Bjørn A. Andersen <polybjorn@users.noreply.github.com>
2026-05-21 00:54:16 +02:00
Alexandre Alapetite
2a35723533 Changelog 2026-05-21 00:43:01 +02:00
Alexandre Alapetite
4b019ab697 New option to hide badges showing number of unread articles (#8844)
Inspired by @Dan-Q's  *Reducing Phantom Obligation in FreshRSS* https://danq.me/2026/02/06/phantom-obligation-vs-freshrss/

<img width="512" height="105" alt="image" src="https://github.com/user-attachments/assets/df93118b-36f3-4175-a681-b3f81fe63ff2" />

Results in:

<img width="306" height="181" alt="image" src="https://github.com/user-attachments/assets/1c8ccaa6-4fcf-48a4-bf98-0ace43a68861" />

Can be overridden at category and feed levels.
2026-05-20 20:25:20 +02:00
polybjorn
be3606102a refactor(themes): convert .horizontal-list from display:table to flex (#8823)
Convert `.horizontal-list` from `display: table` to `display: flex`. The title item gets `flex: 1; min-width: 0; align-self: stretch` to match the implicit sizing it got from table-cell.

Class name kept so `main.js` `.closest('.horizontal-list')` calls and theme overrides still match. No `gap` or logical properties, so it works back to Firefox 28 / SeaMonkey 2.53.

Prep for #8824 which converts article rows to CSS Grid (#6776). Grid inside `display: table` mis-sizes in older Gecko, so the outer table has to go first.

## Test plan
- `make test-all` passes
- Verified in LibreWolf and SeaMonkey 2.53 with Nord and Origine themes
- Wide, narrow, and mobile viewports
- Bundled themes (Ansum, Origine-compact, Mapco, Swage) checked: no overrides depend on `display: table`

Co-authored-by: Bjørn A. Andersen <polybjorn@users.noreply.github.com>
2026-05-20 20:11:25 +02:00
Frans de Jonge
93f989b977 Add a warning message to the API password section, add a log warning when a client uses GET, use POST in sample curl API usage (#8845)
* Add a warning message to the API password section, add a log warning when a client uses GET, use POST in sample curl API usage

References #8834.

* Apply suggestion from @Inverle

Co-authored-by: Inverle <inverle@proton.me>

* Apply suggestion from @Inverle (Polish translation)

Co-authored-by: Inverle <inverle@proton.me>

* French translation

* Dutch translation

* German

* Apply suggestion from @Inverle api via post

Co-authored-by: Inverle <inverle@proton.me>

* Apply suggestion from @Inverle via POST (French)

Co-authored-by: Inverle <inverle@proton.me>

* Add user-agent

* update translation info in README

* avoid phpcs line too long

* also trigger on email as suggested by @Inverle

* i18n: fr typography

* make fix-all

---------

Co-authored-by: Inverle <inverle@proton.me>
Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
2026-05-20 20:09:02 +02:00
Denys Nykula
2000b8dd84 Update Ukrainian translation (#8871)
* Update Ukrainian translation

* Change outer double quotes with inner single quote to single quotes only in Ukrainian translation
2026-05-20 20:01:46 +02:00
Alexandre Alapetite
8bd486c591 Start 1.29.2 2026-05-20 20:00:46 +02:00
Alexandre Alapetite
b2c50115ba Release 1.29.1 1.29.1 2026-05-20 19:47:37 +02:00
Alexandre Alapetite
4c0b733bff Changelog, credits 2026-05-20 19:38:36 +02:00
Frans de Jonge
a611209a7c Finish Dutch translation (#8868)
* Finish Dutch translation

* 100%
2026-05-20 00:03:54 +02:00
Alexandre Alapetite
8e007af39d Fiix cookies with some browsers (#8867)
Fix https://github.com/FreshRSS/FreshRSS/issues/8850
Fix login with e.g. SeaMonkey
Regression due to https://github.com/FreshRSS/FreshRSS/pull/8778
2026-05-19 23:03:51 +02:00
Alexandre Alapetite
b7c58e590e Add ignore for PHPStan 2.1.55+ (#8864) 2026-05-19 22:07:52 +02:00
Alexandre Alapetite
c3fa374f25 Fix empty entry Generator (#8863)
* Fix empty entry Generator
Fix https://github.com/FreshRSS/FreshRSS/issues/8857
Regression from https://github.com/FreshRSS/FreshRSS/pull/8789
This is due to https://bugs.php.net/bug.php?id=77515

* Use EmptyIterator instead

* Syntax update
2026-05-19 21:45:20 +02:00
McFev
02edc05035 i18n: ru (#8839) (#8861)
* i18n: ru (#8839)

* make fix-all

---------

Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
2026-05-19 08:20:15 +02:00
dependabot[bot]
ae79f48f4b chore(deps-dev): bump faraday (#8858)
Bumps the bundler group with 1 update in the /docs directory: [faraday](https://github.com/lostisland/faraday).


Updates `faraday` from 2.14.1 to 2.14.2
- [Release notes](https://github.com/lostisland/faraday/releases)
- [Changelog](https://github.com/lostisland/faraday/blob/main/CHANGELOG.md)
- [Commits](https://github.com/lostisland/faraday/compare/v2.14.1...v2.14.2)

---
updated-dependencies:
- dependency-name: faraday
  dependency-version: 2.14.2
  dependency-type: indirect
  dependency-group: bundler
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-18 17:20:42 +02:00
Inverle
51441abf7c Improve Polish translations (#8854)
Adds missing translations (https://github.com/FreshRSS/FreshRSS/issues/8839) and improves some existing ones.

* Add new pl translations

* Consistency: `artykuł` -> `wiadomość`

* Consistency: `ilość` -> `liczba`
2026-05-17 20:25:23 +02:00
Alexandre Alapetite
401fe12832 Sync lib_opml (no change) (#8853)
Follow-up of https://github.com/FreshRSS/FreshRSS/pull/8652
https://framagit.org/marienfressinaud/lib_opml/-/merge_requests/51
2026-05-17 19:20:53 +02:00
IEEE-754
4102417fc1 i18n: Improve Traditional Chinese translations (#8849)
#8839 

**Change(s)**
- Fix some typos
- Revise the translations that I hadn't checked before
- Add some new translations

**File(s) changed**
`app/i18n/zh-TW/{admin,conf,gen,sub,user}.php`
`README.md`
`README.fr.md`
2026-05-16 12:09:37 +02:00
Ciro Mota
e704dea906 feat: Added news Português Brasil translation (#8846)
* feat: Added news Português Brasil translation

* fix: Translation string

* make fix-all

---------

Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
2026-05-15 23:43:56 +02:00
polybjorn
bdf02e638a fix(theme): hide Swage logo in reader view to prevent overlap (#8842)
Reader view sets .aside.visible { padding-top: 0 } (swage.css:1236), so when
the sidebar is open the absolute-positioned logo lands on the Subscription
management button. Extending the existing hide rule from #8739 to also
cover body.reader is the smallest fix; the logo isn't load-bearing in
reader view. Closes #8802.

Co-authored-by: Bjørn A. Andersen <polybjorn@users.noreply.github.com>
2026-05-15 14:29:29 +02:00
Christian Weiske
d017e22a46 i18n(de): Add missing translations (#8840)
Related: https://github.com/FreshRSS/FreshRSS/issues/8839
2026-05-15 13:31:45 +02:00