Frédéric Guillot
d7321c3e56
feat(ui): display external URL in single entry view
...
Display the article's external URL directly in the single entry view.
Rationale: On mobile devices, users couldn't see where a link pointed before tapping it.
Previously, the only way to view the external URL was by hovering - an action not available on touch devices.
2025-06-09 21:10:09 -07:00
Frédéric Guillot
cecc18420d
feat(sanitizer): add validation for empty width and height attributes in img tags
2025-06-09 20:38:17 -07:00
Frédéric Guillot
d53fd17e10
feat(sanitizer): validate MathML XML namespace
2025-06-09 20:28:54 -07:00
Frédéric Guillot
21d22d7f0b
feat(sanitizer): add support for fetchpriority and decoding attributes in img tags
2025-06-09 20:12:15 -07:00
jvoisin
d59990f1dd
perf(xml): optimize xml filtering
...
Instead of using bytes.Map which is returning a copy of the provided []byte,
use a custom in-place implementation, as the bytes.Map call is taking around
25% of rss.Parse
2025-06-09 13:49:10 -07:00
jvoisin
49085daefe
perf(xml): optimized NewXMLDecoder
...
io.ReadAll is growing the underlying buffer progressively, while
io.Copy is able to allocate it in one go, which is significantly faster.
io.ReadAll is currently accounting for around 10% of the CPU time of rss.Parse
2025-06-09 13:49:10 -07:00
jvoisin
5872710d22
perf(storage): optimize away two Sprintf calls
...
The call to fmt.Sprintf in WithFeedID accounts for more than 20% of the time
spent in GetFeed. Use strconv.Itoa instead, as it's much much faster.
Also change WithCategoryID in the same way, for consistency's sake.
2025-06-09 13:10:51 -07:00
Qeynos
d2212dee12
feat(locale): update Chinese translations
2025-06-08 21:11:04 -07:00
Frédéric Guillot
8db637cb39
feat(ui): add user setting to control target="_blank"
on links
...
Rationale: Opening links in the current tab is the default browser behavior.
Using `target="_blank"` on external links can lead to accessibility issues and override user preferences. It may also interfere with assistive technologies and expected browser behavior.
To maintain backward compatibility, this option is enabled by default (`true`), which adds `target="_blank"` to links.
2025-06-08 21:07:11 -07:00
Frédéric Guillot
699deea72c
feat(oidc): use preferred_username
first instead of email
claim
2025-06-08 18:05:47 -07:00
Frédéric Guillot
c41d189a7a
fix(karakeep): correct method name and improve error handling in SaveURL
2025-06-08 17:47:20 -07:00
Frédéric Guillot
adfc38d237
feat(locale): update locales using machine translation
2025-06-08 17:14:45 -07:00
Frédéric Guillot
a8bb7a48d7
feat(ui): avoid showing an excessive number of tags
2025-06-08 15:29:09 -07:00
jvoisin
f9dce3d10f
perf(timzone): cache getLocation's results
...
Every time getLocation is called, it's opening and parsing a file on disc,
sometimes a zip file depending on the system. We can cache the results instead
of doing this.
See https://github.com/golang/go/issues/24844 and https://github.com/golang/go/issues/26106
2025-06-08 13:50:18 -07:00
Jesse Jaggars
43d302e768
feat: adding support for saving entries to karakeep
...
Signed-off-by: Jesse Jaggars <jhjaggars@gmail.com>
2025-06-04 21:10:26 -07:00
the7thNightmare
0369f03940
feat(locale): update Indonesian translations
2025-05-28 20:45:45 -07:00
Qeynos
4597d9b289
feat(locale): update Chinese translations
2025-05-28 20:44:40 -07:00
Cthulhux
7bfd22aab7
feat(locale): update German translation
...
Translated one string, found a good wording for the other.
2025-05-27 19:17:23 -07:00
Frédéric Guillot
bfd8860398
feat(api): add new endpoints to manage API keys
2025-05-25 15:50:13 -07:00
Matthaiks
ebd65da3b6
feat(locale): update Polish translation
2025-05-25 15:30:36 -07:00
Frédéric Guillot
83191b0c1d
fix(storage): remove extra comma introduced by commit 09fb05a
2025-05-25 13:33:41 -07:00
Frédéric Guillot
8142268799
feat: populate feed description automatically
2025-05-24 21:15:52 -07:00
Frédéric Guillot
5920e02562
feat: add liveness and readiness probes
...
- Added new routes: /liveness, /healthz, /readiness, /readyz
- These routes do not take the base path into consideration and are always available at the root of the server
2025-05-24 20:36:05 -07:00
Kelly Norton
09fb05aaaf
feat: add option to always open articles externally
2025-05-24 19:46:01 -07:00
Frédéric Guillot
52b184394f
fix(migrations): prevent failure at v45 with long entry URLs
...
Fixes an issue where upgrading from older versions of Miniflux could fail with the following PostgreSQL error:
```
[FATAL] [Migration v45] pq: index row size 2744 exceeds btree version 4 maximum 2704 for index "entries_feed_url_idx"
```
2025-05-23 13:27:05 -07:00
Matthaiks
7c8c7c2711
feat(locale): update Polish translation
2025-05-23 12:21:28 -07:00
Frédéric Guillot
9768eb9fb9
feat(locale): update French translations
2025-05-22 20:28:38 -07:00
Tianzhi Jin
b65373db7e
feat(webauthn): perfer creation of a client-side discoverable credential
2025-05-22 20:14:00 -07:00
Anton Larionov
e99864a456
fix(locale): localize Git commit label at about page
2025-05-22 19:30:10 -07:00
Anton Larionov
225463817c
feat(locale): complete Russian translation
2025-05-20 19:37:41 -07:00
Matthaiks
3db6e822cb
feat(locale): update Polish translation
2025-05-20 19:36:44 -07:00
Anton Larionov
553c578f2e
feat(rssbridge): support auth token for RSS-Bridge
2025-05-19 20:47:12 -07:00
Tianzhi Jin
81ec32a8b6
fix(webauthn): correct arg in debug log
2025-05-14 21:01:52 -07:00
Frédéric Guillot
036704b3e4
feat(response): change error response content type to plain text and escape HTML
...
Adding another layer of security in addition to the existing CSP cannot
hurt.
2025-05-11 19:15:54 -07:00
Frédéric Guillot
327d027d38
feat(settings): replace div.panel
with paragraph tags for OAuth2 links
2025-05-11 18:06:16 -07:00
Frédéric Guillot
5ae2cbd943
feat(settings): add validation for entry order and categories sorting order
2025-05-11 17:52:59 -07:00
Frédéric Guillot
828a4334db
fix(sanitizer): MathML tags are not fully supported by golang.org/x/net/html
...
See https://github.com/golang/net/blob/master/html/atom/gen.go
and https://github.com/golang/net/blob/master/html/atom/table.go
2025-05-06 21:18:19 -07:00
jvoisin
d1dc369bb2
feat(sanitizer): add MathML tags to the sanitizer
...
This was found by reading the article pointed by https://lobste.rs/s/nobvmp/how_prime_factorizations_govern_collatz
2025-05-06 20:19:56 -07:00
jvoisin
ff2dfe977b
feat: remove the ref
parameter from url
...
This is used by (at least) Ghost (https://forum.ghost.org/t/ref-parameter-being-added-to-links/38335 )
Examples:
- https://blog.exploits.club/exploits-club-weekly-newsletter-66-mitigations-galore-dirtycow-revisited-program-analysis-for-uafs-and-more/
- https://labs.watchtowr.com/is-the-sofistication-in-the-room-with-us-x-forwarded-for-and-ivanti-connect-secure-cve-2025-22457/
2025-05-06 19:59:55 -07:00
Frédéric Guillot
3de9629a49
feat(googlereader): avoid SQL query to fetch username in streamItemContentsHandler
2025-05-04 20:38:53 -07:00
Frédéric Guillot
8d821dfc3b
fix(googlereader): handle various item ID formats
...
- Expected format: "tag:google.com,2005:reader/item/00000000148b9369" (hexadecimal string with prefix and padding)
- NetNewsWire uses this format: "tag:google.com,2005:reader/item/2f2" (hexadecimal string with prefix and no padding)
- Reeder uses this format: "000000000000048c" (hexadecimal string without prefix and padding)
- Liferea uses this format: "12345" (decimal string)
2025-05-04 20:11:37 -07:00
Frédéric Guillot
cb775bc79e
refactor(googlereader): move constants to separate files
2025-05-04 13:02:54 -07:00
Frédéric Guillot
6cc8d8abf1
fix(googlereader): /items/contents
should accept short form item IDs
2025-05-03 21:48:41 -07:00
Frédéric Guillot
50395f13ca
feat(googlereader): add mark-all-as-read
endpoint
2025-05-03 18:38:54 -07:00
Frédéric Guillot
e8c3435bb9
fix(googlereader): return a 400 instead of 500 for invalid edit requests
2025-05-02 18:15:00 -07:00
Frédéric Guillot
9a8a8bdca3
refactor(googlreader): remove redundant log message
2025-05-02 17:56:21 -07:00
Frédéric Guillot
63f0a17388
fix(googlereader): avoid panic for inexisting feed or category
2025-05-02 17:42:25 -07:00
NoelNegash
81c7669945
feat(sanitized): allow Spotify iframes
2025-05-02 16:25:17 -07:00
Frédéric Guillot
d33e305af9
fix(api): hide_globally
categories field should be a boolean
2025-04-21 19:43:25 -07:00
Frédéric Guillot
764212f37c
refactor(js): replace DomHelper
methods with standalone functions
2025-04-17 18:15:08 -07:00