This repository has been archived on 2024-11-03. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
mattermost-plugin-attachmen.../server/configuration.go
2018-07-23 13:43:22 -04:00

112 lines
2.8 KiB
Go

package main
import (
"fmt"
"github.com/mattermost/mattermost-server/model"
)
// OnConfigurationChange is invoked when configuration changes may have been made.
//
// This sample implementation ensures the configured sample user and channel are created for use
// by the plugin.
func (p *Plugin) OnConfigurationChange() error {
// Leverage the default implementation on the embedded plugin.Mattermost. This
// automatically attempts to unmarshal the plugin config block of the server's
// configuration onto the public members of Plugin, such as Username and ChannelName.
//
// Feel free to skip this and implement your own handler if you have more complex needs.
if err := p.MattermostPlugin.OnConfigurationChange(); err != nil {
p.API.LogError(err.Error())
return err
}
if err := p.ensureSampleUser(); err != nil {
p.API.LogError(err.Error())
return err
}
if err := p.ensureSampleChannels(); err != nil {
p.API.LogError(err.Error())
return err
}
return nil
}
func (p *Plugin) ensureSampleUser() *model.AppError {
var err *model.AppError
// Check for the configured user. Ignore any error, since it's hard to distinguish runtime
// errors from a user simply not existing.
user, _ := p.API.GetUserByUsername(p.Username)
// Ensure the configured user exists.
if user == nil {
user, err = p.API.CreateUser(&model.User{
Username: p.Username,
Password: "sample",
// AuthData *string `json:"auth_data,omitempty"`
// AuthService string `json:"auth_service"`
Email: fmt.Sprintf("%s@example.com", p.Username),
Nickname: "Sam",
FirstName: "Sample",
LastName: "Plugin User",
Position: "Bot",
})
if err != nil {
return err
}
}
teams, err := p.API.GetTeams()
if err != nil {
return err
}
for _, team := range teams {
// Ignore any error.
p.API.CreateTeamMember(team.Id, p.sampleUserId)
}
// Save the id for later use.
p.sampleUserId = user.Id
return nil
}
func (p *Plugin) ensureSampleChannels() *model.AppError {
teams, err := p.API.GetTeams()
if err != nil {
return err
}
p.sampleChannelIds = make(map[string]string)
for _, team := range teams {
// Check for the configured channel. Ignore any error, since it's hard to
// distinguish runtime errors from a channel simply not existing.
channel, _ := p.API.GetChannelByNameForTeamName(team.Name, p.ChannelName)
// Ensure the configured channel exists.
if channel == nil {
channel, err = p.API.CreateChannel(&model.Channel{
TeamId: team.Id,
Type: model.CHANNEL_OPEN,
DisplayName: "Sample Plugin",
Name: p.ChannelName,
Header: "The channel used by the sample plugin.",
Purpose: "This channel was created by a plugin for testing.",
})
if err != nil {
return err
}
}
// Save the ids for later use.
p.sampleChannelIds[team.Id] = channel.Id
}
return nil
}