MM-32133 shared channel username collisions (#17347)

Support for handling username collisions between remote clusters. Users belonging to remote clusters have their username changed to include the remote name e.g. wiggin becomes wiggin:mattermost.

@mentions are also modified so the munged username is replaced with the original username when the post is sync'd with the remote the user belongs to.

When adding remote users:
- append the remote name to the username with colon separator
- append the remote name to the email address with colon separator
- store the original username and email address in user props
- when resolving @mentions replace with the stored original username
Этот коммит содержится в:
Doug Lauder
2021-04-13 10:40:12 -04:00
коммит произвёл GitHub
родитель 869da7a78b
Коммит f69cb38249
28 изменённых файлов: 544 добавлений и 147 удалений

Просмотреть файл

@@ -95,7 +95,7 @@ func TestGetRemoteClusterById(t *testing.T) {
// create a remote cluster
rc := &model.RemoteCluster{
RemoteId: model.NewId(),
DisplayName: "Test1",
Name: "Test1",
RemoteTeamId: model.NewId(),
SiteURL: model.NewId(),
CreatorId: model.NewId(),
@@ -130,7 +130,7 @@ func TestGetRemoteClusterById(t *testing.T) {
t.Run("valid remote, user is member", func(t *testing.T) {
rcInfo, resp := th.Client.GetRemoteClusterInfo(rc.RemoteId)
CheckNoError(t, resp)
assert.Equal(t, rc.DisplayName, rcInfo.DisplayName)
assert.Equal(t, rc.Name, rcInfo.Name)
})
t.Run("invalid remote", func(t *testing.T) {
@@ -173,9 +173,9 @@ func TestCreateDirectChannelWithRemoteUser(t *testing.T) {
localUser := th.BasicUser
remoteUser := th.CreateUser()
rc := &model.RemoteCluster{
DisplayName: "test",
Token: model.NewId(),
CreatorId: localUser.Id,
Name: "test",
Token: model.NewId(),
CreatorId: localUser.Id,
}
rc, err := th.App.AddRemoteCluster(rc)
require.Nil(t, err)
@@ -206,9 +206,9 @@ func TestCreateDirectChannelWithRemoteUser(t *testing.T) {
localUser := th.BasicUser
remoteUser := th.CreateUser()
rc := &model.RemoteCluster{
DisplayName: "test",
Token: model.NewId(),
CreatorId: localUser.Id,
Name: "test",
Token: model.NewId(),
CreatorId: localUser.Id,
}
rc, err := th.App.AddRemoteCluster(rc)
require.Nil(t, err)