aboutsummaryrefslogtreecommitdiff
path: root/internal/reader/rewrite/rules.go
blob: 418f7db8d2d31f074292d3af946e92736433cf50 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
// SPDX-FileCopyrightText: Copyright The Miniflux Authors. All rights reserved.
// SPDX-License-Identifier: Apache-2.0

package rewrite // import "miniflux.app/v2/internal/reader/rewrite"

import "regexp"

// List of predefined rewrite rules (alphabetically sorted)
// Available rules: "add_image_title", "add_youtube_video"
// domain => rule name
var predefinedRules = map[string]string{
	"abstrusegoose.com":      "add_image_title",
	"amazingsuperpowers.com": "add_image_title",
	"blog.cloudflare.com":    `add_image_title,remove("figure.kg-image-card figure.kg-image + img")`,
	"blog.laravel.com":       "parse_markdown",
	"cowbirdsinlove.com":     "add_image_title",
	"drawingboardcomic.com":  "add_image_title",
	"exocomics.com":          "add_image_title",
	"framatube.org":          "nl2br,convert_text_link",
	"happletea.com":          "add_image_title",
	"ilpost.it":              `remove(".art_tag, #audioPlayerArticle, .author-container, .caption, .ilpostShare, .lastRecents, #mc_embed_signup, .outbrain_inread, p:has(.leggi-anche), .youtube-overlay")`,
	"imogenquest.net":        "add_image_title",
	"lukesurl.com":           "add_image_title",
	"medium.com":             "fix_medium_images",
	"mercworks.net":          "add_image_title",
	"monkeyuser.com":         "add_image_title",
	"mrlovenstein.com":       "add_image_title",
	"nedroid.com":            "add_image_title",
	"oglaf.com":              `replace("media.oglaf.com/story/tt(.+).gif"|"media.oglaf.com/comic/$1.jpg"),add_image_title`,
	"optipess.com":           "add_image_title",
	"peebleslab.com":         "add_image_title",
	"quantamagazine.org":     `add_youtube_video_from_id, remove("h6:not(.byline,.post__title__kicker), #comments, .next-post__content, .footer__section, figure .outer--content, script")`,
	"sentfromthemoon.com":    "add_image_title",
	"thedoghousediaries.com": "add_image_title",
	"theverge.com":           `add_dynamic_image, remove("div.duet--recirculation--related-list, .hidden")`,
	"treelobsters.com":       "add_image_title",
	"webtoons.com":           `add_dynamic_image,replace("webtoon"|"swebtoon")`,
	"www.qwantz.com":         "add_image_title,add_mailto_subject",
	"www.recalbox.com":       "parse_markdown",
	"xkcd.com":               "add_image_title",
	"youtube.com":            "add_youtube_video",
}

type RefererRule struct {
	URLPattern *regexp.Regexp
	Referer    string
}

// List of predefined referer rules
var PredefinedRefererRules = []RefererRule{
	{
		URLPattern: regexp.MustCompile(`^https://\w+\.sinaimg\.cn`),
		Referer:    "https://weibo.com",
	},
	{
		URLPattern: regexp.MustCompile(`^https://i\.pximg\.net`),
		Referer:    "https://www.pixiv.net",
	},
	{
		URLPattern: regexp.MustCompile(`^https://cdnfile\.sspai\.com`),
		Referer:    "https://sspai.com",
	},
	{
		URLPattern: regexp.MustCompile(`^https://(?:\w|-)+\.cdninstagram\.com`),
		Referer:    "https://www.instagram.com",
	},
	{
		URLPattern: regexp.MustCompile(`^https://sp1\.piokok\.com`),
		Referer:    "https://sp1.piokok.com",
	},
	{
		URLPattern: regexp.MustCompile(`^https://f\.video\.weibocdn\.com`),
		Referer:    "https://weibo.com",
	},
	{
		URLPattern: regexp.MustCompile(`^https://img\.hellogithub\.com`),
		Referer:    "https://hellogithub.com",
	},
}

// GetRefererForURL returns the referer for the given URL if it exists, otherwise an empty string.
func GetRefererForURL(url string) string {
	for _, rule := range PredefinedRefererRules {
		if rule.URLPattern.MatchString(url) {
			return rule.Referer
		}
	}
	return ""
}