mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 08:30:25 +08:00 
			
		
		
		
	Add link to user profile in markdown mention only if user exists (#21533)
Previously mentioning a user would link to its profile, regardless of whether the user existed. This change tests if the user exists and only if it does - a link to its profile is added. * Fixes #3444 Signed-off-by: Yarden Shoham <hrsi88@gmail.com> Co-authored-by: wxiaoguang <wxiaoguang@gmail.com> Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
This commit is contained in:
		@@ -603,8 +603,14 @@ func mentionProcessor(ctx *RenderContext, node *html.Node) {
 | 
			
		||||
			start = loc.End
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
		replaceContent(node, loc.Start, loc.End, createLink(util.URLJoin(setting.AppURL, mention[1:]), mention, "mention"))
 | 
			
		||||
		node = node.NextSibling.NextSibling
 | 
			
		||||
		mentionedUsername := mention[1:]
 | 
			
		||||
 | 
			
		||||
		if processorHelper.IsUsernameMentionable != nil && processorHelper.IsUsernameMentionable(ctx.Ctx, mentionedUsername) {
 | 
			
		||||
			replaceContent(node, loc.Start, loc.End, createLink(util.URLJoin(setting.AppURL, mentionedUsername), mention, "mention"))
 | 
			
		||||
			node = node.NextSibling.NextSibling
 | 
			
		||||
		} else {
 | 
			
		||||
			node = node.NextSibling
 | 
			
		||||
		}
 | 
			
		||||
		start = 0
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -38,6 +38,11 @@ func TestMain(m *testing.M) {
 | 
			
		||||
	if err := git.InitSimple(context.Background()); err != nil {
 | 
			
		||||
		log.Fatal("git init failed, err: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
	markup.Init(&markup.ProcessorHelper{
 | 
			
		||||
		IsUsernameMentionable: func(ctx context.Context, username string) bool {
 | 
			
		||||
			return username == "r-lyeh"
 | 
			
		||||
		},
 | 
			
		||||
	})
 | 
			
		||||
	os.Exit(m.Run())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -19,8 +19,18 @@ import (
 | 
			
		||||
	"code.gitea.io/gitea/modules/setting"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type ProcessorHelper struct {
 | 
			
		||||
	IsUsernameMentionable func(ctx context.Context, username string) bool
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var processorHelper ProcessorHelper
 | 
			
		||||
 | 
			
		||||
// Init initialize regexps for markdown parsing
 | 
			
		||||
func Init() {
 | 
			
		||||
func Init(ph *ProcessorHelper) {
 | 
			
		||||
	if ph != nil {
 | 
			
		||||
		processorHelper = *ph
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	NewSanitizer()
 | 
			
		||||
	if len(setting.Markdown.CustomURLSchemes) > 0 {
 | 
			
		||||
		CustomLinkURLSchemes(setting.Markdown.CustomURLSchemes)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user