mirror of
				https://codeberg.org/forgejo/forgejo.git
				synced 2025-11-04 08:21:11 +00:00 
			
		
		
		
	[GITEA] convert feed items' titles to plain text
Refs: https://codeberg.org/forgejo/forgejo/pulls/1595 (cherry picked from commit35b962e631) (cherry picked from commit1004e35b84) (cherry picked from commitaf51dd594d)
This commit is contained in:
		
					parent
					
						
							
								a4c2c6b004
							
						
					
				
			
			
				commit
				
					
						ef10fae296
					
				
			
		
					 2 changed files with 49 additions and 1 deletions
				
			
		| 
						 | 
					@ -21,6 +21,7 @@ import (
 | 
				
			||||||
	"code.gitea.io/gitea/modules/util"
 | 
						"code.gitea.io/gitea/modules/util"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/gorilla/feeds"
 | 
						"github.com/gorilla/feeds"
 | 
				
			||||||
 | 
						"github.com/jaytaylor/html2text"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func toBranchLink(ctx *context.Context, act *activities_model.Action) string {
 | 
					func toBranchLink(ctx *context.Context, act *activities_model.Action) string {
 | 
				
			||||||
| 
						 | 
					@ -239,8 +240,15 @@ func feedActionsToFeedItems(ctx *context.Context, actions activities_model.Actio
 | 
				
			||||||
			content = desc
 | 
								content = desc
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// It's a common practice for feed generators to use plain text titles.
 | 
				
			||||||
 | 
							// See https://codeberg.org/forgejo/forgejo/pulls/1595
 | 
				
			||||||
 | 
							plainTitle, err := html2text.FromString(title, html2text.Options{OmitLinks: true})
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								return nil, err
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		items = append(items, &feeds.Item{
 | 
							items = append(items, &feeds.Item{
 | 
				
			||||||
			Title:       title,
 | 
								Title:       plainTitle,
 | 
				
			||||||
			Link:        link,
 | 
								Link:        link,
 | 
				
			||||||
			Description: desc,
 | 
								Description: desc,
 | 
				
			||||||
			Author: &feeds.Author{
 | 
								Author: &feeds.Author{
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										40
									
								
								tests/integration/api_feed_plain_text_titles_test.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								tests/integration/api_feed_plain_text_titles_test.go
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,40 @@
 | 
				
			||||||
 | 
					// Copyright 2023 The Forgejo Authors. All rights reserved.
 | 
				
			||||||
 | 
					// SPDX-License-Identifier: MIT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package integration
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"net/http"
 | 
				
			||||||
 | 
						"testing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/tests"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/stretchr/testify/assert"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestFeedPlainTextTitles(t *testing.T) {
 | 
				
			||||||
 | 
						// This test verifies that items' titles in feeds are generated as plain text.
 | 
				
			||||||
 | 
						// See https://codeberg.org/forgejo/forgejo/pulls/1595
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						t.Run("Feed plain text titles", func(t *testing.T) {
 | 
				
			||||||
 | 
							t.Run("Atom", func(t *testing.T) {
 | 
				
			||||||
 | 
								defer tests.PrepareTestEnv(t)()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								req := NewRequest(t, "GET", "/user2/repo1.atom")
 | 
				
			||||||
 | 
								resp := MakeRequest(t, req, http.StatusOK)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								data := resp.Body.String()
 | 
				
			||||||
 | 
								assert.Contains(t, data, "<title>the_1-user.with.all.allowedChars closed issue user2/repo1#4</title>")
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							t.Run("RSS", func(t *testing.T) {
 | 
				
			||||||
 | 
								defer tests.PrepareTestEnv(t)()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								req := NewRequest(t, "GET", "/user2/repo1.rss")
 | 
				
			||||||
 | 
								resp := MakeRequest(t, req, http.StatusOK)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								data := resp.Body.String()
 | 
				
			||||||
 | 
								assert.Contains(t, data, "<title>the_1-user.with.all.allowedChars closed issue user2/repo1#4</title>")
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue