1
0
Fork 0
mirror of https://github.com/miniflux/v2.git synced 2025-09-30 19:22:11 +00:00

Merge branch 'main' into feat/content-rewrite-progressive-images

This commit is contained in:
Axel Verhaeghe 2025-09-30 11:16:50 +02:00 committed by GitHub
commit c912f1bd34
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 59 additions and 53 deletions

View file

@ -138,46 +138,51 @@ var (
"linkedin.com/shareArticle", "linkedin.com/shareArticle",
} }
validURISchemes = map[string]struct{}{ // See https://www.iana.org/assignments/uri-schemes/uri-schemes.xhtml
"apt": {}, validURISchemes = []string{
"bitcoin": {}, // Most commong schemes on top.
"callto": {}, "https:",
"dav": {}, "http:",
"davs": {},
"ed2k": {}, // Then the rest.
"facetime": {}, "apt:",
"feed": {}, "bitcoin:",
"ftp": {}, "callto:",
"geo": {}, "dav:",
"git": {}, "davs:",
"gopher": {}, "ed2k:",
"http": {}, "facetime:",
"https": {}, "feed:",
"irc": {}, "ftp:",
"irc6": {}, "geo:",
"ircs": {}, "git:",
"itms-apps": {}, "gopher:",
"itms": {}, "irc:",
"magnet": {}, "irc6:",
"mailto": {}, "ircs:",
"news": {}, "itms-apps:",
"nntp": {}, "itms:",
"rtmp": {}, "magnet:",
"sftp": {}, "mailto:",
"sip": {}, "news:",
"sips": {}, "nntp:",
"skype": {}, "rtmp:",
"spotify": {}, "sftp:",
"ssh": {}, "sip:",
"steam": {}, "sips:",
"svn": {}, "skype:",
"svn+ssh": {}, "spotify:",
"tel": {}, "ssh:",
"webcal": {}, "steam:",
"xmpp": {}, "svn:",
"svn+ssh:",
"tel:",
"webcal:",
"xmpp:",
// iOS Apps // iOS Apps
"opener": {}, // https://www.opener.link "opener:", // https://www.opener.link
"hack": {}, // https://apps.apple.com/it/app/hack-for-hacker-news-reader/id1464477788?l=en-GB "hack:", // https://apps.apple.com/it/app/hack-for-hacker-news-reader/id1464477788?l=en-GB
} }
dataAttributeAllowedPrefixes = []string{ dataAttributeAllowedPrefixes = []string{
@ -467,23 +472,22 @@ func hasRequiredAttributes(tagName string, attributes []string) bool {
} }
} }
// See https://www.iana.org/assignments/uri-schemes/uri-schemes.xhtml
func hasValidURIScheme(absoluteURL string) bool { func hasValidURIScheme(absoluteURL string) bool {
colonIndex := strings.IndexByte(absoluteURL, ':') for _, scheme := range validURISchemes {
// Scheme must exist (colonIndex > 0). An empty scheme (e.g. ":foo") is not allowed. if strings.HasPrefix(absoluteURL, scheme) {
if colonIndex <= 0 { return true
return false }
} }
return false
scheme := absoluteURL[:colonIndex]
_, ok := validURISchemes[strings.ToLower(scheme)]
return ok
} }
func isBlockedResource(absoluteURL string) bool { func isBlockedResource(absoluteURL string) bool {
return slices.ContainsFunc(blockedResourceURLSubstrings, func(element string) bool { for _, blockedURL := range blockedResourceURLSubstrings {
return strings.Contains(absoluteURL, element) if strings.Contains(absoluteURL, blockedURL) {
}) return true
}
}
return false
} }
func isValidIframeSource(iframeSourceURL string) bool { func isValidIframeSource(iframeSourceURL string) bool {

View file

@ -1,5 +1,5 @@
.\" Manpage for miniflux. .\" Manpage for miniflux.
.TH "MINIFLUX" "1" "August 19, 2025" "\ \&" "\ \&" .TH "MINIFLUX" "1" "September 29, 2025" "\ \&" "\ \&"
.SH NAME .SH NAME
miniflux \- Minimalist and opinionated feed reader miniflux \- Minimalist and opinionated feed reader
@ -486,7 +486,9 @@ Set to 1 to authorize OAuth2 user creation\&.
Disabled by default\&. Disabled by default\&.
.TP .TP
.B POLLING_FREQUENCY .B POLLING_FREQUENCY
Refresh interval in minutes for feeds\&. Interval for the background job scheduler.
.br
Determines how often a batch of feeds is selected for refresh, based on their last refresh time\&.
.br .br
Default is 60 minutes\&. Default is 60 minutes\&.
.TP .TP