mirror of
https://github.com/miniflux/v2.git
synced 2025-09-30 19:22:11 +00:00
refactor(config): rewrite config parser
This PR refactors the configuration parser, replacing the old parser implementation with a new, more structured approach that includes validation and improved organization. Key changes: - Complete rewrite of the configuration parser using a map-based structure with built-in validation - Addition of comprehensive validator functions for configuration values - Renamed numerous configuration getter methods for better consistency
This commit is contained in:
parent
502e7108dd
commit
5e607be86a
27 changed files with 3615 additions and 3523 deletions
|
@ -414,7 +414,7 @@ func TestKeeplistRulesBehavior(t *testing.T) {
|
|||
// Tests for isBlockedGlobally function
|
||||
func TestIsBlockedGlobally(t *testing.T) {
|
||||
var err error
|
||||
config.Opts, err = config.NewParser().ParseEnvironmentVariables()
|
||||
config.Opts, err = config.NewConfigParser().ParseEnvironmentVariables()
|
||||
if err != nil {
|
||||
t.Fatalf(`Parsing failure: %v`, err)
|
||||
}
|
||||
|
@ -429,7 +429,7 @@ func TestIsBlockedGlobally(t *testing.T) {
|
|||
os.Setenv("FILTER_ENTRY_MAX_AGE_DAYS", "30")
|
||||
defer os.Clearenv()
|
||||
|
||||
config.Opts, err = config.NewParser().ParseEnvironmentVariables()
|
||||
config.Opts, err = config.NewConfigParser().ParseEnvironmentVariables()
|
||||
if err != nil {
|
||||
t.Fatalf(`Parsing failure: %v`, err)
|
||||
}
|
||||
|
|
|
@ -31,11 +31,11 @@ func getVideoIDFromYouTubeURL(websiteURL string) string {
|
|||
}
|
||||
|
||||
func shouldFetchYouTubeWatchTimeForSingleEntry(entry *model.Entry) bool {
|
||||
return config.Opts.FetchYouTubeWatchTime() && config.Opts.YouTubeApiKey() == "" && isYouTubeVideoURL(entry.URL)
|
||||
return config.Opts.FetchYouTubeWatchTime() && config.Opts.YouTubeAPIKey() == "" && isYouTubeVideoURL(entry.URL)
|
||||
}
|
||||
|
||||
func shouldFetchYouTubeWatchTimeInBulk() bool {
|
||||
return config.Opts.FetchYouTubeWatchTime() && config.Opts.YouTubeApiKey() != ""
|
||||
return config.Opts.FetchYouTubeWatchTime() && config.Opts.YouTubeAPIKey() != ""
|
||||
}
|
||||
|
||||
func fetchYouTubeWatchTimeForSingleEntry(websiteURL string) (int, error) {
|
||||
|
@ -82,7 +82,7 @@ func fetchYouTubeWatchTimeFromApiInBulk(videoIDs []string) (map[string]time.Dura
|
|||
|
||||
apiQuery := url.Values{}
|
||||
apiQuery.Set("id", strings.Join(videoIDs, ","))
|
||||
apiQuery.Set("key", config.Opts.YouTubeApiKey())
|
||||
apiQuery.Set("key", config.Opts.YouTubeAPIKey())
|
||||
apiQuery.Set("part", "contentDetails")
|
||||
|
||||
apiURL := url.URL{
|
||||
|
|
|
@ -67,7 +67,7 @@ func TestRewriteWithNoMatchingRule(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestRewriteYoutubeVideoLink(t *testing.T) {
|
||||
config.Opts = config.NewOptions()
|
||||
config.Opts = config.NewConfigOptions()
|
||||
|
||||
controlEntry := &model.Entry{
|
||||
URL: "https://www.youtube.com/watch?v=1234",
|
||||
|
@ -87,7 +87,7 @@ func TestRewriteYoutubeVideoLink(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestRewriteYoutubeShortLink(t *testing.T) {
|
||||
config.Opts = config.NewOptions()
|
||||
config.Opts = config.NewConfigOptions()
|
||||
|
||||
controlEntry := &model.Entry{
|
||||
URL: "https://www.youtube.com/shorts/1LUWKWZkPjo",
|
||||
|
@ -107,7 +107,7 @@ func TestRewriteYoutubeShortLink(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestRewriteIncorrectYoutubeLink(t *testing.T) {
|
||||
config.Opts = config.NewOptions()
|
||||
config.Opts = config.NewConfigOptions()
|
||||
|
||||
controlEntry := &model.Entry{
|
||||
URL: "https://www.youtube.com/some-page",
|
||||
|
@ -131,7 +131,7 @@ func TestRewriteYoutubeLinkAndCustomEmbedURL(t *testing.T) {
|
|||
os.Setenv("YOUTUBE_EMBED_URL_OVERRIDE", "https://invidious.custom/embed/")
|
||||
|
||||
var err error
|
||||
parser := config.NewParser()
|
||||
parser := config.NewConfigParser()
|
||||
config.Opts, err = parser.ParseEnvironmentVariables()
|
||||
|
||||
if err != nil {
|
||||
|
@ -156,7 +156,7 @@ func TestRewriteYoutubeLinkAndCustomEmbedURL(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestRewriteYoutubeVideoLinkUsingInvidious(t *testing.T) {
|
||||
config.Opts = config.NewOptions()
|
||||
config.Opts = config.NewConfigOptions()
|
||||
controlEntry := &model.Entry{
|
||||
URL: "https://www.youtube.com/watch?v=1234",
|
||||
Title: `A title`,
|
||||
|
@ -176,7 +176,7 @@ func TestRewriteYoutubeVideoLinkUsingInvidious(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestRewriteYoutubeShortLinkUsingInvidious(t *testing.T) {
|
||||
config.Opts = config.NewOptions()
|
||||
config.Opts = config.NewConfigOptions()
|
||||
controlEntry := &model.Entry{
|
||||
URL: "https://www.youtube.com/shorts/1LUWKWZkPjo",
|
||||
Title: `A title`,
|
||||
|
@ -196,7 +196,7 @@ func TestRewriteYoutubeShortLinkUsingInvidious(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestAddYoutubeVideoFromId(t *testing.T) {
|
||||
config.Opts = config.NewOptions()
|
||||
config.Opts = config.NewConfigOptions()
|
||||
|
||||
scenarios := map[string]string{
|
||||
// Test with single YouTube ID
|
||||
|
@ -239,7 +239,7 @@ func TestAddYoutubeVideoFromIdWithCustomEmbedURL(t *testing.T) {
|
|||
os.Setenv("YOUTUBE_EMBED_URL_OVERRIDE", "https://invidious.custom/embed/")
|
||||
|
||||
var err error
|
||||
parser := config.NewParser()
|
||||
parser := config.NewConfigParser()
|
||||
config.Opts, err = parser.ParseEnvironmentVariables()
|
||||
|
||||
if err != nil {
|
||||
|
|
|
@ -392,7 +392,7 @@ func TestInvalidNestedTag(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestInvalidIFrame(t *testing.T) {
|
||||
config.Opts = config.NewOptions()
|
||||
config.Opts = config.NewConfigOptions()
|
||||
|
||||
input := `<iframe src="http://example.org/"></iframe>`
|
||||
expected := ``
|
||||
|
@ -404,7 +404,7 @@ func TestInvalidIFrame(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestSameDomainIFrame(t *testing.T) {
|
||||
config.Opts = config.NewOptions()
|
||||
config.Opts = config.NewConfigOptions()
|
||||
|
||||
input := `<iframe src="http://example.com/test"></iframe>`
|
||||
expected := ``
|
||||
|
@ -416,7 +416,7 @@ func TestSameDomainIFrame(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestInvidiousIFrame(t *testing.T) {
|
||||
config.Opts = config.NewOptions()
|
||||
config.Opts = config.NewConfigOptions()
|
||||
|
||||
input := `<iframe src="https://yewtu.be/watch?v=video_id"></iframe>`
|
||||
expected := `<iframe src="https://yewtu.be/watch?v=video_id" sandbox="allow-scripts allow-same-origin allow-popups allow-popups-to-escape-sandbox" loading="lazy"></iframe>`
|
||||
|
@ -432,7 +432,7 @@ func TestCustomYoutubeEmbedURL(t *testing.T) {
|
|||
|
||||
defer os.Clearenv()
|
||||
var err error
|
||||
if config.Opts, err = config.NewParser().ParseEnvironmentVariables(); err != nil {
|
||||
if config.Opts, err = config.NewConfigParser().ParseEnvironmentVariables(); err != nil {
|
||||
t.Fatalf(`Parsing failure: %v`, err)
|
||||
}
|
||||
|
||||
|
@ -446,7 +446,7 @@ func TestCustomYoutubeEmbedURL(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestIFrameWithChildElements(t *testing.T) {
|
||||
config.Opts = config.NewOptions()
|
||||
config.Opts = config.NewConfigOptions()
|
||||
|
||||
input := `<iframe src="https://www.youtube.com/"><p>test</p></iframe>`
|
||||
expected := `<iframe src="https://www.youtube.com/" sandbox="allow-scripts allow-same-origin allow-popups allow-popups-to-escape-sandbox" loading="lazy"></iframe>`
|
||||
|
@ -850,7 +850,7 @@ func TestReplaceYoutubeURLWithCustomURL(t *testing.T) {
|
|||
os.Setenv("YOUTUBE_EMBED_URL_OVERRIDE", "https://invidious.custom/embed/")
|
||||
|
||||
var err error
|
||||
config.Opts, err = config.NewParser().ParseEnvironmentVariables()
|
||||
config.Opts, err = config.NewConfigParser().ParseEnvironmentVariables()
|
||||
if err != nil {
|
||||
t.Fatalf(`Parsing failure: %v`, err)
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue