mirror of
				https://github.com/go-gitea/gitea
				synced 2025-10-30 19:08:37 +00:00 
			
		
		
		
	Allow disable RSS/Atom feed (#21622)
This patch provide a mechanism to disable RSS/Atom feed. Signed-off-by: Xinyu Zhou <i@sourcehut.net> Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com> Co-authored-by: 6543 <6543@obermui.de>
This commit is contained in:
		| @@ -2235,6 +2235,8 @@ ROUTER = console | |||||||
| ;SHOW_FOOTER_TEMPLATE_LOAD_TIME = true | ;SHOW_FOOTER_TEMPLATE_LOAD_TIME = true | ||||||
| ;; Generate sitemap. Defaults to `true`. | ;; Generate sitemap. Defaults to `true`. | ||||||
| ;ENABLE_SITEMAP = true | ;ENABLE_SITEMAP = true | ||||||
|  | ;; Enable/Disable RSS/Atom feed | ||||||
|  | ;ENABLE_FEED = true | ||||||
|  |  | ||||||
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||||||
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||||||
|   | |||||||
| @@ -1288,3 +1288,4 @@ PROXY_HOSTS = *.github.com | |||||||
| - `SHOW_FOOTER_VERSION`: **true**: Show Gitea and Go version information in the footer. | - `SHOW_FOOTER_VERSION`: **true**: Show Gitea and Go version information in the footer. | ||||||
| - `SHOW_FOOTER_TEMPLATE_LOAD_TIME`: **true**: Show time of template execution in the footer. | - `SHOW_FOOTER_TEMPLATE_LOAD_TIME`: **true**: Show time of template execution in the footer. | ||||||
| - `ENABLE_SITEMAP`: **true**: Generate sitemap. | - `ENABLE_SITEMAP`: **true**: Generate sitemap. | ||||||
|  | - `ENABLE_FEED`: **true**: Enable/Disable RSS/Atom feed. | ||||||
|   | |||||||
| @@ -441,8 +441,10 @@ func RepoAssignment(ctx *Context) (cancel context.CancelFunc) { | |||||||
| 	userName := ctx.Params(":username") | 	userName := ctx.Params(":username") | ||||||
| 	repoName := ctx.Params(":reponame") | 	repoName := ctx.Params(":reponame") | ||||||
| 	repoName = strings.TrimSuffix(repoName, ".git") | 	repoName = strings.TrimSuffix(repoName, ".git") | ||||||
|  | 	if setting.EnableFeed { | ||||||
| 		repoName = strings.TrimSuffix(repoName, ".rss") | 		repoName = strings.TrimSuffix(repoName, ".rss") | ||||||
| 		repoName = strings.TrimSuffix(repoName, ".atom") | 		repoName = strings.TrimSuffix(repoName, ".atom") | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	// Check if the user is the same as the repository owner | 	// Check if the user is the same as the repository owner | ||||||
| 	if ctx.IsSigned && ctx.Doer.LowerName == strings.ToLower(userName) { | 	if ctx.IsSigned && ctx.Doer.LowerName == strings.ToLower(userName) { | ||||||
|   | |||||||
| @@ -440,6 +440,7 @@ var ( | |||||||
| 	ShowFooterBranding         bool | 	ShowFooterBranding         bool | ||||||
| 	ShowFooterVersion          bool | 	ShowFooterVersion          bool | ||||||
| 	ShowFooterTemplateLoadTime bool | 	ShowFooterTemplateLoadTime bool | ||||||
|  | 	EnableFeed                 bool | ||||||
|  |  | ||||||
| 	// Global setting objects | 	// Global setting objects | ||||||
| 	Cfg           *ini.File | 	Cfg           *ini.File | ||||||
| @@ -1102,6 +1103,7 @@ func loadFromConf(allowEmpty bool, extraConfig string) { | |||||||
| 	ShowFooterVersion = Cfg.Section("other").Key("SHOW_FOOTER_VERSION").MustBool(true) | 	ShowFooterVersion = Cfg.Section("other").Key("SHOW_FOOTER_VERSION").MustBool(true) | ||||||
| 	ShowFooterTemplateLoadTime = Cfg.Section("other").Key("SHOW_FOOTER_TEMPLATE_LOAD_TIME").MustBool(true) | 	ShowFooterTemplateLoadTime = Cfg.Section("other").Key("SHOW_FOOTER_TEMPLATE_LOAD_TIME").MustBool(true) | ||||||
| 	EnableSitemap = Cfg.Section("other").Key("ENABLE_SITEMAP").MustBool(true) | 	EnableSitemap = Cfg.Section("other").Key("ENABLE_SITEMAP").MustBool(true) | ||||||
|  | 	EnableFeed = Cfg.Section("other").Key("ENABLE_FEED").MustBool(true) | ||||||
|  |  | ||||||
| 	UI.ShowUserEmail = Cfg.Section("ui").Key("SHOW_USER_EMAIL").MustBool(true) | 	UI.ShowUserEmail = Cfg.Section("ui").Key("SHOW_USER_EMAIL").MustBool(true) | ||||||
| 	UI.DefaultShowFullName = Cfg.Section("ui").Key("DEFAULT_SHOW_FULL_NAME").MustBool(false) | 	UI.DefaultShowFullName = Cfg.Section("ui").Key("DEFAULT_SHOW_FULL_NAME").MustBool(false) | ||||||
|   | |||||||
| @@ -771,13 +771,16 @@ func checkCitationFile(ctx *context.Context, entry *git.TreeEntry) { | |||||||
|  |  | ||||||
| // Home render repository home page | // Home render repository home page | ||||||
| func Home(ctx *context.Context) { | func Home(ctx *context.Context) { | ||||||
|  | 	if setting.EnableFeed { | ||||||
| 		isFeed, _, showFeedType := feed.GetFeedType(ctx.Params(":reponame"), ctx.Req) | 		isFeed, _, showFeedType := feed.GetFeedType(ctx.Params(":reponame"), ctx.Req) | ||||||
| 		if isFeed { | 		if isFeed { | ||||||
| 			feed.ShowRepoFeed(ctx, ctx.Repo.Repository, showFeedType) | 			feed.ShowRepoFeed(ctx, ctx.Repo.Repository, showFeedType) | ||||||
| 			return | 			return | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
|  | 		ctx.Data["EnableFeed"] = true | ||||||
| 		ctx.Data["FeedURL"] = ctx.Repo.Repository.HTMLURL() | 		ctx.Data["FeedURL"] = ctx.Repo.Repository.HTMLURL() | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	checkHomeCodeViewable(ctx) | 	checkHomeCodeViewable(ctx) | ||||||
| 	if ctx.Written() { | 	if ctx.Written() { | ||||||
|   | |||||||
| @@ -310,6 +310,13 @@ func RegisterRoutes(m *web.Route) { | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | 	feedEnabled := func(ctx *context.Context) { | ||||||
|  | 		if !setting.EnableFeed { | ||||||
|  | 			ctx.Error(http.StatusNotFound) | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	// FIXME: not all routes need go through same middleware. | 	// FIXME: not all routes need go through same middleware. | ||||||
| 	// Especially some AJAX requests, we can reduce middleware number to improve performance. | 	// Especially some AJAX requests, we can reduce middleware number to improve performance. | ||||||
| 	// Routers. | 	// Routers. | ||||||
| @@ -633,9 +640,11 @@ func RegisterRoutes(m *web.Route) { | |||||||
| 			m.Get(".png", func(ctx *context.Context) { ctx.Error(http.StatusNotFound) }) | 			m.Get(".png", func(ctx *context.Context) { ctx.Error(http.StatusNotFound) }) | ||||||
| 			m.Get(".keys", user.ShowSSHKeys) | 			m.Get(".keys", user.ShowSSHKeys) | ||||||
| 			m.Get(".gpg", user.ShowGPGKeys) | 			m.Get(".gpg", user.ShowGPGKeys) | ||||||
| 			m.Get(".rss", feed.ShowUserFeedRSS) | 			m.Get(".rss", feedEnabled, feed.ShowUserFeedRSS) | ||||||
| 			m.Get(".atom", feed.ShowUserFeedAtom) | 			m.Get(".atom", feedEnabled, feed.ShowUserFeedAtom) | ||||||
| 			m.Get("", user.Profile) | 			m.Get("", user.Profile) | ||||||
|  | 		}, func(ctx *context.Context) { | ||||||
|  | 			ctx.Data["EnableFeed"] = setting.EnableFeed | ||||||
| 		}, context_service.UserAssignmentWeb()) | 		}, context_service.UserAssignmentWeb()) | ||||||
| 		m.Get("/attachments/{uuid}", repo.GetAttachment) | 		m.Get("/attachments/{uuid}", repo.GetAttachment) | ||||||
| 	}, ignSignIn) | 	}, ignSignIn) | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ | |||||||
| 	<meta name="go-import" content="{{.GoGetImport}} git {{.RepoCloneLink.HTTPS}}"> | 	<meta name="go-import" content="{{.GoGetImport}} git {{.RepoCloneLink.HTTPS}}"> | ||||||
| 	<meta name="go-source" content="{{.GoGetImport}} _ {{.GoDocDirectory}} {{.GoDocFile}}"> | 	<meta name="go-source" content="{{.GoGetImport}} _ {{.GoDocDirectory}} {{.GoDocFile}}"> | ||||||
| {{end}} | {{end}} | ||||||
| {{if .FeedURL}} | {{if and .EnableFeed .FeedURL}} | ||||||
| 	<link rel="alternate" type="application/atom+xml" title="" href="{{.FeedURL}}.atom"> | 	<link rel="alternate" type="application/atom+xml" title="" href="{{.FeedURL}}.atom"> | ||||||
| 	<link rel="alternate" type="application/rss+xml" title="" href="{{.FeedURL}}.rss"> | 	<link rel="alternate" type="application/rss+xml" title="" href="{{.FeedURL}}.rss"> | ||||||
| {{end}} | {{end}} | ||||||
|   | |||||||
| @@ -5,7 +5,9 @@ | |||||||
| 		<div id="org-info"> | 		<div id="org-info"> | ||||||
| 			<div class="ui header"> | 			<div class="ui header"> | ||||||
| 				{{.Org.DisplayName}} | 				{{.Org.DisplayName}} | ||||||
|  | 				{{if .EnableFeed}} | ||||||
| 					<a href="{{.Org.HomeLink}}.rss"><i class="ui grey icon tooltip ml-3" data-content="{{.locale.Tr "rss_feed"}}" data-position="top center">{{svg "octicon-rss" 36}}</i></a> | 					<a href="{{.Org.HomeLink}}.rss"><i class="ui grey icon tooltip ml-3" data-content="{{.locale.Tr "rss_feed"}}" data-position="top center">{{svg "octicon-rss" 36}}</i></a> | ||||||
|  | 				{{end}} | ||||||
| 				<span class="org-visibility"> | 				<span class="org-visibility"> | ||||||
| 					{{if .Org.Visibility.IsLimited}}<div class="ui large basic horizontal label">{{.locale.Tr "org.settings.visibility.limited_shortname"}}</div>{{end}} | 					{{if .Org.Visibility.IsLimited}}<div class="ui large basic horizontal label">{{.locale.Tr "org.settings.visibility.limited_shortname"}}</div>{{end}} | ||||||
| 					{{if .Org.Visibility.IsPrivate}}<div class="ui large basic horizontal label">{{.locale.Tr "org.settings.visibility.private_shortname"}}</div>{{end}} | 					{{if .Org.Visibility.IsPrivate}}<div class="ui large basic horizontal label">{{.locale.Tr "org.settings.visibility.private_shortname"}}</div>{{end}} | ||||||
|   | |||||||
| @@ -13,7 +13,9 @@ | |||||||
| 					<a href="{{.Owner.HomeLink}}">{{.Owner.Name}}</a> | 					<a href="{{.Owner.HomeLink}}">{{.Owner.Name}}</a> | ||||||
| 					<div class="mx-2">/</div> | 					<div class="mx-2">/</div> | ||||||
| 					<a href="{{$.RepoLink}}">{{.Name}}</a> | 					<a href="{{$.RepoLink}}">{{.Name}}</a> | ||||||
|  | 					{{if $.EnableFeed}} | ||||||
| 						<a href="{{$.RepoLink}}.rss"><i class="ui grey icon tooltip ml-3" data-content="{{$.locale.Tr "rss_feed"}}" data-position="top center">{{svg "octicon-rss" 18}}</i></a> | 						<a href="{{$.RepoLink}}.rss"><i class="ui grey icon tooltip ml-3" data-content="{{$.locale.Tr "rss_feed"}}" data-position="top center">{{svg "octicon-rss" 18}}</i></a> | ||||||
|  | 					{{end}} | ||||||
| 					<div class="labels df ac fw"> | 					<div class="labels df ac fw"> | ||||||
| 						{{if .IsTemplate}} | 						{{if .IsTemplate}} | ||||||
| 							{{if .IsPrivate}} | 							{{if .IsPrivate}} | ||||||
|   | |||||||
| @@ -18,7 +18,9 @@ | |||||||
| 					<div class="content word-break profile-avatar-name"> | 					<div class="content word-break profile-avatar-name"> | ||||||
| 						{{if .Owner.FullName}}<span class="header text center">{{.Owner.FullName}}</span>{{end}} | 						{{if .Owner.FullName}}<span class="header text center">{{.Owner.FullName}}</span>{{end}} | ||||||
| 						<span class="username text center">{{.Owner.Name}}</span> | 						<span class="username text center">{{.Owner.Name}}</span> | ||||||
|  | 						{{if .EnableFeed}} | ||||||
| 							<a href="{{.Owner.HomeLink}}.rss"><i class="ui grey icon tooltip ml-3" data-content="{{.locale.Tr "rss_feed"}}" data-position="bottom center">{{svg "octicon-rss" 18}}</i></a> | 							<a href="{{.Owner.HomeLink}}.rss"><i class="ui grey icon tooltip ml-3" data-content="{{.locale.Tr "rss_feed"}}" data-position="bottom center">{{svg "octicon-rss" 18}}</i></a> | ||||||
|  | 						{{end}} | ||||||
| 						<div class="mt-3"> | 						<div class="mt-3"> | ||||||
| 							<a class="muted" href="{{.Owner.HomeLink}}?tab=followers">{{svg "octicon-person" 18 "mr-2"}}{{.Owner.NumFollowers}} {{.locale.Tr "user.followers"}}</a> · <a class="muted" href="{{.Owner.HomeLink}}?tab=following">{{.Owner.NumFollowing}} {{.locale.Tr "user.following"}}</a> | 							<a class="muted" href="{{.Owner.HomeLink}}?tab=followers">{{svg "octicon-person" 18 "mr-2"}}{{.Owner.NumFollowers}} {{.locale.Tr "user.followers"}}</a> · <a class="muted" href="{{.Owner.HomeLink}}?tab=following">{{.Owner.NumFollowing}} {{.locale.Tr "user.following"}}</a> | ||||||
| 						</div> | 						</div> | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user