Restrict to subset of teams
This commit is contained in:
parent
d7552b43cd
commit
0f6be9663e
1 changed files with 41 additions and 18 deletions
|
@ -24,7 +24,7 @@ type Mattermost struct {
|
|||
|
||||
server string
|
||||
username string
|
||||
team string
|
||||
teams map[string]bool
|
||||
|
||||
conn *matterclient.MMClient
|
||||
handlerStopChan chan bool
|
||||
|
@ -60,10 +60,16 @@ func (mm *Mattermost) Configure(c Configuration) error {
|
|||
return err
|
||||
}
|
||||
|
||||
mm.team, err = c.GetString("team")
|
||||
teams, err := c.GetString("teams")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
mm.teams = map[string]bool{}
|
||||
anyteam := ""
|
||||
for _, team := range strings.Split(teams, ",") {
|
||||
anyteam = strings.TrimSpace(team)
|
||||
mm.teams[anyteam] = true
|
||||
}
|
||||
|
||||
notls, err := c.GetBool("no_tls", false)
|
||||
if err != nil {
|
||||
|
@ -75,7 +81,7 @@ func (mm *Mattermost) Configure(c Configuration) error {
|
|||
if token != "" {
|
||||
password = "token=" + token
|
||||
}
|
||||
mm.conn = matterclient.New(mm.username, password, mm.team, mm.server)
|
||||
mm.conn = matterclient.New(mm.username, password, anyteam, mm.server)
|
||||
mm.conn.Credentials.NoTLS = notls
|
||||
err = mm.conn.Login()
|
||||
if err != nil {
|
||||
|
@ -112,7 +118,7 @@ func (mm *Mattermost) getTeamIdByName(name string) string {
|
|||
func (mm *Mattermost) checkRoomId(id RoomID) (string, error) {
|
||||
x := strings.Split(string(id), "@")
|
||||
if len(x) == 1 {
|
||||
return "", fmt.Errorf("Please write whole room ID with team and server: %s@%s@%s", id, mm.team, mm.server)
|
||||
return "", fmt.Errorf("Please write whole room ID with team and server: %s@<team>@%s", id, mm.server)
|
||||
}
|
||||
if len(x) == 2 {
|
||||
return x[0], nil
|
||||
|
@ -133,15 +139,19 @@ func (mm *Mattermost) checkRoomId(id RoomID) (string, error) {
|
|||
return ch_id, nil
|
||||
}
|
||||
|
||||
func (mm *Mattermost) reverseRoomId(id string) RoomID {
|
||||
func (mm *Mattermost) reverseRoomId(id string) (bool, RoomID) {
|
||||
team := mm.conn.GetChannelTeamId(id)
|
||||
if team == "" {
|
||||
return RoomID(fmt.Sprintf("%s@%s", id, mm.server))
|
||||
return true, RoomID(fmt.Sprintf("%s@%s", id, mm.server))
|
||||
} else {
|
||||
teamName := mm.conn.GetTeamName(team)
|
||||
if u, ok := mm.teams[teamName]; ok && u {
|
||||
name := mm.conn.GetChannelName(id)
|
||||
fmt.Printf("CHANNEL NAME: %s TEAM: %s\n", name, teamName)
|
||||
return RoomID(fmt.Sprintf("%s@%s@%s", name, teamName, mm.server))
|
||||
return true, RoomID(fmt.Sprintf("%s@%s@%s", name, teamName, mm.server))
|
||||
} else {
|
||||
return false, ""
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -299,7 +309,11 @@ func (mm *Mattermost) handleConnected() {
|
|||
continue // This is a DM channel
|
||||
}
|
||||
|
||||
id := mm.reverseRoomId(ch.Id)
|
||||
interested, id := mm.reverseRoomId(ch.Id)
|
||||
if !interested {
|
||||
// Skip channels that are not in teams we want to bridge
|
||||
continue
|
||||
}
|
||||
mm.handler.Joined(id)
|
||||
|
||||
// Update room info
|
||||
|
@ -440,7 +454,10 @@ func (mm *Mattermost) ensureJoined(user *model.User, roomId RoomID) {
|
|||
}
|
||||
|
||||
func (mm *Mattermost) handlePosted(msg *model.WebSocketEvent) error {
|
||||
channel_name := msg.Data["channel_name"].(string)
|
||||
channel_name, ok := msg.Data["channel_name"].(string)
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
post_str := msg.Data["post"].(string)
|
||||
var post model.Post
|
||||
err := json.Unmarshal([]byte(post_str), &post)
|
||||
|
@ -480,14 +497,17 @@ func (mm *Mattermost) handlePost(channel_name string, post *model.Post, only_mes
|
|||
if post.FileIds != nil && len(post.FileIds) > 0 {
|
||||
msg_ev.Attachments = []MediaObject{}
|
||||
for _, file := range post.Metadata.Files {
|
||||
media_object := &LazyBlobMediaObject{
|
||||
ObjectFilename: file.Name,
|
||||
ObjectMimetype: file.MimeType,
|
||||
GetFn: func(o *LazyBlobMediaObject) error {
|
||||
blob, resp := mm.conn.Client.GetFile(file.Id)
|
||||
if resp.Error != nil {
|
||||
return resp.Error
|
||||
}
|
||||
media_object := &BlobMediaObject{
|
||||
ObjectFilename: file.Name,
|
||||
ObjectMimetype: file.MimeType,
|
||||
ObjectData: blob,
|
||||
o.ObjectData = blob
|
||||
return nil
|
||||
},
|
||||
}
|
||||
if file.Width > 0 {
|
||||
media_object.ObjectImageSize = &ImageSize{
|
||||
|
@ -509,7 +529,10 @@ func (mm *Mattermost) handlePost(channel_name string, post *model.Post, only_mes
|
|||
|
||||
mm.handler.Event(msg_ev)
|
||||
} else {
|
||||
roomId := mm.reverseRoomId(post.ChannelId)
|
||||
interested, roomId := mm.reverseRoomId(post.ChannelId)
|
||||
if !interested {
|
||||
return nil
|
||||
}
|
||||
if roomId == "" {
|
||||
return fmt.Errorf("Invalid channel id")
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue