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 /services/markup | |
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 'services/markup')
-rw-r--r-- | services/markup/main_test.go | 19 | ||||
-rw-r--r-- | services/markup/processorhelper.go | 29 | ||||
-rw-r--r-- | services/markup/processorhelper_test.go | 20 |
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")) +} |