diff options
-rw-r--r-- | api/slackimport.go | 24 | ||||
-rw-r--r-- | api/slackimport_test.go | 179 | ||||
-rw-r--r-- | tests/slack-import-test-channels.json | 165 | ||||
-rw-r--r-- | tests/slack-import-test-posts.json | 180 | ||||
-rw-r--r-- | tests/slack-import-test-users.json | 363 |
5 files changed, 899 insertions, 12 deletions
diff --git a/api/slackimport.go b/api/slackimport.go index bf18992f6..b9dab98ba 100644 --- a/api/slackimport.go +++ b/api/slackimport.go @@ -75,18 +75,18 @@ func SlackConvertChannelName(channelName string) string { return newName } -func SlackParseChannels(data io.Reader) []SlackChannel { +func SlackParseChannels(data io.Reader) ([]SlackChannel, error) { decoder := json.NewDecoder(data) var channels []SlackChannel if err := decoder.Decode(&channels); err != nil { l4g.Warn(utils.T("api.slackimport.slack_parse_channels.error")) - return channels + return channels, err } - return channels + return channels, nil } -func SlackParseUsers(data io.Reader) []SlackUser { +func SlackParseUsers(data io.Reader) ([]SlackUser, error) { decoder := json.NewDecoder(data) var users []SlackUser @@ -94,20 +94,20 @@ func SlackParseUsers(data io.Reader) []SlackUser { // This actually returns errors that are ignored. // In this case it is erroring because of a null that Slack // introduced. So we just return the users here. - return users + return users, err } - return users + return users, nil } -func SlackParsePosts(data io.Reader) []SlackPost { +func SlackParsePosts(data io.Reader) ([]SlackPost, error) { decoder := json.NewDecoder(data) var posts []SlackPost if err := decoder.Decode(&posts); err != nil { l4g.Warn(utils.T("api.slackimport.slack_parse_posts.error")) - return posts + return posts, err } - return posts + return posts, nil } func SlackAddUsers(teamId string, slackusers []SlackUser, log *bytes.Buffer) map[string]*model.User { @@ -401,13 +401,13 @@ func SlackImport(fileData multipart.File, fileSize int64, teamID string) (*model return model.NewLocAppError("SlackImport", "api.slackimport.slack_import.open.app_error", map[string]interface{}{"Filename": file.Name}, err.Error()), log } if file.Name == "channels.json" { - channels = SlackParseChannels(reader) + channels, _ = SlackParseChannels(reader) } else if file.Name == "users.json" { - users = SlackParseUsers(reader) + users, _ = SlackParseUsers(reader) } else { spl := strings.Split(file.Name, "/") if len(spl) == 2 && strings.HasSuffix(spl[1], ".json") { - newposts := SlackParsePosts(reader) + newposts, _ := SlackParsePosts(reader) channel := spl[0] if _, ok := posts[channel]; ok == false { posts[channel] = newposts diff --git a/api/slackimport_test.go b/api/slackimport_test.go new file mode 100644 index 000000000..4da1fa54e --- /dev/null +++ b/api/slackimport_test.go @@ -0,0 +1,179 @@ +// Copyright (c) 2016 Mattermost, Inc. All Rights Reserved. +// See License.txt for license information. + +package api + +import ( + "os" + "testing" +) + +func TestSlackConvertTimeStamp(t *testing.T) { + + testTimeStamp := "1469785419.000033" + + result := SlackConvertTimeStamp(testTimeStamp) + + if result != 1469785419000 { + t.Fatalf("Unexpected timestamp value %v returned.", result) + } +} + +func TestSlackConvertChannelName(t *testing.T) { + var testData = []struct { + input string + output string + }{ + {"test-channel", "test-channel"}, + {"_test_channel_", "test_channel"}, + {"__test", "test"}, + {"-t", "slack-channel-t"}, + {"a", "slack-channel-a"}, + } + + for _, td := range testData { + if td.output != SlackConvertChannelName(td.input) { + t.Fatalf("Did not convert channel name correctly: %v", td.input) + } + } +} + +func TestSlackConvertUserMentions(t *testing.T) { + users := []SlackUser{ + {Id: "U00000A0A", Username: "firstuser"}, + {Id: "U00000B1B", Username: "seconduser"}, + } + + posts := map[string][]SlackPost{ + "test-channel": { + { + Text: "<!channel>: Hi guys.", + }, + { + Text: "Calling <!here|@here>.", + }, + { + Text: "Yo <!everyone>.", + }, + { + Text: "Regular user test <@U00000B1B|seconduser> and <@U00000A0A>.", + }, + }, + } + + expectedPosts := map[string][]SlackPost{ + "test-channel": { + { + Text: "@channel: Hi guys.", + }, + { + Text: "Calling @here.", + }, + { + Text: "Yo @all.", + }, + { + Text: "Regular user test @seconduser and @firstuser.", + }, + }, + } + + convertedPosts := SlackConvertUserMentions(users, posts) + + for channelName, channelPosts := range convertedPosts { + for postIdx, post := range channelPosts { + if post.Text != expectedPosts[channelName][postIdx].Text { + t.Fatalf("Converted post text not as expected: %v", post.Text) + } + } + } +} + +func TestSlackConvertChannelMentions(t *testing.T) { + channels := []SlackChannel{ + {Id: "C000AA00A", Name: "one"}, + {Id: "C000BB11B", Name: "two"}, + } + + posts := map[string][]SlackPost{ + "test-channel": { + { + Text: "Go to <#C000AA00A>.", + }, + { + User: "U00000A0A", + Text: "Try <#C000BB11B|two> for this.", + }, + }, + } + + expectedPosts := map[string][]SlackPost{ + "test-channel": { + { + Text: "Go to !one.", + }, + { + Text: "Try !two for this.", + }, + }, + } + + convertedPosts := SlackConvertChannelMentions(channels, posts) + + for channelName, channelPosts := range convertedPosts { + for postIdx, post := range channelPosts { + if post.Text != expectedPosts[channelName][postIdx].Text { + t.Fatalf("Converted post text not as expected: %v", post.Text) + } + } + } + +} + +func TestSlackParseChannels(t *testing.T) { + file, err := os.Open("../tests/slack-import-test-channels.json") + if err != nil { + t.Fatalf("Failed to open data file: %v", err) + } + + channels, err := SlackParseChannels(file) + if err != nil { + t.Fatalf("Error occurred parsing channels: %v", err) + } + + if len(channels) != 6 { + t.Fatalf("Unexpected number of channels: %v", len(channels)) + } +} + +func TestSlackParseUsers(t *testing.T) { + file, err := os.Open("../tests/slack-import-test-users.json") + if err != nil { + t.Fatalf("Failed to open data file: %v", err) + } + + users, err := SlackParseUsers(file) + if err != nil { + t.Fatalf("Error occurred parsing users: %v", err) + } + + if len(users) != 11 { + t.Fatalf("Unexpected number of users: %v", len(users)) + } +} + +func TestSlackParsePosts(t *testing.T) { + file, err := os.Open("../tests/slack-import-test-posts.json") + if err != nil { + t.Fatalf("Failed to open data file: %v", err) + } + + posts, err := SlackParsePosts(file) + if err != nil { + t.Fatalf("Error occurred parsing posts: %v", err) + } + + if len(posts) != 8 { + t.Fatalf("Unexpected number of posts: %v", len(posts)) + } +} diff --git a/tests/slack-import-test-channels.json b/tests/slack-import-test-channels.json new file mode 100644 index 000000000..c8a2b5ec3 --- /dev/null +++ b/tests/slack-import-test-channels.json @@ -0,0 +1,165 @@ +[ + { + "id": "C13CFUSDV", + "name": "artwork", + "created": "1461575251", + "creator": "U07Q4MHCP", + "is_archived": false, + "is_general": false, + "members": [ + "U07Q4MHCP", + "U13C5JZ7W", + "U13CLGTKK", + "U13CSKE2E" + ], + "topic": { + "value": "", + "creator": "", + "last_set": "0" + }, + "purpose": { + "value": "Discussing art", + "creator": "U07Q4MHCP", + "last_set": "1461575252" + } + }, + { + "id": "C13CN0Q0H", + "name": "eating-out", + "created": "1461575308", + "creator": "U07Q4MHCP", + "is_archived": false, + "is_general": false, + "members": [ + "U07Q4MHCP", + "U13C5JZ7W", + "U13CLGTKK", + "U13CSKE2E" + ], + "topic": { + "value": "", + "creator": "", + "last_set": "0" + }, + "purpose": { + "value": "Restaurants around town", + "creator": "U07Q4MHCP", + "last_set": "1461575309" + } + }, + { + "id": "C07Q4SBL3", + "name": "general", + "created": "1437124885", + "creator": "U07Q4MHCP", + "is_archived": false, + "is_general": true, + "members": [ + "U07Q4MHCP", + "U13C5JZ7W", + "U13CLGTKK", + "U13CSKE2E", + "U15F73RL4", + "U15F922BY", + "U15FHKEKX", + "U15FHR92R", + "U15FUR1QS", + "U1THQPEMV", + "U24CG47QU" + ], + "topic": { + "value": "Company-wide announcements and work-based matters", + "creator": "", + "last_set": "0" + }, + "purpose": { + "value": "This channel is for team-wide communication and announcements. All team members are in this channel.", + "creator": "", + "last_set": "0" + } + }, + { + "id": "C13B104PM", + "name": "movies", + "created": "1461575333", + "creator": "U07Q4MHCP", + "is_archived": false, + "is_general": false, + "members": [ + "U07Q4MHCP", + "U13C5JZ7W", + "U13CLGTKK", + "U13CSKE2E" + ], + "topic": { + "value": "", + "creator": "", + "last_set": "0" + }, + "purpose": { + "value": "New movies", + "creator": "U07Q4MHCP", + "last_set": "1461575334" + } + }, + { + "id": "C15FGPREU", + "name": "outings", + "created": "1462216386", + "creator": "U15FUR1QS", + "is_archived": false, + "is_general": false, + "members": [ + "U07Q4MHCP", + "U13C5JZ7W", + "U13CLGTKK", + "U13CSKE2E", + "U15F73RL4", + "U15F922BY", + "U15FHKEKX", + "U15FHR92R", + "U15FUR1QS" + ], + "topic": { + "value": "", + "creator": "", + "last_set": "0" + }, + "purpose": { + "value": "Let's discuss our next monthly outing", + "creator": "U15FUR1QS", + "last_set": "1462216387" + } + }, + { + "id": "C07Q4MBTL", + "name": "random", + "created": "1437124885", + "creator": "U07Q4MHCP", + "is_archived": false, + "is_general": false, + "members": [ + "U07Q4MHCP", + "U13C5JZ7W", + "U13CLGTKK", + "U13CSKE2E", + "U15F73RL4", + "U15F922BY", + "U15FHKEKX", + "U15FHR92R", + "U15FUR1QS", + "U1THQPEMV", + "U24CG47QU" + ], + "topic": { + "value": "Non-work banter and water cooler conversation", + "creator": "", + "last_set": "0" + }, + "purpose": { + "value": "A place for non-work-related flimflam, faffing, hodge-podge or jibber-jabber you'd prefer to keep out of more focused work-related channels.", + "creator": "", + "last_set": "0" + } + } +]
\ No newline at end of file diff --git a/tests/slack-import-test-posts.json b/tests/slack-import-test-posts.json new file mode 100644 index 000000000..ca0d0a78c --- /dev/null +++ b/tests/slack-import-test-posts.json @@ -0,0 +1,180 @@ +[ + { + "type": "message", + "user": "U07Q4MHCP", + "text": "<@U24CG47QU>", + "ts": "1472932439.000002" + }, + { + "user": "U07Q4MHCP", + "text": "<@U07Q4MHCP|lindy> has left the channel", + "type": "message", + "subtype": "channel_leave", + "ts": "1469440454.000002" + }, + { + "user": "U15FUR1QS", + "purpose": "Let's discuss our next monthly outing", + "type": "message", + "subtype": "channel_purpose", + "text": "<@U15FUR1QS|igor> set the channel purpose: Let's discuss our next monthly outing", + "ts": "1462216387.000003" + }, + { + "type": "message", + "subtype": "file_share", + "text": "<@U07Q4MHCP|lindy> uploaded a file: <https:\/\/slackexportteam.slack.com\/files\/lindy\/F1WB5FH7W\/pdf.pdf|Pdf.pdf>", + "file": { + "id": "F1WB5FH7W", + "created": 1469782519, + "timestamp": 1469782519, + "name": "Pdf.pdf", + "title": "Pdf.pdf", + "mimetype": "application\/pdf", + "filetype": "pdf", + "pretty_type": "PDF", + "user": "U07Q4MHCP", + "editable": false, + "size": 457717, + "mode": "hosted", + "is_external": false, + "external_type": "", + "is_public": true, + "public_url_shared": false, + "display_as_bot": false, + "username": "", + "url_private": "https:\/\/files.slack.com\/files-pri\/T07Q4MHC7-F1WB5FH7W\/pdf.pdf?t=xoxe-7820731415-83616398485-83620610359-b95751e3ea", + "url_private_download": "https:\/\/files.slack.com\/files-pri\/T07Q4MHC7-F1WB5FH7W\/download\/pdf.pdf?t=xoxe-7820731415-83616398485-83620610359-b95751e3ea", + "permalink": "https:\/\/slackexportteam.slack.com\/files\/lindy\/F1WB5FH7W\/pdf.pdf", + "permalink_public": "https:\/\/slack-files.com\/T07Q4MHC7-F1WB5FH7W-8560bd68a4", + "channels": [ + "C07Q4MBTL" + ], + "groups": [ + + ], + "ims": [ + + ], + "comments_count": 0 + }, + "user": "U07Q4MHCP", + "upload": true, + "display_as_bot": false, + "username": "<@U07Q4MHCP|lindy>", + "bot_id": null, + "ts": "1469782519.000002" + }, + { + "user": "U24CG47QU", + "text": "<@U24CG47QU|lindy.invite> has joined the channel", + "type": "message", + "subtype": "channel_join", + "ts": "1472028157.000002" + }, + { + "bot_id": "B13CH9S5V", + "attachments": [ + { + "fallback": "<https:\/\/twitter.com\/m2pls|@m2pls>: M2 informatique PLS et EID2 on vous retrouve sur le <https:\/\/twitter.com\/mattermosthq|@mattermosthq> du master, les invitations partiront lundi (ou demander en MP).", + "ts": 1474722287, + "author_name": "Master 2 PLS", + "author_link": "https:\/\/twitter.com\/m2pls\/status\/779667900600844288", + "author_icon": "https:\/\/pbs.twimg.com\/profile_images\/649829889890086912\/ULpVHs9S_normal.jpg", + "author_subname": "@m2pls", + "pretext": "<https:\/\/twitter.com\/m2pls\/status\/779667900600844288>", + "text": "M2 informatique PLS et EID2 on vous retrouve sur le <https:\/\/twitter.com\/mattermosthq|@mattermosthq> du master, les invitations partiront lundi (ou demander en MP).", + "service_name": "twitter", + "service_url": "https:\/\/twitter.com\/", + "from_url": "https:\/\/twitter.com\/m2pls\/status\/779667900600844288", + "id": 1, + "footer": "Twitter", + "footer_icon": "https:\/\/a.slack-edge.com\/6e067\/img\/services\/twitter_pixel_snapped_32.png" + } + ], + "text": null, + "type": "message", + "subtype": "bot_message", + "ts": "1474722288.637240" + }, + { + "type": "message", + "user": "U07Q4MHCP", + "text": "<https:\/\/slackexportteam.slack.com\/archives\/general\/p1469781868000005>", + "attachments": [ + { + "from_url": "https:\/\/slackexportteam.slack.com\/archives\/general\/p1469781868000005", + "fallback": "[July 29th, 2016 1:44 AM] lindy: permalink?", + "ts": "1469781868.000005", + "author_subname": "lindy", + "channel_id": "C07Q4SBL3", + "channel_name": "general", + "is_msg_unfurl": true, + "text": "permalink?", + "author_link": "https:\/\/slackexportteam.slack.com\/team\/lindy", + "author_icon": "https:\/\/secure.gravatar.com\/avatar\/822d051544b1f50f1e9f015cd2990edc.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F0180%2Fimg%2Favatars%2Fava_0001-48.png", + "mrkdwn_in": [ + "text" + ], + "id": 1, + "footer": "Posted in #general" + } + ], + "ts": "1469781880.000006" + }, + { + "type": "message", + "subtype": "file_share", + "text": "<@U07Q4MHCP|lindy> uploaded a file: <https:\/\/slackexportteam.slack.com\/files\/lindy\/F1WBDJW93\/fb-wow.gif|fb-wow.gif>", + "file": { + "id": "F1WBDJW93", + "created": 1469782076, + "timestamp": 1469782076, + "name": "fb-wow.gif", + "title": "fb-wow.gif", + "mimetype": "image\/gif", + "filetype": "gif", + "pretty_type": "GIF", + "user": "U07Q4MHCP", + "editable": false, + "size": 27235, + "mode": "hosted", + "is_external": false, + "external_type": "", + "is_public": true, + "public_url_shared": false, + "display_as_bot": false, + "username": "", + "url_private": "https:\/\/files.slack.com\/files-pri\/T07Q4MHC7-F1WBDJW93\/fb-wow.gif?t=xoxe-7820731415-83616398485-83620610359-b95751e3ea", + "url_private_download": "https:\/\/files.slack.com\/files-pri\/T07Q4MHC7-F1WBDJW93\/download\/fb-wow.gif?t=xoxe-7820731415-83616398485-83620610359-b95751e3ea", + "thumb_64": "https:\/\/files.slack.com\/files-tmb\/T07Q4MHC7-F1WBDJW93-7031b90b93\/fb-wow_64.png?t=xoxe-7820731415-83616398485-83620610359-b95751e3ea", + "thumb_80": "https:\/\/files.slack.com\/files-tmb\/T07Q4MHC7-F1WBDJW93-7031b90b93\/fb-wow_80.png?t=xoxe-7820731415-83616398485-83620610359-b95751e3ea", + "thumb_360": "https:\/\/files.slack.com\/files-tmb\/T07Q4MHC7-F1WBDJW93-7031b90b93\/fb-wow_360.png?t=xoxe-7820731415-83616398485-83620610359-b95751e3ea", + "thumb_360_w": 59, + "thumb_360_h": 59, + "thumb_160": "https:\/\/files.slack.com\/files-tmb\/T07Q4MHC7-F1WBDJW93-7031b90b93\/fb-wow_160.png?t=xoxe-7820731415-83616398485-83620610359-b95751e3ea", + "image_exif_rotation": 1, + "original_w": 59, + "original_h": 59, + "deanimate_gif": "https:\/\/files.slack.com\/files-tmb\/T07Q4MHC7-F1WBDJW93-7031b90b93\/fb-wow_deanimate_gif.png?t=xoxe-7820731415-83616398485-83620610359-b95751e3ea", + "permalink": "https:\/\/slackexportteam.slack.com\/files\/lindy\/F1WBDJW93\/fb-wow.gif", + "permalink_public": "https:\/\/slack-files.com\/T07Q4MHC7-F1WBDJW93-718081d960", + "channels": [ + "C07Q4SBL3" + ], + "groups": [ + + ], + "ims": [ + + ], + "comments_count": 0 + }, + "user": "U07Q4MHCP", + "upload": true, + "display_as_bot": false, + "username": "<@U07Q4MHCP|lindy>", + "bot_id": null, + "ts": "1469782077.000010" + } +]
\ No newline at end of file diff --git a/tests/slack-import-test-users.json b/tests/slack-import-test-users.json new file mode 100644 index 000000000..40b53a45b --- /dev/null +++ b/tests/slack-import-test-users.json @@ -0,0 +1,363 @@ +[ + { + "id": "U13CLGTKK", + "team_id": "T07Q4MHC7", + "name": "alice", + "deleted": false, + "status": null, + "color": "4bbe2e", + "real_name": "Alice", + "tz": "Africa\/Cairo", + "tz_label": "Eastern European Time", + "tz_offset": 7200, + "profile": { + "first_name": "Alice", + "last_name": "", + "avatar_hash": "g2280143ab5d", + "real_name": "Alice", + "real_name_normalized": "Alice", + "email": "lindy+1@example.com", + "image_24": "https:\/\/secure.gravatar.com\/avatar\/2280143ab5dd760d0a951b74bd06185a.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F0180%2Fimg%2Favatars%2Fava_0021-24.png", + "image_32": "https:\/\/secure.gravatar.com\/avatar\/2280143ab5dd760d0a951b74bd06185a.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F66f9%2Fimg%2Favatars%2Fava_0021-32.png", + "image_48": "https:\/\/secure.gravatar.com\/avatar\/2280143ab5dd760d0a951b74bd06185a.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F3654%2Fimg%2Favatars%2Fava_0021-48.png", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/2280143ab5dd760d0a951b74bd06185a.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F66f9%2Fimg%2Favatars%2Fava_0021-72.png", + "image_192": "https:\/\/secure.gravatar.com\/avatar\/2280143ab5dd760d0a951b74bd06185a.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F7fa9%2Fimg%2Favatars%2Fava_0021-192.png", + "image_512": "https:\/\/secure.gravatar.com\/avatar\/2280143ab5dd760d0a951b74bd06185a.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F7fa9%2Fimg%2Favatars%2Fava_0021-512.png", + "fields": null + }, + "is_admin": true, + "is_owner": false, + "is_primary_owner": false, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": false + }, + { + "id": "U15F73RL4", + "team_id": "T07Q4MHC7", + "name": "brett", + "deleted": false, + "status": null, + "color": "e96699", + "real_name": "Brett", + "tz": "Africa\/Cairo", + "tz_label": "Eastern European Time", + "tz_offset": 7200, + "profile": { + "first_name": "Brett", + "last_name": "", + "avatar_hash": "g16de52e9c3d", + "real_name": "Brett", + "real_name_normalized": "Brett", + "email": "lindy+13@example.com", + "image_24": "https:\/\/secure.gravatar.com\/avatar\/16de52e9c3dd5917b72a327f9b36a7db.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F66f9%2Fimg%2Favatars%2Fava_0001-24.png", + "image_32": "https:\/\/secure.gravatar.com\/avatar\/16de52e9c3dd5917b72a327f9b36a7db.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F66f9%2Fimg%2Favatars%2Fava_0001-32.png", + "image_48": "https:\/\/secure.gravatar.com\/avatar\/16de52e9c3dd5917b72a327f9b36a7db.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F0180%2Fimg%2Favatars%2Fava_0001-48.png", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/16de52e9c3dd5917b72a327f9b36a7db.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F3654%2Fimg%2Favatars%2Fava_0001-72.png", + "image_192": "https:\/\/secure.gravatar.com\/avatar\/16de52e9c3dd5917b72a327f9b36a7db.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F7fa9%2Fimg%2Favatars%2Fava_0001-192.png", + "image_512": "https:\/\/secure.gravatar.com\/avatar\/16de52e9c3dd5917b72a327f9b36a7db.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F7fa9%2Fimg%2Favatars%2Fava_0001-512.png", + "fields": null + }, + "is_admin": false, + "is_owner": false, + "is_primary_owner": false, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": false + }, + { + "id": "U15FUR1QS", + "team_id": "T07Q4MHC7", + "name": "igor", + "deleted": false, + "status": null, + "color": "5b89d5", + "real_name": "Igor", + "tz": "Africa\/Cairo", + "tz_label": "Eastern European Time", + "tz_offset": 7200, + "profile": { + "first_name": "Igor", + "last_name": "", + "avatar_hash": "gd2d8b6603c7", + "real_name": "Igor", + "real_name_normalized": "Igor", + "email": "lindy+12@example.com", + "image_24": "https:\/\/secure.gravatar.com\/avatar\/d2d8b6603c7e7eb443ccc103f50852c5.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F66f9%2Fimg%2Favatars%2Fava_0019-24.png", + "image_32": "https:\/\/secure.gravatar.com\/avatar\/d2d8b6603c7e7eb443ccc103f50852c5.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F66f9%2Fimg%2Favatars%2Fava_0019-32.png", + "image_48": "https:\/\/secure.gravatar.com\/avatar\/d2d8b6603c7e7eb443ccc103f50852c5.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F66f9%2Fimg%2Favatars%2Fava_0019-48.png", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/d2d8b6603c7e7eb443ccc103f50852c5.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F66f9%2Fimg%2Favatars%2Fava_0019-72.png", + "image_192": "https:\/\/secure.gravatar.com\/avatar\/d2d8b6603c7e7eb443ccc103f50852c5.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F7fa9%2Fimg%2Favatars%2Fava_0019-192.png", + "image_512": "https:\/\/secure.gravatar.com\/avatar\/d2d8b6603c7e7eb443ccc103f50852c5.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F7fa9%2Fimg%2Favatars%2Fava_0019-512.png", + "fields": null + }, + "is_admin": false, + "is_owner": false, + "is_primary_owner": false, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": false + }, + { + "id": "U15FHR92R", + "team_id": "T07Q4MHC7", + "name": "karen", + "deleted": false, + "status": null, + "color": "684b6c", + "real_name": "Karen", + "tz": "Africa\/Cairo", + "tz_label": "Eastern European Time", + "tz_offset": 7200, + "profile": { + "first_name": "Karen", + "last_name": "", + "avatar_hash": "g6fd11d3e252", + "real_name": "Karen", + "real_name_normalized": "Karen", + "email": "lindy+10@example.com", + "image_24": "https:\/\/secure.gravatar.com\/avatar\/6fd11d3e252e571d7371c7a5bbeb54ff.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F66f9%2Fimg%2Favatars%2Fava_0007-24.png", + "image_32": "https:\/\/secure.gravatar.com\/avatar\/6fd11d3e252e571d7371c7a5bbeb54ff.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F66f9%2Fimg%2Favatars%2Fava_0007-32.png", + "image_48": "https:\/\/secure.gravatar.com\/avatar\/6fd11d3e252e571d7371c7a5bbeb54ff.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F66f9%2Fimg%2Favatars%2Fava_0007-48.png", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/6fd11d3e252e571d7371c7a5bbeb54ff.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F66f9%2Fimg%2Favatars%2Fava_0007-72.png", + "image_192": "https:\/\/secure.gravatar.com\/avatar\/6fd11d3e252e571d7371c7a5bbeb54ff.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F7fa9%2Fimg%2Favatars%2Fava_0007-192.png", + "image_512": "https:\/\/secure.gravatar.com\/avatar\/6fd11d3e252e571d7371c7a5bbeb54ff.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F7fa9%2Fimg%2Favatars%2Fava_0007-512.png", + "fields": null + }, + "is_admin": false, + "is_owner": false, + "is_primary_owner": false, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": false + }, + { + "id": "U1THQPEMV", + "team_id": "T07Q4MHC7", + "name": "lindsay", + "deleted": false, + "status": null, + "color": "2b6836", + "real_name": "Lindsay B", + "tz": "America\/New_York", + "tz_label": "Eastern Daylight Time", + "tz_offset": -14400, + "profile": { + "first_name": "Lindsay", + "last_name": "B", + "avatar_hash": "g59bda23e5db", + "real_name": "Lindsay B", + "real_name_normalized": "Lindsay B", + "email": "lindsay@example.com", + "image_24": "https:\/\/secure.gravatar.com\/avatar\/59bda23e5dbe5930c3941c7bb90c3e2a.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F66f9%2Fimg%2Favatars%2Fava_0000-24.png", + "image_32": "https:\/\/secure.gravatar.com\/avatar\/59bda23e5dbe5930c3941c7bb90c3e2a.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F66f9%2Fimg%2Favatars%2Fava_0000-32.png", + "image_48": "https:\/\/secure.gravatar.com\/avatar\/59bda23e5dbe5930c3941c7bb90c3e2a.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F66f9%2Fimg%2Favatars%2Fava_0000-48.png", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/59bda23e5dbe5930c3941c7bb90c3e2a.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F66f9%2Fimg%2Favatars%2Fava_0000-72.png", + "image_192": "https:\/\/secure.gravatar.com\/avatar\/59bda23e5dbe5930c3941c7bb90c3e2a.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F7fa9%2Fimg%2Favatars%2Fava_0000-192.png", + "image_512": "https:\/\/secure.gravatar.com\/avatar\/59bda23e5dbe5930c3941c7bb90c3e2a.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F7fa9%2Fimg%2Favatars%2Fava_0000-512.png", + "fields": null + }, + "is_admin": false, + "is_owner": false, + "is_primary_owner": false, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": false + }, + { + "id": "U07Q4MHCP", + "team_id": "T07Q4MHC7", + "name": "lindy", + "deleted": false, + "status": null, + "color": "9f69e7", + "real_name": "", + "tz": "Africa\/Cairo", + "tz_label": "Eastern European Time", + "tz_offset": 7200, + "profile": { + "avatar_hash": "g822d051544b", + "real_name": "", + "real_name_normalized": "", + "email": "lindy@example.com", + "image_24": "https:\/\/secure.gravatar.com\/avatar\/822d051544b1f50f1e9f015cd2990edc.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F66f9%2Fimg%2Favatars%2Fava_0001-24.png", + "image_32": "https:\/\/secure.gravatar.com\/avatar\/822d051544b1f50f1e9f015cd2990edc.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F66f9%2Fimg%2Favatars%2Fava_0001-32.png", + "image_48": "https:\/\/secure.gravatar.com\/avatar\/822d051544b1f50f1e9f015cd2990edc.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F0180%2Fimg%2Favatars%2Fava_0001-48.png", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/822d051544b1f50f1e9f015cd2990edc.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F3654%2Fimg%2Favatars%2Fava_0001-72.png", + "image_192": "https:\/\/secure.gravatar.com\/avatar\/822d051544b1f50f1e9f015cd2990edc.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F7fa9%2Fimg%2Favatars%2Fava_0001-192.png", + "image_512": "https:\/\/secure.gravatar.com\/avatar\/822d051544b1f50f1e9f015cd2990edc.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F7fa9%2Fimg%2Favatars%2Fava_0001-512.png", + "fields": null + }, + "is_admin": true, + "is_owner": true, + "is_primary_owner": true, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": false + }, + { + "id": "U24CG47QU", + "team_id": "T07Q4MHC7", + "name": "lindy.invite", + "deleted": false, + "status": null, + "color": "99a949", + "real_name": "lindy invite", + "tz": "Africa\/Cairo", + "tz_label": "Eastern European Time", + "tz_offset": 7200, + "profile": { + "first_name": "lindy", + "last_name": "invite", + "avatar_hash": "g1c46f51413d", + "real_name": "lindy invite", + "real_name_normalized": "lindy invite", + "email": "lindy+invite@example.com", + "image_24": "https:\/\/secure.gravatar.com\/avatar\/1c46f51413d2af8048dfaadcf43f5a03.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F66f9%2Fimg%2Favatars%2Fava_0015-24.png", + "image_32": "https:\/\/secure.gravatar.com\/avatar\/1c46f51413d2af8048dfaadcf43f5a03.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F66f9%2Fimg%2Favatars%2Fava_0015-32.png", + "image_48": "https:\/\/secure.gravatar.com\/avatar\/1c46f51413d2af8048dfaadcf43f5a03.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F66f9%2Fimg%2Favatars%2Fava_0015-48.png", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/1c46f51413d2af8048dfaadcf43f5a03.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F66f9%2Fimg%2Favatars%2Fava_0015-72.png", + "image_192": "https:\/\/secure.gravatar.com\/avatar\/1c46f51413d2af8048dfaadcf43f5a03.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F7fa9%2Fimg%2Favatars%2Fava_0015-192.png", + "image_512": "https:\/\/secure.gravatar.com\/avatar\/1c46f51413d2af8048dfaadcf43f5a03.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F7fa9%2Fimg%2Favatars%2Fava_0015-512.png", + "fields": null + }, + "is_admin": false, + "is_owner": false, + "is_primary_owner": false, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": false + }, + { + "id": "U15FHKEKX", + "team_id": "T07Q4MHC7", + "name": "peter", + "deleted": false, + "status": null, + "color": "e0a729", + "real_name": "Peter", + "tz": "Africa\/Cairo", + "tz_label": "Eastern European Time", + "tz_offset": 7200, + "profile": { + "first_name": "Peter", + "last_name": "", + "avatar_hash": "g5f5c8dacc18", + "real_name": "Peter", + "real_name_normalized": "Peter", + "email": "lindy+14@example.com", + "image_24": "https:\/\/secure.gravatar.com\/avatar\/5f5c8dacc18f616a0dcdec904fdd5cea.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F66f9%2Fimg%2Favatars%2Fava_0014-24.png", + "image_32": "https:\/\/secure.gravatar.com\/avatar\/5f5c8dacc18f616a0dcdec904fdd5cea.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F66f9%2Fimg%2Favatars%2Fava_0014-32.png", + "image_48": "https:\/\/secure.gravatar.com\/avatar\/5f5c8dacc18f616a0dcdec904fdd5cea.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F66f9%2Fimg%2Favatars%2Fava_0014-48.png", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/5f5c8dacc18f616a0dcdec904fdd5cea.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F66f9%2Fimg%2Favatars%2Fava_0014-72.png", + "image_192": "https:\/\/secure.gravatar.com\/avatar\/5f5c8dacc18f616a0dcdec904fdd5cea.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F7fa9%2Fimg%2Favatars%2Fava_0014-192.png", + "image_512": "https:\/\/secure.gravatar.com\/avatar\/5f5c8dacc18f616a0dcdec904fdd5cea.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F7fa9%2Fimg%2Favatars%2Fava_0014-512.png", + "fields": null + }, + "is_admin": false, + "is_owner": false, + "is_primary_owner": false, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": false + }, + { + "id": "U15F922BY", + "team_id": "T07Q4MHC7", + "name": "sam", + "deleted": false, + "status": null, + "color": "674b1b", + "real_name": "Sam", + "tz": "Africa\/Cairo", + "tz_label": "Eastern European Time", + "tz_offset": 7200, + "profile": { + "first_name": "Sam", + "last_name": "", + "avatar_hash": "gef41b9b8176", + "real_name": "Sam", + "real_name_normalized": "Sam", + "email": "lindy+11@example.com", + "image_24": "https:\/\/secure.gravatar.com\/avatar\/ef41b9b8176fba6eaffdfe04415df8be.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F0180%2Fimg%2Favatars%2Fava_0017-24.png", + "image_32": "https:\/\/secure.gravatar.com\/avatar\/ef41b9b8176fba6eaffdfe04415df8be.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F66f9%2Fimg%2Favatars%2Fava_0017-32.png", + "image_48": "https:\/\/secure.gravatar.com\/avatar\/ef41b9b8176fba6eaffdfe04415df8be.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F66f9%2Fimg%2Favatars%2Fava_0017-48.png", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/ef41b9b8176fba6eaffdfe04415df8be.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F66f9%2Fimg%2Favatars%2Fava_0017-72.png", + "image_192": "https:\/\/secure.gravatar.com\/avatar\/ef41b9b8176fba6eaffdfe04415df8be.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F7fa9%2Fimg%2Favatars%2Fava_0017-192.png", + "image_512": "https:\/\/secure.gravatar.com\/avatar\/ef41b9b8176fba6eaffdfe04415df8be.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F7fa9%2Fimg%2Favatars%2Fava_0017-512.png", + "fields": null + }, + "is_admin": false, + "is_owner": false, + "is_primary_owner": false, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": false + }, + { + "id": "U13CSKE2E", + "team_id": "T07Q4MHC7", + "name": "sandy", + "deleted": false, + "status": null, + "color": "3c989f", + "real_name": "Sandy", + "tz": "Africa\/Cairo", + "tz_label": "Eastern European Time", + "tz_offset": 7200, + "profile": { + "first_name": "Sandy", + "last_name": "", + "avatar_hash": "g7bb3eebada3", + "real_name": "Sandy", + "real_name_normalized": "Sandy", + "email": "lindy+3@example.com", + "image_24": "https:\/\/secure.gravatar.com\/avatar\/7bb3eebada3d8ee1251980df86904ec9.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F66f9%2Fimg%2Favatars%2Fava_0013-24.png", + "image_32": "https:\/\/secure.gravatar.com\/avatar\/7bb3eebada3d8ee1251980df86904ec9.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F0180%2Fimg%2Favatars%2Fava_0013-32.png", + "image_48": "https:\/\/secure.gravatar.com\/avatar\/7bb3eebada3d8ee1251980df86904ec9.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F66f9%2Fimg%2Favatars%2Fava_0013-48.png", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/7bb3eebada3d8ee1251980df86904ec9.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F66f9%2Fimg%2Favatars%2Fava_0013-72.png", + "image_192": "https:\/\/secure.gravatar.com\/avatar\/7bb3eebada3d8ee1251980df86904ec9.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F7fa9%2Fimg%2Favatars%2Fava_0013-192.png", + "image_512": "https:\/\/secure.gravatar.com\/avatar\/7bb3eebada3d8ee1251980df86904ec9.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F7fa9%2Fimg%2Favatars%2Fava_0013-512.png", + "fields": null + }, + "is_admin": false, + "is_owner": false, + "is_primary_owner": false, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": false + }, + { + "id": "U13C5JZ7W", + "team_id": "T07Q4MHC7", + "name": "ted", + "deleted": false, + "status": null, + "color": "e7392d", + "real_name": "Ted", + "tz": "Africa\/Cairo", + "tz_label": "Eastern European Time", + "tz_offset": 7200, + "profile": { + "first_name": "Ted", + "last_name": "", + "avatar_hash": "g5b31933276f", + "real_name": "Ted", + "real_name_normalized": "Ted", + "email": "lindy+2@example.com", + "image_24": "https:\/\/secure.gravatar.com\/avatar\/5b31933276f699aa8ff55a8fe4a2e7cb.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F66f9%2Fimg%2Favatars%2Fava_0022-24.png", + "image_32": "https:\/\/secure.gravatar.com\/avatar\/5b31933276f699aa8ff55a8fe4a2e7cb.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F66f9%2Fimg%2Favatars%2Fava_0022-32.png", + "image_48": "https:\/\/secure.gravatar.com\/avatar\/5b31933276f699aa8ff55a8fe4a2e7cb.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F66f9%2Fimg%2Favatars%2Fava_0022-48.png", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/5b31933276f699aa8ff55a8fe4a2e7cb.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F66f9%2Fimg%2Favatars%2Fava_0022-72.png", + "image_192": "https:\/\/secure.gravatar.com\/avatar\/5b31933276f699aa8ff55a8fe4a2e7cb.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F7fa9%2Fimg%2Favatars%2Fava_0022-192.png", + "image_512": "https:\/\/secure.gravatar.com\/avatar\/5b31933276f699aa8ff55a8fe4a2e7cb.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F7fa9%2Fimg%2Favatars%2Fava_0022-512.png", + "fields": null + }, + "is_admin": true, + "is_owner": false, + "is_primary_owner": false, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": false + } +]
\ No newline at end of file |