diff options
author | JoramWilander <jwawilander@gmail.com> | 2018-07-10 15:01:43 -0400 |
---|---|---|
committer | JoramWilander <jwawilander@gmail.com> | 2018-07-10 15:01:43 -0400 |
commit | 6c7dc2d29ccac5f9925402f6be1a4c2a3c46c005 (patch) | |
tree | 5564a47257bf6e85aaef711980c5b0fcb4d07dcc /app/plugin_api.go | |
parent | c042ffa460296587579aff54b157a5109e022f7e (diff) | |
parent | 1e1a5e5e85240f25c4faddcb24c5a29a915fe6e4 (diff) | |
download | chat-6c7dc2d29ccac5f9925402f6be1a4c2a3c46c005.tar.gz chat-6c7dc2d29ccac5f9925402f6be1a4c2a3c46c005.tar.bz2 chat-6c7dc2d29ccac5f9925402f6be1a4c2a3c46c005.zip |
Merge branch 'plugins-2'
Diffstat (limited to 'app/plugin_api.go')
-rw-r--r-- | app/plugin_api.go | 224 |
1 files changed, 95 insertions, 129 deletions
diff --git a/app/plugin_api.go b/app/plugin_api.go index 06eeee146..4130fc4b2 100644 --- a/app/plugin_api.go +++ b/app/plugin_api.go @@ -5,32 +5,48 @@ package app import ( "encoding/json" - "net/http" + "fmt" "strings" - "github.com/gorilla/mux" + "github.com/mattermost/mattermost-server/mlog" "github.com/mattermost/mattermost-server/model" - "github.com/mattermost/mattermost-server/utils" - - "github.com/mattermost/mattermost-server/plugin" ) type PluginAPI struct { - id string - app *App - keyValueStore *PluginKeyValueStore -} - -type PluginKeyValueStore struct { - id string - app *App + id string + app *App + logger *mlog.SugarLogger + manifest *model.Manifest +} + +func NewPluginAPI(a *App, manifest *model.Manifest) *PluginAPI { + return &PluginAPI{ + id: manifest.Id, + manifest: manifest, + app: a, + logger: a.Log.With(mlog.String("plugin_id", manifest.Id)).Sugar(), + } } func (api *PluginAPI) LoadPluginConfiguration(dest interface{}) error { - if b, err := json.Marshal(api.app.Config().PluginSettings.Plugins[api.id]); err != nil { + finalConfig := make(map[string]interface{}) + + // First set final config to defaults + if api.manifest.SettingsSchema != nil { + for _, setting := range api.manifest.SettingsSchema.Settings { + finalConfig[strings.ToLower(setting.Key)] = setting.Default + } + } + + // If we have settings given we override the defaults with them + for setting, value := range api.app.Config().PluginSettings.Plugins[api.id] { + finalConfig[strings.ToLower(setting)] = value + } + + if pluginSettingsJsonBytes, err := json.Marshal(finalConfig); err != nil { return err } else { - return json.Unmarshal(b, dest) + return json.Unmarshal(pluginSettingsJsonBytes, dest) } } @@ -43,6 +59,14 @@ func (api *PluginAPI) UnregisterCommand(teamId, trigger string) error { return nil } +func (api *PluginAPI) GetConfig() *model.Config { + return api.app.GetConfig() +} + +func (api *PluginAPI) SaveConfig(config *model.Config) *model.AppError { + return api.app.SaveConfig(config, true) +} + func (api *PluginAPI) CreateTeam(team *model.Team) (*model.Team, *model.AppError) { return api.app.CreateTeam(team) } @@ -51,6 +75,10 @@ func (api *PluginAPI) DeleteTeam(teamId string) *model.AppError { return api.app.SoftDeleteTeam(teamId) } +func (api *PluginAPI) GetTeams() ([]*model.Team, *model.AppError) { + return api.app.GetAllTeams() +} + func (api *PluginAPI) GetTeam(teamId string) (*model.Team, *model.AppError) { return api.app.GetTeam(teamId) } @@ -63,6 +91,30 @@ func (api *PluginAPI) UpdateTeam(team *model.Team) (*model.Team, *model.AppError return api.app.UpdateTeam(team) } +func (api *PluginAPI) CreateTeamMember(teamId, userId string) (*model.TeamMember, *model.AppError) { + return api.app.AddTeamMember(teamId, userId) +} + +func (api *PluginAPI) CreateTeamMembers(teamId string, userIds []string, requestorId string) ([]*model.TeamMember, *model.AppError) { + return api.app.AddTeamMembers(teamId, userIds, requestorId) +} + +func (api *PluginAPI) DeleteTeamMember(teamId, userId, requestorId string) *model.AppError { + return api.app.RemoveUserFromTeam(teamId, userId, requestorId) +} + +func (api *PluginAPI) GetTeamMembers(teamId string, offset, limit int) ([]*model.TeamMember, *model.AppError) { + return api.app.GetTeamMembers(teamId, offset, limit) +} + +func (api *PluginAPI) GetTeamMember(teamId, userId string) (*model.TeamMember, *model.AppError) { + return api.app.GetTeamMember(teamId, userId) +} + +func (api *PluginAPI) UpdateTeamMemberRoles(teamId, userId, newRoles string) (*model.TeamMember, *model.AppError) { + return api.app.UpdateTeamMemberRoles(teamId, userId, newRoles) +} + func (api *PluginAPI) CreateUser(user *model.User) (*model.User, *model.AppError) { return api.app.CreateUser(user) } @@ -104,6 +156,10 @@ func (api *PluginAPI) DeleteChannel(channelId string) *model.AppError { return api.app.DeleteChannel(channel, "") } +func (api *PluginAPI) GetPublicChannelsForTeam(teamId string, offset, limit int) (*model.ChannelList, *model.AppError) { + return api.app.GetPublicChannelsForTeam(teamId, offset, limit) +} + func (api *PluginAPI) GetChannel(channelId string) (*model.Channel, *model.AppError) { return api.app.GetChannel(channelId) } @@ -157,6 +213,10 @@ func (api *PluginAPI) CreatePost(post *model.Post) (*model.Post, *model.AppError return api.app.CreatePostMissingChannel(post, true) } +func (api *PluginAPI) SendEphemeralPost(userId string, post *model.Post) *model.Post { + return api.app.SendEphemeralPost(userId, post) +} + func (api *PluginAPI) DeletePost(postId string) *model.AppError { _, err := api.app.DeletePost(postId, api.id) return err @@ -170,129 +230,35 @@ func (api *PluginAPI) UpdatePost(post *model.Post) (*model.Post, *model.AppError return api.app.UpdatePost(post, false) } -func (api *PluginAPI) KeyValueStore() plugin.KeyValueStore { - return api.keyValueStore +func (api *PluginAPI) KVSet(key string, value []byte) *model.AppError { + return api.app.SetPluginKey(api.id, key, value) } -func (s *PluginKeyValueStore) Set(key string, value []byte) *model.AppError { - return s.app.SetPluginKey(s.id, key, value) +func (api *PluginAPI) KVGet(key string) ([]byte, *model.AppError) { + return api.app.GetPluginKey(api.id, key) } -func (s *PluginKeyValueStore) Get(key string) ([]byte, *model.AppError) { - return s.app.GetPluginKey(s.id, key) +func (api *PluginAPI) KVDelete(key string) *model.AppError { + return api.app.DeletePluginKey(api.id, key) } -func (s *PluginKeyValueStore) Delete(key string) *model.AppError { - return s.app.DeletePluginKey(s.id, key) +func (api *PluginAPI) PublishWebSocketEvent(event string, payload map[string]interface{}, broadcast *model.WebsocketBroadcast) { + api.app.Publish(&model.WebSocketEvent{ + Event: fmt.Sprintf("custom_%v_%v", api.id, event), + Data: payload, + Broadcast: broadcast, + }) } -type BuiltInPluginAPI struct { - id string - router *mux.Router - app *App +func (api *PluginAPI) LogDebug(msg string, keyValuePairs ...interface{}) { + api.logger.Debug(msg, keyValuePairs...) } - -func (api *BuiltInPluginAPI) LoadPluginConfiguration(dest interface{}) error { - if b, err := json.Marshal(api.app.Config().PluginSettings.Plugins[api.id]); err != nil { - return err - } else { - return json.Unmarshal(b, dest) - } -} - -func (api *BuiltInPluginAPI) PluginRouter() *mux.Router { - return api.router +func (api *PluginAPI) LogInfo(msg string, keyValuePairs ...interface{}) { + api.logger.Info(msg, keyValuePairs...) } - -func (api *BuiltInPluginAPI) GetTeamByName(name string) (*model.Team, *model.AppError) { - return api.app.GetTeamByName(name) +func (api *PluginAPI) LogError(msg string, keyValuePairs ...interface{}) { + api.logger.Error(msg, keyValuePairs...) } - -func (api *BuiltInPluginAPI) GetUserByName(name string) (*model.User, *model.AppError) { - return api.app.GetUserByUsername(name) -} - -func (api *BuiltInPluginAPI) GetChannelByName(teamId, name string) (*model.Channel, *model.AppError) { - return api.app.GetChannelByName(name, teamId) -} - -func (api *BuiltInPluginAPI) GetDirectChannel(userId1, userId2 string) (*model.Channel, *model.AppError) { - return api.app.GetDirectChannel(userId1, userId2) -} - -func (api *BuiltInPluginAPI) CreatePost(post *model.Post) (*model.Post, *model.AppError) { - return api.app.CreatePostMissingChannel(post, true) -} - -func (api *BuiltInPluginAPI) GetLdapUserAttributes(userId string, attributes []string) (map[string]string, *model.AppError) { - if api.app.Ldap == nil { - return nil, model.NewAppError("GetLdapUserAttributes", "ent.ldap.disabled.app_error", nil, "", http.StatusNotImplemented) - } - - user, err := api.app.GetUser(userId) - if err != nil { - return nil, err - } - - if user.AuthData == nil { - return map[string]string{}, nil - } - - return api.app.Ldap.GetUserAttributes(*user.AuthData, attributes) -} - -func (api *BuiltInPluginAPI) GetSessionFromRequest(r *http.Request) (*model.Session, *model.AppError) { - token := "" - isTokenFromQueryString := false - - // Attempt to parse token out of the header - authHeader := r.Header.Get(model.HEADER_AUTH) - if len(authHeader) > 6 && strings.ToUpper(authHeader[0:6]) == model.HEADER_BEARER { - // Default session token - token = authHeader[7:] - - } else if len(authHeader) > 5 && strings.ToLower(authHeader[0:5]) == model.HEADER_TOKEN { - // OAuth token - token = authHeader[6:] - } - - // Attempt to parse the token from the cookie - if len(token) == 0 { - if cookie, err := r.Cookie(model.SESSION_COOKIE_TOKEN); err == nil { - token = cookie.Value - - if r.Header.Get(model.HEADER_REQUESTED_WITH) != model.HEADER_REQUESTED_WITH_XML { - return nil, model.NewAppError("ServeHTTP", "api.context.session_expired.app_error", nil, "token="+token+" Appears to be a CSRF attempt", http.StatusUnauthorized) - } - } - } - - // Attempt to parse token out of the query string - if len(token) == 0 { - token = r.URL.Query().Get("access_token") - isTokenFromQueryString = true - } - - if len(token) == 0 { - return nil, model.NewAppError("ServeHTTP", "api.context.session_expired.app_error", nil, "token="+token, http.StatusUnauthorized) - } - - session, err := api.app.GetSession(token) - - if err != nil { - return nil, model.NewAppError("ServeHTTP", "api.context.session_expired.app_error", nil, "token="+token, http.StatusUnauthorized) - } else if !session.IsOAuth && isTokenFromQueryString { - return nil, model.NewAppError("ServeHTTP", "api.context.token_provided.app_error", nil, "token="+token, http.StatusUnauthorized) - } - - return session, nil -} - -func (api *BuiltInPluginAPI) I18n(id string, r *http.Request) string { - if r != nil { - f, _ := utils.GetTranslationsAndLocale(nil, r) - return f(id) - } - f, _ := utils.GetTranslationsBySystemLocale() - return f(id) +func (api *PluginAPI) LogWarn(msg string, keyValuePairs ...interface{}) { + api.logger.Warn(msg, keyValuePairs...) } |