aboutsummaryrefslogtreecommitdiffstats
path: root/services/markup
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 /services/markup
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 'services/markup')
-rw-r--r--services/markup/main_test.go19
-rw-r--r--services/markup/processorhelper.go29
-rw-r--r--services/markup/processorhelper_test.go20
3 files changed, 68 insertions, 0 deletions
diff --git a/services/markup/main_test.go b/services/markup/main_test.go
new file mode 100644
index 0000000000..8efd08e69d
--- /dev/null
+++ b/services/markup/main_test.go
@@ -0,0 +1,19 @@
+// Copyright 2022 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package markup
+
+import (
+ "path/filepath"
+ "testing"
+
+ "code.gitea.io/gitea/models/unittest"
+)
+
+func TestMain(m *testing.M) {
+ unittest.MainTest(m, &unittest.TestOptions{
+ GiteaRootPath: filepath.Join("..", ".."),
+ FixtureFiles: []string{"user.yml"},
+ })
+}
diff --git a/services/markup/processorhelper.go b/services/markup/processorhelper.go
new file mode 100644
index 0000000000..2b1cac2a5b
--- /dev/null
+++ b/services/markup/processorhelper.go
@@ -0,0 +1,29 @@
+// Copyright 2022 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package markup
+
+import (
+ "context"
+
+ "code.gitea.io/gitea/models/user"
+ "code.gitea.io/gitea/modules/log"
+ "code.gitea.io/gitea/modules/markup"
+)
+
+func ProcessorHelper() *markup.ProcessorHelper {
+ return &markup.ProcessorHelper{
+ IsUsernameMentionable: func(ctx context.Context, username string) bool {
+ // TODO: cast ctx to modules/context.Context and use IsUserVisibleToViewer
+
+ // Only link if the user actually exists
+ userExists, err := user.IsUserExist(ctx, 0, username)
+ if err != nil {
+ log.Error("Failed to validate user in mention %q exists, assuming it does", username)
+ userExists = true
+ }
+ return userExists
+ },
+ }
+}
diff --git a/services/markup/processorhelper_test.go b/services/markup/processorhelper_test.go
new file mode 100644
index 0000000000..386465bc91
--- /dev/null
+++ b/services/markup/processorhelper_test.go
@@ -0,0 +1,20 @@
+// Copyright 2022 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package markup
+
+import (
+ "context"
+ "testing"
+
+ "code.gitea.io/gitea/models/unittest"
+
+ "github.com/stretchr/testify/assert"
+)
+
+func TestProcessorHelper(t *testing.T) {
+ assert.NoError(t, unittest.PrepareTestDatabase())
+ assert.True(t, ProcessorHelper().IsUsernameMentionable(context.Background(), "user10"))
+ assert.False(t, ProcessorHelper().IsUsernameMentionable(context.Background(), "no-such-user"))
+}