[MM-40935] Add OnInstall() plugin hook (#19499)

Этот коммит содержится в:
Ben Schumacher
2022-02-09 20:29:00 +01:00
коммит произвёл GitHub
родитель 2d986ef920
Коммит 6dab9eadf8
9 изменённых файлов: 102 добавлений и 11 удалений

Просмотреть файл

@@ -438,7 +438,7 @@ type AppIface interface {
CompareAndDeletePluginKey(pluginID string, key string, oldValue []byte) (bool, *model.AppError)
CompareAndSetPluginKey(pluginID string, key string, oldValue, newValue []byte) (bool, *model.AppError)
CompleteOAuth(c *request.Context, service string, body io.ReadCloser, teamID string, props map[string]string, tokenUser *model.User) (*model.User, *model.AppError)
CompleteOnboarding(request *model.CompleteOnboardingRequest) *model.AppError
CompleteOnboarding(c *request.Context, request *model.CompleteOnboardingRequest) *model.AppError
CompleteSwitchWithOAuth(service string, userData io.Reader, email string, tokenUser *model.User) (*model.User, *model.AppError)
Compliance() einterfaces.ComplianceInterface
Config() *model.Config

Просмотреть файл

@@ -7,18 +7,21 @@ import (
"net/http"
"sync"
"github.com/mattermost/mattermost-server/v6/app/request"
"github.com/mattermost/mattermost-server/v6/model"
"github.com/mattermost/mattermost-server/v6/shared/mlog"
)
func (a *App) CompleteOnboarding(request *model.CompleteOnboardingRequest) *model.AppError {
var wg sync.WaitGroup
if !*a.Config().PluginSettings.Enable {
return model.NewAppError("completeOnboarding", "app.plugin.disabled.app_error", nil, "", http.StatusNotImplemented)
func (a *App) CompleteOnboarding(c *request.Context, request *model.CompleteOnboardingRequest) *model.AppError {
pluginsEnvironment := a.Channels().GetPluginsEnvironment()
if pluginsEnvironment == nil {
return model.NewAppError("CompleteOnboarding", "app.plugin.disabled.app_error", nil, "", http.StatusNotImplemented)
}
for _, id := range request.InstallPlugins {
pluginContext := pluginContext(c)
var wg sync.WaitGroup
for _, pluginID := range request.InstallPlugins {
wg.Add(1)
go func(id string) {
@@ -37,7 +40,20 @@ func (a *App) CompleteOnboarding(request *model.CompleteOnboardingRequest) *mode
mlog.Error("Failed to enable plugin for onboarding", mlog.String("id", id), mlog.Err(appErr))
return
}
}(id)
hooks, err := pluginsEnvironment.HooksForPlugin(id)
if err != nil {
mlog.Warn("Getting hooks for plugin failed", mlog.String("plugin_id", id), mlog.Err(err))
return
}
event := model.OnInstallEvent{
UserId: c.Session().UserId,
}
if err = hooks.OnInstall(pluginContext, event); err != nil {
mlog.Error("Plugin OnInstall hook failed", mlog.String("plugin_id", id), mlog.Err(err))
}
}(pluginID)
}
wg.Wait()

Просмотреть файл

@@ -1671,7 +1671,7 @@ func (a *OpenTracingAppLayer) CompleteOAuth(c *request.Context, service string,
return resultVar0, resultVar1
}
func (a *OpenTracingAppLayer) CompleteOnboarding(request *model.CompleteOnboardingRequest) *model.AppError {
func (a *OpenTracingAppLayer) CompleteOnboarding(c *request.Context, request *model.CompleteOnboardingRequest) *model.AppError {
origCtx := a.ctx
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.CompleteOnboarding")
@@ -1683,7 +1683,7 @@ func (a *OpenTracingAppLayer) CompleteOnboarding(request *model.CompleteOnboardi
}()
defer span.Finish()
resultVar0 := a.app.CompleteOnboarding(request)
resultVar0 := a.app.CompleteOnboarding(c, request)
if resultVar0 != nil {
span.LogFields(spanlog.Error(resultVar0))