Add Slack corporate import ability (#10905)
* add support for slack corporate export data * changed tempChannels for channel types. concat after parsing channels * fix typo * add fixes suggested by @lieut-data
Этот коммит содержится в:
коммит произвёл
Jesse Hallam
родитель
367ffbfb42
Коммит
cc6c385d3e
@@ -30,6 +30,7 @@ type SlackChannel struct {
|
||||
Members []string `json:"members"`
|
||||
Topic map[string]string `json:"topic"`
|
||||
Purpose map[string]string `json:"purpose"`
|
||||
Type string
|
||||
}
|
||||
|
||||
type SlackProfile struct {
|
||||
@@ -102,7 +103,7 @@ func SlackConvertChannelName(channelName string, channelId string) string {
|
||||
return strings.ToLower(channelId)
|
||||
}
|
||||
|
||||
func SlackParseChannels(data io.Reader) ([]SlackChannel, error) {
|
||||
func SlackParseChannels(data io.Reader, channelType string) ([]SlackChannel, error) {
|
||||
decoder := json.NewDecoder(data)
|
||||
|
||||
var channels []SlackChannel
|
||||
@@ -110,6 +111,11 @@ func SlackParseChannels(data io.Reader) ([]SlackChannel, error) {
|
||||
mlog.Warn("Slack Import: Error occurred when parsing some Slack channels. Import may work anyway.")
|
||||
return channels, err
|
||||
}
|
||||
|
||||
for i := range channels {
|
||||
channels[i].Type = channelType
|
||||
}
|
||||
|
||||
return channels, nil
|
||||
}
|
||||
|
||||
@@ -492,7 +498,7 @@ func (a *App) SlackAddChannels(teamId string, slackchannels []SlackChannel, post
|
||||
for _, sChannel := range slackchannels {
|
||||
newChannel := model.Channel{
|
||||
TeamId: teamId,
|
||||
Type: model.CHANNEL_OPEN,
|
||||
Type: sChannel.Type,
|
||||
DisplayName: sChannel.Name,
|
||||
Name: SlackConvertChannelName(sChannel.Name, sChannel.Id),
|
||||
Purpose: sChannel.Purpose["value"],
|
||||
@@ -656,6 +662,11 @@ func (a *App) SlackImport(fileData multipart.File, fileSize int64, teamID string
|
||||
}
|
||||
|
||||
var channels []SlackChannel
|
||||
var publicChannels []SlackChannel
|
||||
var privateChannels []SlackChannel
|
||||
var groupChannels []SlackChannel
|
||||
var directChannels []SlackChannel
|
||||
|
||||
var users []SlackUser
|
||||
posts := make(map[string][]SlackPost)
|
||||
uploads := make(map[string]*zip.File)
|
||||
@@ -666,7 +677,17 @@ func (a *App) SlackImport(fileData multipart.File, fileSize int64, teamID string
|
||||
return model.NewAppError("SlackImport", "api.slackimport.slack_import.open.app_error", map[string]interface{}{"Filename": file.Name}, err.Error(), http.StatusInternalServerError), log
|
||||
}
|
||||
if file.Name == "channels.json" {
|
||||
channels, _ = SlackParseChannels(reader)
|
||||
publicChannels, _ = SlackParseChannels(reader, model.CHANNEL_OPEN)
|
||||
channels = append(channels, publicChannels...)
|
||||
} else if file.Name == "dms.json" {
|
||||
directChannels, _ = SlackParseChannels(reader, model.CHANNEL_DIRECT)
|
||||
channels = append(channels, directChannels...)
|
||||
} else if file.Name == "groups.json" {
|
||||
privateChannels, _ = SlackParseChannels(reader, model.CHANNEL_PRIVATE)
|
||||
channels = append(channels, privateChannels...)
|
||||
} else if file.Name == "mpims.json" {
|
||||
groupChannels, _ = SlackParseChannels(reader, model.CHANNEL_GROUP)
|
||||
channels = append(channels, groupChannels...)
|
||||
} else if file.Name == "users.json" {
|
||||
users, _ = SlackParseUsers(reader)
|
||||
} else {
|
||||
@@ -712,7 +733,7 @@ func (a *App) SlackImport(fileData multipart.File, fileSize int64, teamID string
|
||||
|
||||
//
|
||||
// -- Old SlackImport Functions --
|
||||
// Import functions are sutible for entering posts and users into the database without
|
||||
// Import functions are suitable for entering posts and users into the database without
|
||||
// some of the usual checks. (IsValid is still run)
|
||||
//
|
||||
|
||||
|
||||
@@ -116,11 +116,41 @@ func TestSlackParseChannels(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
defer file.Close()
|
||||
|
||||
channels, err := SlackParseChannels(file)
|
||||
channels, err := SlackParseChannels(file, "O")
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 6, len(channels))
|
||||
}
|
||||
|
||||
func TestSlackParseDirectMessages(t *testing.T) {
|
||||
file, err := os.Open("tests/slack-import-test-direct-messages.json")
|
||||
require.NoError(t, err)
|
||||
defer file.Close()
|
||||
|
||||
channels, err := SlackParseChannels(file, "D")
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 4, len(channels))
|
||||
}
|
||||
|
||||
func TestSlackParsePrivateChannels(t *testing.T) {
|
||||
file, err := os.Open("tests/slack-import-test-private-channels.json")
|
||||
require.NoError(t, err)
|
||||
defer file.Close()
|
||||
|
||||
channels, err := SlackParseChannels(file, "P")
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 1, len(channels))
|
||||
}
|
||||
|
||||
func TestSlackParseGroupDirectMessages(t *testing.T) {
|
||||
file, err := os.Open("tests/slack-import-test-group-direct-messages.json")
|
||||
require.NoError(t, err)
|
||||
defer file.Close()
|
||||
|
||||
channels, err := SlackParseChannels(file, "G")
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 3, len(channels))
|
||||
}
|
||||
|
||||
func TestSlackParseUsers(t *testing.T) {
|
||||
file, err := os.Open("tests/slack-import-test-users.json")
|
||||
require.NoError(t, err)
|
||||
|
||||
Ссылка в новой задаче
Block a user