diff options
author | Yarden Shoham <hrsi88@gmail.com> | 2022-10-22 20:15:52 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-23 01:15:52 +0800 |
commit | 63ebb53fd526021666bd9fab1f9d092380f7a2f4 (patch) | |
tree | 138c35a4bbe7dae7110399cd1a145598db248f43 /modules | |
parent | 82ecd3b19eb1382521b7999bd0e2dd977c3b994d (diff) | |
download | gitea-63ebb53fd526021666bd9fab1f9d092380f7a2f4.tar.gz gitea-63ebb53fd526021666bd9fab1f9d092380f7a2f4.zip |
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>
Diffstat (limited to 'modules')
-rw-r--r-- | modules/markup/html.go | 10 | ||||
-rw-r--r-- | modules/markup/markdown/markdown_test.go | 5 | ||||
-rw-r--r-- | modules/markup/renderer.go | 12 |
3 files changed, 24 insertions, 3 deletions
diff --git a/modules/markup/html.go b/modules/markup/html.go index a5606dbb51..ae00c3905f 100644 --- a/modules/markup/html.go +++ b/modules/markup/html.go @@ -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 } } diff --git a/modules/markup/markdown/markdown_test.go b/modules/markup/markdown/markdown_test.go index 12c6288c24..fbb741d1cd 100644 --- a/modules/markup/markdown/markdown_test.go +++ b/modules/markup/markdown/markdown_test.go @@ -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()) } diff --git a/modules/markup/renderer.go b/modules/markup/renderer.go index 5f69dc7235..b3289cb3c3 100644 --- a/modules/markup/renderer.go +++ b/modules/markup/renderer.go @@ -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) |