summaryrefslogtreecommitdiffstats
path: root/modules
diff options
context:
space:
mode:
authorYarden Shoham <hrsi88@gmail.com>2022-10-22 20:15:52 +0300
committerGitHub <noreply@github.com>2022-10-23 01:15:52 +0800
commit63ebb53fd526021666bd9fab1f9d092380f7a2f4 (patch)
tree138c35a4bbe7dae7110399cd1a145598db248f43 /modules
parent82ecd3b19eb1382521b7999bd0e2dd977c3b994d (diff)
downloadgitea-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.go10
-rw-r--r--modules/markup/markdown/markdown_test.go5
-rw-r--r--modules/markup/renderer.go12
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)