MM-47795 Match teams, channels, and users case insensitively on import (#21458)

Этот коммит содержится в:
Tim Scheuermann
2022-11-01 09:37:58 +01:00
коммит произвёл GitHub
родитель ecc07a3911
Коммит 39700834b6

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

@@ -745,16 +745,19 @@ func (a *App) importUserTeams(c request.CTX, user *model.User, data *[]imports.U
return err
}
teamThemePreferencesByID := map[string]model.Preferences{}
channels := map[string][]imports.UserChannelImportData{}
teamsByID := map[string]*model.Team{}
teamMemberByTeamID := map[string]*model.TeamMember{}
newTeamMembers := []*model.TeamMember{}
oldTeamMembers := []*model.TeamMember{}
rolesByTeamId := map[string]string{}
isGuestByTeamId := map[string]bool{}
isUserByTeamId := map[string]bool{}
isAdminByTeamId := map[string]bool{}
var (
teamThemePreferencesByID = map[string]model.Preferences{}
channels = map[string][]imports.UserChannelImportData{}
teamsByID = map[string]*model.Team{}
teamMemberByTeamID = map[string]*model.TeamMember{}
newTeamMembers = []*model.TeamMember{}
oldTeamMembers = []*model.TeamMember{}
rolesByTeamId = map[string]string{}
isGuestByTeamId = map[string]bool{}
isUserByTeamId = map[string]bool{}
isAdminByTeamId = map[string]bool{}
)
existingMemberships, nErr := a.Srv().Store().Team().GetTeamsForUser(context.Background(), user.Id, "", true)
if nErr != nil {
return model.NewAppError("importUserTeams", "app.team.get_members.app_error", nil, "", http.StatusInternalServerError).Wrap(nErr)
@@ -764,7 +767,7 @@ func (a *App) importUserTeams(c request.CTX, user *model.User, data *[]imports.U
existingMembershipsByTeamId[teamMembership.TeamId] = teamMembership
}
for _, tdata := range *data {
team := allTeams[*tdata.Name]
team := allTeams[strings.ToLower(*tdata.Name)]
// Team-specific theme Preferences.
if tdata.Theme != nil {
@@ -905,15 +908,18 @@ func (a *App) importUserChannels(c request.CTX, user *model.User, team *model.Te
return err
}
channelsByID := map[string]*model.Channel{}
channelMemberByChannelID := map[string]*model.ChannelMember{}
newChannelMembers := []*model.ChannelMember{}
oldChannelMembers := []*model.ChannelMember{}
rolesByChannelId := map[string]string{}
channelPreferencesByID := map[string]model.Preferences{}
isGuestByChannelId := map[string]bool{}
isUserByChannelId := map[string]bool{}
isAdminByChannelId := map[string]bool{}
var (
channelsByID = map[string]*model.Channel{}
channelMemberByChannelID = map[string]*model.ChannelMember{}
newChannelMembers = []*model.ChannelMember{}
oldChannelMembers = []*model.ChannelMember{}
rolesByChannelId = map[string]string{}
channelPreferencesByID = map[string]model.Preferences{}
isGuestByChannelId = map[string]bool{}
isUserByChannelId = map[string]bool{}
isAdminByChannelId = map[string]bool{}
)
existingMemberships, nErr := a.Srv().Store().Channel().GetMembersForUser(team.Id, user.Id)
if nErr != nil {
return model.NewAppError("importUserChannels", "app.channel.get_members.app_error", nil, "", http.StatusInternalServerError).Wrap(nErr)
@@ -923,7 +929,7 @@ func (a *App) importUserChannels(c request.CTX, user *model.User, team *model.Te
existingMembershipsByChannelId[channelMembership.ChannelId] = channelMembership
}
for _, cdata := range *data {
channel, ok := allChannels[*cdata.Name]
channel, ok := allChannels[strings.ToLower(*cdata.Name)]
if !ok {
return model.NewAppError("BulkImport", "app.import.import_user_channels.channel_not_found.error", nil, "", http.StatusInternalServerError)
}
@@ -1107,13 +1113,15 @@ func (a *App) importReplies(c request.CTX, data []imports.ReplyImportData, post
return err
}
postsWithData := []postAndData{}
postsForCreateList := []*model.Post{}
postsForOverwriteList := []*model.Post{}
var (
postsWithData = []postAndData{}
postsForCreateList = []*model.Post{}
postsForOverwriteList = []*model.Post{}
)
for _, replyData := range data {
replyData := replyData
user := users[*replyData.User]
user := users[strings.ToLower(*replyData.User)]
// Check if this post already exists.
replies, nErr := a.Srv().Store().Post().GetPostsCreatedAt(post.ChannelId, *replyData.CreateAt)
@@ -1285,7 +1293,7 @@ func (a *App) getUsersByUsernames(usernames []string) (map[string]*model.User, *
users := make(map[string]*model.User)
for _, user := range allUsers {
users[user.Username] = user
users[strings.ToLower(user.Username)] = user
}
return users, nil
}
@@ -1298,7 +1306,7 @@ func (a *App) getTeamsByNames(names []string) (map[string]*model.Team, *model.Ap
teams := make(map[string]*model.Team)
for _, team := range allTeams {
teams[team.Name] = team
teams[strings.ToLower(team.Name)] = team
}
return teams, nil
}
@@ -1311,7 +1319,7 @@ func (a *App) getChannelsByNames(names []string, teamID string) (map[string]*mod
channels := make(map[string]*model.Channel)
for _, channel := range allChannels {
channels[channel.Name] = channel
channels[strings.ToLower(channel.Name)] = channel
}
return channels, nil
}
@@ -1320,17 +1328,18 @@ func (a *App) getChannelsByNames(names []string, teamID string) (map[string]*mod
func (a *App) getChannelsForPosts(teams map[string]*model.Team, data []*imports.PostImportData) (map[string]map[string]*model.Channel, *model.AppError) {
teamChannels := make(map[string]map[string]*model.Channel)
for _, postData := range data {
teamName := *postData.Team
teamName := strings.ToLower(*postData.Team)
if _, ok := teamChannels[teamName]; !ok {
teamChannels[teamName] = make(map[string]*model.Channel)
}
if channel, ok := teamChannels[teamName][*postData.Channel]; !ok || channel == nil {
channelName := strings.ToLower(*postData.Channel)
if channel, ok := teamChannels[teamName][channelName]; !ok || channel == nil {
var err error
channel, err = a.Srv().Store().Channel().GetByName(teams[teamName].Id, *postData.Channel, true)
if err != nil {
return nil, model.NewAppError("BulkImport", "app.import.import_post.channel_not_found.error", map[string]any{"ChannelName": *postData.Channel}, "", http.StatusBadRequest).Wrap(err)
}
teamChannels[teamName][*postData.Channel] = channel
teamChannels[teamName][channelName] = channel
}
}
return teamChannels, nil
@@ -1386,16 +1395,19 @@ func (a *App) importMultiplePostLines(c request.CTX, lines []imports.LineImportW
if err != nil {
return 0, err
}
postsWithData := []postAndData{}
postsForCreateList := []*model.Post{}
postsForCreateMap := map[string]int{}
postsForOverwriteList := []*model.Post{}
postsForOverwriteMap := map[string]int{}
var (
postsWithData = []postAndData{}
postsForCreateList = []*model.Post{}
postsForCreateMap = map[string]int{}
postsForOverwriteList = []*model.Post{}
postsForOverwriteMap = map[string]int{}
)
for _, line := range lines {
team := teams[*line.Post.Team]
team := teams[strings.ToLower(*line.Post.Team)]
channel := channels[*line.Post.Team][*line.Post.Channel]
user := users[*line.Post.User]
user := users[strings.ToLower(*line.Post.User)]
// Check if this post already exists.
posts, nErr := a.Srv().Store().Post().GetPostsCreatedAt(channel.Id, *line.Post.CreateAt)
@@ -1495,7 +1507,7 @@ func (a *App) importMultiplePostLines(c request.CTX, lines []imports.LineImportW
var preferences model.Preferences
for _, username := range *postWithData.postData.FlaggedBy {
user := users[username]
user := users[strings.ToLower(username)]
preferences = append(preferences, model.Preference{
UserId: user.Id,
@@ -1582,7 +1594,7 @@ func (a *App) importDirectChannel(c request.CTX, data *imports.DirectChannelImpo
return err
}
for _, user := range *data.Members {
userIDs = append(userIDs, userMap[user].Id)
userIDs = append(userIDs, userMap[strings.ToLower(user)].Id)
}
var channel *model.Channel
@@ -1615,7 +1627,7 @@ func (a *App) importDirectChannel(c request.CTX, data *imports.DirectChannelImpo
if data.FavoritedBy != nil {
for _, favoriter := range *data.FavoritedBy {
preferences = append(preferences, model.Preference{
UserId: userMap[favoriter].Id,
UserId: userMap[strings.ToLower(favoriter)].Id,
Category: model.PreferenceCategoryFavoriteChannel,
Name: channel.Id,
Value: "true",
@@ -1676,17 +1688,19 @@ func (a *App) importMultipleDirectPostLines(c request.CTX, lines []imports.LineI
return 0, err
}
postsWithData := []postAndData{}
postsForCreateList := []*model.Post{}
postsForCreateMap := map[string]int{}
postsForOverwriteList := []*model.Post{}
postsForOverwriteMap := map[string]int{}
var (
postsWithData = []postAndData{}
postsForCreateList = []*model.Post{}
postsForCreateMap = map[string]int{}
postsForOverwriteList = []*model.Post{}
postsForOverwriteMap = map[string]int{}
)
for _, line := range lines {
var userIDs []string
var err *model.AppError
for _, username := range *line.DirectPost.ChannelMembers {
user := users[username]
user := users[strings.ToLower(username)]
userIDs = append(userIDs, user.Id)
}
@@ -1706,7 +1720,7 @@ func (a *App) importMultipleDirectPostLines(c request.CTX, lines []imports.LineI
channel = ch
}
user := users[*line.DirectPost.User]
user := users[strings.ToLower(*line.DirectPost.User)]
// Check if this post already exists.
posts, nErr := a.Srv().Store().Post().GetPostsCreatedAt(channel.Id, *line.DirectPost.CreateAt)
@@ -1804,7 +1818,7 @@ func (a *App) importMultipleDirectPostLines(c request.CTX, lines []imports.LineI
var preferences model.Preferences
for _, username := range *postWithData.directPostData.FlaggedBy {
user := users[username]
user := users[strings.ToLower(username)]
preferences = append(preferences, model.Preference{
UserId: user.Id,