PLT-5458: If someone posts a channel link to channel_A that you don't belong to, it doesn't render properly (#7833)
* add channel link hints to post props * optimization * update regex, add unit test * fix rebase issue
Этот коммит содержится в:
коммит произвёл
Christopher Speller
родитель
27ba68a789
Коммит
b87fae646a
@@ -7,6 +7,7 @@ import (
|
||||
"encoding/json"
|
||||
"io"
|
||||
"net/http"
|
||||
"regexp"
|
||||
"strings"
|
||||
"unicode/utf8"
|
||||
)
|
||||
@@ -294,6 +295,22 @@ func PostPatchFromJson(data io.Reader) *PostPatch {
|
||||
return &post
|
||||
}
|
||||
|
||||
var channelMentionRegexp = regexp.MustCompile(`\B~[a-zA-Z0-9\-_]+`)
|
||||
|
||||
func (o *Post) ChannelMentions() (names []string) {
|
||||
if strings.Contains(o.Message, "~") {
|
||||
alreadyMentioned := make(map[string]bool)
|
||||
for _, match := range channelMentionRegexp.FindAllString(o.Message, -1) {
|
||||
name := match[1:]
|
||||
if !alreadyMentioned[name] {
|
||||
names = append(names, name)
|
||||
alreadyMentioned[name] = true
|
||||
}
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (r *PostActionIntegrationRequest) ToJson() string {
|
||||
b, err := json.Marshal(r)
|
||||
if err != nil {
|
||||
|
||||
@@ -6,6 +6,8 @@ package model
|
||||
import (
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestPostJson(t *testing.T) {
|
||||
@@ -124,6 +126,11 @@ func TestPostIsSystemMessage(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestPostChannelMentions(t *testing.T) {
|
||||
post := Post{Message: "~a ~b ~b ~c/~d."}
|
||||
assert.Equal(t, []string{"a", "b", "c", "d"}, post.ChannelMentions())
|
||||
}
|
||||
|
||||
func TestPostSanitizeProps(t *testing.T) {
|
||||
post1 := &Post{
|
||||
Message: "test",
|
||||
|
||||
Ссылка в новой задаче
Block a user