diff --git a/Makefile b/Makefile index 7c8de4311b..3f3477094e 100644 --- a/Makefile +++ b/Makefile @@ -149,12 +149,12 @@ TEMPLATES_DIR=templates PLUGIN_PACKAGES ?= mattermost-plugin-antivirus-v0.1.2 PLUGIN_PACKAGES += mattermost-plugin-autolink-v1.2.2 PLUGIN_PACKAGES += mattermost-plugin-aws-SNS-v1.2.0 -PLUGIN_PACKAGES += mattermost-plugin-calls-v0.11.0 +PLUGIN_PACKAGES += mattermost-plugin-calls-v0.12.1 PLUGIN_PACKAGES += mattermost-plugin-channel-export-v1.0.0 PLUGIN_PACKAGES += mattermost-plugin-confluence-v1.3.0 PLUGIN_PACKAGES += mattermost-plugin-custom-attributes-v1.3.1 PLUGIN_PACKAGES += mattermost-plugin-github-v2.1.4 -PLUGIN_PACKAGES += mattermost-plugin-gitlab-v1.5.2 +PLUGIN_PACKAGES += mattermost-plugin-gitlab-v1.6.0 PLUGIN_PACKAGES += mattermost-plugin-playbooks-v1.35.0 PLUGIN_PACKAGES += mattermost-plugin-jenkins-v1.1.0 PLUGIN_PACKAGES += mattermost-plugin-jira-v3.2.2 @@ -163,8 +163,8 @@ PLUGIN_PACKAGES += mattermost-plugin-nps-v1.3.1 PLUGIN_PACKAGES += mattermost-plugin-todo-v0.6.1 PLUGIN_PACKAGES += mattermost-plugin-welcomebot-v1.2.0 PLUGIN_PACKAGES += mattermost-plugin-zoom-v1.6.0 -PLUGIN_PACKAGES += focalboard-v7.5.4 -PLUGIN_PACKAGES += mattermost-plugin-apps-v1.1.0 +PLUGIN_PACKAGES += focalboard-v7.7.0 +PLUGIN_PACKAGES += mattermost-plugin-apps-v1.2.0 # Prepares the enterprise build if exists. The IGNORE stuff is a hack to get the Makefile to execute the commands outside a target ifeq ($(BUILD_ENTERPRISE_READY),true) diff --git a/api4/channel_category_test.go b/api4/channel_category_test.go index e58a557ee6..af3e9b2319 100644 --- a/api4/channel_category_test.go +++ b/api4/channel_category_test.go @@ -103,7 +103,6 @@ func TestCreateCategoryForTeamForUser(t *testing.T) { }) t.Run("should publish expected WS payload", func(t *testing.T) { - t.Skip("MM-42652") userWSClient, err := th.CreateWebSocketClient() require.NoError(t, err) defer userWSClient.Close() diff --git a/app/app_iface.go b/app/app_iface.go index 09f544c605..b6af1556a0 100644 --- a/app/app_iface.go +++ b/app/app_iface.go @@ -435,7 +435,7 @@ type AppIface interface { BuildPostReactions(ctx request.CTX, postID string) (*[]ReactionImportData, *model.AppError) BuildPushNotificationMessage(c request.CTX, contentsConfig string, post *model.Post, user *model.User, channel *model.Channel, channelName string, senderName string, explicitMention bool, channelWideMention bool, replyToThreadType string) (*model.PushNotification, *model.AppError) BuildSamlMetadataObject(idpMetadata []byte) (*model.SamlMetadataResponse, *model.AppError) - BulkExport(ctx request.CTX, writer io.Writer, outPath string, opts model.BulkExportOpts) *model.AppError + BulkExport(ctx request.CTX, writer io.Writer, outPath string, job *model.Job, opts model.BulkExportOpts) *model.AppError BulkImport(c *request.Context, jsonlReader io.Reader, attachmentsReader *zip.Reader, dryRun bool, workers int) (*model.AppError, int) BulkImportWithPath(c *request.Context, jsonlReader io.Reader, attachmentsReader *zip.Reader, dryRun bool, workers int, importPath string) (*model.AppError, int) CanNotifyAdmin(trial bool) bool diff --git a/app/export.go b/app/export.go index 8e52fa74e7..ee427b6936 100644 --- a/app/export.go +++ b/app/export.go @@ -12,6 +12,7 @@ import ( "net/http" "os" "path/filepath" + "strconv" "strings" "time" @@ -65,7 +66,7 @@ var exportablePreferences = map[imports.ComparablePreference]string{{ }: "EmailInterval", } -func (a *App) BulkExport(ctx request.CTX, writer io.Writer, outPath string, opts model.BulkExportOpts) *model.AppError { +func (a *App) BulkExport(ctx request.CTX, writer io.Writer, outPath string, job *model.Job, opts model.BulkExportOpts) *model.AppError { var zipWr *zip.Writer if opts.CreateArchive { var err error @@ -78,46 +79,50 @@ func (a *App) BulkExport(ctx request.CTX, writer io.Writer, outPath string, opts } } + if job != nil && job.Data == nil { + job.Data = make(model.StringMap) + } + ctx.Logger().Info("Bulk export: exporting version") if err := a.exportVersion(writer); err != nil { return err } ctx.Logger().Info("Bulk export: exporting teams") - teamNames, err := a.exportAllTeams(writer) + teamNames, err := a.exportAllTeams(ctx, job, writer) if err != nil { return err } ctx.Logger().Info("Bulk export: exporting channels") - if err = a.exportAllChannels(writer, teamNames); err != nil { + if err = a.exportAllChannels(ctx, job, writer, teamNames); err != nil { return err } ctx.Logger().Info("Bulk export: exporting users") - if err = a.exportAllUsers(writer); err != nil { + if err = a.exportAllUsers(ctx, job, writer); err != nil { return err } ctx.Logger().Info("Bulk export: exporting posts") - attachments, err := a.exportAllPosts(ctx, writer, opts.IncludeAttachments) + attachments, err := a.exportAllPosts(ctx, job, writer, opts.IncludeAttachments) if err != nil { return err } ctx.Logger().Info("Bulk export: exporting emoji") - emojiPaths, err := a.exportCustomEmoji(ctx, writer, outPath, "exported_emoji", !opts.CreateArchive) + emojiPaths, err := a.exportCustomEmoji(ctx, job, writer, outPath, "exported_emoji", !opts.CreateArchive) if err != nil { return err } ctx.Logger().Info("Bulk export: exporting direct channels") - if err = a.exportAllDirectChannels(writer); err != nil { + if err = a.exportAllDirectChannels(ctx, job, writer); err != nil { return err } ctx.Logger().Info("Bulk export: exporting direct posts") - directAttachments, err := a.exportAllDirectPosts(ctx, writer, opts.IncludeAttachments) + directAttachments, err := a.exportAllDirectPosts(ctx, job, writer, opts.IncludeAttachments) if err != nil { return err } @@ -139,6 +144,8 @@ func (a *App) BulkExport(ctx request.CTX, writer io.Writer, outPath string, opts return err } } + + updateJobProgress(ctx.Logger(), a.Srv().Store(), job, "attachments_exported", len(attachments)+len(directAttachments)+len(emojiPaths)) } return nil @@ -175,9 +182,10 @@ func (a *App) exportVersion(writer io.Writer) *model.AppError { return a.exportWriteLine(writer, versionLine) } -func (a *App) exportAllTeams(writer io.Writer) (map[string]bool, *model.AppError) { +func (a *App) exportAllTeams(ctx request.CTX, job *model.Job, writer io.Writer) (map[string]bool, *model.AppError) { afterId := strings.Repeat("0", 26) teamNames := make(map[string]bool) + cnt := 0 for { teams, err := a.Srv().Store().Team().GetAllForExportAfter(1000, afterId) if err != nil { @@ -187,6 +195,8 @@ func (a *App) exportAllTeams(writer io.Writer) (map[string]bool, *model.AppError if len(teams) == 0 { break } + cnt += len(teams) + updateJobProgress(ctx.Logger(), a.Srv().Store(), job, "teams_exported", cnt) for _, team := range teams { afterId = team.Id @@ -207,8 +217,9 @@ func (a *App) exportAllTeams(writer io.Writer) (map[string]bool, *model.AppError return teamNames, nil } -func (a *App) exportAllChannels(writer io.Writer, teamNames map[string]bool) *model.AppError { +func (a *App) exportAllChannels(ctx request.CTX, job *model.Job, writer io.Writer, teamNames map[string]bool) *model.AppError { afterId := strings.Repeat("0", 26) + cnt := 0 for { channels, err := a.Srv().Store().Channel().GetAllChannelsForExportAfter(1000, afterId) @@ -219,6 +230,8 @@ func (a *App) exportAllChannels(writer io.Writer, teamNames map[string]bool) *mo if len(channels) == 0 { break } + cnt += len(channels) + updateJobProgress(ctx.Logger(), a.Srv().Store(), job, "channels_exported", cnt) for _, channel := range channels { afterId = channel.Id @@ -242,8 +255,9 @@ func (a *App) exportAllChannels(writer io.Writer, teamNames map[string]bool) *mo return nil } -func (a *App) exportAllUsers(writer io.Writer) *model.AppError { +func (a *App) exportAllUsers(ctx request.CTX, job *model.Job, writer io.Writer) *model.AppError { afterId := strings.Repeat("0", 26) + cnt := 0 for { users, err := a.Srv().Store().User().GetAllAfter(1000, afterId) @@ -254,6 +268,8 @@ func (a *App) exportAllUsers(writer io.Writer) *model.AppError { if len(users) == 0 { break } + cnt += len(users) + updateJobProgress(ctx.Logger(), a.Srv().Store(), job, "users_exported", cnt) for _, user := range users { afterId = user.Id @@ -395,12 +411,13 @@ func (a *App) buildUserNotifyProps(notifyProps model.StringMap) *imports.UserNot } } -func (a *App) exportAllPosts(ctx request.CTX, writer io.Writer, withAttachments bool) ([]imports.AttachmentImportData, *model.AppError) { +func (a *App) exportAllPosts(ctx request.CTX, job *model.Job, writer io.Writer, withAttachments bool) ([]imports.AttachmentImportData, *model.AppError) { var attachments []imports.AttachmentImportData afterId := strings.Repeat("0", 26) var postProcessCount uint64 logCheckpoint := time.Now() + cnt := 0 for { if time.Since(logCheckpoint) > 5*time.Minute { ctx.Logger().Debug(fmt.Sprintf("Bulk Export: processed %d posts", postProcessCount)) @@ -415,6 +432,8 @@ func (a *App) exportAllPosts(ctx request.CTX, writer io.Writer, withAttachments if len(posts) == 0 { return attachments, nil } + cnt += len(posts) + updateJobProgress(ctx.Logger(), a.Srv().Store(), job, "posts_exported", cnt) for _, post := range posts { afterId = post.Id @@ -538,9 +557,10 @@ func (a *App) buildPostAttachments(postID string) ([]imports.AttachmentImportDat return attachments, nil } -func (a *App) exportCustomEmoji(c request.CTX, writer io.Writer, outPath, exportDir string, exportFiles bool) ([]string, *model.AppError) { +func (a *App) exportCustomEmoji(c request.CTX, job *model.Job, writer io.Writer, outPath, exportDir string, exportFiles bool) ([]string, *model.AppError) { var emojiPaths []string pageNumber := 0 + cnt := 0 for { customEmojiList, err := a.GetEmojiList(c, pageNumber, 100, model.EmojiSortByName) @@ -551,6 +571,8 @@ func (a *App) exportCustomEmoji(c request.CTX, writer io.Writer, outPath, export if len(customEmojiList) == 0 { break } + cnt += len(customEmojiList) + updateJobProgress(c.Logger(), a.Srv().Store(), job, "emojis_exported", cnt) pageNumber++ @@ -619,8 +641,9 @@ func (a *App) copyEmojiImages(emojiId string, emojiImagePath string, pathToDir s return nil } -func (a *App) exportAllDirectChannels(writer io.Writer) *model.AppError { +func (a *App) exportAllDirectChannels(ctx request.CTX, job *model.Job, writer io.Writer) *model.AppError { afterId := strings.Repeat("0", 26) + cnt := 0 for { channels, err := a.Srv().Store().Channel().GetAllDirectChannelsForExportAfter(1000, afterId) if err != nil { @@ -630,6 +653,8 @@ func (a *App) exportAllDirectChannels(writer io.Writer) *model.AppError { if len(channels) == 0 { break } + cnt += len(channels) + updateJobProgress(ctx.Logger(), a.Srv().Store(), job, "direct_channels_exported", cnt) for _, channel := range channels { afterId = channel.Id @@ -682,12 +707,13 @@ func (a *App) buildFavoritedByList(channelID string) ([]string, *model.AppError) return userIDs, nil } -func (a *App) exportAllDirectPosts(ctx request.CTX, writer io.Writer, withAttachments bool) ([]imports.AttachmentImportData, *model.AppError) { +func (a *App) exportAllDirectPosts(ctx request.CTX, job *model.Job, writer io.Writer, withAttachments bool) ([]imports.AttachmentImportData, *model.AppError) { var attachments []imports.AttachmentImportData afterId := strings.Repeat("0", 26) var postProcessCount uint64 logCheckpoint := time.Now() + cnt := 0 for { if time.Since(logCheckpoint) > 5*time.Minute { ctx.Logger().Debug(fmt.Sprintf("Bulk Export: processed %d direct posts", postProcessCount)) @@ -702,6 +728,8 @@ func (a *App) exportAllDirectPosts(ctx request.CTX, writer io.Writer, withAttach if len(posts) == 0 { break } + cnt += len(posts) + updateJobProgress(ctx.Logger(), a.Srv().Store(), job, "direct_posts_exported", cnt) for _, post := range posts { afterId = post.Id @@ -815,3 +843,12 @@ func (a *App) DeleteExport(name string) *model.AppError { return a.RemoveFile(filePath) } + +func updateJobProgress(logger mlog.LoggerIFace, store store.Store, job *model.Job, key string, value int) { + if job != nil { + job.Data[key] = strconv.Itoa(value) + if _, err2 := store.Job().UpdateOptimistically(job, model.JobStatusInProgress); err2 != nil { + logger.Warn("Failed to update job status", mlog.Err(err2)) + } + } +} diff --git a/app/export_test.go b/app/export_test.go index 7dbaa984b7..e839e1dc13 100644 --- a/app/export_test.go +++ b/app/export_test.go @@ -164,7 +164,7 @@ func TestExportCustomEmoji(t *testing.T) { outPath, err := filepath.Abs(filePath) require.NoError(t, err) - _, appErr := th.App.exportCustomEmoji(th.Context, fileWriter, outPath, dirNameToExportEmoji, false) + _, appErr := th.App.exportCustomEmoji(th.Context, nil, fileWriter, outPath, dirNameToExportEmoji, false) require.Nil(t, appErr, "should not have failed") } @@ -178,7 +178,7 @@ func TestExportAllUsers(t *testing.T) { require.Nil(t, err) var b bytes.Buffer - err = th1.App.BulkExport(th1.Context, &b, "somePath", model.BulkExportOpts{}) + err = th1.App.BulkExport(th1.Context, &b, "somePath", nil, model.BulkExportOpts{}) require.Nil(t, err) th2 := Setup(t) @@ -235,7 +235,7 @@ func TestExportDMChannel(t *testing.T) { }) var b bytes.Buffer - err := th1.App.BulkExport(th1.Context, &b, "somePath", model.BulkExportOpts{}) + err := th1.App.BulkExport(th1.Context, &b, "somePath", nil, model.BulkExportOpts{}) require.Nil(t, err) channels, nErr := th1.App.Srv().Store().Channel().GetAllDirectChannelsForExportAfter(1000, "00000000") @@ -282,7 +282,7 @@ func TestExportDMChannel(t *testing.T) { th1.App.PermanentDeleteUser(th1.Context, th1.BasicUser) var b bytes.Buffer - err := th1.App.BulkExport(th1.Context, &b, "somePath", model.BulkExportOpts{}) + err := th1.App.BulkExport(th1.Context, &b, "somePath", nil, model.BulkExportOpts{}) require.Nil(t, err) th2 := Setup(t).InitBasic() @@ -306,7 +306,7 @@ func TestExportDMChannelToSelf(t *testing.T) { th1.CreateDmChannel(th1.BasicUser) var b bytes.Buffer - err := th1.App.BulkExport(th1.Context, &b, "somePath", model.BulkExportOpts{}) + err := th1.App.BulkExport(th1.Context, &b, "somePath", nil, model.BulkExportOpts{}) require.Nil(t, err) channels, nErr := th1.App.Srv().Store().Channel().GetAllDirectChannelsForExportAfter(1000, "00000000") @@ -344,7 +344,7 @@ func TestExportGMChannel(t *testing.T) { th1.CreateGroupChannel(th1.Context, user1, user2) var b bytes.Buffer - err := th1.App.BulkExport(th1.Context, &b, "somePath", model.BulkExportOpts{}) + err := th1.App.BulkExport(th1.Context, &b, "somePath", nil, model.BulkExportOpts{}) require.Nil(t, err) channels, nErr := th1.App.Srv().Store().Channel().GetAllDirectChannelsForExportAfter(1000, "00000000") @@ -376,7 +376,7 @@ func TestExportGMandDMChannels(t *testing.T) { th1.CreateGroupChannel(th1.Context, user1, user2) var b bytes.Buffer - err := th1.App.BulkExport(th1.Context, &b, "somePath", model.BulkExportOpts{}) + err := th1.App.BulkExport(th1.Context, &b, "somePath", nil, model.BulkExportOpts{}) require.Nil(t, err) channels, nErr := th1.App.Srv().Store().Channel().GetAllDirectChannelsForExportAfter(1000, "00000000") @@ -459,7 +459,7 @@ func TestExportDMandGMPost(t *testing.T) { assert.Equal(t, 4, len(posts)) var b bytes.Buffer - appErr := th1.App.BulkExport(th1.Context, &b, "somePath", model.BulkExportOpts{}) + appErr := th1.App.BulkExport(th1.Context, &b, "somePath", nil, model.BulkExportOpts{}) require.Nil(t, appErr) th1.TearDown() @@ -534,7 +534,7 @@ func TestExportPostWithProps(t *testing.T) { require.NotEmpty(t, posts[1].Props) var b bytes.Buffer - appErr := th1.App.BulkExport(th1.Context, &b, "somePath", model.BulkExportOpts{}) + appErr := th1.App.BulkExport(th1.Context, &b, "somePath", nil, model.BulkExportOpts{}) require.Nil(t, appErr) th1.TearDown() @@ -572,7 +572,7 @@ func TestExportDMPostWithSelf(t *testing.T) { th1.CreatePost(dmChannel) var b bytes.Buffer - err := th1.App.BulkExport(th1.Context, &b, "somePath", model.BulkExportOpts{}) + err := th1.App.BulkExport(th1.Context, &b, "somePath", nil, model.BulkExportOpts{}) require.Nil(t, err) posts, nErr := th1.App.Srv().Store().Post().GetDirectPostParentsForExportAfter(1000, "0000000") @@ -640,7 +640,7 @@ func TestBulkExport(t *testing.T) { IncludeAttachments: true, CreateArchive: true, } - appErr = th.App.BulkExport(th.Context, exportFile, dir, opts) + appErr = th.App.BulkExport(th.Context, exportFile, dir, nil, opts) require.Nil(t, appErr) th.TearDown() @@ -731,7 +731,7 @@ func TestExportDeletedTeams(t *testing.T) { require.Nil(t, err) var b bytes.Buffer - err = th1.App.BulkExport(th1.Context, &b, "somePath", model.BulkExportOpts{}) + err = th1.App.BulkExport(th1.Context, &b, "somePath", nil, model.BulkExportOpts{}) require.Nil(t, err) th2 := Setup(t) diff --git a/app/file.go b/app/file.go index 7a66d25010..2d3de4d2f3 100644 --- a/app/file.go +++ b/app/file.go @@ -178,22 +178,8 @@ func (s *Server) writeFile(fr io.Reader, path string) (int64, *model.AppError) { } func (s *Server) writeFileContext(ctx context.Context, fr io.Reader, path string) (int64, *model.AppError) { - type ContextWriter interface { - WriteFileContext(context.Context, io.Reader, string) (int64, error) - } - - var ( - fileBackend = s.FileBackend() - written int64 - err error - ) - // Check if we can provide a custom context, otherwise just use the default method. - if cw, ok := fileBackend.(ContextWriter); ok { - written, err = cw.WriteFileContext(ctx, fr, path) - } else { - written, err = fileBackend.WriteFile(fr, path) - } + written, err := filestore.TryWriteFileContext(s.FileBackend(), ctx, fr, path) if err != nil { return written, model.NewAppError("WriteFile", "api.file.write_file.app_error", nil, "", http.StatusInternalServerError).Wrap(err) } diff --git a/app/opentracing/opentracing_layer.go b/app/opentracing/opentracing_layer.go index 4d9d37de6e..9f64d4e6ce 100644 --- a/app/opentracing/opentracing_layer.go +++ b/app/opentracing/opentracing_layer.go @@ -974,7 +974,7 @@ func (a *OpenTracingAppLayer) BuildSamlMetadataObject(idpMetadata []byte) (*mode return resultVar0, resultVar1 } -func (a *OpenTracingAppLayer) BulkExport(ctx request.CTX, writer io.Writer, outPath string, opts model.BulkExportOpts) *model.AppError { +func (a *OpenTracingAppLayer) BulkExport(ctx request.CTX, writer io.Writer, outPath string, job *model.Job, opts model.BulkExportOpts) *model.AppError { origCtx := a.ctx span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.BulkExport") @@ -986,7 +986,7 @@ func (a *OpenTracingAppLayer) BulkExport(ctx request.CTX, writer io.Writer, outP }() defer span.Finish() - resultVar0 := a.app.BulkExport(ctx, writer, outPath, opts) + resultVar0 := a.app.BulkExport(ctx, writer, outPath, job, opts) if resultVar0 != nil { span.LogFields(spanlog.Error(resultVar0)) diff --git a/app/platform/service_test.go b/app/platform/service_test.go index 8654b18685..3b97b68eed 100644 --- a/app/platform/service_test.go +++ b/app/platform/service_test.go @@ -141,6 +141,7 @@ func TestMetrics(t *testing.T) { mockMetricsImpl := &mocks.MetricsInterface{} mockMetricsImpl.On("Register").Return() mockMetricsImpl.On("ObserveStoreMethodDuration", mock.Anything, mock.Anything, mock.Anything).Return() + mockMetricsImpl.On("RegisterDBCollector", mock.AnythingOfType("*sql.DB"), "master") th := Setup(t, StartMetrics(), func(ps *PlatformService) error { ps.metricsIFace = mockMetricsImpl diff --git a/app/plugin.go b/app/plugin.go index 679576e723..0f40611e97 100644 --- a/app/plugin.go +++ b/app/plugin.go @@ -130,23 +130,6 @@ func (ch *Channels) syncPluginsActiveState() { } if pluginEnabled { - // Disable focalboard in product mode. - if pluginID == model.PluginIdFocalboard && ch.cfgSvc.Config().FeatureFlags.BoardsProduct { - msg := "Plugin cannot run in product mode. Disabling." - mlog.Warn(msg, mlog.String("plugin_id", model.PluginIdFocalboard)) - - // This is a mini-version of ch.disablePlugin. - // We don't call that directly, because that will recursively call - // this method. - ch.cfgSvc.UpdateConfig(func(cfg *model.Config) { - cfg.PluginSettings.PluginStates[pluginID] = &model.PluginState{Enable: false} - }) - pluginsEnvironment.SetPluginError(pluginID, msg) - ch.unregisterPluginCommands(pluginID) - disabledPlugins = append(disabledPlugins, plugin) - continue - } - enabledPlugins = append(enabledPlugins, plugin) } else { disabledPlugins = append(disabledPlugins, plugin) @@ -322,6 +305,16 @@ func (ch *Channels) syncPlugins() *model.AppError { var wg sync.WaitGroup for _, plugin := range availablePlugins { + // Disable focalboard in product mode. + if plugin.Manifest.Id == model.PluginIdFocalboard && ch.cfgSvc.Config().FeatureFlags.BoardsProduct { + mlog.Info("Plugin cannot run in product mode, disabling.", mlog.String("plugin_id", model.PluginIdFocalboard)) + appErr := ch.disablePlugin(model.PluginIdFocalboard) + if appErr != nil { + mlog.Error("Error disabling plugin", mlog.Err(err)) + } + continue + } + wg.Add(1) go func(pluginID string) { defer wg.Done() diff --git a/app/plugin_requests.go b/app/plugin_requests.go index 1ccc966822..2670cbae12 100644 --- a/app/plugin_requests.go +++ b/app/plugin_requests.go @@ -5,7 +5,6 @@ package app import ( "bytes" - "fmt" "io" "net/http" "path" @@ -93,7 +92,7 @@ func (ch *Channels) ServePluginPublicRequest(w http.ResponseWriter, r *http.Requ return } - // Should be in the form of /$PLUGIN_ID/public/{anything} by the time we get here + // Should be in the form of /(subpath/)?/plugins/{plugin_id}/public/* by the time we get here vars := mux.Vars(r) pluginID := vars["plugin_id"] @@ -111,8 +110,13 @@ func (ch *Channels) ServePluginPublicRequest(w http.ResponseWriter, r *http.Requ return } + subpath, err := utils.GetSubpathFromConfig(ch.cfgSvc.Config()) + if err != nil { + http.Error(w, "Internal Server Error", http.StatusInternalServerError) + } + publicFilePath := path.Clean(r.URL.Path) - prefix := fmt.Sprintf("/plugins/%s/public/", pluginID) + prefix := path.Join(subpath, "plugins", pluginID, "public") if !strings.HasPrefix(publicFilePath, prefix) { http.NotFound(w, r) return diff --git a/app/plugin_requests_test.go b/app/plugin_requests_test.go index c41c70be6d..d5796a975f 100644 --- a/app/plugin_requests_test.go +++ b/app/plugin_requests_test.go @@ -4,23 +4,65 @@ package app import ( + "fmt" + "io" "net/http" "net/http/httptest" + "os" + "path/filepath" "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/mattermost/mattermost-server/v6/model" + "github.com/mattermost/mattermost-server/v6/utils/fileutils" ) func TestServePluginPublicRequest(t *testing.T) { + installPlugin := func(t *testing.T, th *TestHelper, pluginID string) { + t.Helper() + + path, _ := fileutils.FindDir("tests") + fileReader, err := os.Open(filepath.Join(path, fmt.Sprintf("%s.tar.gz", pluginID))) + require.NoError(t, err) + defer fileReader.Close() + + _, appErr := th.App.WriteFile(fileReader, getBundleStorePath(pluginID)) + checkNoError(t, appErr) + + appErr = th.App.SyncPlugins() + checkNoError(t, appErr) + + env := th.App.GetPluginsEnvironment() + require.NotNil(t, env) + + // Check if installed + pluginStatus, err := env.Statuses() + require.NoError(t, err) + found := false + for _, pluginStatus := range pluginStatus { + if pluginStatus.PluginId == pluginID { + found = true + } + } + require.True(t, found, "failed to find plugin %s in plugin statuses", pluginID) + + appErr = th.App.EnablePlugin(pluginID) + checkNoError(t, appErr) + + t.Cleanup(func() { + appErr = th.App.ch.RemovePlugin(pluginID) + checkNoError(t, appErr) + }) + } + t.Run("returns not found when plugins environment is nil", func(t *testing.T) { th := Setup(t) - defer th.TearDown() + t.Cleanup(th.TearDown) th.App.UpdateConfig(func(cfg *model.Config) { *cfg.PluginSettings.Enable = true }) - req, err := http.NewRequest("GET", "/plugins", nil) + req, err := http.NewRequest("GET", "/plugins/plugin_id/public/file.txt", nil) require.NoError(t, err) rr := httptest.NewRecorder() @@ -29,4 +71,83 @@ func TestServePluginPublicRequest(t *testing.T) { assert.Equal(t, http.StatusNotFound, rr.Code) }) + + t.Run("resolves path for valid plugin", func(t *testing.T) { + th := Setup(t) + t.Cleanup(th.TearDown) + th.App.UpdateConfig(func(cfg *model.Config) { *cfg.PluginSettings.Enable = true }) + + path, _ := fileutils.FindDir("tests") + fileReader, err := os.Open(filepath.Join(path, "testplugin.tar.gz")) + require.NoError(t, err) + defer fileReader.Close() + + installPlugin(t, th, "testplugin") + + req, err := http.NewRequest("GET", "/plugins/testplugin/public/file.txt", nil) + require.NoError(t, err) + + rr := httptest.NewRecorder() + th.App.ch.srv.Router.ServeHTTP(rr, req) + + assert.Equal(t, http.StatusOK, rr.Code) + body, err := io.ReadAll(rr.Body) + require.NoError(t, err) + require.Equal(t, "Hello World!", string(body)) + }) + + t.Run("resolves path for valid plugin when subpath configured", func(t *testing.T) { + os.Setenv("MM_SERVICESETTINGS_SITEURL", "http://localhost:8065/subpath") + defer os.Unsetenv("MM_SERVICESETTINGS_SITEURL") + + th := Setup(t) + t.Cleanup(th.TearDown) + + installPlugin(t, th, "testplugin") + + req, err := http.NewRequest("GET", "/subpath/plugins/testplugin/public/file.txt", nil) + require.NoError(t, err) + + rr := httptest.NewRecorder() + th.App.ch.srv.RootRouter.ServeHTTP(rr, req) + + assert.Equal(t, http.StatusOK, rr.Code) + body, err := io.ReadAll(rr.Body) + require.NoError(t, err) + assert.Equal(t, "Hello World!", string(body)) + }) + + t.Run("fails for invalid plugin", func(t *testing.T) { + th := Setup(t) + t.Cleanup(th.TearDown) + th.App.UpdateConfig(func(cfg *model.Config) { *cfg.PluginSettings.Enable = true }) + + req, err := http.NewRequest("GET", "/plugins/invalidplugin/public/file.txt", nil) + require.NoError(t, err) + + rr := httptest.NewRecorder() + th.App.ch.srv.Router.ServeHTTP(rr, req) + + assert.Equal(t, http.StatusNotFound, rr.Code) + }) + + t.Run("fails attempting to break out of path", func(t *testing.T) { + os.Setenv("MM_SERVICESETTINGS_SITEURL", "http://localhost:8065/subpath") + defer os.Unsetenv("MM_SERVICESETTINGS_SITEURL") + + th := Setup(t) + t.Cleanup(th.TearDown) + + installPlugin(t, th, "testplugin") + installPlugin(t, th, "testplugin2") + + req, err := http.NewRequest("GET", "/subpath/plugins/testplugin/public/../../testplugin2/file.txt", nil) + require.NoError(t, err) + + rr := httptest.NewRecorder() + th.App.ch.srv.RootRouter.ServeHTTP(rr, req) + + require.Equal(t, http.StatusMovedPermanently, rr.Code) + assert.Equal(t, "/subpath/plugins/testplugin2/file.txt", rr.Header()["Location"][0]) + }) } diff --git a/app/post_test.go b/app/post_test.go index 4630eb75af..3e6b090419 100644 --- a/app/post_test.go +++ b/app/post_test.go @@ -2409,10 +2409,17 @@ func TestFollowThreadSkipsParticipants(t *testing.T) { require.True(t, p.Id == sysadmin.Id || p.Id == user.Id) } + oldID := threadMembership.PostId threadMembership.PostId = "notfound" _, err = th.App.GetThreadForUser(threadMembership, false) require.NotNil(t, err) assert.Equal(t, http.StatusNotFound, err.StatusCode) + + threadMembership.Following = false + threadMembership.PostId = oldID + _, err = th.App.GetThreadForUser(threadMembership, false) + require.NotNil(t, err) + assert.Equal(t, http.StatusNotFound, err.StatusCode) } func TestAutofollowBasedOnRootPost(t *testing.T) { diff --git a/app/server.go b/app/server.go index f7a9e9b912..69eb4d057c 100644 --- a/app/server.go +++ b/app/server.go @@ -290,8 +290,9 @@ func NewServer(options ...Option) (*Server, error) { } return event }, - TracesSampler: sentry.TracesSamplerFunc(func(ctx sentry.SamplingContext) sentry.Sampled { - return sentry.SampledFalse + EnableTracing: false, + TracesSampler: sentry.TracesSampler(func(ctx sentry.SamplingContext) float64 { + return 0.0 }), }); err2 != nil { mlog.Warn("Sentry could not be initiated, probably bad DSN?", mlog.Err(err2)) diff --git a/app/team_test.go b/app/team_test.go index e281a1feaa..23fd15117b 100644 --- a/app/team_test.go +++ b/app/team_test.go @@ -102,7 +102,6 @@ func TestAddUserToTeam(t *testing.T) { }) t.Run("block user by domain but allow bot", func(t *testing.T) { - t.Skip("MM-48973") th.BasicTeam.AllowedDomains = "example.com" _, err := th.App.UpdateTeam(th.BasicTeam) require.Nil(t, err, "Should update the team") diff --git a/app/user.go b/app/user.go index 991457f7ba..b59774fd13 100644 --- a/app/user.go +++ b/app/user.go @@ -321,12 +321,14 @@ func (a *App) createUserOrGuest(c request.CTX, user *model.User, guest bool) (*m // table in CWS. This is then used to calculate how much the customers have to pay in addition for the extra users. If the // workspace is currently on a monthly plan, then this function will not do anything. - go func() { - _, err := a.SendSubscriptionHistoryEvent(ruser.Id) - if err != nil { - c.Logger().Error("Failed to create/update the SubscriptionHistoryEvent", mlog.Err(err)) - } - }() + if a.Channels().License().IsCloud() { + go func(userId string) { + _, err := a.SendSubscriptionHistoryEvent(userId) + if err != nil { + c.Logger().Error("Failed to create/update the SubscriptionHistoryEvent", mlog.Err(err)) + } + }(ruser.Id) + } return ruser, nil } diff --git a/build/Dockerfile b/build/Dockerfile index aaa82b99ca..de0d18800b 100644 --- a/build/Dockerfile +++ b/build/Dockerfile @@ -8,7 +8,7 @@ SHELL ["/bin/bash", "-o", "pipefail", "-c"] ENV PATH="/mattermost/bin:${PATH}" ARG PUID=2000 ARG PGID=2000 -ARG MM_PACKAGE="https://releases.mattermost.com/7.5.2/mattermost-7.5.2-linux-amd64.tar.gz?src=docker" +ARG MM_PACKAGE="https://releases.mattermost.com/7.7.0/mattermost-7.7.0-linux-amd64.tar.gz?src=docker" # # Install needed packages and indirect dependencies RUN apt-get update \ diff --git a/cmd/mattermost/commands/export.go b/cmd/mattermost/commands/export.go index d5573ee975..21ff04162e 100644 --- a/cmd/mattermost/commands/export.go +++ b/cmd/mattermost/commands/export.go @@ -240,7 +240,7 @@ func bulkExportCmdF(command *cobra.Command, args []string) error { var opts model.BulkExportOpts opts.IncludeAttachments = attachments opts.CreateArchive = archive - if err := a.BulkExport(request.EmptyContext(a.Log()), fileWriter, filepath.Dir(outPath), opts); err != nil { + if err := a.BulkExport(request.EmptyContext(a.Log()), fileWriter, filepath.Dir(outPath), nil /* nil job since it's spawned from CLI */, opts); err != nil { CommandPrintErrorln(err.Error()) return err } diff --git a/config/client.go b/config/client.go index 6ce5433dc1..047d9eef1a 100644 --- a/config/client.go +++ b/config/client.go @@ -223,6 +223,8 @@ func GenerateLimitedClientConfig(c *model.Config, telemetryID string, license *m props["BuildHash"] = model.BuildHash props["BuildHashEnterprise"] = model.BuildHashEnterprise props["BuildEnterpriseReady"] = model.BuildEnterpriseReady + props["BuildHashBoards"] = model.BuildHashBoards + props["BuildBoards"] = model.BuildBoards props["EnableBotAccountCreation"] = strconv.FormatBool(*c.ServiceSettings.EnableBotAccountCreation) props["EnableFile"] = strconv.FormatBool(*c.LogSettings.EnableFile) diff --git a/config/diff_test.go b/config/diff_test.go index 15ec6f41f7..427045dae7 100644 --- a/config/diff_test.go +++ b/config/diff_test.go @@ -808,7 +808,7 @@ func TestDiff(t *testing.T) { Enable: !defaultConfigGen().PluginSettings.PluginStates["com.mattermost.nps"].Enable, }, "focalboard": { - Enable: true, + Enable: false, }, "playbooks": { Enable: true, @@ -846,7 +846,7 @@ func TestDiff(t *testing.T) { Enable: true, }, "focalboard": { - Enable: true, + Enable: false, }, "playbooks": { Enable: true, @@ -876,7 +876,7 @@ func TestDiff(t *testing.T) { BaseVal: defaultConfigGen().PluginSettings.PluginStates, ActualVal: map[string]*model.PluginState{ "focalboard": { - Enable: true, + Enable: false, }, "playbooks": { Enable: true, diff --git a/einterfaces/metrics.go b/einterfaces/metrics.go index 56e6cb5aa0..fa7b5d714a 100644 --- a/einterfaces/metrics.go +++ b/einterfaces/metrics.go @@ -4,12 +4,15 @@ package einterfaces import ( + "database/sql" + "github.com/mattermost/mattermost-server/v6/model" "github.com/mattermost/mattermost-server/v6/shared/mlog" ) type MetricsInterface interface { Register() + RegisterDBCollector(db *sql.DB, name string) IncrementPostCreate() IncrementWebhookPost() diff --git a/einterfaces/mocks/MetricsInterface.go b/einterfaces/mocks/MetricsInterface.go index 18ae7ad658..9eb7d06b13 100644 --- a/einterfaces/mocks/MetricsInterface.go +++ b/einterfaces/mocks/MetricsInterface.go @@ -9,6 +9,8 @@ import ( mock "github.com/stretchr/testify/mock" model "github.com/mattermost/mattermost-server/v6/model" + + sql "database/sql" ) // MetricsInterface is an autogenerated mock type for the MetricsInterface type @@ -302,6 +304,11 @@ func (_m *MetricsInterface) Register() { _m.Called() } +// RegisterDBCollector provides a mock function with given fields: db, name +func (_m *MetricsInterface) RegisterDBCollector(db *sql.DB, name string) { + _m.Called(db, name) +} + // SetReplicaLagAbsolute provides a mock function with given fields: node, value func (_m *MetricsInterface) SetReplicaLagAbsolute(node string, value float64) { _m.Called(node, value) diff --git a/go.mod b/go.mod index 2e04b4e93c..7a5550ac0b 100644 --- a/go.mod +++ b/go.mod @@ -4,20 +4,20 @@ go 1.18 require ( code.sajari.com/docconv v1.3.5 - github.com/Masterminds/semver/v3 v3.1.1 + github.com/Masterminds/semver/v3 v3.2.0 github.com/avct/uasurfer v0.0.0-20191028135549-26b5daa857f1 - github.com/aws/aws-sdk-go v1.44.138 + github.com/aws/aws-sdk-go v1.44.173 github.com/blang/semver v3.5.1+incompatible - github.com/blevesearch/bleve/v2 v2.3.6-0.20221111171245-56dc9b25507e - github.com/cespare/xxhash/v2 v2.1.2 + github.com/blevesearch/bleve/v2 v2.3.6 + github.com/cespare/xxhash/v2 v2.2.0 github.com/dgrijalva/jwt-go v3.2.0+incompatible github.com/dgryski/dgoogauth v0.0.0-20190221195224-5a805980a5f3 github.com/disintegration/imaging v1.6.2 github.com/dyatlov/go-opengraph/opengraph v0.0.0-20220524092352-606d7b1e5f8a github.com/francoispqt/gojay v1.2.13 github.com/fsnotify/fsnotify v1.6.0 - github.com/getsentry/sentry-go v0.15.0 - github.com/go-sql-driver/mysql v1.6.0 + github.com/getsentry/sentry-go v0.16.0 + github.com/go-sql-driver/mysql v1.7.0 github.com/golang-migrate/migrate/v4 v4.15.2 github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 github.com/gorilla/handlers v1.5.1 @@ -25,15 +25,15 @@ require ( github.com/gorilla/schema v1.2.0 github.com/gorilla/websocket v1.5.0 github.com/graph-gophers/dataloader/v6 v6.0.0 - github.com/graph-gophers/graphql-go v1.4.0 + github.com/graph-gophers/graphql-go v1.5.1-0.20230110080634-edea822f558a github.com/h2non/go-is-svg v0.0.0-20160927212452-35e8c4b0612c - github.com/hashicorp/go-hclog v1.3.1 - github.com/hashicorp/go-plugin v1.4.6 + github.com/hashicorp/go-hclog v1.4.0 + github.com/hashicorp/go-plugin v1.4.8 github.com/jaytaylor/html2text v0.0.0-20211105163654-bc68cce691ba github.com/jmoiron/sqlx v1.3.5 github.com/ledongthuc/pdf v0.0.0-20220302134840-0c2507a12d80 github.com/lib/pq v1.10.7 - github.com/mattermost/focalboard/server v0.0.0-20221222174020-fd4cf95f8ac9 + github.com/mattermost/focalboard/server v0.0.0-20230104182634-f909c2552e37 github.com/mattermost/go-i18n v1.11.1-0.20211013152124-5c415071e404 github.com/mattermost/gziphandler v0.0.1 github.com/mattermost/ldap v0.0.0-20201202150706-ee0e6284187d @@ -43,32 +43,32 @@ require ( github.com/mattermost/squirrel v0.2.0 github.com/mholt/archiver/v3 v3.5.1 github.com/microcosm-cc/bluemonday v1.0.21 - github.com/minio/minio-go/v7 v7.0.43 + github.com/minio/minio-go/v7 v7.0.45 github.com/oov/psd v0.0.0-20220121172623-5db5eafcecbb github.com/opentracing/opentracing-go v1.2.0 github.com/pborman/uuid v1.2.1 github.com/pkg/errors v0.9.1 github.com/reflog/dateconstraints v0.2.1 - github.com/rs/cors v1.8.2 + github.com/rs/cors v1.8.3 github.com/rudderlabs/analytics-go v3.3.3+incompatible github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd github.com/spf13/cobra v1.6.1 github.com/splitio/go-client/v6 v6.2.1 github.com/stretchr/testify v1.8.1 github.com/throttled/throttled v2.2.5+incompatible - github.com/tinylib/msgp v1.1.6 + github.com/tinylib/msgp v1.1.8 github.com/uber/jaeger-client-go v2.30.0+incompatible github.com/uber/jaeger-lib v2.4.1+incompatible github.com/vmihailenco/msgpack/v5 v5.3.5 github.com/wiggin77/merror v1.0.4 github.com/xtgo/uuid v0.0.0-20140804021211-a0b114877d4c github.com/yuin/goldmark v1.5.3 - golang.org/x/crypto v0.2.0 - golang.org/x/image v0.1.0 - golang.org/x/net v0.2.0 + golang.org/x/crypto v0.5.0 + golang.org/x/image v0.3.0 + golang.org/x/net v0.5.0 golang.org/x/sync v0.1.0 - golang.org/x/text v0.4.0 - golang.org/x/tools v0.3.0 + golang.org/x/text v0.6.0 + golang.org/x/tools v0.5.0 gopkg.in/mail.v2 v2.3.1 gopkg.in/yaml.v2 v2.4.0 gopkg.in/yaml.v3 v3.0.1 @@ -84,24 +84,24 @@ require ( github.com/andybalholm/cascadia v1.3.1 // indirect github.com/araddon/dateparse v0.0.0-20210429162001-6b43995a97de // indirect github.com/aymerick/douceur v0.2.0 // indirect - github.com/bits-and-blooms/bitset v1.3.3 // indirect + github.com/bits-and-blooms/bitset v1.4.0 // indirect github.com/bits-and-blooms/bloom/v3 v3.3.1 // indirect github.com/blang/semver/v4 v4.0.0 // indirect github.com/blevesearch/bleve_index_api v1.0.5 // indirect - github.com/blevesearch/geo v0.1.15 // indirect + github.com/blevesearch/geo v0.1.17 // indirect github.com/blevesearch/go-porterstemmer v1.0.3 // indirect github.com/blevesearch/gtreap v0.1.1 // indirect github.com/blevesearch/mmap-go v1.0.4 // indirect github.com/blevesearch/scorch_segment_api/v2 v2.1.4 // indirect - github.com/blevesearch/segment v0.9.0 // indirect + github.com/blevesearch/segment v0.9.1 // indirect github.com/blevesearch/snowballstem v0.9.0 // indirect - github.com/blevesearch/upsidedown_store_api v1.0.1 // indirect + github.com/blevesearch/upsidedown_store_api v1.0.2 // indirect github.com/blevesearch/vellum v1.0.9 // indirect github.com/blevesearch/zapx/v11 v11.3.7 // indirect github.com/blevesearch/zapx/v12 v12.3.7 // indirect github.com/blevesearch/zapx/v13 v13.3.7 // indirect github.com/blevesearch/zapx/v14 v14.3.7 // indirect - github.com/blevesearch/zapx/v15 v15.3.7 // indirect + github.com/blevesearch/zapx/v15 v15.3.8 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect github.com/dsnet/compress v0.0.2-0.20210315054119-f66993602bf5 // indirect @@ -122,20 +122,20 @@ require ( github.com/gorilla/css v1.0.0 // indirect github.com/hashicorp/golang-lru v0.5.4 // indirect github.com/hashicorp/yamux v0.1.1 // indirect - github.com/inconshreveable/mousetrap v1.0.1 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect - github.com/klauspost/compress v1.15.12 // indirect - github.com/klauspost/cpuid/v2 v2.2.1 // indirect + github.com/klauspost/compress v1.15.14 // indirect + github.com/klauspost/cpuid/v2 v2.2.3 // indirect github.com/klauspost/pgzip v1.2.5 // indirect github.com/kr/pretty v0.3.0 // indirect github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 // indirect github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 // indirect github.com/levigross/exp-html v0.0.0-20120902181939-8df60c69a8f5 // indirect - github.com/mattermost/mattermost-plugin-api v0.0.29-0.20220801143717-73008cfda2fb // indirect + github.com/mattermost/mattermost-plugin-api v0.1.1 // indirect github.com/mattn/go-colorable v0.1.13 // indirect - github.com/mattn/go-isatty v0.0.16 // indirect + github.com/mattn/go-isatty v0.0.17 // indirect github.com/mattn/go-runewidth v0.0.14 // indirect github.com/minio/md5-simd v1.1.2 // indirect github.com/minio/sha256-simd v1.0.0 // indirect @@ -148,10 +148,10 @@ require ( github.com/olekukonko/tablewriter v0.0.5 // indirect github.com/otiai10/gosseract/v2 v2.4.0 // indirect github.com/pelletier/go-toml v1.9.5 // indirect - github.com/philhofer/fwd v1.1.1 // indirect + github.com/philhofer/fwd v1.1.2 // indirect github.com/pierrec/lz4/v4 v4.1.17 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 // indirect + github.com/remyoudompheng/bigfft v0.0.0-20220927061507-ef77025ab5aa // indirect github.com/richardlehane/mscfb v1.0.4 // indirect github.com/richardlehane/msoleps v1.0.3 // indirect github.com/rivo/uniseg v0.4.3 // indirect @@ -160,37 +160,37 @@ require ( github.com/segmentio/backo-go v1.0.1 // indirect github.com/sirupsen/logrus v1.9.0 // indirect github.com/spf13/pflag v1.0.5 // indirect - github.com/splitio/go-split-commons/v4 v4.2.2 // indirect + github.com/splitio/go-split-commons/v4 v4.2.3 // indirect github.com/splitio/go-toolkit/v5 v5.2.2 // indirect github.com/ssor/bom v0.0.0-20170718123548-6386211fdfcf // indirect github.com/stretchr/objx v0.5.0 // indirect - github.com/tidwall/gjson v1.14.3 // indirect + github.com/tidwall/gjson v1.14.4 // indirect github.com/tidwall/match v1.1.1 // indirect github.com/tidwall/pretty v1.2.1 // indirect - github.com/ulikunitz/xz v0.5.10 // indirect + github.com/ulikunitz/xz v0.5.11 // indirect github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect github.com/wiggin77/srslog v1.0.1 // indirect github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 // indirect go.etcd.io/bbolt v1.3.6 // indirect go.uber.org/atomic v1.10.0 // indirect golang.org/x/mod v0.7.0 // indirect - golang.org/x/sys v0.2.0 // indirect - google.golang.org/genproto v0.0.0-20221114212237-e4508ebdbee1 // indirect - google.golang.org/grpc v1.50.1 // indirect + golang.org/x/sys v0.4.0 // indirect + google.golang.org/genproto v0.0.0-20230104163317-caabf589fcbf // indirect + google.golang.org/grpc v1.51.0 // indirect google.golang.org/protobuf v1.28.1 // indirect gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect lukechampine.com/uint128 v1.2.0 // indirect - modernc.org/cc/v3 v3.36.0 // indirect - modernc.org/ccgo/v3 v3.16.6 // indirect - modernc.org/libc v1.16.7 // indirect - modernc.org/mathutil v1.4.1 // indirect - modernc.org/memory v1.1.1 // indirect - modernc.org/opt v0.1.1 // indirect - modernc.org/sqlite v1.18.0 // indirect - modernc.org/strutil v1.1.1 // indirect - modernc.org/token v1.0.0 // indirect + modernc.org/cc/v3 v3.40.0 // indirect + modernc.org/ccgo/v3 v3.16.13 // indirect + modernc.org/libc v1.22.2 // indirect + modernc.org/mathutil v1.5.0 // indirect + modernc.org/memory v1.5.0 // indirect + modernc.org/opt v0.1.3 // indirect + modernc.org/sqlite v1.20.1 // indirect + modernc.org/strutil v1.1.3 // indirect + modernc.org/token v1.1.0 // indirect ) // Hack to prevent the willf/bitset module from being upgraded to 1.2.0. diff --git a/go.sum b/go.sum index 196d356a53..d7365acb4f 100644 --- a/go.sum +++ b/go.sum @@ -92,8 +92,8 @@ github.com/HdrHistogram/hdrhistogram-go v0.9.0/go.mod h1:nxrse8/Tzg2tg3DZcZjm6qE github.com/JalfResi/justext v0.0.0-20170829062021-c0282dea7198/go.mod h1:0SURuH1rsE8aVWvutuMZghRNrNrYEUzibzJfhEYR8L0= github.com/JalfResi/justext v0.0.0-20221106200834-be571e3e3052 h1:8T2zMbhLBbH9514PIQVHdsGhypMrsB4CxwbldKA9sBA= github.com/JalfResi/justext v0.0.0-20221106200834-be571e3e3052/go.mod h1:0SURuH1rsE8aVWvutuMZghRNrNrYEUzibzJfhEYR8L0= -github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030IGemrRc= -github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= +github.com/Masterminds/semver/v3 v3.2.0 h1:3MEsd0SM6jqZojhjLWWeBY+Kcjy9i6MQAeY7YgDP83g= +github.com/Masterminds/semver/v3 v3.2.0/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= github.com/Microsoft/go-winio v0.4.11/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA= github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= @@ -167,8 +167,8 @@ github.com/avct/uasurfer v0.0.0-20191028135549-26b5daa857f1 h1:9h8f71kuF1pqovnn9 github.com/avct/uasurfer v0.0.0-20191028135549-26b5daa857f1/go.mod h1:noBAuukeYOXa0aXGqxr24tADqkwDO2KRD15FsuaZ5a8= github.com/aws/aws-sdk-go v1.15.11/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= github.com/aws/aws-sdk-go v1.17.7/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.44.138 h1:9aoHAowstvD0s4cktYwT4Ok3oFLl3Hfbap8iFLamsdc= -github.com/aws/aws-sdk-go v1.44.138/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= +github.com/aws/aws-sdk-go v1.44.173 h1:8kXIxvQnBpGhmR3Eof6SnCKgR0q5/L/3Qbv9vAC5wic= +github.com/aws/aws-sdk-go v1.44.173/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= github.com/aws/aws-sdk-go-v2 v1.8.0/go.mod h1:xEFuWz+3TYdlPRuo+CqATbeDWIWyaT5uAPwPaWtgse0= github.com/aws/aws-sdk-go-v2 v1.9.2/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4= github.com/aws/aws-sdk-go-v2/config v1.6.0/go.mod h1:TNtBVmka80lRPk5+S9ZqVfFszOQAGJJ9KbT3EM3CHNU= @@ -207,8 +207,8 @@ github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932/go.mod h1:NOuUCS github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA= github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= github.com/bits-and-blooms/bitset v1.3.1/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= -github.com/bits-and-blooms/bitset v1.3.3 h1:R1XWiopGiXf66xygsiLpzLo67xEYvMkHw3w+rCOSAwg= -github.com/bits-and-blooms/bitset v1.3.3/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= +github.com/bits-and-blooms/bitset v1.4.0 h1:+YZ8ePm+He2pU3dZlIZiOeAKfrBkXi1lSrXJ/Xzgbu8= +github.com/bits-and-blooms/bitset v1.4.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= github.com/bits-and-blooms/bloom/v3 v3.3.1 h1:K2+A19bXT8gJR5mU7y+1yW6hsKfNCjcP2uNfLFKncjQ= github.com/bits-and-blooms/bloom/v3 v3.3.1/go.mod h1:bhUUknWd5khVbTe4UgMCSiOOVJzr3tMoijSK3WwvW90= github.com/bkaradzic/go-lz4 v1.0.0/go.mod h1:0YdlkowM3VswSROI7qDxhRvJ3sLhlFrRRwjwegp5jy4= @@ -218,13 +218,12 @@ github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdn github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM= github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= -github.com/blevesearch/bleve/v2 v2.3.6-0.20221111171245-56dc9b25507e h1:r/cWPLUPgAM3SWWniQ6j0Hzb++h+uEycDD9UOUuC1Vk= -github.com/blevesearch/bleve/v2 v2.3.6-0.20221111171245-56dc9b25507e/go.mod h1:mfCWvuwg/XnPVZHEejATm5TyFqyeLmm8p9Y3xDvwz4k= -github.com/blevesearch/bleve_index_api v1.0.3/go.mod h1:fiwKS0xLEm+gBRgv5mumf0dhgFr2mDgZah1pqv1c1M4= +github.com/blevesearch/bleve/v2 v2.3.6 h1:NlntUHcV5CSWIhpugx4d/BRMGCiaoI8ZZXrXlahzNq4= +github.com/blevesearch/bleve/v2 v2.3.6/go.mod h1:JM2legf1cKVkdV8Ehu7msKIOKC0McSw0Q16Fmv9vsW4= github.com/blevesearch/bleve_index_api v1.0.5 h1:Lc986kpC4Z0/n1g3gg8ul7H+lxgOQPcXb9SxvQGu+tw= github.com/blevesearch/bleve_index_api v1.0.5/go.mod h1:YXMDwaXFFXwncRS8UobWs7nvo0DmusriM1nztTlj1ms= -github.com/blevesearch/geo v0.1.15 h1:0NybEduqE5fduFRYiUKF0uqybAIFKXYjkBdXKYn7oA4= -github.com/blevesearch/geo v0.1.15/go.mod h1:cRIvqCdk3cgMhGeHNNe6yPzb+w56otxbfo1FBJfR2Pc= +github.com/blevesearch/geo v0.1.17 h1:AguzI6/5mHXapzB0gE9IKWo+wWPHZmXZoscHcjFgAFA= +github.com/blevesearch/geo v0.1.17/go.mod h1:uRMGWG0HJYfWfFJpK3zTdnnr1K+ksZTuWKhXeSokfnM= github.com/blevesearch/go-porterstemmer v1.0.3 h1:GtmsqID0aZdCSNiY8SkuPJ12pD4jI+DdXTAn4YRcHCo= github.com/blevesearch/go-porterstemmer v1.0.3/go.mod h1:angGc5Ht+k2xhJdZi511LtmxuEf0OVpvUUNrwmM1P7M= github.com/blevesearch/gtreap v0.1.1 h1:2JWigFrzDMR+42WGIN/V2p0cUvn4UP3C4Q5nmaZGW8Y= @@ -233,12 +232,12 @@ github.com/blevesearch/mmap-go v1.0.4 h1:OVhDhT5B/M1HNPpYPBKIEJaD0F3Si+CrEKULGCD github.com/blevesearch/mmap-go v1.0.4/go.mod h1:EWmEAOmdAS9z/pi/+Toxu99DnsbhG1TIxUoRmJw/pSs= github.com/blevesearch/scorch_segment_api/v2 v2.1.4 h1:LmGmo5twU3gV+natJbKmOktS9eMhokPGKWuR+jX84vk= github.com/blevesearch/scorch_segment_api/v2 v2.1.4/go.mod h1:PgVnbbg/t1UkgezPDu8EHLi1BHQ17xUwsFdU6NnOYS0= -github.com/blevesearch/segment v0.9.0 h1:5lG7yBCx98or7gK2cHMKPukPZ/31Kag7nONpoBt22Ac= -github.com/blevesearch/segment v0.9.0/go.mod h1:9PfHYUdQCgHktBgvtUOF4x+pc4/l8rdH0u5spnW85UQ= +github.com/blevesearch/segment v0.9.1 h1:+dThDy+Lvgj5JMxhmOVlgFfkUtZV2kw49xax4+jTfSU= +github.com/blevesearch/segment v0.9.1/go.mod h1:zN21iLm7+GnBHWTao9I+Au/7MBiL8pPFtJBJTsk6kQw= github.com/blevesearch/snowballstem v0.9.0 h1:lMQ189YspGP6sXvZQ4WZ+MLawfV8wOmPoD/iWeNXm8s= github.com/blevesearch/snowballstem v0.9.0/go.mod h1:PivSj3JMc8WuaFkTSRDW2SlrulNWPl4ABg1tC/hlgLs= -github.com/blevesearch/upsidedown_store_api v1.0.1 h1:1SYRwyoFLwG3sj0ed89RLtM15amfX2pXlYbFOnF8zNU= -github.com/blevesearch/upsidedown_store_api v1.0.1/go.mod h1:MQDVGpHZrpe3Uy26zJBf/a8h0FZY6xJbthIMm8myH2Q= +github.com/blevesearch/upsidedown_store_api v1.0.2 h1:U53Q6YoWEARVLd1OYNc9kvhBMGZzVrdmaozG2MfoB+A= +github.com/blevesearch/upsidedown_store_api v1.0.2/go.mod h1:M01mh3Gpfy56Ps/UXHjEO/knbqyQ1Oamg8If49gRwrQ= github.com/blevesearch/vellum v1.0.9 h1:PL+NWVk3dDGPCV0hoDu9XLLJgqU4E5s/dOeEJByQ2uQ= github.com/blevesearch/vellum v1.0.9/go.mod h1:ul1oT0FhSMDIExNjIxHqJoGpVrBpKCdgDQNxfqgJt7k= github.com/blevesearch/zapx/v11 v11.3.7 h1:Y6yIAF/DVPiqZUA/jNgSLXmqewfzwHzuwfKyfdG+Xaw= @@ -249,8 +248,8 @@ github.com/blevesearch/zapx/v13 v13.3.7 h1:igIQg5eKmjw168I7av0Vtwedf7kHnQro/M+ub github.com/blevesearch/zapx/v13 v13.3.7/go.mod h1:yyrB4kJ0OT75UPZwT/zS+Ru0/jYKorCOOSY5dBzAy+s= github.com/blevesearch/zapx/v14 v14.3.7 h1:gfe+fbWslDWP/evHLtp/GOvmNM3sw1BbqD7LhycBX20= github.com/blevesearch/zapx/v14 v14.3.7/go.mod h1:9J/RbOkqZ1KSjmkOes03AkETX7hrXT0sFMpWH4ewC4w= -github.com/blevesearch/zapx/v15 v15.3.7 h1:r8ZcNrlcMj2TmLlbNH16wZiL9reU0s7C2rAQKjFDtuE= -github.com/blevesearch/zapx/v15 v15.3.7/go.mod h1:m7Y6m8soYUvS7MjN9eKlz1xrLCcmqfFadmu7GhWIrLY= +github.com/blevesearch/zapx/v15 v15.3.8 h1:q4uMngBHzL1IIhRc8AJUEkj6dGOE3u1l3phLu7hq8uk= +github.com/blevesearch/zapx/v15 v15.3.8/go.mod h1:m7Y6m8soYUvS7MjN9eKlz1xrLCcmqfFadmu7GhWIrLY= github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 h1:DDGfHa7BWjL4YnC6+E63dPcxHo2sUxDIu8g3QgEJdRY= github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= @@ -270,8 +269,9 @@ github.com/certifi/gocertifi v0.0.0-20191021191039-0944d244cd40/go.mod h1:sGbDF6 github.com/certifi/gocertifi v0.0.0-20200922220541-2c3bb06c6054/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= +github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/checkpoint-restore/go-criu/v4 v4.1.0/go.mod h1:xUQBLp4RLc5zJtWY++yjOoMoB5lihDt7fai+75m+rGw= github.com/checkpoint-restore/go-criu/v5 v5.0.0/go.mod h1:cfwC0EG7HMUenopBsUf9d89JlCLQIfgVcNsNN0t6T2M= github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod h1:E/eQpaFtUKGOOSEBZgmKAcn+zUUwWxqcaKZlF54wK8E= @@ -518,8 +518,8 @@ github.com/gabriel-vasile/mimetype v1.3.1/go.mod h1:fA8fi6KUiG7MgQQ+mEWotXoEOvmx github.com/gabriel-vasile/mimetype v1.4.0/go.mod h1:fA8fi6KUiG7MgQQ+mEWotXoEOvmxRtOJlERCzSmRvr8= github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ= -github.com/getsentry/sentry-go v0.15.0 h1:CP9bmA7pralrVUedYZsmIHWpq/pBtXTSew7xvVpfLaA= -github.com/getsentry/sentry-go v0.15.0/go.mod h1:RZPJKSw+adu8PBNygiri/A98FqVr2HtRckJk9XVxJ9I= +github.com/getsentry/sentry-go v0.16.0 h1:owk+S+5XcgJLlGR/3+3s6N4d+uKwqYvh/eS0AIMjPWo= +github.com/getsentry/sentry-go v0.16.0/go.mod h1:ZXCloQLj0pG7mja5NK6NPf2V4A88YJ4pNlc2mOHwh6Y= github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gigawattio/window v0.0.0-20180317192513-0f5467e35573 h1:u8AQ9bPa9oC+8/A/jlWouakhIvkFfuxgIIRjiy8av7I= @@ -576,8 +576,9 @@ github.com/go-resty/resty/v2 v2.7.0 h1:me+K9p3uhSmXtrBZ4k9jcEAfJmuC8IivWHwaLZwPr github.com/go-resty/resty/v2 v2.7.0/go.mod h1:9PWDzw47qPphMRFfhsyk0NnSgvluHcljSMVIq3w7q0I= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= -github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= +github.com/go-sql-driver/mysql v1.7.0 h1:ueSltNNllEqE3qcWBTD0iQd3IpL/6U+mJxLkazJ7YPc= +github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0= @@ -720,6 +721,7 @@ github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26 h1:Xim43kblpZXfIBQsbuBVKCudVG457BR2GZFIz3uw3hQ= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -759,8 +761,8 @@ github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWm github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/graph-gophers/dataloader/v6 v6.0.0 h1:qBpmq3B8PIQesoh0EJXKGfw+ulMUb+KFl4IZOe9ScWg= github.com/graph-gophers/dataloader/v6 v6.0.0/go.mod h1:J15OZSnOoZgMkijpbZcwCmglIDYqlUiTEE1xLPbyqZM= -github.com/graph-gophers/graphql-go v1.4.0 h1:JE9wveRTSXwJyjdRd6bOQ7Ob5bewTUQ58Jv4OiVdpdE= -github.com/graph-gophers/graphql-go v1.4.0/go.mod h1:YtmJZDLbF1YYNrlNAuiO5zAStUWc3XZT07iGsVqe1Os= +github.com/graph-gophers/graphql-go v1.5.1-0.20230110080634-edea822f558a h1:i0+Se9S+2zL5CBxJouqn2Ej6UQMwH1c57ZB6DVnqck4= +github.com/graph-gophers/graphql-go v1.5.1-0.20230110080634-edea822f558a/go.mod h1:YtmJZDLbF1YYNrlNAuiO5zAStUWc3XZT07iGsVqe1Os= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= @@ -780,16 +782,16 @@ github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brv github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-hclog v1.3.1 h1:vDwF1DFNZhntP4DAjuTpOw3uEgMUpXh1pB5fW9DqHpo= -github.com/hashicorp/go-hclog v1.3.1/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= +github.com/hashicorp/go-hclog v1.4.0 h1:ctuWFGrhFha8BnnzxqeRGidlEcQkDyL5u8J8t5eA11I= +github.com/hashicorp/go-hclog v1.4.0/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v0.0.0-20161216184304-ed905158d874/go.mod h1:JMRHfdO9jKNzS/+BTlxCjKNQHg/jZAft8U7LloJvN7I= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= -github.com/hashicorp/go-plugin v1.4.6 h1:MDV3UrKQBM3du3G7MApDGvOsMYy3JQJ4exhSoKBAeVA= -github.com/hashicorp/go-plugin v1.4.6/go.mod h1:viDMjcLJuDui6pXb8U4HVfb8AamCWhHGUjr2IrTF67s= +github.com/hashicorp/go-plugin v1.4.8 h1:CHGwpxYDOttQOY7HOWgETU9dyVjOXzniXDqJcYJE1zM= +github.com/hashicorp/go-plugin v1.4.8/go.mod h1:viDMjcLJuDui6pXb8U4HVfb8AamCWhHGUjr2IrTF67s= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= @@ -817,8 +819,9 @@ github.com/imdario/mergo v0.3.10/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/inconshreveable/mousetrap v1.0.1 h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7Pgzkat/bFNc= github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/intel/goresctrl v0.2.0/go.mod h1:+CZdzouYFn5EsxgqAQTEzMfwKwuc0fVdMrT9FCCAVRQ= github.com/j-keck/arping v0.0.0-20160618110441-2cf9dc699c56/go.mod h1:ymszkNOg6tORTn+6F6j+Jc8TOr5osrynvN6ivFWZ2GA= github.com/j-keck/arping v1.0.2/go.mod h1:aJbELhR92bSk7tp79AWM/ftfc90EfEi2bQJrbBFOsPw= @@ -890,7 +893,6 @@ github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22 github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= -github.com/json-iterator/go v0.0.0-20171115153421-f7279a603ede/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= @@ -923,13 +925,13 @@ github.com/klauspost/compress v1.11.13/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdY github.com/klauspost/compress v1.13.1/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= github.com/klauspost/compress v1.13.4/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.15.12 h1:YClS/PImqYbn+UILDnqxQCZ3RehC9N318SU3kElDUEM= -github.com/klauspost/compress v1.15.12/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= +github.com/klauspost/compress v1.15.14 h1:i7WCKDToww0wA+9qrUZ1xOjp218vfFo3nTU6UHp+gOc= +github.com/klauspost/compress v1.15.14/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/cpuid/v2 v2.0.1/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.2.1 h1:U33DW0aiEj633gHYw3LoDNfkDiYnE5Q8M/TKJn2f2jI= -github.com/klauspost/cpuid/v2 v2.2.1/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= +github.com/klauspost/cpuid/v2 v2.2.3 h1:sxCkb+qR91z4vsqw4vGGZlDgPz3G7gjaLyK3V8y70BU= +github.com/klauspost/cpuid/v2 v2.2.3/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/klauspost/pgzip v1.2.5 h1:qnWYvvKqedOF2ulHpMG72XQol4ILEJ8k2wwRl/Km8oE= github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= @@ -981,8 +983,8 @@ github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsI github.com/markbates/pkger v0.15.1/go.mod h1:0JoVlrol20BSywW79rN3kdFFsE5xYM+rSCQDXbLhiuI= github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0= github.com/marstr/guid v1.1.0/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHefzho= -github.com/mattermost/focalboard/server v0.0.0-20221222174020-fd4cf95f8ac9 h1:UE3KuILWJwTnaXAy2YHqkCu1f7i+VdX2VNukBGYbPuI= -github.com/mattermost/focalboard/server v0.0.0-20221222174020-fd4cf95f8ac9/go.mod h1:h1HQ8UVoNMyDHzjPD7UtYbTPMWjP6d1qJZuLdT6ElNg= +github.com/mattermost/focalboard/server v0.0.0-20230104182634-f909c2552e37 h1:yK5Pb2R0PwS/RU4b4RbJjTj9xclZHJ064JFkZdAoHLY= +github.com/mattermost/focalboard/server v0.0.0-20230104182634-f909c2552e37/go.mod h1:h1HQ8UVoNMyDHzjPD7UtYbTPMWjP6d1qJZuLdT6ElNg= github.com/mattermost/go-i18n v1.11.1-0.20211013152124-5c415071e404 h1:Khvh6waxG1cHc4Cz5ef9n3XVCxRWpAKUtqg9PJl5+y8= github.com/mattermost/go-i18n v1.11.1-0.20211013152124-5c415071e404/go.mod h1:RyS7FDNQlzF1PsjbJWHRI35exqaKGSO9qD4iv8QjE34= github.com/mattermost/gziphandler v0.0.1 h1:uXHcXF5agnQ6bXabvpiwwwZOlCYoa7mKHH0lxns/o8w= @@ -991,8 +993,8 @@ github.com/mattermost/ldap v0.0.0-20201202150706-ee0e6284187d h1:/RJ/UV7M5c7L2TQ github.com/mattermost/ldap v0.0.0-20201202150706-ee0e6284187d/go.mod h1:HLbgMEI5K131jpxGazJ97AxfPDt31osq36YS1oxFQPQ= github.com/mattermost/logr/v2 v2.0.15 h1:+WNbGcsc3dBao65eXlceB6dTILNJRIrvubnsTl3zBew= github.com/mattermost/logr/v2 v2.0.15/go.mod h1:mpPp935r5dIkFDo2y9Q87cQWhFR/4xXpNh0k/y8Hmwg= -github.com/mattermost/mattermost-plugin-api v0.0.29-0.20220801143717-73008cfda2fb h1:q1qXKVv59rA2gcQ7lVLc5OlWBmfsR3i8mdGD5EZesyk= -github.com/mattermost/mattermost-plugin-api v0.0.29-0.20220801143717-73008cfda2fb/go.mod h1:PIeo40t9VTA4Wu1FwjzH7QmcgC3SRyk/ohCwJw4/oSo= +github.com/mattermost/mattermost-plugin-api v0.1.1 h1:bNnPbWCLWZpT/k2kjUxNnzCfUggU8WKs2ddz7hNjg1U= +github.com/mattermost/mattermost-plugin-api v0.1.1/go.mod h1:9yZhtg0bBj3kqSTjXnjYBMZoTsWbe3ajdFMdl9/Jz34= github.com/mattermost/morph v1.0.5-0.20221115094356-4c18a75b1f5e h1:VfNz+fvJ3DxOlALM22Eea8ONp5jHrybKBCcCtDPVlss= github.com/mattermost/morph v1.0.5-0.20221115094356-4c18a75b1f5e/go.mod h1:xo0ljDknTpPxEdhhrUdwhLCexIsYyDKS6b41HqG8wGU= github.com/mattermost/rsc v0.0.0-20160330161541-bbaefb05eaa0 h1:G9tL6JXRBMzjuD1kkBtcnd42kUiT6QDwxfFYu7adM6o= @@ -1017,8 +1019,9 @@ github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hd github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= -github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= +github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= @@ -1046,8 +1049,8 @@ github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3N github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= github.com/minio/md5-simd v1.1.2 h1:Gdi1DZK69+ZVMoNHRXJyNcxrMA4dSxoYHZSQbirFg34= github.com/minio/md5-simd v1.1.2/go.mod h1:MzdKDxYpY2BT9XQFocsiZf/NKVtR7nkE4RoEpN+20RM= -github.com/minio/minio-go/v7 v7.0.43 h1:14Q4lwblqTdlAmba05oq5xL0VBLHi06zS4yLnIkz6hI= -github.com/minio/minio-go/v7 v7.0.43/go.mod h1:nCrRzjoSUQh8hgKKtu3Y708OLvRLtuASMg2/nvmbarw= +github.com/minio/minio-go/v7 v7.0.45 h1:g4IeM9M9pW/Lo8AGGNOjBZYlvmtlE1N5TQEYWXRWzIs= +github.com/minio/minio-go/v7 v7.0.45/go.mod h1:nCrRzjoSUQh8hgKKtu3Y708OLvRLtuASMg2/nvmbarw= github.com/minio/sha256-simd v1.0.0 h1:v1ta+49hkWZyvaKwrQB8elexRqm6Y0aMLjCNsrYxo6g= github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM= github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4= @@ -1191,8 +1194,8 @@ github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCko github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= -github.com/philhofer/fwd v1.1.1 h1:GdGcTjf5RNAxwS4QLsiMzJYj5KEvPJD3Abr261yRQXQ= -github.com/philhofer/fwd v1.1.1/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= +github.com/philhofer/fwd v1.1.2 h1:bnDivRJ1EWPjUIRXV5KfORO897HTbpFAQddBdE8t7Gw= +github.com/philhofer/fwd v1.1.2/go.mod h1:qkPdfjR2SIEbspLqpe1tO4n5yICnr2DY7mqEx2tUTP0= github.com/phpdave11/gofpdf v1.4.2/go.mod h1:zpO6xFn9yxo3YLyMvW8HcKWVdbNqgIfOOp2dXMnm1mY= github.com/phpdave11/gofpdi v1.0.12/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= @@ -1253,8 +1256,9 @@ github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40T github.com/reflog/dateconstraints v0.2.1 h1:Hz1n2Q1vEm0Rj5gciDQcCN1iPBwfFjxUJy32NknGP/s= github.com/reflog/dateconstraints v0.2.1/go.mod h1:Ax8AxTBcJc3E/oVS2hd2j7RDM/5MDtuPwuR7lIHtPLo= github.com/remyoudompheng/bigfft v0.0.0-20190728182440-6a916e37a237/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= -github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 h1:OdAsTTz6OkFY5QxjkYwrChwuRruF69c169dPK26NUlk= github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +github.com/remyoudompheng/bigfft v0.0.0-20220927061507-ef77025ab5aa h1:tEkEyxYeZ43TR55QU/hsIt9aRGBxbgGuz9CGykjvogY= +github.com/remyoudompheng/bigfft v0.0.0-20220927061507-ef77025ab5aa/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/richardlehane/mscfb v1.0.3/go.mod h1:YzVpcZg9czvAuhk9T+a3avCpcFPMUWm7gK3DypaEsUk= github.com/richardlehane/mscfb v1.0.4 h1:WULscsljNPConisD5hR0+OyZjwK46Pfyr6mPu5ZawpM= github.com/richardlehane/mscfb v1.0.4/go.mod h1:YzVpcZg9czvAuhk9T+a3avCpcFPMUWm7gK3DypaEsUk= @@ -1273,8 +1277,8 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8= github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= -github.com/rs/cors v1.8.2 h1:KCooALfAYGs415Cwu5ABvv9n9509fSiG5SQJn/AQo4U= -github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= +github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo= +github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= github.com/rs/xid v1.4.0 h1:qd7wPTDkN6KQx2VmMBLrpHkiyQwgFXRnkOLacUiaSNY= github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= @@ -1371,8 +1375,8 @@ github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5q github.com/splitio/go-client/v6 v6.2.1 h1:EH3xYH7fr2c0I0ZtYvsyn7DjC9ZmoNAFLoKoT3BmQFU= github.com/splitio/go-client/v6 v6.2.1/go.mod h1:+HnGMevmSUk56va2egs9W2s9mJ7LW9IXiDPB1ExOi+k= github.com/splitio/go-split-commons/v4 v4.2.0/go.mod h1:mzanM00PV8t1FL6IHc2UXepIH2z79d49ArZ2LoJHGrY= -github.com/splitio/go-split-commons/v4 v4.2.2 h1:p4Gq4+Wxto+f+7g4AoxmMON1jkOU8abqAIV1pb8ke9M= -github.com/splitio/go-split-commons/v4 v4.2.2/go.mod h1:mzanM00PV8t1FL6IHc2UXepIH2z79d49ArZ2LoJHGrY= +github.com/splitio/go-split-commons/v4 v4.2.3 h1:/bQg8Z0eCkF9RHl7Dh1SJ8j7Ci024bgtkZEWwEKXywc= +github.com/splitio/go-split-commons/v4 v4.2.3/go.mod h1:mzanM00PV8t1FL6IHc2UXepIH2z79d49ArZ2LoJHGrY= github.com/splitio/go-toolkit/v5 v5.2.2 h1:VHSJoIH9tsRt2cCzGKN4WG3BoGCr0tCPZIl8APtJ4bw= github.com/splitio/go-toolkit/v5 v5.2.2/go.mod h1:SYi/svhhtEgdMSb5tNcDcMjOSUH/7XVkvjp5dPL+nBE= github.com/ssor/bom v0.0.0-20170718123548-6386211fdfcf h1:pvbZ0lM0XWPBqUKqFU8cmavspvIl9nulOYwdy6IFRRo= @@ -1406,16 +1410,16 @@ github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cb github.com/tchap/go-patricia v2.2.6+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I= github.com/throttled/throttled v2.2.5+incompatible h1:65UB52X0qNTYiT0Sohp8qLYVFwZQPDw85uSa65OljjQ= github.com/throttled/throttled v2.2.5+incompatible/go.mod h1:0BjlrEGQmvxps+HuXLsyRdqpSRvJpq0PNIsOtqP9Nos= -github.com/tidwall/gjson v1.14.3 h1:9jvXn7olKEHU1S9vwoMGliaT8jq1vJ7IH/n9zD9Dnlw= -github.com/tidwall/gjson v1.14.3/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= +github.com/tidwall/gjson v1.14.4 h1:uo0p8EbA09J7RQaflQ1aBRffTR7xedD2bcIVSYxLnkM= +github.com/tidwall/gjson v1.14.4/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4= github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= -github.com/tinylib/msgp v1.1.6 h1:i+SbKraHhnrf9M5MYmvQhFnbLhAXSDWF8WWsuyRdocw= -github.com/tinylib/msgp v1.1.6/go.mod h1:75BAfg2hauQhs3qedfdDZmWAPcFMAvJE5b9rGOMufyw= +github.com/tinylib/msgp v1.1.8 h1:FCXC1xanKO4I8plpHGH2P7koL/RzZs12l/+r7vakfm0= +github.com/tinylib/msgp v1.1.8/go.mod h1:qkpG+2ldGg4xRFmx+jfTvZPxfGFhi64BcnL9vkCm/Tw= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= @@ -1429,8 +1433,8 @@ github.com/uber/jaeger-lib v2.4.1+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6 github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= github.com/ulikunitz/xz v0.5.8/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/ulikunitz/xz v0.5.9/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= -github.com/ulikunitz/xz v0.5.10 h1:t92gobL9l3HE202wg3rlk19F6X+JOxl9BBrCCMYEYd8= -github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= +github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/urfave/cli v0.0.0-20171014202726-7bc6a0acffa5/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= @@ -1572,8 +1576,8 @@ golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWP golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.2.0 h1:BRXPfhNivWL5Yq0BGQ39a2sW6t44aODpfxkWjYdzewE= -golang.org/x/crypto v0.2.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= +golang.org/x/crypto v0.5.0 h1:U/0M97KRkSFvyD/3FSmdP5W5swImpNgle/EHFhOsQPE= +golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -1598,8 +1602,8 @@ golang.org/x/image v0.0.0-20200430140353-33d19683fad8/go.mod h1:FeLwcggjj3mMvU+o golang.org/x/image v0.0.0-20200618115811-c13761719519/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/image v0.0.0-20201208152932-35266b937fa6/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/image v0.0.0-20210216034530-4410531fe030/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.1.0 h1:r8Oj8ZA2Xy12/b5KZYj3tuv7NG/fBz3TwQVvpJ9l8Rk= -golang.org/x/image v0.1.0/go.mod h1:iyPr49SD/G/TBxYVB/9RRtGUT5eNbo2u4NamWeQcD5c= +golang.org/x/image v0.3.0 h1:HTDXbdK9bjfSWkPzDJIw89W8CAtfFGduujWs33NLLsg= +golang.org/x/image v0.3.0/go.mod h1:fXd9211C/0VTlYuAcOhW8dY/RtEJqODXOWBDpmYBf+A= golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= @@ -1702,8 +1706,9 @@ golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.2.0 h1:sZfSu1wtKLGlWI4ZZayP0ck9Y73K1ynO6gqzTdBVdPU= -golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= +golang.org/x/net v0.3.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= +golang.org/x/net v0.5.0 h1:GyT4nK/YDHSqa1c4753ouYCDajOYKTja9Xb/OHtgvSw= +golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= golang.org/x/oauth2 v0.0.0-20180227000427-d7d64896b5ff/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -1874,14 +1879,16 @@ golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.2.0 h1:ljd4t30dBnAvMZaQCevtY0xLLD0A+bRZXbgLMLU1F/A= -golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18= +golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1891,8 +1898,10 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.6.0 h1:3XmdazWV+ubf7QgHSTWeykHOci5oeekaGJBLkrkaw4k= +golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1969,7 +1978,6 @@ golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= golang.org/x/tools v0.0.0-20200916195026-c9a70fc28ce3/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= -golang.org/x/tools v0.0.0-20201022035929-9cf592e881e9/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= @@ -1984,8 +1992,9 @@ golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.3.0 h1:SrNbZl6ECOS1qFzgTdQfWXZM9XBkiA6tkFrH9YSTPHM= -golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= +golang.org/x/tools v0.4.0/go.mod h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ= +golang.org/x/tools v0.5.0 h1:+bSpV5HIeWkuvgaMfI3UmKRThoTA5ODJTUd8T17NO+4= +golang.org/x/tools v0.5.0/go.mod h1:N+Kgy78s5I24c24dU8OfWNEotWjutIs8SnJvn5IDq+k= golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -2123,8 +2132,8 @@ google.golang.org/genproto v0.0.0-20220111164026-67b88f271998/go.mod h1:5CzLGKJ6 google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20220314164441-57ef72a4c106/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= -google.golang.org/genproto v0.0.0-20221114212237-e4508ebdbee1 h1:jCw9YRd2s40X9Vxi4zKsPRvSPlHWNqadVkpbMsCPzPQ= -google.golang.org/genproto v0.0.0-20221114212237-e4508ebdbee1/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20230104163317-caabf589fcbf h1:/JqRexUvugu6JURQ0O7RfV1EnvgrOxUV4tSjuAv0Sr0= +google.golang.org/genproto v0.0.0-20230104163317-caabf589fcbf/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= google.golang.org/grpc v0.0.0-20160317175043-d3ddb4469d5a/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= @@ -2162,8 +2171,8 @@ google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ5 google.golang.org/grpc v1.43.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= -google.golang.org/grpc v1.50.1 h1:DS/BukOZWp8s6p4Dt/tOaJaTQyPyOoCcrjroHuCeLzY= -google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.51.0 h1:E1eGv1FTqoLIdnBCZufiSHgKjlqG6fKFf6pPWtMTh8U= +google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= @@ -2292,14 +2301,16 @@ lukechampine.com/uint128 v1.2.0 h1:mBi/5l91vocEN8otkC5bDLhi2KdCticRiwbdB0O+rjI= lukechampine.com/uint128 v1.2.0/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= modernc.org/b v1.0.0/go.mod h1:uZWcZfRj1BpYzfN9JTerzlNUnnPsV9O2ZA8JsRcubNg= modernc.org/cc/v3 v3.32.4/go.mod h1:0R6jl1aZlIl2avnYfbfHBS1QB6/f+16mihBObaBC878= -modernc.org/cc/v3 v3.36.0 h1:0kmRkTmqNidmu3c7BNDSdVHCxXCkWLmWmCIVX4LUboo= modernc.org/cc/v3 v3.36.0/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= +modernc.org/cc/v3 v3.40.0 h1:P3g79IUS/93SYhtoeaHW+kRCIrYaxJ27MFPv+7kaTOw= +modernc.org/cc/v3 v3.40.0/go.mod h1:/bTg4dnWkSXowUO6ssQKnOV0yMVxDYNIsIrzqTFDGH0= modernc.org/ccgo/v3 v3.0.0-20220428102840-41399a37e894/go.mod h1:eI31LL8EwEBKPpNpA4bU1/i+sKOwOrQy8D87zWUcRZc= modernc.org/ccgo/v3 v3.0.0-20220430103911-bc99d88307be/go.mod h1:bwdAnOoaIt8Ax9YdWGjxWsdkPcZyRPHqrOvJxaKAKGw= modernc.org/ccgo/v3 v3.9.2/go.mod h1:gnJpy6NIVqkETT+L5zPsQFj7L2kkhfPMzOghRNv/CFo= modernc.org/ccgo/v3 v3.16.4/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ= -modernc.org/ccgo/v3 v3.16.6 h1:3l18poV+iUemQ98O3X5OMr97LOqlzis+ytivU4NqGhA= modernc.org/ccgo/v3 v3.16.6/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ= +modernc.org/ccgo/v3 v3.16.13 h1:Mkgdzl46i5F/CNR/Kj80Ri59hC8TKAhZrYSaqvkwzUw= +modernc.org/ccgo/v3 v3.16.13/go.mod h1:2Quk+5YgpImhPjv2Qsob1DnZ/4som1lJTodubIcoUkY= modernc.org/ccorpus v1.11.6 h1:J16RXiiqiCgua6+ZvQot4yUuUy8zxgqbqEEUuGPlISk= modernc.org/ccorpus v1.11.6/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ= modernc.org/db v1.0.0/go.mod h1:kYD/cO29L/29RM0hXYl4i3+Q5VojL31kTUVpVJDw0s8= @@ -2314,36 +2325,43 @@ modernc.org/libc v1.7.13-0.20210308123627-12f642a52bb8/go.mod h1:U1eq8YWr/Kc1RWC modernc.org/libc v1.9.5/go.mod h1:U1eq8YWr/Kc1RWCMFUWEdkTg8OTcfLw2kY8EDwl039w= modernc.org/libc v1.16.0/go.mod h1:N4LD6DBE9cf+Dzf9buBlzVJndKr/iJHG97vGLHYnb5A= modernc.org/libc v1.16.1/go.mod h1:JjJE0eu4yeK7tab2n4S1w8tlWd9MxXLRzheaRnAKymU= -modernc.org/libc v1.16.7 h1:qzQtHhsZNpVPpeCu+aMIQldXeV1P0vRhSqCL0nOIJOA= modernc.org/libc v1.16.7/go.mod h1:hYIV5VZczAmGZAnG15Vdngn5HSF5cSkbvfz2B7GRuVU= +modernc.org/libc v1.22.2 h1:4U7v51GyhlWqQmwCHj28Rdq2Yzwk55ovjFrdPjs8Hb0= +modernc.org/libc v1.22.2/go.mod h1:uvQavJ1pZ0hIoC/jfqNoMLURIMhKzINIWypNM17puug= modernc.org/lldb v1.0.0/go.mod h1:jcRvJGWfCGodDZz8BPwiKMJxGJngQ/5DrRapkQnLob8= modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k= modernc.org/mathutil v1.1.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= modernc.org/mathutil v1.2.2/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= -modernc.org/mathutil v1.4.1 h1:ij3fYGe8zBF4Vu+g0oT7mB06r8sqGWKuJu1yXeR4by8= modernc.org/mathutil v1.4.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/mathutil v1.5.0 h1:rV0Ko/6SfM+8G+yKiyI830l3Wuz1zRutdslNoQ0kfiQ= +modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= modernc.org/memory v1.0.4/go.mod h1:nV2OApxradM3/OVbs2/0OsP6nPfakXpi50C7dcoHXlc= -modernc.org/memory v1.1.1 h1:bDOL0DIDLQv7bWhP3gMvIrnoFw+Eo6F7a2QK9HPDiFU= modernc.org/memory v1.1.1/go.mod h1:/0wo5ibyrQiaoUoH7f9D8dnglAmILJ5/cxZlRECf+Nw= -modernc.org/opt v0.1.1 h1:/0RX92k9vwVeDXj+Xn23DKp2VJubL7k8qNffND6qn3A= +modernc.org/memory v1.5.0 h1:N+/8c5rE6EqugZwHii4IFsaJ7MUhoWX07J5tC/iI5Ds= +modernc.org/memory v1.5.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= modernc.org/opt v0.1.1/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= +modernc.org/opt v0.1.3 h1:3XOZf2yznlhC+ibLltsDGzABUGVx8J6pnFMS3E4dcq4= +modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= modernc.org/ql v1.0.0/go.mod h1:xGVyrLIatPcO2C1JvI/Co8c0sr6y91HKFNy4pt9JXEY= modernc.org/sortutil v1.1.0/go.mod h1:ZyL98OQHJgH9IEfN71VsamvJgrtRX9Dj2gX+vH86L1k= modernc.org/sqlite v1.10.6/go.mod h1:Z9FEjUtZP4qFEg6/SiADg9XCER7aYy9a/j7Pg9P7CPs= -modernc.org/sqlite v1.18.0 h1:ef66qJSgKeyLyrF4kQ2RHw/Ue3V89fyFNbGL073aDjI= modernc.org/sqlite v1.18.0/go.mod h1:B9fRWZacNxJBHoCJZQr1R54zhVn3fjfl0aszflrTSxY= +modernc.org/sqlite v1.20.1 h1:z6qRLw72B0VfRrJjs3l6hWkzYDx1bo0WGVrBGP4ohhM= +modernc.org/sqlite v1.20.1/go.mod h1:fODt+bFmc/j8LcoCbMSkAuKuGmhxjG45KGc25N2705M= modernc.org/strutil v1.1.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs= -modernc.org/strutil v1.1.1 h1:xv+J1BXY3Opl2ALrBwyfEikFAj8pmqcpnfmuwUwcozs= modernc.org/strutil v1.1.1/go.mod h1:DE+MQQ/hjKBZS2zNInV5hhcipt5rLPWkmpbGeW5mmdw= +modernc.org/strutil v1.1.3 h1:fNMm+oJklMGYfU9Ylcywl0CO5O6nTfaowNsh2wpPjzY= +modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw= modernc.org/tcl v1.5.2/go.mod h1:pmJYOLgpiys3oI4AeAafkcUfE+TKKilminxNyU/+Zlo= -modernc.org/tcl v1.13.1 h1:npxzTwFTZYM8ghWicVIX1cRWzj7Nd8i6AqqX2p+IYao= modernc.org/tcl v1.13.1/go.mod h1:XOLfOwzhkljL4itZkK6T72ckMgvj0BDsnKNdZVUOecw= -modernc.org/token v1.0.0 h1:a0jaWiNMDhDUtqOj09wvjWWAqd3q7WpBulmL9H2egsk= +modernc.org/tcl v1.15.0 h1:oY+JeD11qVVSgVvodMJsu7Edf8tr5E/7tuhF5cNYz34= modernc.org/token v1.0.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= +modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y= +modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= modernc.org/z v1.0.1-0.20210308123920-1f282aa71362/go.mod h1:8/SRk5C/HgiQWCgXdfpb+1RvhORdkz5sw72d3jjtyqA= modernc.org/z v1.0.1/go.mod h1:8/SRk5C/HgiQWCgXdfpb+1RvhORdkz5sw72d3jjtyqA= -modernc.org/z v1.5.1 h1:RTNHdsrOpeoSeOF4FbzTo8gBYByaJ5xT7NgZ9ZqRiJM= modernc.org/z v1.5.1/go.mod h1:eWFB510QWW5Th9YGZT81s+LwvaAs3Q2yr4sP0rmLkv8= +modernc.org/z v1.7.0 h1:xkDw/KepgEjeizO2sNco+hqYkU12taxQFqPEmgm1GWE= modernc.org/zappy v1.0.0/go.mod h1:hHe+oGahLVII/aTTyWK/b53VDHMAGCBYYeZ9sn83HC4= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= diff --git a/i18n/de.json b/i18n/de.json index 82a8cccb82..a5b898781f 100644 --- a/i18n/de.json +++ b/i18n/de.json @@ -648,15 +648,15 @@ }, { "id": "api.command_invite.hint", - "translation": "@[Benutzername] ~[Kanal]" + "translation": "@[username]... ~[channel]..." }, { "id": "api.command_invite.missing_message.app_error", - "translation": "Benutzername und Kanal fehlen." + "translation": "Benutzername und/oder Kanal fehlen." }, { "id": "api.command_invite.missing_user.app_error", - "translation": "Der Benutzer konnte nicht gefunden werden. Er/sie wurde eventuell vom Systemadministrator deaktiviert." + "translation": "Benutzer {{.User}} konnte nicht gefunden werden. Er/sie wurde eventuell vom Systemadministrator deaktiviert." }, { "id": "api.command_invite.name", @@ -668,7 +668,7 @@ }, { "id": "api.command_invite.private_channel.app_error", - "translation": "Konnte den Kanal {{.Channel}} nicht finden. Bitte verwende den Kanal-Handle, um Kanäle zu identifizieren." + "translation": "Konnte den Kanal {{.Channel}} nicht finden. Bitte den [Kanal Handle](https://docs.mattermost.com/messaging/managing-channels.html#naming-a-channel) verwenden, um Kanäle zu identifizieren." }, { "id": "api.command_invite.success", @@ -999,7 +999,7 @@ }, { "id": "api.emoji.create.too_large.app_error", - "translation": "Das Emoji konnte nicht erstellt werden. Das Bild muss kleiner als 1 MB sein." + "translation": "Das Emoji konnte nicht erstellt werden. Das Bild muss kleiner als 512 KiB sein." }, { "id": "api.emoji.disabled.app_error", @@ -4989,7 +4989,7 @@ }, { "id": "model.channel.is_valid.name.app_error", - "translation": "Ungültiger Kanalname. Benutzerkennungen sind in Kanalnamen für Kanäle, die keine Direktnachrichtenkanäle sind, nicht erlaubt." + "translation": "Kanalnamen können nicht im hexadezimalen Format angegeben werden. Bitte gib einen anderen Kanalnamen ein." }, { "id": "interactive_message.decode_trigger_id.base64_decode_failed_signature", @@ -7237,7 +7237,7 @@ }, { "id": "api.license.request-trial.can-start-trial.not-allowed", - "translation": "Dieser Test-Lizenzschlüssel für Mattermost Enterprise Edition ist abgelaufen und nicht mehr gültig. Wenn du deine Testphase verlängern willst, kontaktiere bitte [unser Vertriebsteam](https://mattermost.com/contact-us/)." + "translation": "Neue Testlizenz konnte nicht angewendet werden. Du hast bereits eine Testlizenz auf diese Mattermost-Instanz angewendet... Wenn du deine Testphase verlängern willst, kontaktiere bitte [unser Vertriebsteam](https://mattermost.com/contact-us/)." }, { "id": "api.license.request-trial.can-start-trial.error", @@ -9725,5 +9725,25 @@ { "id": "api.server.hosted_signup_unavailable.error", "translation": "Das Portal ist für selbst gehostete Anmeldungen nicht verfügbar." + }, + { + "id": "ent.elasticsearch.create_client.client_key_missing", + "translation": "Die Client-Schlüsseldatei für Elasticsearch konnte nicht geöffnet werden" + }, + { + "id": "ent.elasticsearch.create_client.client_cert_missing", + "translation": "Die Client-Zertifikatsdatei für Elasticsearch konnte nicht geöffnet werden" + }, + { + "id": "ent.elasticsearch.create_client.client_cert_malformed", + "translation": "Dekodierung des Client-Zertifikats für Elasticsearch fehlgeschlagen" + }, + { + "id": "ent.elasticsearch.create_client.ca_cert_missing", + "translation": "Die CA-Datei für Elasticsearch konnte nicht geöffnet werden" + }, + { + "id": "ent.elasticsearch.create_client.ca_cert_malformed", + "translation": "Dekodierung der CA für Elasticsearch fehlgeschlagen" } ] diff --git a/i18n/en.json b/i18n/en.json index 941d9b6e9a..36040c09de 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -8153,7 +8153,7 @@ }, { "id": "model.channel.is_valid.name.app_error", - "translation": "Invalid channel name. User ids are not permitted in channel name for non-direct message channels." + "translation": "Channel names can't be in a hexadecimal format. Please enter a different channel name." }, { "id": "model.channel.is_valid.purpose.app_error", diff --git a/i18n/en_AU.json b/i18n/en_AU.json index e03b05824f..461533cfdf 100644 --- a/i18n/en_AU.json +++ b/i18n/en_AU.json @@ -2737,7 +2737,7 @@ }, { "id": "model.channel.is_valid.name.app_error", - "translation": "Invalid channel name. User IDs are not permitted in channel name for non-direct message channels." + "translation": "Channel names can't be in a hexadecimal format. Please enter a different channel name." }, { "id": "model.channel.is_valid.id.app_error", @@ -6461,7 +6461,7 @@ }, { "id": "api.emoji.create.too_large.app_error", - "translation": "Unable to create emoji. Image must be less than 1 MB in size." + "translation": "Unable to create emoji. Image must be less than 512 KiB in size." }, { "id": "api.emoji.create.parse.app_error", @@ -7055,7 +7055,7 @@ }, { "id": "api.command_invite.private_channel.app_error", - "translation": "Could not find the channel {{.Channel}}. Please use the channel handle to identify channels." + "translation": "Could not find the channel {{.Channel}}. Please use the [channel handle](https://docs.mattermost.com/messaging/managing-channels.html#naming-a-channel) to identify channels." }, { "id": "api.command_invite.permission.app_error", @@ -7067,15 +7067,15 @@ }, { "id": "api.command_invite.missing_user.app_error", - "translation": "Couldn't find a matching user. They may have been deactivated by the System Administrator." + "translation": "Couldn't find a matching user {{.User}}. They may have been deactivated by the System Administrator." }, { "id": "api.command_invite.missing_message.app_error", - "translation": "Missing Username and Channel." + "translation": "Missing Username and/or Channel." }, { "id": "api.command_invite.hint", - "translation": "@[username] ~[channel]" + "translation": "@[username]... ~[channel]..." }, { "id": "api.command_invite.group_constrained_user_denied", @@ -8772,7 +8772,7 @@ }, { "id": "api.license.request-trial.can-start-trial.not-allowed", - "translation": "This trial licence key for Mattermost Enterprise Edition has expired and is no longer valid. If you would like to extend your trial period please [contact our sales team](https://mattermost.com/contact-us/)." + "translation": "Failed to apply new trial licence. You have previously applied a trial license to this Mattermost instance. If you would like to extend your trial period please [contact the sales team](https://mattermost.com/contact-us/)." }, { "id": "api.license.request-trial.can-start-trial.error", @@ -9689,5 +9689,25 @@ { "id": "api.server.hosted_signup_unavailable.error", "translation": "Portal unavailable for self-hosted signup." + }, + { + "id": "ent.elasticsearch.create_client.client_key_missing", + "translation": "Could not open the client key file for Elasticsearch" + }, + { + "id": "ent.elasticsearch.create_client.client_cert_missing", + "translation": "Could not open the client certificate file for Elasticsearch" + }, + { + "id": "ent.elasticsearch.create_client.client_cert_malformed", + "translation": "Decoding of the client certificate for Elasticsearch failed" + }, + { + "id": "ent.elasticsearch.create_client.ca_cert_missing", + "translation": "Could not open the CA file for Elasticsearch" + }, + { + "id": "ent.elasticsearch.create_client.ca_cert_malformed", + "translation": "Decoding of the CA for Elasticsearch failed" } ] diff --git a/i18n/ja.json b/i18n/ja.json index 7625ed5305..7e01e8c320 100644 --- a/i18n/ja.json +++ b/i18n/ja.json @@ -647,15 +647,15 @@ }, { "id": "api.command_invite.hint", - "translation": "@[ユーザー名] ~[チャンネル]" + "translation": "@[ユーザー名]... ~[チャンネル]..." }, { "id": "api.command_invite.missing_message.app_error", - "translation": "ユーザー名とチャンネルが存在しません。" + "translation": "ユーザー名もしくはチャンネルが存在しません。" }, { "id": "api.command_invite.missing_user.app_error", - "translation": "ユーザーが見付かりませんでした。システム管理者によって無効化されている可能性があります。" + "translation": "ユーザー {{.User}} が見付かりませんでした。システム管理者によって無効化されている可能性があります。" }, { "id": "api.command_invite.name", @@ -667,7 +667,7 @@ }, { "id": "api.command_invite.private_channel.app_error", - "translation": "チャンネル {{.Channel}} が見つかりませんでした。チャンネルの指定にはチャンネルのハンドル名を使用してください。" + "translation": "チャンネル {{.Channel}} が見つかりませんでした。チャンネルの指定には[チャンネルのハンドル名](https://docs.mattermost.com/messaging/managing-channels.html#naming-a-channel)を使用してください。" }, { "id": "api.command_invite.success", @@ -997,7 +997,7 @@ }, { "id": "api.emoji.create.too_large.app_error", - "translation": "絵文字を作成できません。画像サイズは1MB未満でなければなりません。" + "translation": "絵文字を作成できません。画像サイズは 512 KiB 未満でなければなりません。" }, { "id": "api.emoji.disabled.app_error", @@ -4941,7 +4941,7 @@ }, { "id": "model.channel.is_valid.name.app_error", - "translation": "不正なチャンネル名です。ユーザーIDはダイレクトメッセージチャンネル以外でチャンネル名に使用することはできません。" + "translation": "チャンネル名を16進数にすることはできません。別のチャンネル名を入力してください。" }, { "id": "interactive_message.decode_trigger_id.base64_decode_failed_signature", @@ -8769,7 +8769,7 @@ }, { "id": "api.license.request-trial.can-start-trial.not-allowed", - "translation": "このMattermost Enterprise Editionのトライアルライセンスキーは期限が切れており、有効ではありません。トライアル期間の延長をご希望の場合は[営業までご連絡ください](https://mattermost.com/contact-us/)。" + "translation": "新しいトライアルライセンスを適用できませんでした。あなたは、以前このMattermostインスタンスにトライアルライセンスを適用したことがあります。トライアル期間の延長をご希望の場合は[営業までご連絡ください](https://mattermost.com/contact-us/)。" }, { "id": "api.license.request-trial.can-start-trial.error", @@ -9718,5 +9718,25 @@ { "id": "api.server.hosted_signup_unavailable.error", "translation": "セルフホスティングの利用登録では、ポータルは利用できません。" + }, + { + "id": "ent.elasticsearch.create_client.client_key_missing", + "translation": "Elasticsearch用のクライアントキーファイルを開くことができませんでした" + }, + { + "id": "ent.elasticsearch.create_client.client_cert_missing", + "translation": "Elasticsearchのクライアント証明書ファイルを開くことができませんでした" + }, + { + "id": "ent.elasticsearch.create_client.client_cert_malformed", + "translation": "Elasticsearchのクライアント証明書のデコードに失敗しました" + }, + { + "id": "ent.elasticsearch.create_client.ca_cert_missing", + "translation": "ElasticsearchのCAファイルを開くことができませんでした" + }, + { + "id": "ent.elasticsearch.create_client.ca_cert_malformed", + "translation": "Elasticsearch用CAのデコードに失敗しました" } ] diff --git a/i18n/nl.json b/i18n/nl.json index 45c0f6813e..56b3c7366b 100644 --- a/i18n/nl.json +++ b/i18n/nl.json @@ -648,15 +648,15 @@ }, { "id": "api.command_invite.hint", - "translation": "@[gebruikersnaam] ~[kanaal]" + "translation": "@[gebruikersnaam]... ~[kanaal]..." }, { "id": "api.command_invite.missing_message.app_error", - "translation": "Ontbrekende gebruikersnaam en kanaal." + "translation": "Ontbrekende gebruikersnaam en/of kanaal." }, { "id": "api.command_invite.missing_user.app_error", - "translation": "We kunnen de gebruiker niet vinden. Deze kan gedeactiveerd zijn door de systeembeheerder." + "translation": "We kunnen de gebruiker {{.User}} niet vinden. Deze kan gedeactiveerd zijn door de systeembeheerder." }, { "id": "api.command_invite.name", @@ -668,7 +668,7 @@ }, { "id": "api.command_invite.private_channel.app_error", - "translation": "Kan het kanaal{{.Channel}} niet vinden. Gebruik de kanaalaanduiding om kanalen te identificeren." + "translation": "Kan het kanaal{{.Channel}} niet vinden. Gebruik de [kanaalaanduiding](https://docs.mattermost.com/messaging/managing-channels.html#naming-a-channel) om kanalen aan te duiden." }, { "id": "api.command_invite.success", @@ -999,7 +999,7 @@ }, { "id": "api.emoji.create.too_large.app_error", - "translation": "Kon emoji niet aanmaken. Afbeelding moet minstens 1MB groot zijn." + "translation": "Kon emoji niet aanmaken. Afbeelding moet minder dan 512KiB groot zijn." }, { "id": "api.emoji.disabled.app_error", @@ -4969,7 +4969,7 @@ }, { "id": "model.channel.is_valid.name.app_error", - "translation": "Ongeldige kanaalnaam. Gebruikersindentifiers zijn niet toegestaan in een kanaalnaam voor niet directe -berichtenkanalen." + "translation": "Kanaalnamen kunnen niet hexadecimaal zijn. Voer een andere kanaalnaam in." }, { "id": "interactive_message.decode_trigger_id.base64_decode_failed_signature", @@ -8772,7 +8772,7 @@ }, { "id": "api.license.request-trial.can-start-trial.not-allowed", - "translation": "Deze proeflicentiesleutel voor Mattermost Enterprise Edition is verlopen en is niet langer geldig. Als je jouw proefperiode wil verlengen, neem dan [contact op met ons verkoopteam](https://mattermost.com/contact-us/)." + "translation": "Fout bij het toevoegen van de nieuwe proeflicentie. Je hebt eerder al een proeflicentie toegepast op deze Mattermost instance.Als je jouw proefperiode wil verlengen, neem dan [contact op met ons verkoopteam](https://mattermost.com/contact-us/)." }, { "id": "api.license.request-trial.can-start-trial.error", @@ -9725,5 +9725,25 @@ { "id": "api.draft.create_draft.can_not_draft_to_deleted.error", "translation": "Kan concept niet bewaren in een verwijderd kanaal" + }, + { + "id": "ent.elasticsearch.create_client.client_key_missing", + "translation": "Kon het client-keybestand voor Elasticsearch niet openen" + }, + { + "id": "ent.elasticsearch.create_client.client_cert_missing", + "translation": "Kon het client-certificaatbestand voor Elasticsearch niet openen" + }, + { + "id": "ent.elasticsearch.create_client.client_cert_malformed", + "translation": "Het decoderen van het client-certificaat voor Elasticsearch is mislukt" + }, + { + "id": "ent.elasticsearch.create_client.ca_cert_missing", + "translation": "Kon het CA-bestand voor Elasticsearch niet openen" + }, + { + "id": "ent.elasticsearch.create_client.ca_cert_malformed", + "translation": "Decodering van de CA voor Elasticsearch is mislukt" } ] diff --git a/i18n/pl.json b/i18n/pl.json index ae492d4db1..5239a71389 100644 --- a/i18n/pl.json +++ b/i18n/pl.json @@ -649,15 +649,15 @@ }, { "id": "api.command_invite.hint", - "translation": "@[użytkownik] ~[kanał]" + "translation": "@[nazwa użytkownika]... ~[kanał]..." }, { "id": "api.command_invite.missing_message.app_error", - "translation": "Brak nazwy użytkownika oraz kanału." + "translation": "Brak nazwy użytkownika i/lub kanału." }, { "id": "api.command_invite.missing_user.app_error", - "translation": "Nie możemy odnaleźć użytkownika. Mógł on zostać dezaktywowany przez administratora systemu." + "translation": "Nie mogliśmy znaleźć użytkownika {{.User}}. Być może został on dezaktywowany przez Administratora systemu." }, { "id": "api.command_invite.name", @@ -669,7 +669,7 @@ }, { "id": "api.command_invite.private_channel.app_error", - "translation": "Nie można znaleźć kanału {{.Channel}}. Użyj uchwytu kanału, aby zidentyfikować kanały." + "translation": "Nie można znaleźć kanału {{.Channel}}. Użyj [uchwytu kanału](https://docs.mattermost.com/messaging/managing-channels.html#naming-a-channel), aby zidentyfikować kanały." }, { "id": "api.command_invite.success", @@ -1001,7 +1001,7 @@ }, { "id": "api.emoji.create.too_large.app_error", - "translation": "Nie można utworzyć emoji. Obraz musi być mniejszy niż 1 MB." + "translation": "Nie można utworzyć emoji. Obraz musi być mniejszy niż 512 KiB." }, { "id": "api.emoji.disabled.app_error", @@ -4949,7 +4949,7 @@ }, { "id": "model.channel.is_valid.name.app_error", - "translation": "Invalid channel name. User ids are not permitted in channel name for non-direct message channels." + "translation": "Nazwy kanałów nie mogą być w formacie szesnastkowym. Proszę wprowadzić inną nazwę kanału." }, { "id": "interactive_message.decode_trigger_id.base64_decode_failed_signature", @@ -7325,7 +7325,7 @@ }, { "id": "api.license.request-trial.can-start-trial.not-allowed", - "translation": "Ten klucz licencji próbnej dla Mattermost Enterprise Edition wygasł i nie jest już ważny. Jeśli chcesz przedłużyć okres próbny, prosimy o [kontakt z naszym zespołem sprzedaży](https://mattermost.com/contact-us/)." + "translation": "Nie udało się zastosować nowej licencji próbnej. Zastosowano już wcześniej licencję próbną do tej instancji Mattermost... Jeśli chcesz przedłużyć okres próbny, prosimy o [kontakt z naszym zespołem sprzedaży](https://mattermost.com/contact-us/)." }, { "id": "api.license.request-trial.can-start-trial.error", @@ -9726,5 +9726,25 @@ { "id": "api.server.hosted_signup_unavailable.error", "translation": "Portal niedostępny dla samodzielnej rejestracji." + }, + { + "id": "ent.elasticsearch.create_client.client_key_missing", + "translation": "Nie można otworzyć pliku klucza klienta dla Elasticsearch" + }, + { + "id": "ent.elasticsearch.create_client.client_cert_missing", + "translation": "Nie można otworzyć pliku z certyfikatem klienta dla Elasticsearch" + }, + { + "id": "ent.elasticsearch.create_client.client_cert_malformed", + "translation": "Dekodowanie certyfikatu klienta dla Elasticsearch nie powiodło się" + }, + { + "id": "ent.elasticsearch.create_client.ca_cert_missing", + "translation": "Nie można otworzyć pliku CA dla Elasticsearch" + }, + { + "id": "ent.elasticsearch.create_client.ca_cert_malformed", + "translation": "Dekodowanie CA dla Elasticsearch nie powiodło się" } ] diff --git a/i18n/ru.json b/i18n/ru.json index 62022682fd..0d1447466b 100644 --- a/i18n/ru.json +++ b/i18n/ru.json @@ -649,15 +649,15 @@ }, { "id": "api.command_invite.hint", - "translation": "@[имя пользователя] ~[канал]" + "translation": "@[имя пользователя]... ~[канал]..." }, { "id": "api.command_invite.missing_message.app_error", - "translation": "Отсутствует имя пользователя и канал." + "translation": "Отсутствует имя пользователя и/или канал." }, { "id": "api.command_invite.missing_user.app_error", - "translation": "Мы не смогли найти пользователя. Вероятно он заблокирован Системным администратором." + "translation": "Мы не смогли найти пользователя {{.User}}. Вероятно он заблокирован Системным администратором." }, { "id": "api.command_invite.name", @@ -669,7 +669,7 @@ }, { "id": "api.command_invite.private_channel.app_error", - "translation": "Невозможно найти канал {{.Channel}}. Пожалуйста, используйте управление каналом для идентификации." + "translation": "Невозможно найти канал {{.Channel}}. Пожалуйста, используйте [управление каналом](https://docs.mattermost.com/messaging/managing-channels.html#naming-a-channel) для идентификации." }, { "id": "api.command_invite.success", @@ -1001,7 +1001,7 @@ }, { "id": "api.emoji.create.too_large.app_error", - "translation": "Невозможно создать смайлик. Изображение должно быть не более 1 MB." + "translation": "Невозможно создать смайлик. Изображение должно быть не более 512 КБ." }, { "id": "api.emoji.disabled.app_error", @@ -5493,7 +5493,7 @@ }, { "id": "model.channel.is_valid.name.app_error", - "translation": "Некорректное имя канала. Запрещено использовать идентификаторы пользователей в качестве имени канала (кроме каналов личных сообщений)." + "translation": "Имена каналов не могут быть в шестнадцатеричном формате. Пожалуйста, введите другое имя канала." }, { "id": "model.config.is_valid.bleve_search.enable_autocomplete.app_error", @@ -8713,7 +8713,7 @@ }, { "id": "api.license.request-trial.can-start-trial.not-allowed", - "translation": "Срок действия этого пробного лицензионного ключа для Mattermost Enterprise Edition истек и больше не действует. Если вы хотите продлить пробный период, пожалуйста, [свяжитесь с нашим отделом продаж] (https://mattermost.com/contact-us/)." + "translation": "Не удалось применить новую пробную лицензию. Вы уже применяли пробную лицензию к этому экземпляру Mattermost. Если вы хотите продлить пробный период, пожалуйста, [свяжитесь с нашим отделом продаж] (https://mattermost.com/contact-us/)." }, { "id": "api.license.request-trial.can-start-trial.error", @@ -9726,5 +9726,25 @@ { "id": "api.server.hosted_signup_unavailable.error", "translation": "Портал недоступен для самостоятельной регистрации." + }, + { + "id": "ent.elasticsearch.create_client.client_key_missing", + "translation": "Не удалось открыть файл клиентского ключа для Elasticsearch" + }, + { + "id": "ent.elasticsearch.create_client.client_cert_missing", + "translation": "Не удалось открыть файл сертификата клиента для Elasticsearch" + }, + { + "id": "ent.elasticsearch.create_client.client_cert_malformed", + "translation": "Не удалось декодировать сертификат клиента для Elasticsearch" + }, + { + "id": "ent.elasticsearch.create_client.ca_cert_missing", + "translation": "Не удалось открыть файл CA для Elasticsearch" + }, + { + "id": "ent.elasticsearch.create_client.ca_cert_malformed", + "translation": "Расшифровка CA для Elasticsearch не удалась" } ] diff --git a/i18n/sv.json b/i18n/sv.json index f5b180b542..b9b189c4c7 100644 --- a/i18n/sv.json +++ b/i18n/sv.json @@ -6329,7 +6329,7 @@ }, { "id": "api.emoji.create.too_large.app_error", - "translation": "Det gick inte att skapa emoji. Bildfilen måste vara mindre än 1 MB i storlek." + "translation": "Det gick inte att skapa emoji. Bildfilen måste vara mindre än 512 KiB i storlek." }, { "id": "api.emoji.create.parse.app_error", @@ -6716,7 +6716,7 @@ }, { "id": "api.command_invite.private_channel.app_error", - "translation": "Kunde inte hitta kanalen {{.Channel}}. Använd Channel handle för att identifiera kanaler." + "translation": "Kunde inte hitta kanalen {{.Channel}}. Använd [channel handle](https://docs.mattermost.com/messaging/managing-channels.html#naming-a-channel) för att identifiera kanaler." }, { "id": "api.command_invite.permission.app_error", @@ -6728,15 +6728,15 @@ }, { "id": "api.command_invite.missing_user.app_error", - "translation": "Kunde inte hitta användaren. Kan ha blivit avstängd av Systemadministratören." + "translation": "Kunde inte hitta användaren {{.User}}. Kan ha blivit avstängd av Systemadministratören." }, { "id": "api.command_invite.missing_message.app_error", - "translation": "Saknar Användarnamn och Kanal." + "translation": "Saknar Användarnamn och/eller Kanal." }, { "id": "api.command_invite.hint", - "translation": "@[användarnamn] ~[kanal]" + "translation": "@[username]... ~[channel]..." }, { "id": "api.command_invite.group_constrained_user_denied", @@ -8772,7 +8772,7 @@ }, { "id": "api.license.request-trial.can-start-trial.not-allowed", - "translation": "Licensnyckeln för testperioden av Mattermost Enterprise Edition är inte längre giltig. [Kontakta Sales team] (https://mattermost.com/contact-us/) om du vill utöka testperionden." + "translation": "Misslyckades med att installera ny testlicens. Du har tidigare använt en testlicens på denna Mattermost-instans. [Kontakta försäljningsteamet] (https://mattermost.com/contact-us/) om du vill utöka testperioden." }, { "id": "api.license.request-trial.can-start-trial.error", diff --git a/i18n/tr.json b/i18n/tr.json index 2eadae012a..df4ab52fed 100644 --- a/i18n/tr.json +++ b/i18n/tr.json @@ -648,15 +648,15 @@ }, { "id": "api.command_invite.hint", - "translation": "@[kullanıcıadı] ~[kanal]" + "translation": "@[username]... ~[channel]..." }, { "id": "api.command_invite.missing_message.app_error", - "translation": "Kullanıcı adı ya da kanal eksik." + "translation": "Kullanıcı adı ve/veya kanal eksik." }, { "id": "api.command_invite.missing_user.app_error", - "translation": "Kullanıcı bulunamadı. Sistem yöneticisi tarafından devre dışı bırakılmış olabilir." + "translation": "{{.User}} kullanıcısı bulunamadı. Sistem yöneticisi tarafından devre dışı bırakılmış olabilir." }, { "id": "api.command_invite.name", @@ -668,7 +668,7 @@ }, { "id": "api.command_invite.private_channel.app_error", - "translation": "{{.Channel}} kanalı bulunamadı. Lütfen kanalları belirtmek için kanal kısaltması kullanın." + "translation": "{{.Channel}} kanalı bulunamadı. Lütfen kanalları belirtmek için [kanal kısaltmasını](https://docs.mattermost.com/messaging/managing-channels.html#naming-a-channel) kullanın." }, { "id": "api.command_invite.success", @@ -999,7 +999,7 @@ }, { "id": "api.emoji.create.too_large.app_error", - "translation": "Emoji eklenemedi. Görsel boyutu 1 MB değerinden küçük olmalıdır." + "translation": "Emoji eklenemedi. Görsel 512 KiB boyutundan küçük olmalıdır." }, { "id": "api.emoji.disabled.app_error", @@ -8772,7 +8772,7 @@ }, { "id": "api.license.request-trial.can-start-trial.not-allowed", - "translation": "Mattermost Enterprise sürümünün deneme süresi sona ermiş olduğundan artık kullanılamaz. Deneme sürenizi uzatmak istiyorsanız [satış ekibimizle](https://mattermost.com/contact-us/) görüşebilirsiniz." + "translation": "Yeni deneme lisansı kullanılamadı. Bu Mattermost kopyasında daha önce deneme lisansı kullanmışsınız. Deneme sürenizi uzatmak istiyorsanız [satış ekibimizle](https://mattermost.com/contact-us/) görüşebilirsiniz." }, { "id": "api.license.request-trial.can-start-trial.error", @@ -9721,5 +9721,9 @@ { "id": "api.templates.cloud_upgrade_confirmation_monthly.subtitle", "translation": "{{.WorkspaceName}} çalışma alanınız güncellendi. Faturanız {{.Date}} tarihinden başlayarak hesaplanacak" + }, + { + "id": "api.server.hosted_signup_unavailable.error", + "translation": "Portal kişisel barındırma hesabı açmak için kullanılamaz." } ] diff --git a/i18n/uk.json b/i18n/uk.json index 7ffd8d2e6d..1be08e8b4f 100644 --- a/i18n/uk.json +++ b/i18n/uk.json @@ -6850,5 +6850,41 @@ { "id": "Channels", "translation": "Канали" + }, + { + "id": "api.cloud.cws_webhook_event_missing_error", + "translation": "Подія Webhook не оброблена. Або вона відсутня, або недійсна." + }, + { + "id": "api.channel.create_channel.direct_channel.team_restricted_error", + "translation": "Неможливо створити прямий канал між цими користувачами, оскільки вони не мають спільної команди." + }, + { + "id": "api.admin.syncables_error", + "translation": "не вдалося додати користувача до group-teams та group-channels" + }, + { + "id": "api.admin.saml.failure_reset_authdata_to_email.app_error", + "translation": "Не вдалося скинути поле AuthData в Email." + }, + { + "id": "api.acknowledgement.save.archived_channel.app_error", + "translation": "Підтвердження в архівному каналі неможливо." + }, + { + "id": "api.acknowledgement.delete.deadline.app_error", + "translation": "Ви не можете видалити підтвердження після закінчення 5 хвилин." + }, + { + "id": "api.acknowledgement.delete.archived_channel.app_error", + "translation": "Ви не можете видалити підтвердження в заархівованому каналі." + }, + { + "id": "Playbooks", + "translation": "Сценарії" + }, + { + "id": "Boards", + "translation": "Дошки" } ] diff --git a/jobs/base_workers.go b/jobs/base_workers.go index 58bdc98ba7..71c360690f 100644 --- a/jobs/base_workers.go +++ b/jobs/base_workers.go @@ -78,6 +78,14 @@ func (worker *SimpleWorker) DoJob(job *model.Job) { return } + var appErr *model.AppError + // We get the job again because ClaimJob changes the job status. + job, appErr = worker.jobServer.GetJob(job.Id) + if appErr != nil { + mlog.Error("SimpleWorker: job execution error", mlog.String("worker", worker.name), mlog.String("job_id", job.Id), mlog.Err(appErr)) + worker.setJobError(job, appErr) + } + err := worker.execute(job) if err != nil { mlog.Error("SimpleWorker: job execution error", mlog.String("worker", worker.name), mlog.String("job_id", job.Id), mlog.Err(err)) @@ -90,8 +98,13 @@ func (worker *SimpleWorker) DoJob(job *model.Job) { } func (worker *SimpleWorker) setJobSuccess(job *model.Job) { + if err := worker.jobServer.SetJobProgress(job, 100); err != nil { + mlog.Error("Worker: Failed to update progress for job", mlog.String("worker", worker.name), mlog.String("job_id", job.Id), mlog.Err(err)) + worker.setJobError(job, err) + } + if err := worker.jobServer.SetJobSuccess(job); err != nil { - mlog.Error("SimpleWorker: Failed to set success for job", mlog.String("worker", worker.name), mlog.String("job_id", job.Id), mlog.String("error", err.Error())) + mlog.Error("SimpleWorker: Failed to set success for job", mlog.String("worker", worker.name), mlog.String("job_id", job.Id), mlog.Err(err)) worker.setJobError(job, err) } } diff --git a/jobs/export_process/worker.go b/jobs/export_process/worker.go index 7f80ac1950..48605b8fb6 100644 --- a/jobs/export_process/worker.go +++ b/jobs/export_process/worker.go @@ -21,7 +21,7 @@ type AppIface interface { configservice.ConfigService WriteFile(fr io.Reader, path string) (int64, *model.AppError) WriteFileContext(ctx context.Context, fr io.Reader, path string) (int64, *model.AppError) - BulkExport(ctx request.CTX, writer io.Writer, outPath string, opts model.BulkExportOpts) *model.AppError + BulkExport(ctx request.CTX, writer io.Writer, outPath string, job *model.Job, opts model.BulkExportOpts) *model.AppError Log() *mlog.Logger } @@ -56,7 +56,7 @@ func MakeWorker(jobServer *jobs.JobServer, app AppIface) model.Worker { }() logger := app.Log().With(mlog.String("job_id", job.Id)) - appErr := app.BulkExport(request.EmptyContext(logger), wr, outPath, opts) + appErr := app.BulkExport(request.EmptyContext(logger), wr, outPath, job, opts) wr.Close() // Close never returns an error if appErr != nil { diff --git a/model/channel.go b/model/channel.go index e900011cc9..0ca11c75e6 100644 --- a/model/channel.go +++ b/model/channel.go @@ -10,6 +10,7 @@ import ( "errors" "io" "net/http" + "regexp" "sort" "strings" "unicode/utf8" @@ -159,7 +160,7 @@ type ChannelModeratedRolesPatch struct { type ChannelSearchOpts struct { NotAssociatedToGroup string ExcludeDefaultChannels bool - IncludeDeleted bool + IncludeDeleted bool // If true, deleted channels will be included in the results. Deleted bool ExcludeChannelNames []string TeamIds []string @@ -173,7 +174,7 @@ type ChannelSearchOpts struct { Private bool Page *int PerPage *int - LastDeleteAt int + LastDeleteAt int // When combined with IncludeDeleted, only channels deleted after this time will be returned. LastUpdateAt int } @@ -185,6 +186,8 @@ type ChannelMemberCountByGroup struct { type ChannelOption func(channel *Channel) +var gmNameRegex = regexp.MustCompile("^[a-f0-9]{40}$") + func WithID(ID string) ChannelOption { return func(channel *Channel) { channel.Id = ID @@ -281,9 +284,11 @@ func (o *Channel) IsValid() *AppError { return NewAppError("Channel.IsValid", "model.channel.is_valid.creator_id.app_error", nil, "", http.StatusBadRequest) } - userIds := strings.Split(o.Name, "__") - if o.Type != ChannelTypeDirect && len(userIds) == 2 && IsValidId(userIds[0]) && IsValidId(userIds[1]) { - return NewAppError("Channel.IsValid", "model.channel.is_valid.name.app_error", nil, "", http.StatusBadRequest) + if o.Type != ChannelTypeDirect && o.Type != ChannelTypeGroup { + userIds := strings.Split(o.Name, "__") + if ok := gmNameRegex.MatchString(o.Name); ok || (o.Type != ChannelTypeDirect && len(userIds) == 2 && IsValidId(userIds[0]) && IsValidId(userIds[1])) { + return NewAppError("Channel.IsValid", "model.channel.is_valid.name.app_error", nil, "", http.StatusBadRequest) + } } return nil diff --git a/model/channel_test.go b/model/channel_test.go index 6cee525f37..038720a6d2 100644 --- a/model/channel_test.go +++ b/model/channel_test.go @@ -79,6 +79,12 @@ func TestChannelIsValid(t *testing.T) { o.Purpose = strings.Repeat("0123456789", 25) require.Nil(t, o.IsValid()) + + o.Name = "beu8cc6b3jnxfe9r4na9baooma__36atajbs87dqmpym6o8eiy9saa" + require.NotNil(t, o.IsValid()) + + o.Name = "71b03afcbb2d503d49f87f057549c43db4e19f92" + require.NotNil(t, o.IsValid()) } func TestChannelPreSave(t *testing.T) { diff --git a/model/config.go b/model/config.go index ad169fcbbf..ef948375cf 100644 --- a/model/config.go +++ b/model/config.go @@ -2867,8 +2867,8 @@ func (s *PluginSettings) SetDefaults(ls LogSettings) { } if s.PluginStates[PluginIdFocalboard] == nil { - // Enable the focalboard plugin by default - s.PluginStates[PluginIdFocalboard] = &PluginState{Enable: true} + // Disable the focalboard plugin by default + s.PluginStates[PluginIdFocalboard] = &PluginState{Enable: false} } if s.PluginStates[PluginIdApps] == nil { diff --git a/model/config_test.go b/model/config_test.go index cedffbcb08..752ace1547 100644 --- a/model/config_test.go +++ b/model/config_test.go @@ -387,11 +387,11 @@ func TestConfigDefaultChannelExportPluginState(t *testing.T) { } func TestConfigDefaultFocalboardPluginState(t *testing.T) { - t.Run("should enable Focalboard plugin by default", func(t *testing.T) { + t.Run("should not enable Focalboard plugin by default", func(t *testing.T) { c1 := Config{} c1.SetDefaults() - assert.True(t, c1.PluginSettings.PluginStates["focalboard"].Enable) + assert.False(t, c1.PluginSettings.PluginStates["focalboard"].Enable) }) t.Run("should not re-enable focalboard plugin after it has been disabled", func(t *testing.T) { diff --git a/model/feature_flags.go b/model/feature_flags.go index 47dd10378d..449a04b5bc 100644 --- a/model/feature_flags.go +++ b/model/feature_flags.go @@ -63,6 +63,9 @@ type FeatureFlags struct { PostPriority bool + // Enable WYSIWYG text editor + WysiwygEditor bool + PeopleProduct bool AnnualSubscription bool @@ -92,7 +95,7 @@ func (f *FeatureFlags) SetDefaults() { f.InsightsEnabled = true f.CommandPalette = false f.CallsEnabled = true - f.BoardsProduct = false + f.BoardsProduct = true f.SendWelcomePost = true f.PostPriority = true f.PeopleProduct = false @@ -101,6 +104,7 @@ func (f *FeatureFlags) SetDefaults() { f.ReduceOnBoardingTaskList = false f.ThreadsEverywhere = false f.GlobalDrafts = true + f.WysiwygEditor = false } func (f *FeatureFlags) Plugins() map[string]string { diff --git a/model/version.go b/model/version.go index 6090666ca3..7cf3f2c531 100644 --- a/model/version.go +++ b/model/version.go @@ -13,6 +13,7 @@ import ( // It should be maintained in chronological order with most current // release at the front of the list. var versions = []string{ + "7.8.0", "7.7.0", "7.6.0", "7.5.0", diff --git a/plugin/hclog_adapter.go b/plugin/hclog_adapter.go index a12e8f692c..beac14dfd1 100644 --- a/plugin/hclog_adapter.go +++ b/plugin/hclog_adapter.go @@ -124,6 +124,8 @@ func (h *hclogAdapter) StandardWriter(opts *hclog.StandardLoggerOptions) io.Writ func (h *hclogAdapter) SetLevel(hclog.Level) {} +func (h *hclogAdapter) GetLevel() hclog.Level { return hclog.NoLevel } + func (h *hclogAdapter) ImpliedArgs() []any { return []any{} } diff --git a/scripts/test.sh b/scripts/test.sh index 63f89fc785..f13d9244c5 100755 --- a/scripts/test.sh +++ b/scripts/test.sh @@ -14,6 +14,7 @@ COVERMODE=$8 PACKAGES_COMMA=$(echo $PACKAGES | tr ' ' ',') export MM_SERVER_PATH=$PWD +export MM_FEATUREFLAGS_BoardsProduct=false echo "Packages to test: $PACKAGES" echo "GOFLAGS: $GOFLAGS" diff --git a/shared/filestore/filesstore.go b/shared/filestore/filesstore.go index 59b0d28947..fd1017591c 100644 --- a/shared/filestore/filesstore.go +++ b/shared/filestore/filesstore.go @@ -4,6 +4,7 @@ package filestore import ( + "context" "io" "time" @@ -84,3 +85,18 @@ func NewFileBackend(settings FileBackendSettings) (FileBackend, error) { } return nil, errors.New("no valid filestorage driver found") } + +// TryWriteFileContext checks if the file backend supports context writes and passes the context in that case. +// Should the file backend not support contexts, it just calls WriteFile instead. This can be used to disable +// the timeouts for long writes (like exports). +func TryWriteFileContext(fb FileBackend, ctx context.Context, fr io.Reader, path string) (int64, error) { + type ContextWriter interface { + WriteFileContext(context.Context, io.Reader, string) (int64, error) + } + + if cw, ok := fb.(ContextWriter); ok { + return cw.WriteFileContext(ctx, fr, path) + } + + return fb.WriteFile(fr, path) +} diff --git a/store/sqlstore/store.go b/store/sqlstore/store.go index 0337a0d735..0634e43bc5 100644 --- a/store/sqlstore/store.go +++ b/store/sqlstore/store.go @@ -303,6 +303,9 @@ func (ss *SqlStore) initConnection() { if ss.DriverName() == model.DatabaseDriverMysql { ss.masterX.MapperFunc(noOpMapper) } + if ss.metrics != nil { + ss.metrics.RegisterDBCollector(ss.masterX.DB.DB, "master") + } if len(ss.settings.DataSourceReplicas) > 0 { ss.ReplicaXs = make([]*sqlxDBWrapper, len(ss.settings.DataSourceReplicas)) @@ -314,6 +317,9 @@ func (ss *SqlStore) initConnection() { if ss.DriverName() == model.DatabaseDriverMysql { ss.ReplicaXs[i].MapperFunc(noOpMapper) } + if ss.metrics != nil { + ss.metrics.RegisterDBCollector(ss.ReplicaXs[i].DB.DB, "replica-"+strconv.Itoa(i)) + } } } @@ -327,6 +333,9 @@ func (ss *SqlStore) initConnection() { if ss.DriverName() == model.DatabaseDriverMysql { ss.searchReplicaXs[i].MapperFunc(noOpMapper) } + if ss.metrics != nil { + ss.metrics.RegisterDBCollector(ss.searchReplicaXs[i].DB.DB, "searchreplica-"+strconv.Itoa(i)) + } } } diff --git a/store/sqlstore/store_test.go b/store/sqlstore/store_test.go index 180780661c..d9836c8c41 100644 --- a/store/sqlstore/store_test.go +++ b/store/sqlstore/store_test.go @@ -24,6 +24,7 @@ import ( "github.com/mattermost/mattermost-server/v6/db" "github.com/mattermost/mattermost-server/v6/einterfaces/mocks" "github.com/mattermost/mattermost-server/v6/model" + "github.com/mattermost/mattermost-server/v6/plugin/plugintest/mock" "github.com/mattermost/mattermost-server/v6/store" "github.com/mattermost/mattermost-server/v6/store/searchtest" "github.com/mattermost/mattermost-server/v6/store/storetest" @@ -702,6 +703,7 @@ func TestVersionString(t *testing.T) { } func TestReplicaLagQuery(t *testing.T) { + t.Skip("MM-49604") testDrivers := []string{ model.DatabaseDriverPostgres, model.DatabaseDriverMysql, @@ -731,6 +733,7 @@ func TestReplicaLagQuery(t *testing.T) { defer mockMetrics.AssertExpectations(t) mockMetrics.On("SetReplicaLagAbsolute", tableName, float64(1)) mockMetrics.On("SetReplicaLagTime", tableName, float64(1)) + mockMetrics.On("RegisterDBCollector", mock.AnythingOfType("*sql.DB"), "master") store := &SqlStore{ rrCounter: 0, diff --git a/store/sqlstore/thread_store.go b/store/sqlstore/thread_store.go index 0de9c5db45..f4c81ed450 100644 --- a/store/sqlstore/thread_store.go +++ b/store/sqlstore/thread_store.go @@ -503,7 +503,7 @@ func (s *SqlThreadStore) GetThreadFollowers(threadID string, fetchOnlyActive boo func (s *SqlThreadStore) GetThreadForUser(threadMembership *model.ThreadMembership, extended, postPriorityEnabled bool) (*model.ThreadResponse, error) { if !threadMembership.Following { - return nil, nil // in case the thread is not followed anymore - return nil error to be interpreted as 404 + return nil, store.NewErrNotFound("ThreadMembership", "") } unreadRepliesQuery := sq. diff --git a/tests/README.md b/tests/README.md index 3a464bf033..d259132da5 100644 --- a/tests/README.md +++ b/tests/README.md @@ -22,18 +22,19 @@ It is possible to manually test specific sections of any test, instead of using There are two test plugins: `testplugin.tar.gz` and `testplugin2.tar.gz`. These are use in some integration tests in the `api4` package. Any changes to the plugin bundles require updating the corresponding signatures. First, import the public and private development key: -``` -$ gpg --import ./development-public-key.gpg -$ gpg --import ./development-private-key.asc +```sh +gpg --import ./development-public-key.gpg +gpg --import ./development-private-key.asc ``` This has to be done only once. Then update the signatures: +```sh +gpg -u F3FACE45E0DE642C8BD6A8E64C7C6562C192CC1F --verbose --personal-digest-preferences SHA256 --detach-sign testplugin.tar.gz +gpg -u F3FACE45E0DE642C8BD6A8E64C7C6562C192CC1F --verbose --personal-digest-preferences SHA256 --detach-sign --armor testplugin.tar.gz +gpg -u F3FACE45E0DE642C8BD6A8E64C7C6562C192CC1F --verbose --personal-digest-preferences SHA256 --detach-sign testplugin2.tar.gz +gpg -u F3FACE45E0DE642C8BD6A8E64C7C6562C192CC1F --verbose --personal-digest-preferences SHA256 --detach-sign --armor testplugin2.tar.gz ``` -$ gpg -u F3FACE45E0DE642C8BD6A8E64C7C6562C192CC1F --verbose --personal-digest-preferences SHA256 --detach-sign testplugin.tar.gz -$ gpg -u F3FACE45E0DE642C8BD6A8E64C7C6562C192CC1F --verbose --personal-digest-preferences SHA256 --detach-sign --armor testplugin.tar.gz -$ gpg -u F3FACE45E0DE642C8BD6A8E64C7C6562C192CC1F --verbose --personal-digest-preferences SHA256 --detach-sign testplugin2.tar.gz -$ gpg -u F3FACE45E0DE642C8BD6A8E64C7C6562C192CC1F --verbose --personal-digest-preferences SHA256 --detach-sign --armor testplugin2.tar.gz Finally, include the updates bundles and signatures in your commit. diff --git a/tests/testplugin.tar.gz b/tests/testplugin.tar.gz index da716bbee3..456276f917 100644 Binary files a/tests/testplugin.tar.gz and b/tests/testplugin.tar.gz differ diff --git a/tests/testplugin.tar.gz.asc b/tests/testplugin.tar.gz.asc index 2ea3c9f3b1..7a7885f779 100644 --- a/tests/testplugin.tar.gz.asc +++ b/tests/testplugin.tar.gz.asc @@ -1,14 +1,14 @@ -----BEGIN PGP SIGNATURE----- -iQGzBAABCAAdFiEE8/rOReDeZCyL1qjmTHxlYsGSzB8FAl4sogwACgkQTHxlYsGS -zB+CiwwAqNhwq6PQeKCQyJ4F1kZBpSkHrlbaT+V89tcj5BomhxFin30XukW2tiov -+U4cfeKI+NAu9uPUxN6f4r6khQOGQK0bvun3YDemhbVozaPneNoxs+ugkBLMrwvp -v3Vbi241bTWsi6NxlwJDSM+LEYWkFXZKCjQFjX2UWEM86uocKZnjHHqqke4ZkXWm -Sal1mOvfZtx/R0+8aKt7FEbdUy4s15gRcVfnp017PD9VDwfiXSMVrdaYr3HqD2Q/ -WMMmZ9lW4Y0I6qtv+1Ud9YZAXPr8OzsgU13FXU1GcUG+L/W8jSb9XY/4EIFpb4O6 -tQGRBBtjq0EofVq8S9V6/LMPH3/CPgHufK7TWl12mnyGUOac4YmFlGtStkovIHZJ -+nxcMsV5xU3UhdM+/uBJnC5EH8sH2hQpkJugZIFruswfHNSiNKUpiHjupepfsV7v -jzKCEgh7Rv99QBSSBtZSuBitnzEWAE3X9UsEYx5qCQJvBBVLiugFHFv6MtkePRNd -ElLLqMat -=KHZP +iQGzBAABCAAdFiEE8/rOReDeZCyL1qjmTHxlYsGSzB8FAmOaRXoACgkQTHxlYsGS +zB8H1Av+MuNxBuQFxNvORGcudExCAAgQZb3ykYNVxPT1CzwVdd16B+VvRyt3+PKz +nSsyYyrdvd2xpdaEXFHBA8RxS5ZWCz/hkrdxUhBUWV8O5OUMOHDYvetWc6/9GeuR +3dd4VElpLsEs6hIpwnejR1EouNr5OhxstpnB2AOz5N7LWlG5lTKhaHs1zN1uLc4f +GmdJZ+5+PYm1UUipFj4kolkI+44Ytl6mj+tTyC4VJAj0mwnXQtp/JdFcDmmeRrTI +AwmanJKQlK3yw331FYSd/CXuqCGOh157X7Z5P2Mtr3ZOaNj7qLY0mjweqxjj4fnN +YTUu22KhRLGzggEbTg+5huYhtvqa1b87EcH6ukxWoBYQpFK+TyyhuX3ZeT5x6lFi +8SP9o/9KcQxB5oD6X5FGMR4v5VDosNnNuqW8G7g4fkcjQKY65tnX75G5Ih156BAP +dfZ6+nKCQvXgv1XRymF3UrJeddXtOMQzh4aSvYwwy46qNMPYMeDq6PoMXGVNeylP +bTrjLEtE +=OvPw -----END PGP SIGNATURE----- diff --git a/tests/testplugin.tar.gz.sig b/tests/testplugin.tar.gz.sig index 39efc817b7..280f77dc12 100644 Binary files a/tests/testplugin.tar.gz.sig and b/tests/testplugin.tar.gz.sig differ diff --git a/web/handlers.go b/web/handlers.go index 333e3906e5..9cc655eb40 100644 --- a/web/handlers.go +++ b/web/handlers.go @@ -360,9 +360,11 @@ func (h Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { // Handle errors that have occurred if c.Err != nil { - c.Err.Translate(c.AppContext.T) c.Err.RequestId = c.AppContext.RequestId() c.LogErrorByCode(c.Err) + // The locale translation needs to happen after we have logged it. + // We don't want the server logs to be translated as per user locale. + c.Err.Translate(c.AppContext.T) c.Err.Where = r.URL.Path