MM-45193 Use context for channel logging (#20575)

Этот коммит содержится в:
Tim Scheuermann
2022-07-14 12:01:29 +03:00
коммит произвёл GitHub
родитель 5f4da3f308
Коммит 6dc897b04f
122 изменённых файлов: 2133 добавлений и 2082 удалений

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

@@ -44,7 +44,7 @@ type AppIface interface {
// @openTracingParams teamID, skipSlackParsing
CreateCommandPost(c *request.Context, post *model.Post, teamID string, response *model.CommandResponse, skipSlackParsing bool) (*model.Post, *model.AppError)
// AddChannelMember adds a user to a channel. It is a wrapper over AddUserToChannel.
AddChannelMember(c *request.Context, userID string, channel *model.Channel, opts ChannelMemberOpts) (*model.ChannelMember, *model.AppError)
AddChannelMember(c request.CTX, userID string, channel *model.Channel, opts ChannelMemberOpts) (*model.ChannelMember, *model.AppError)
// AddCursorIdsForPostList adds NextPostId and PrevPostId as cursor to the PostList.
// The conditional blocks ensure that it sets those cursor IDs immediately as afterPost, beforePost or empty,
// and only query to database whenever necessary.
@@ -52,7 +52,7 @@ type AppIface interface {
// AddPublicKey will add plugin public key to the config. Overwrites the previous file
AddPublicKey(name string, key io.Reader) *model.AppError
// AddUserToChannel adds a user to a given channel.
AddUserToChannel(user *model.User, channel *model.Channel, skipTeamMemberIntegrityCheck bool) (*model.ChannelMember, *model.AppError)
AddUserToChannel(c request.CTX, user *model.User, channel *model.Channel, skipTeamMemberIntegrityCheck bool) (*model.ChannelMember, *model.AppError)
// Caller must close the first return value
FileReader(path string) (filestore.ReadCloseSeeker, *model.AppError)
// ChannelMembersMinusGroupMembers returns the set of users in the given channel minus the set of users in the given
@@ -86,7 +86,7 @@ type AppIface interface {
// CreateBot creates the given bot and corresponding user.
CreateBot(c *request.Context, bot *model.Bot) (*model.Bot, *model.AppError)
// CreateChannelScheme creates a new Scheme of scope channel and assigns it to the channel.
CreateChannelScheme(channel *model.Channel) (*model.Scheme, *model.AppError)
CreateChannelScheme(c request.CTX, channel *model.Channel) (*model.Scheme, *model.AppError)
// CreateDefaultMemberships adds users to teams and channels based on their group memberships and how those groups
// are configured to sync with teams and channels for group members on or after the given timestamp.
// If includeRemovedMembers is true, then members who left or were removed from a team/channel will
@@ -108,9 +108,9 @@ type AppIface interface {
// 'off-topic' and be included in the return results in addition to 'town-square'. For example:
// ['town-square', 'game-of-thrones', 'wow']
//
DefaultChannelNames() []string
DefaultChannelNames(c request.CTX) []string
// DeleteChannelScheme deletes a channels scheme and sets its SchemeId to nil.
DeleteChannelScheme(channel *model.Channel) (*model.Channel, *model.AppError)
DeleteChannelScheme(c request.CTX, channel *model.Channel) (*model.Channel, *model.AppError)
// DeleteGroupConstrainedMemberships deletes team and channel memberships of users who aren't members of the allowed
// groups of all group-constrained teams and channels.
DeleteGroupConstrainedMemberships(c *request.Context) error
@@ -118,7 +118,7 @@ type AppIface interface {
DeletePublicKey(name string) *model.AppError
// DemoteUserToGuest Convert user's roles and all his membership's roles from
// regular user roles to guest roles.
DemoteUserToGuest(user *model.User) *model.AppError
DemoteUserToGuest(c request.CTX, user *model.User) *model.AppError
// DisablePlugin will set the config for an installed plugin to disabled, triggering deactivation if active.
// Notifies cluster peers through config change.
DisablePlugin(id string) *model.AppError
@@ -146,7 +146,7 @@ type AppIface interface {
// channel_mentions.
//
// If channel is nil, FillInPostProps will look up the channel corresponding to the post.
FillInPostProps(post *model.Post, channel *model.Channel) *model.AppError
FillInPostProps(c request.CTX, post *model.Post, channel *model.Channel) *model.AppError
// FilterNonGroupChannelMembers returns the subset of the given user IDs of the users who are not members of groups
// associated to the channel excluding bots
FilterNonGroupChannelMembers(userIDs []string, channel *model.Channel) ([]string, error)
@@ -163,7 +163,7 @@ type AppIface interface {
// GetChannelGroupUsers returns the users who are associated to the channel via GroupChannels and GroupMembers.
GetChannelGroupUsers(channelID string) ([]*model.User, *model.AppError)
// GetChannelModerationsForChannel Gets a channels ChannelModerations from either the higherScoped roles or from the channel scheme roles.
GetChannelModerationsForChannel(channel *model.Channel) ([]*model.ChannelModeration, *model.AppError)
GetChannelModerationsForChannel(c request.CTX, channel *model.Channel) ([]*model.ChannelModeration, *model.AppError)
// GetClusterPluginStatuses returns the status for plugins installed anywhere in the cluster.
GetClusterPluginStatuses() (model.PluginStatuses, *model.AppError)
// GetConfigFile proxies access to the given configuration file to the underlying config store.
@@ -213,7 +213,7 @@ type AppIface interface {
// GetSanitizedConfig gets the configuration for a system admin without any secrets.
GetSanitizedConfig() *model.Config
// GetSchemeRolesForChannel Checks if a channel or its team has an override scheme for channel roles and returns the scheme roles or default channel roles.
GetSchemeRolesForChannel(channelID string) (guestRoleName string, userRoleName string, adminRoleName string, err *model.AppError)
GetSchemeRolesForChannel(c request.CTX, channelID string) (guestRoleName string, userRoleName string, adminRoleName string, err *model.AppError)
// GetSessionLengthInMillis returns the session length, in milliseconds,
// based on the type of session (Mobile, SSO, Web/LDAP).
GetSessionLengthInMillis(session *model.Session) int64
@@ -224,7 +224,7 @@ type AppIface interface {
// GetTeamGroupUsers returns the users who are associated to the team via GroupTeams and GroupMembers.
GetTeamGroupUsers(teamID string) ([]*model.User, *model.AppError)
// GetTeamSchemeChannelRoles Checks if a team has an override scheme and returns the scheme channel role names or default channel role names.
GetTeamSchemeChannelRoles(teamID string) (guestRoleName string, userRoleName string, adminRoleName string, err *model.AppError)
GetTeamSchemeChannelRoles(c request.CTX, teamID string) (guestRoleName string, userRoleName string, adminRoleName string, err *model.AppError)
// GetTotalUsersStats is used for the DM list total
GetTotalUsersStats(viewRestrictions *model.ViewUsersRestrictions) (*model.UsersStats, *model.AppError)
// HasRemote returns whether a given channelID is present in the channel remotes or not.
@@ -244,16 +244,16 @@ type AppIface interface {
// MakeAuditRecord creates a audit record pre-populated with defaults.
MakeAuditRecord(event string, initialStatus string) *audit.Record
// MarkChanelAsUnreadFromPost will take a post and set the channel as unread from that one.
MarkChannelAsUnreadFromPost(postID string, userID string, collapsedThreadsSupported bool) (*model.ChannelUnreadAt, *model.AppError)
MarkChannelAsUnreadFromPost(c request.CTX, postID string, userID string, collapsedThreadsSupported bool) (*model.ChannelUnreadAt, *model.AppError)
// MentionsToPublicChannels returns all the mentions to public channels,
// linking them to their channels
MentionsToPublicChannels(message, teamID string) model.ChannelMentionMap
MentionsToPublicChannels(c request.CTX, message, teamID string) model.ChannelMentionMap
// MentionsToTeamMembers returns all the @ mentions found in message that
// belong to users in the specified team, linking them to their users
MentionsToTeamMembers(message, teamID string) model.UserMentionMap
// MoveChannel method is prone to data races if someone joins to channel during the move process. However this
// function is only exposed to sysadmins and the possibility of this edge case is relatively small.
MoveChannel(c *request.Context, team *model.Team, channel *model.Channel, user *model.User) *model.AppError
MoveChannel(c request.CTX, team *model.Team, channel *model.Channel, user *model.User) *model.AppError
// NewWebConn returns a new WebConn instance.
NewWebConn(cfg *WebConnConfig) *WebConn
// NotifySessionsExpired is called periodically from the job server to notify any mobile sessions that have expired.
@@ -264,7 +264,7 @@ type AppIface interface {
// PatchBot applies the given patch to the bot and corresponding user.
PatchBot(botUserId string, botPatch *model.BotPatch) (*model.Bot, *model.AppError)
// PatchChannelModerationsForChannel Updates a channels scheme roles based on a given ChannelModerationPatch, if the permissions match the higher scoped role the scheme is deleted.
PatchChannelModerationsForChannel(channel *model.Channel, channelModerationsPatch []*model.ChannelModerationPatch) ([]*model.ChannelModeration, *model.AppError)
PatchChannelModerationsForChannel(c request.CTX, channel *model.Channel, channelModerationsPatch []*model.ChannelModerationPatch) ([]*model.ChannelModeration, *model.AppError)
// Perform an HTTP POST request to an integration's action endpoint.
// Caller must consume and close returned http.Response as necessary.
// For internal requests, requests are routed directly to a plugin ServerHTTP hook
@@ -279,12 +279,12 @@ type AppIface interface {
// use a sinceUnixMillis parameter value as returned by model.GetStartOfDayMillis.
//
// WARNING: PostCountsByDuration PERFORMS NO AUTHORIZATION CHECKS ON THE GIVEN CHANNELS.
PostCountsByDuration(channelIDs []string, sinceUnixMillis int64, userID *string, grouping model.PostCountGrouping, groupingLocation *time.Location) ([]*model.DurationPostCount, *model.AppError)
PostCountsByDuration(c request.CTX, channelIDs []string, sinceUnixMillis int64, userID *string, grouping model.PostCountGrouping, groupingLocation *time.Location) ([]*model.DurationPostCount, *model.AppError)
// PromoteGuestToUser Convert user's roles and all his membership's roles from
// guest roles to regular user roles.
PromoteGuestToUser(c *request.Context, user *model.User, requestorId string) *model.AppError
// RenameChannel is used to rename the channel Name and the DisplayName fields
RenameChannel(channel *model.Channel, newChannelName string, newDisplayName string) (*model.Channel, *model.AppError)
RenameChannel(c request.CTX, channel *model.Channel, newChannelName string, newDisplayName string) (*model.Channel, *model.AppError)
// RenameTeam is used to rename the team Name and the DisplayName fields
RenameTeam(team *model.Team, newTeamName string, newDisplayName string) (*model.Team, *model.AppError)
// RevokeSessionsFromAllUsers will go through all the sessions active
@@ -293,19 +293,19 @@ type AppIface interface {
// SaveConfig replaces the active configuration, optionally notifying cluster peers.
SaveConfig(newCfg *model.Config, sendConfigChangeClusterMessage bool) (*model.Config, *model.Config, *model.AppError)
// SearchAllChannels returns a list of channels, the total count of the results of the search (if the paginate search option is true), and an error.
SearchAllChannels(term string, opts model.ChannelSearchOpts) (model.ChannelListWithTeamData, int64, *model.AppError)
SearchAllChannels(c request.CTX, term string, opts model.ChannelSearchOpts) (model.ChannelListWithTeamData, int64, *model.AppError)
// SearchAllTeams returns a team list and the total count of the results
SearchAllTeams(searchOpts *model.TeamSearch) ([]*model.Team, int64, *model.AppError)
// SendNoCardPaymentFailedEmail
SendNoCardPaymentFailedEmail() *model.AppError
// SessionHasPermissionToChannels returns true only if user has access to all channels.
SessionHasPermissionToChannels(session model.Session, channelIDs []string, permission *model.Permission) bool
SessionHasPermissionToChannels(c request.CTX, session model.Session, channelIDs []string, permission *model.Permission) bool
// SessionHasPermissionToManageBot returns nil if the session has access to manage the given bot.
// This function deviates from other authorization checks in returning an error instead of just
// a boolean, allowing the permission failure to be exposed with more granularity.
SessionHasPermissionToManageBot(session model.Session, botUserId string) *model.AppError
// SessionHasPermissionToTeams returns true only if user has access to all teams.
SessionHasPermissionToTeams(session model.Session, teamIDs []string, permission *model.Permission) bool
SessionHasPermissionToTeams(c request.CTX, session model.Session, teamIDs []string, permission *model.Permission) bool
// SessionIsRegistered determines if a specific session has been registered
SessionIsRegistered(session model.Session) bool
// SetSessionExpireInHours sets the session's expiry the specified number of hours
@@ -358,9 +358,9 @@ type AppIface interface {
// UpdateBotOwner changes a bot's owner to the given value.
UpdateBotOwner(botUserId, newOwnerId string) (*model.Bot, *model.AppError)
// UpdateChannel updates a given channel by its Id. It also publishes the CHANNEL_UPDATED event.
UpdateChannel(channel *model.Channel) (*model.Channel, *model.AppError)
UpdateChannel(c request.CTX, channel *model.Channel) (*model.Channel, *model.AppError)
// UpdateChannelScheme saves the new SchemeId of the channel passed.
UpdateChannelScheme(channel *model.Channel) (*model.Channel, *model.AppError)
UpdateChannelScheme(c request.CTX, channel *model.Channel) (*model.Channel, *model.AppError)
// UpdateDNDStatusOfUsers is a recurring task which is started when server starts
// which unsets dnd status of users if needed and saves and broadcasts it
UpdateDNDStatusOfUsers()
@@ -396,7 +396,7 @@ type AppIface interface {
ActivateMfa(userID, token string) *model.AppError
AddChannelsToRetentionPolicy(policyID string, channelIDs []string) *model.AppError
AddConfigListener(listener func(*model.Config, *model.Config)) string
AddDirectChannels(teamID string, user *model.User) *model.AppError
AddDirectChannels(c request.CTX, teamID string, user *model.User) *model.AppError
AddLdapPrivateCertificate(fileData *multipart.FileHeader) *model.AppError
AddLdapPublicCertificate(fileData *multipart.FileHeader) *model.AppError
AddRemoteCluster(rc *model.RemoteCluster) (*model.RemoteCluster, *model.AppError)
@@ -426,14 +426,14 @@ type AppIface interface {
AttachSessionCookies(c *request.Context, w http.ResponseWriter, r *http.Request)
AuthenticateUserForLogin(c *request.Context, id, loginId, password, mfaToken, cwsToken string, ldapOnly bool) (user *model.User, err *model.AppError)
AuthorizeOAuthUser(w http.ResponseWriter, r *http.Request, service, code, state, redirectURI string) (io.ReadCloser, string, map[string]string, *model.User, *model.AppError)
AutocompleteChannels(userID, term string) (model.ChannelListWithTeamData, *model.AppError)
AutocompleteChannelsForSearch(teamID string, userID string, term string) (model.ChannelList, *model.AppError)
AutocompleteChannelsForTeam(teamID, userID, term string) (model.ChannelList, *model.AppError)
AutocompleteChannels(c request.CTX, userID, term string) (model.ChannelListWithTeamData, *model.AppError)
AutocompleteChannelsForSearch(c request.CTX, teamID string, userID string, term string) (model.ChannelList, *model.AppError)
AutocompleteChannelsForTeam(c request.CTX, teamID, userID, term string) (model.ChannelList, *model.AppError)
AutocompleteUsersInChannel(teamID string, channelID string, term string, options *model.UserSearchOptions) (*model.UserAutocompleteInChannel, *model.AppError)
AutocompleteUsersInTeam(teamID string, term string, options *model.UserSearchOptions) (*model.UserAutocompleteInTeam, *model.AppError)
BroadcastStatus(status *model.Status)
BuildPostReactions(postID string) (*[]ReactionImportData, *model.AppError)
BuildPushNotificationMessage(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)
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(writer io.Writer, outPath string, opts model.BulkExportOpts) *model.AppError
BulkImport(c *request.Context, jsonlReader io.Reader, attachmentsReader *zip.Reader, dryRun bool, workers int) (*model.AppError, int)
@@ -452,7 +452,7 @@ type AppIface interface {
CheckUserPostflightAuthenticationCriteria(user *model.User) *model.AppError
CheckUserPreflightAuthenticationCriteria(user *model.User, mfaToken string) *model.AppError
CheckWebConn(userID, connectionID string) *CheckConnResult
ClearChannelMembersCache(channelID string)
ClearChannelMembersCache(c request.CTX, channelID string)
ClearLatestVersionCache()
ClearSessionCacheForAllUsers()
ClearSessionCacheForAllUsersSkipClusterSend()
@@ -471,13 +471,13 @@ type AppIface interface {
Compliance() einterfaces.ComplianceInterface
Config() *model.Config
CopyFileInfos(userID string, fileIDs []string) ([]string, *model.AppError)
CreateChannel(c *request.Context, channel *model.Channel, addMember bool) (*model.Channel, *model.AppError)
CreateChannelWithUser(c *request.Context, channel *model.Channel, userID string) (*model.Channel, *model.AppError)
CreateChannel(c request.CTX, channel *model.Channel, addMember bool) (*model.Channel, *model.AppError)
CreateChannelWithUser(c request.CTX, channel *model.Channel, userID string) (*model.Channel, *model.AppError)
CreateCommand(cmd *model.Command) (*model.Command, *model.AppError)
CreateCommandWebhook(commandID string, args *model.CommandArgs) (*model.CommandWebhook, *model.AppError)
CreateEmoji(sessionUserId string, emoji *model.Emoji, multiPartImageData *multipart.Form) (*model.Emoji, *model.AppError)
CreateGroup(group *model.Group) (*model.Group, *model.AppError)
CreateGroupChannel(userIDs []string, creatorId string) (*model.Channel, *model.AppError)
CreateGroupChannel(c request.CTX, userIDs []string, creatorId string) (*model.Channel, *model.AppError)
CreateGroupWithUserIds(group *model.GroupWithUserIds) (*model.Group, *model.AppError)
CreateIncomingWebhookForChannel(creatorId string, channel *model.Channel, hook *model.IncomingWebhook) (*model.IncomingWebhook, *model.AppError)
CreateJob(job *model.Job) (*model.Job, *model.AppError)
@@ -486,24 +486,24 @@ type AppIface interface {
CreateOAuthUser(c *request.Context, service string, userData io.Reader, teamID string, tokenUser *model.User) (*model.User, *model.AppError)
CreateOutgoingWebhook(hook *model.OutgoingWebhook) (*model.OutgoingWebhook, *model.AppError)
CreatePasswordRecoveryToken(userID, email string) (*model.Token, *model.AppError)
CreatePost(c *request.Context, post *model.Post, channel *model.Channel, triggerWebhooks, setOnline bool) (savedPost *model.Post, err *model.AppError)
CreatePost(c request.CTX, post *model.Post, channel *model.Channel, triggerWebhooks, setOnline bool) (savedPost *model.Post, err *model.AppError)
CreatePostAsUser(c *request.Context, post *model.Post, currentSessionId string, setOnline bool) (*model.Post, *model.AppError)
CreatePostMissingChannel(c *request.Context, post *model.Post, triggerWebhooks bool) (*model.Post, *model.AppError)
CreatePostMissingChannel(c request.CTX, post *model.Post, triggerWebhooks bool) (*model.Post, *model.AppError)
CreateRetentionPolicy(policy *model.RetentionPolicyWithTeamAndChannelIDs) (*model.RetentionPolicyWithTeamAndChannelCounts, *model.AppError)
CreateRole(role *model.Role) (*model.Role, *model.AppError)
CreateScheme(scheme *model.Scheme) (*model.Scheme, *model.AppError)
CreateSession(session *model.Session) (*model.Session, *model.AppError)
CreateSidebarCategory(userID, teamID string, newCategory *model.SidebarCategoryWithChannels) (*model.SidebarCategoryWithChannels, *model.AppError)
CreateSidebarCategory(c request.CTX, userID, teamID string, newCategory *model.SidebarCategoryWithChannels) (*model.SidebarCategoryWithChannels, *model.AppError)
CreateTeam(c *request.Context, team *model.Team) (*model.Team, *model.AppError)
CreateTeamWithUser(c *request.Context, team *model.Team, userID string) (*model.Team, *model.AppError)
CreateTermsOfService(text, userID string) (*model.TermsOfService, *model.AppError)
CreateUploadSession(us *model.UploadSession) (*model.UploadSession, *model.AppError)
CreateUploadSession(c request.CTX, us *model.UploadSession) (*model.UploadSession, *model.AppError)
CreateUserAccessToken(token *model.UserAccessToken) (*model.UserAccessToken, *model.AppError)
CreateUserAsAdmin(c *request.Context, user *model.User, redirect string) (*model.User, *model.AppError)
CreateUserFromSignup(c *request.Context, user *model.User, redirect string) (*model.User, *model.AppError)
CreateUserWithInviteId(c *request.Context, user *model.User, inviteId, redirect string) (*model.User, *model.AppError)
CreateUserWithToken(c *request.Context, user *model.User, token *model.Token) (*model.User, *model.AppError)
CreateWebhookPost(c *request.Context, userID string, channel *model.Channel, text, overrideUsername, overrideIconURL, overrideIconEmoji string, props model.StringInterface, postType string, postRootId string) (*model.Post, *model.AppError)
CreateWebhookPost(c request.CTX, userID string, channel *model.Channel, text, overrideUsername, overrideIconURL, overrideIconEmoji string, props model.StringInterface, postType string, postRootId string) (*model.Post, *model.AppError)
DBHealthCheckDelete() error
DBHealthCheckWrite() error
DataRetention() einterfaces.DataRetentionInterface
@@ -513,7 +513,7 @@ type AppIface interface {
DeleteAllExpiredPluginKeys() *model.AppError
DeleteAllKeysForPlugin(pluginID string) *model.AppError
DeleteBrandImage() *model.AppError
DeleteChannel(c *request.Context, channel *model.Channel, userID string) *model.AppError
DeleteChannel(c request.CTX, channel *model.Channel, userID string) *model.AppError
DeleteCommand(commandID string) *model.AppError
DeleteEmoji(emoji *model.Emoji) *model.AppError
DeleteEphemeralPost(userID, postID string)
@@ -526,7 +526,7 @@ type AppIface interface {
DeleteOAuthApp(appID string) *model.AppError
DeleteOutgoingWebhook(hookID string) *model.AppError
DeletePluginKey(pluginID string, key string) *model.AppError
DeletePost(postID, deleteByID string) (*model.Post, *model.AppError)
DeletePost(c request.CTX, postID, deleteByID string) (*model.Post, *model.AppError)
DeletePreferences(userID string, preferences model.Preferences) *model.AppError
DeleteReactionForPost(c *request.Context, reaction *model.Reaction) *model.AppError
DeleteRemoteCluster(remoteClusterId string) (bool, *model.AppError)
@@ -534,7 +534,7 @@ type AppIface interface {
DeleteScheme(schemeId string) (*model.Scheme, *model.AppError)
DeleteSharedChannel(channelID string) (bool, error)
DeleteSharedChannelRemote(id string) (bool, error)
DeleteSidebarCategory(userID, teamID, categoryId string) *model.AppError
DeleteSidebarCategory(c request.CTX, userID, teamID, categoryId string) *model.AppError
DeleteToken(token *model.Token) *model.AppError
DisableAutoResponder(userID string, asAdmin bool) *model.AppError
DisableUserAccessToken(token *model.UserAccessToken) *model.AppError
@@ -559,16 +559,16 @@ type AppIface interface {
FileExists(path string) (bool, *model.AppError)
FileModTime(path string) (time.Time, *model.AppError)
FileSize(path string) (int64, *model.AppError)
FillInChannelProps(channel *model.Channel) *model.AppError
FillInChannelsProps(channelList model.ChannelList) *model.AppError
FillInChannelProps(c request.CTX, channel *model.Channel) *model.AppError
FillInChannelsProps(c request.CTX, channelList model.ChannelList) *model.AppError
FilterUsersByVisible(viewer *model.User, otherUsers []*model.User) ([]*model.User, *model.AppError)
FindTeamByName(name string) bool
GenerateMfaSecret(userID string) (*model.MfaSecret, *model.AppError)
GeneratePublicLink(siteURL string, info *model.FileInfo) string
GenerateSupportPacket() []model.FileData
GetActivePluginManifests() ([]*model.Manifest, *model.AppError)
GetAllChannels(page, perPage int, opts model.ChannelSearchOpts) (model.ChannelListWithTeamData, *model.AppError)
GetAllChannelsCount(opts model.ChannelSearchOpts) (int64, *model.AppError)
GetAllChannels(c request.CTX, page, perPage int, opts model.ChannelSearchOpts) (model.ChannelListWithTeamData, *model.AppError)
GetAllChannelsCount(c request.CTX, opts model.ChannelSearchOpts) (int64, *model.AppError)
GetAllPrivateTeams() ([]*model.Team, *model.AppError)
GetAllPublicTeams() ([]*model.Team, *model.AppError)
GetAllRemoteClusters(filter model.RemoteClusterQueryFilter) ([]*model.RemoteCluster, *model.AppError)
@@ -585,32 +585,32 @@ type AppIface interface {
GetAuthorizedAppsForUser(userID string, page, perPage int) ([]*model.OAuthApp, *model.AppError)
GetBrandImage() ([]byte, *model.AppError)
GetBulkReactionsForPosts(postIDs []string) (map[string][]*model.Reaction, *model.AppError)
GetChannel(channelID string) (*model.Channel, *model.AppError)
GetChannelByName(channelName, teamID string, includeDeleted bool) (*model.Channel, *model.AppError)
GetChannelByNameForTeamName(channelName, teamName string, includeDeleted bool) (*model.Channel, *model.AppError)
GetChannelCounts(teamID string, userID string) (*model.ChannelCounts, *model.AppError)
GetChannelFileCount(channelID string) (int64, *model.AppError)
GetChannelGuestCount(channelID string) (int64, *model.AppError)
GetChannelMember(ctx context.Context, channelID string, userID string) (*model.ChannelMember, *model.AppError)
GetChannelMemberCount(channelID string) (int64, *model.AppError)
GetChannelMembersByIds(channelID string, userIDs []string) (model.ChannelMembers, *model.AppError)
GetChannelMembersForUser(teamID string, userID string) (model.ChannelMembers, *model.AppError)
GetChannelMembersForUserWithPagination(userID string, page, perPage int) ([]*model.ChannelMember, *model.AppError)
GetChannelMembersPage(channelID string, page, perPage int) (model.ChannelMembers, *model.AppError)
GetChannelMembersTimezones(channelID string) ([]string, *model.AppError)
GetChannelMembersWithTeamDataForUserWithPagination(userID string, page, perPage int) (model.ChannelMembersWithTeamData, *model.AppError)
GetChannelPinnedPostCount(channelID string) (int64, *model.AppError)
GetChannel(c request.CTX, channelID string) (*model.Channel, *model.AppError)
GetChannelByName(c request.CTX, channelName, teamID string, includeDeleted bool) (*model.Channel, *model.AppError)
GetChannelByNameForTeamName(c request.CTX, channelName, teamName string, includeDeleted bool) (*model.Channel, *model.AppError)
GetChannelCounts(c request.CTX, teamID string, userID string) (*model.ChannelCounts, *model.AppError)
GetChannelFileCount(c request.CTX, channelID string) (int64, *model.AppError)
GetChannelGuestCount(c request.CTX, channelID string) (int64, *model.AppError)
GetChannelMember(c request.CTX, channelID string, userID string) (*model.ChannelMember, *model.AppError)
GetChannelMemberCount(c request.CTX, channelID string) (int64, *model.AppError)
GetChannelMembersByIds(c request.CTX, channelID string, userIDs []string) (model.ChannelMembers, *model.AppError)
GetChannelMembersForUser(c request.CTX, teamID string, userID string) (model.ChannelMembers, *model.AppError)
GetChannelMembersForUserWithPagination(c request.CTX, userID string, page, perPage int) ([]*model.ChannelMember, *model.AppError)
GetChannelMembersPage(c request.CTX, channelID string, page, perPage int) (model.ChannelMembers, *model.AppError)
GetChannelMembersTimezones(c request.CTX, channelID string) ([]string, *model.AppError)
GetChannelMembersWithTeamDataForUserWithPagination(c request.CTX, userID string, page, perPage int) (model.ChannelMembersWithTeamData, *model.AppError)
GetChannelPinnedPostCount(c request.CTX, channelID string) (int64, *model.AppError)
GetChannelPoliciesForUser(userID string, offset, limit int) (*model.RetentionPolicyForChannelList, *model.AppError)
GetChannelUnread(channelID, userID string) (*model.ChannelUnread, *model.AppError)
GetChannels(channelIDs []string) ([]*model.Channel, *model.AppError)
GetChannelsByNames(channelNames []string, teamID string) ([]*model.Channel, *model.AppError)
GetChannelUnread(c request.CTX, channelID, userID string) (*model.ChannelUnread, *model.AppError)
GetChannels(c request.CTX, channelIDs []string) ([]*model.Channel, *model.AppError)
GetChannelsByNames(c request.CTX, channelNames []string, teamID string) ([]*model.Channel, *model.AppError)
GetChannelsForRetentionPolicy(policyID string, offset, limit int) (*model.ChannelsWithCount, *model.AppError)
GetChannelsForScheme(scheme *model.Scheme, offset int, limit int) (model.ChannelList, *model.AppError)
GetChannelsForSchemePage(scheme *model.Scheme, page int, perPage int) (model.ChannelList, *model.AppError)
GetChannelsForTeamForUser(teamID string, userID string, opts *model.ChannelSearchOpts) (model.ChannelList, *model.AppError)
GetChannelsForTeamForUserWithCursor(teamID string, userID string, opts *model.ChannelSearchOpts, afterChannelID string) (model.ChannelList, *model.AppError)
GetChannelsForUser(userID string, includeDeleted bool, lastDeleteAt, pageSize int, fromChannelID string) (model.ChannelList, *model.AppError)
GetChannelsUserNotIn(teamID string, userID string, offset int, limit int) (model.ChannelList, *model.AppError)
GetChannelsForTeamForUser(c request.CTX, teamID string, userID string, opts *model.ChannelSearchOpts) (model.ChannelList, *model.AppError)
GetChannelsForTeamForUserWithCursor(c request.CTX, teamID string, userID string, opts *model.ChannelSearchOpts, afterChannelID string) (model.ChannelList, *model.AppError)
GetChannelsForUser(c request.CTX, userID string, includeDeleted bool, lastDeleteAt, pageSize int, fromChannelID string) (model.ChannelList, *model.AppError)
GetChannelsUserNotIn(c request.CTX, teamID string, userID string, offset int, limit int) (model.ChannelList, *model.AppError)
GetCloudSession(token string) (*model.Session, *model.AppError)
GetClusterId() string
GetClusterStatus() []*model.ClusterInfo
@@ -622,7 +622,7 @@ type AppIface interface {
GetCookieDomain() string
GetCustomStatus(userID string) (*model.CustomStatus, *model.AppError)
GetDefaultProfileImage(user *model.User) ([]byte, *model.AppError)
GetDeletedChannels(teamID string, offset int, limit int, userID string) (model.ChannelList, *model.AppError)
GetDeletedChannels(c request.CTX, teamID string, offset int, limit int, userID string) (model.ChannelList, *model.AppError)
GetEmoji(emojiId string) (*model.Emoji, *model.AppError)
GetEmojiByName(emojiName string) (*model.Emoji, *model.AppError)
GetEmojiImage(emojiId string) ([]byte, string, *model.AppError)
@@ -639,7 +639,7 @@ type AppIface interface {
GetGroup(id string, opts *model.GetGroupOpts) (*model.Group, *model.AppError)
GetGroupByName(name string, opts model.GroupSearchOpts) (*model.Group, *model.AppError)
GetGroupByRemoteID(remoteID string, groupSource model.GroupSource) (*model.Group, *model.AppError)
GetGroupChannel(userIDs []string) (*model.Channel, *model.AppError)
GetGroupChannel(c request.CTX, userIDs []string) (*model.Channel, *model.AppError)
GetGroupMemberCount(groupID string) (int64, *model.AppError)
GetGroupMemberUsers(groupID string) ([]*model.User, *model.AppError)
GetGroupMemberUsersPage(groupID string, page int, perPage int) ([]*model.User, int, *model.AppError)
@@ -674,7 +674,7 @@ type AppIface interface {
GetNewUsersForTeamPage(teamID string, page, perPage int, asAdmin bool, viewRestrictions *model.ViewUsersRestrictions) ([]*model.User, *model.AppError)
GetNextPostIdFromPostList(postList *model.PostList, collapsedThreads bool) string
GetNotificationNameFormat(user *model.User) string
GetNumberOfChannelsOnTeam(teamID string) (int, *model.AppError)
GetNumberOfChannelsOnTeam(c request.CTX, teamID string) (int, *model.AppError)
GetOAuthAccessTokenForCodeFlow(clientId, grantType, redirectURI, code, secret, refreshToken string) (*model.AccessResponse, *model.AppError)
GetOAuthAccessTokenForImplicitFlow(userID string, authRequest *model.AuthorizeRequest) (*model.Session, *model.AppError)
GetOAuthApp(appID string) (*model.OAuthApp, *model.AppError)
@@ -687,7 +687,7 @@ type AppIface interface {
GetOAuthStateToken(token string) (*model.Token, *model.AppError)
GetOnboarding() (*model.System, *model.AppError)
GetOpenGraphMetadata(requestURL string) ([]byte, error)
GetOrCreateDirectChannel(c *request.Context, userID, otherUserID string, channelOptions ...model.ChannelOption) (*model.Channel, *model.AppError)
GetOrCreateDirectChannel(c request.CTX, userID, otherUserID string, channelOptions ...model.ChannelOption) (*model.Channel, *model.AppError)
GetOutgoingWebhook(hookID string) (*model.OutgoingWebhook, *model.AppError)
GetOutgoingWebhooksForChannelPageByUser(channelID string, userID string, page, perPage int) ([]*model.OutgoingWebhook, *model.AppError)
GetOutgoingWebhooksForTeamPage(teamID string, page, perPage int) ([]*model.OutgoingWebhook, *model.AppError)
@@ -695,31 +695,31 @@ type AppIface interface {
GetOutgoingWebhooksPage(page, perPage int) ([]*model.OutgoingWebhook, *model.AppError)
GetOutgoingWebhooksPageByUser(userID string, page, perPage int) ([]*model.OutgoingWebhook, *model.AppError)
GetPasswordRecoveryToken(token string) (*model.Token, *model.AppError)
GetPermalinkPost(c *request.Context, postID string, userID string) (*model.PostList, *model.AppError)
GetPinnedPosts(channelID string) (*model.PostList, *model.AppError)
GetPermalinkPost(c request.CTX, postID string, userID string) (*model.PostList, *model.AppError)
GetPinnedPosts(c request.CTX, channelID string) (*model.PostList, *model.AppError)
GetPluginKey(pluginID string, key string) ([]byte, *model.AppError)
GetPlugins() (*model.PluginsResponse, *model.AppError)
GetPostAfterTime(channelID string, time int64, collapsedThreads bool) (*model.Post, *model.AppError)
GetPostIdAfterTime(channelID string, time int64, collapsedThreads bool) (string, *model.AppError)
GetPostIdBeforeTime(channelID string, time int64, collapsedThreads bool) (string, *model.AppError)
GetPostIfAuthorized(postID string, session *model.Session, includeDeleted bool) (*model.Post, *model.AppError)
GetPostIfAuthorized(c request.CTX, postID string, session *model.Session, includeDeleted bool) (*model.Post, *model.AppError)
GetPostThread(postID string, opts model.GetPostsOptions, userID string) (*model.PostList, *model.AppError)
GetPosts(channelID string, offset int, limit int) (*model.PostList, *model.AppError)
GetPostsAfterPost(options model.GetPostsOptions) (*model.PostList, *model.AppError)
GetPostsAroundPost(before bool, options model.GetPostsOptions) (*model.PostList, *model.AppError)
GetPostsBeforePost(options model.GetPostsOptions) (*model.PostList, *model.AppError)
GetPostsEtag(channelID string, collapsedThreads bool) string
GetPostsForChannelAroundLastUnread(channelID, userID string, limitBefore, limitAfter int, skipFetchThreads bool, collapsedThreads, collapsedThreadsExtended bool) (*model.PostList, *model.AppError)
GetPostsForChannelAroundLastUnread(c request.CTX, channelID, userID string, limitBefore, limitAfter int, skipFetchThreads bool, collapsedThreads, collapsedThreadsExtended bool) (*model.PostList, *model.AppError)
GetPostsPage(options model.GetPostsOptions) (*model.PostList, *model.AppError)
GetPostsSince(options model.GetPostsSinceOptions) (*model.PostList, *model.AppError)
GetPreferenceByCategoryAndNameForUser(userID string, category string, preferenceName string) (*model.Preference, *model.AppError)
GetPreferenceByCategoryForUser(userID string, category string) (model.Preferences, *model.AppError)
GetPreferencesForUser(userID string) (model.Preferences, *model.AppError)
GetPrevPostIdFromPostList(postList *model.PostList, collapsedThreads bool) string
GetPrivateChannelsForTeam(teamID string, offset int, limit int) (model.ChannelList, *model.AppError)
GetPrivateChannelsForTeam(c request.CTX, teamID string, offset int, limit int) (model.ChannelList, *model.AppError)
GetProfileImage(user *model.User) ([]byte, bool, *model.AppError)
GetPublicChannelsByIdsForTeam(teamID string, channelIDs []string) (model.ChannelList, *model.AppError)
GetPublicChannelsForTeam(teamID string, offset int, limit int) (model.ChannelList, *model.AppError)
GetPublicChannelsByIdsForTeam(c request.CTX, teamID string, channelIDs []string) (model.ChannelList, *model.AppError)
GetPublicChannelsForTeam(c request.CTX, teamID string, offset int, limit int) (model.ChannelList, *model.AppError)
GetReactionsForPost(postID string) ([]*model.Reaction, *model.AppError)
GetRecentSearchesForUser(userID string) ([]*model.SearchParams, *model.AppError)
GetRecentlyActiveUsersForTeam(teamID string) (map[string]*model.User, *model.AppError)
@@ -753,10 +753,10 @@ type AppIface interface {
GetSharedChannelRemotesStatus(channelID string) ([]*model.SharedChannelRemoteStatus, error)
GetSharedChannels(page int, perPage int, opts model.SharedChannelFilterOpts) ([]*model.SharedChannel, *model.AppError)
GetSharedChannelsCount(opts model.SharedChannelFilterOpts) (int64, error)
GetSidebarCategories(userID string, opts *store.SidebarCategorySearchOpts) (*model.OrderedSidebarCategories, *model.AppError)
GetSidebarCategoriesForTeamForUser(userID, teamID string) (*model.OrderedSidebarCategories, *model.AppError)
GetSidebarCategory(categoryId string) (*model.SidebarCategoryWithChannels, *model.AppError)
GetSidebarCategoryOrder(userID, teamID string) ([]string, *model.AppError)
GetSidebarCategories(c request.CTX, userID string, opts *store.SidebarCategorySearchOpts) (*model.OrderedSidebarCategories, *model.AppError)
GetSidebarCategoriesForTeamForUser(c request.CTX, userID, teamID string) (*model.OrderedSidebarCategories, *model.AppError)
GetSidebarCategory(c request.CTX, categoryId string) (*model.SidebarCategoryWithChannels, *model.AppError)
GetSidebarCategoryOrder(c request.CTX, userID, teamID string) ([]string, *model.AppError)
GetSinglePost(postID string, includeDeleted bool) (*model.Post, *model.AppError)
GetSiteURL() string
GetStatus(userID string) (*model.Status, *model.AppError)
@@ -789,12 +789,12 @@ type AppIface interface {
GetThreadMembershipsForUser(userID, teamID string) ([]*model.ThreadMembership, error)
GetThreadsForUser(userID, teamID string, options model.GetUserThreadsOpts) (*model.Threads, *model.AppError)
GetTokenById(token string) (*model.Token, *model.AppError)
GetTopChannelsForTeamSince(teamID, userID string, opts *model.InsightsOpts) (*model.TopChannelList, *model.AppError)
GetTopChannelsForUserSince(userID, teamID string, opts *model.InsightsOpts) (*model.TopChannelList, *model.AppError)
GetTopChannelsForTeamSince(c request.CTX, teamID, userID string, opts *model.InsightsOpts) (*model.TopChannelList, *model.AppError)
GetTopChannelsForUserSince(c request.CTX, userID, teamID string, opts *model.InsightsOpts) (*model.TopChannelList, *model.AppError)
GetTopReactionsForTeamSince(teamID string, userID string, opts *model.InsightsOpts) (*model.TopReactionList, *model.AppError)
GetTopReactionsForUserSince(userID string, teamID string, opts *model.InsightsOpts) (*model.TopReactionList, *model.AppError)
GetTopThreadsForTeamSince(teamID, userID string, opts *model.InsightsOpts) (*model.TopThreadList, *model.AppError)
GetTopThreadsForUserSince(teamID, userID string, opts *model.InsightsOpts) (*model.TopThreadList, *model.AppError)
GetTopThreadsForTeamSince(c request.CTX, teamID, userID string, opts *model.InsightsOpts) (*model.TopThreadList, *model.AppError)
GetTopThreadsForUserSince(c request.CTX, teamID, userID string, opts *model.InsightsOpts) (*model.TopThreadList, *model.AppError)
GetUploadSession(uploadId string) (*model.UploadSession, *model.AppError)
GetUploadSessionsForUser(userID string) ([]*model.UploadSession, *model.AppError)
GetUser(userID string) (*model.User, *model.AppError)
@@ -846,9 +846,9 @@ type AppIface interface {
HandleIncomingWebhook(c *request.Context, hookID string, req *model.IncomingWebhookRequest) *model.AppError
HandleMessageExportConfig(cfg *model.Config, appCfg *model.Config)
HasPermissionTo(askingUserId string, permission *model.Permission) bool
HasPermissionToChannel(askingUserId string, channelID string, permission *model.Permission) bool
HasPermissionToChannel(c request.CTX, askingUserId string, channelID string, permission *model.Permission) bool
HasPermissionToChannelByPost(askingUserId string, postID string, permission *model.Permission) bool
HasPermissionToReadChannel(userID string, channel *model.Channel) bool
HasPermissionToReadChannel(c request.CTX, userID string, channel *model.Channel) bool
HasPermissionToTeam(askingUserId string, teamID string, permission *model.Permission) bool
HasPermissionToUser(askingUserId string, userID string) bool
HasSharedChannel(channelID string) (bool, error)
@@ -864,18 +864,18 @@ type AppIface interface {
InviteGuestsToChannelsGracefully(teamID string, guestsInvite *model.GuestsInvite, senderId string) ([]*model.EmailInviteWithError, *model.AppError)
InviteNewUsersToTeam(emailList []string, teamID, senderId string) *model.AppError
InviteNewUsersToTeamGracefully(memberInvite *model.MemberInvite, teamID, senderId string, reminderInterval string) ([]*model.EmailInviteWithError, *model.AppError)
IsCRTEnabledForUser(userID string) bool
IsCRTEnabledForUser(c request.CTX, userID string) bool
IsFirstUserAccount() bool
IsLeader() bool
IsPasswordValid(password string) *model.AppError
IsPhase2MigrationCompleted() *model.AppError
IsUserAway(lastActivityAt int64) bool
IsUserSignUpAllowed() *model.AppError
JoinChannel(c *request.Context, channel *model.Channel, userID string) *model.AppError
JoinDefaultChannels(c *request.Context, teamID string, user *model.User, shouldBeAdmin bool, userRequestorId string) *model.AppError
JoinChannel(c request.CTX, channel *model.Channel, userID string) *model.AppError
JoinDefaultChannels(c request.CTX, teamID string, user *model.User, shouldBeAdmin bool, userRequestorId string) *model.AppError
JoinUserToTeam(c *request.Context, team *model.Team, user *model.User, userRequestorId string) (*model.TeamMember, *model.AppError)
Ldap() einterfaces.LdapInterface
LeaveChannel(c *request.Context, channelID string, userID string) *model.AppError
LeaveChannel(c request.CTX, channelID string, userID string) *model.AppError
LeaveTeam(c *request.Context, team *model.Team, user *model.User, requestorId string) *model.AppError
License() *model.License
LimitedClientConfig() map[string]string
@@ -889,7 +889,7 @@ type AppIface interface {
Log() *mlog.Logger
LoginByOAuth(c *request.Context, service string, userData io.Reader, teamID string, tokenUser *model.User) (*model.User, *model.AppError)
MakePermissionError(s *model.Session, permissions []*model.Permission) *model.AppError
MarkChannelsAsViewed(channelIDs []string, userID string, currentSessionId string, collapsedThreadsSupported bool) (map[string]int64, *model.AppError)
MarkChannelsAsViewed(c request.CTX, channelIDs []string, userID string, currentSessionId string, collapsedThreadsSupported bool) (map[string]int64, *model.AppError)
MaxPostSize() int
MessageExport() einterfaces.MessageExportInterface
Metrics() einterfaces.MetricsInterface
@@ -905,7 +905,7 @@ type AppIface interface {
NotifySystemAdminsToUpgrade(c *request.Context, currentUserTeamID string) *model.AppError
OpenInteractiveDialog(request model.OpenDialogRequest) *model.AppError
OriginChecker() func(*http.Request) bool
PatchChannel(c *request.Context, channel *model.Channel, patch *model.ChannelPatch, userID string) (*model.Channel, *model.AppError)
PatchChannel(c request.CTX, channel *model.Channel, patch *model.ChannelPatch, userID string) (*model.Channel, *model.AppError)
PatchPost(c *request.Context, postID string, patch *model.PostPatch) (*model.Post, *model.AppError)
PatchRetentionPolicy(patch *model.RetentionPolicyWithTeamAndChannelIDs) (*model.RetentionPolicyWithTeamAndChannelCounts, *model.AppError)
PatchRole(role *model.Role, patch *model.RolePatch) (*model.Role, *model.AppError)
@@ -913,22 +913,22 @@ type AppIface interface {
PatchTeam(teamID string, patch *model.TeamPatch) (*model.Team, *model.AppError)
PatchUser(userID string, patch *model.UserPatch, asAdmin bool) (*model.User, *model.AppError)
PermanentDeleteAllUsers(c *request.Context) *model.AppError
PermanentDeleteChannel(channel *model.Channel) *model.AppError
PermanentDeleteTeam(team *model.Team) *model.AppError
PermanentDeleteTeamId(teamID string) *model.AppError
PermanentDeleteChannel(c request.CTX, channel *model.Channel) *model.AppError
PermanentDeleteTeam(c request.CTX, team *model.Team) *model.AppError
PermanentDeleteTeamId(c request.CTX, teamID string) *model.AppError
PermanentDeleteUser(c *request.Context, user *model.User) *model.AppError
PluginCommandsForTeam(teamID string) []*model.Command
PostActionCookieSecret() []byte
PostAddToChannelMessage(c *request.Context, user *model.User, addedUser *model.User, channel *model.Channel, postRootId string) *model.AppError
PostAddToChannelMessage(c request.CTX, user *model.User, addedUser *model.User, channel *model.Channel, postRootId string) *model.AppError
PostPatchWithProxyRemovedFromImageURLs(patch *model.PostPatch) *model.PostPatch
PostUpdateChannelDisplayNameMessage(c *request.Context, userID string, channel *model.Channel, oldChannelDisplayName, newChannelDisplayName string) *model.AppError
PostUpdateChannelHeaderMessage(c *request.Context, userID string, channel *model.Channel, oldChannelHeader, newChannelHeader string) *model.AppError
PostUpdateChannelPurposeMessage(c *request.Context, userID string, channel *model.Channel, oldChannelPurpose string, newChannelPurpose string) *model.AppError
PostUpdateChannelDisplayNameMessage(c request.CTX, userID string, channel *model.Channel, oldChannelDisplayName, newChannelDisplayName string) *model.AppError
PostUpdateChannelHeaderMessage(c request.CTX, userID string, channel *model.Channel, oldChannelHeader, newChannelHeader string) *model.AppError
PostUpdateChannelPurposeMessage(c request.CTX, userID string, channel *model.Channel, oldChannelPurpose string, newChannelPurpose string) *model.AppError
PostWithProxyAddedToImageURLs(post *model.Post) *model.Post
PostWithProxyRemovedFromImageURLs(post *model.Post) *model.Post
PreparePostForClient(originalPost *model.Post, isNewPost, isEditPost bool) *model.Post
PreparePostForClientWithEmbedsAndImages(originalPost *model.Post, isNewPost, isEditPost bool) *model.Post
PreparePostListForClient(originalList *model.PostList) *model.PostList
PreparePostForClientWithEmbedsAndImages(c request.CTX, originalPost *model.Post, isNewPost, isEditPost bool) *model.Post
PreparePostListForClient(c request.CTX, originalList *model.PostList) *model.PostList
ProcessSlackText(text string) string
Publish(message *model.WebSocketEvent)
PublishUserTyping(userID, channelID, parentId string) *model.AppError
@@ -942,7 +942,7 @@ type AppIface interface {
RegenerateTeamInviteId(teamID string) (*model.Team, *model.AppError)
RegisterPluginCommand(pluginID string, command *model.Command) error
ReloadConfig() error
RemoveAllDeactivatedMembersFromChannel(channel *model.Channel) *model.AppError
RemoveAllDeactivatedMembersFromChannel(c request.CTX, channel *model.Channel) *model.AppError
RemoveChannelsFromRetentionPolicy(policyID string, channelIDs []string) *model.AppError
RemoveConfigListener(id string)
RemoveCustomStatus(userID string) *model.AppError
@@ -956,14 +956,14 @@ type AppIface interface {
RemoveSamlPublicCertificate() *model.AppError
RemoveTeamIcon(teamID string) *model.AppError
RemoveTeamsFromRetentionPolicy(policyID string, teamIDs []string) *model.AppError
RemoveUserFromChannel(c *request.Context, userIDToRemove string, removerUserId string, channel *model.Channel) *model.AppError
RemoveUserFromChannel(c request.CTX, userIDToRemove string, removerUserId string, channel *model.Channel) *model.AppError
RemoveUserFromTeam(c *request.Context, teamID string, userID string, requestorId string) *model.AppError
RemoveUsersFromChannelNotMemberOfTeam(c *request.Context, remover *model.User, channel *model.Channel, team *model.Team) *model.AppError
RemoveUsersFromChannelNotMemberOfTeam(c request.CTX, remover *model.User, channel *model.Channel, team *model.Team) *model.AppError
RequestLicenseAndAckWarnMetric(c *request.Context, warnMetricId string, isBot bool) *model.AppError
ResetPasswordFromToken(userSuppliedTokenString, newPassword string) *model.AppError
ResetPermissionsSystem() *model.AppError
ResetSamlAuthDataToEmail(includeDeleted bool, dryRun bool, userIDs []string) (numAffected int, appErr *model.AppError)
RestoreChannel(c *request.Context, channel *model.Channel, userID string) (*model.Channel, *model.AppError)
RestoreChannel(c request.CTX, channel *model.Channel, userID string) (*model.Channel, *model.AppError)
RestoreTeam(teamID string) *model.AppError
RestrictUsersGetByPermissions(userID string, options *model.UserGetOptions) (*model.UserGetOptions, *model.AppError)
RestrictUsersSearchByPermissions(userID string, options *model.UserSearchOptions) (*model.UserSearchOptions, *model.AppError)
@@ -976,8 +976,8 @@ type AppIface interface {
RevokeUserAccessToken(token *model.UserAccessToken) *model.AppError
RolesGrantPermission(roleNames []string, permissionId string) bool
Saml() einterfaces.SamlInterface
SanitizePostListMetadataForUser(postList *model.PostList, userID string) (*model.PostList, *model.AppError)
SanitizePostMetadataForUser(post *model.Post, userID string) (*model.Post, *model.AppError)
SanitizePostListMetadataForUser(c request.CTX, postList *model.PostList, userID string) (*model.PostList, *model.AppError)
SanitizePostMetadataForUser(c request.CTX, post *model.Post, userID string) (*model.Post, *model.AppError)
SanitizeProfile(user *model.User, asAdmin bool)
SanitizeTeam(session model.Session, team *model.Team) *model.Team
SanitizeTeams(session model.Session, teams []*model.Team) []*model.Team
@@ -985,18 +985,18 @@ type AppIface interface {
SaveBrandImage(imageData *multipart.FileHeader) *model.AppError
SaveComplianceReport(job *model.Compliance) (*model.Compliance, *model.AppError)
SaveReactionForPost(c *request.Context, reaction *model.Reaction) (*model.Reaction, *model.AppError)
SaveSharedChannel(sc *model.SharedChannel) (*model.SharedChannel, error)
SaveSharedChannel(c request.CTX, sc *model.SharedChannel) (*model.SharedChannel, error)
SaveSharedChannelRemote(remote *model.SharedChannelRemote) (*model.SharedChannelRemote, error)
SaveUserTermsOfService(userID, termsOfServiceId string, accepted bool) *model.AppError
SchemesIterator(scope string, batchSize int) func() []*model.Scheme
SearchArchivedChannels(teamID string, term string, userID string) (model.ChannelList, *model.AppError)
SearchChannels(teamID string, term string) (model.ChannelList, *model.AppError)
SearchChannelsForUser(userID, teamID, term string) (model.ChannelList, *model.AppError)
SearchChannelsUserNotIn(teamID string, userID string, term string) (model.ChannelList, *model.AppError)
SearchArchivedChannels(c request.CTX, teamID string, term string, userID string) (model.ChannelList, *model.AppError)
SearchChannels(c request.CTX, teamID string, term string) (model.ChannelList, *model.AppError)
SearchChannelsForUser(c request.CTX, userID, teamID, term string) (model.ChannelList, *model.AppError)
SearchChannelsUserNotIn(c request.CTX, teamID string, userID string, term string) (model.ChannelList, *model.AppError)
SearchEmoji(name string, prefixOnly bool, limit int) ([]*model.Emoji, *model.AppError)
SearchEngine() *searchengine.Broker
SearchFilesInTeamForUser(c *request.Context, terms string, userId string, teamId string, isOrSearch bool, includeDeletedChannels bool, timeZoneOffset int, page, perPage int, modifier string) (*model.FileInfoList, *model.AppError)
SearchGroupChannels(userID, term string) (model.ChannelList, *model.AppError)
SearchGroupChannels(c request.CTX, userID, term string) (model.ChannelList, *model.AppError)
SearchPostsForUser(c *request.Context, terms string, userID string, teamID string, isOrSearch bool, includeDeletedChannels bool, timeZoneOffset int, page, perPage int, modifier string) (*model.PostSearchResults, *model.AppError)
SearchPostsInTeam(teamID string, paramsList []*model.SearchParams) (*model.PostList, *model.AppError)
SearchPrivateTeams(searchOpts *model.TeamSearch) ([]*model.Team, *model.AppError)
@@ -1011,11 +1011,11 @@ type AppIface interface {
SearchUsersNotInTeam(notInTeamId string, term string, options *model.UserSearchOptions) ([]*model.User, *model.AppError)
SearchUsersWithoutTeam(term string, options *model.UserSearchOptions) ([]*model.User, *model.AppError)
SendAckToPushProxy(ack *model.PushNotificationAck) error
SendAutoResponse(c *request.Context, channel *model.Channel, receiver *model.User, post *model.Post) (bool, *model.AppError)
SendAutoResponseIfNecessary(c *request.Context, channel *model.Channel, sender *model.User, post *model.Post) (bool, *model.AppError)
SendAutoResponse(c request.CTX, channel *model.Channel, receiver *model.User, post *model.Post) (bool, *model.AppError)
SendAutoResponseIfNecessary(c request.CTX, channel *model.Channel, sender *model.User, post *model.Post) (bool, *model.AppError)
SendEmailVerification(user *model.User, newEmail, redirect string) *model.AppError
SendEphemeralPost(userID string, post *model.Post) *model.Post
SendNotifications(post *model.Post, team *model.Team, channel *model.Channel, sender *model.User, parentPostList *model.PostList, setOnline bool) ([]string, error)
SendEphemeralPost(c request.CTX, userID string, post *model.Post) *model.Post
SendNotifications(c request.CTX, post *model.Post, team *model.Team, channel *model.Channel, sender *model.User, parentPostList *model.PostList, setOnline bool) ([]string, error)
SendPasswordReset(email string, siteURL string) (bool, *model.AppError)
SendPaymentFailedEmail(failedPayment *model.FailedPayment) *model.AppError
SendTestPushNotification(deviceID string) string
@@ -1023,8 +1023,8 @@ type AppIface interface {
ServeInterPluginRequest(w http.ResponseWriter, r *http.Request, sourcePluginId, destinationPluginId string)
SessionHasPermissionTo(session model.Session, permission *model.Permission) bool
SessionHasPermissionToAny(session model.Session, permissions []*model.Permission) bool
SessionHasPermissionToCategory(session model.Session, userID, teamID, categoryId string) bool
SessionHasPermissionToChannel(session model.Session, channelID string, permission *model.Permission) bool
SessionHasPermissionToCategory(c request.CTX, session model.Session, userID, teamID, categoryId string) bool
SessionHasPermissionToChannel(c request.CTX, session model.Session, channelID string, permission *model.Permission) bool
SessionHasPermissionToChannelByPost(session model.Session, postID string, permission *model.Permission) bool
SessionHasPermissionToCreateJob(session model.Session, job *model.Job) (bool, *model.Permission)
SessionHasPermissionToGroup(session model.Session, groupID string, permission *model.Permission) bool
@@ -1032,7 +1032,7 @@ type AppIface interface {
SessionHasPermissionToTeam(session model.Session, teamID string, permission *model.Permission) bool
SessionHasPermissionToUser(session model.Session, userID string) bool
SessionHasPermissionToUserOrBot(session model.Session, userID string) bool
SetActiveChannel(userID string, channelID string) *model.AppError
SetActiveChannel(c request.CTX, userID string, channelID string) *model.AppError
SetAutoResponderStatus(user *model.User, oldNotifyProps model.StringMap)
SetChannels(ch *Channels)
SetCustomStatus(userID string, cs *model.CustomStatus) *model.AppError
@@ -1074,18 +1074,18 @@ type AppIface interface {
TestLdap() *model.AppError
TestSiteURL(siteURL string) *model.AppError
Timezones() *timezones.Timezones
ToggleMuteChannel(channelID, userID string) (*model.ChannelMember, *model.AppError)
ToggleMuteChannel(c request.CTX, channelID, userID string) (*model.ChannelMember, *model.AppError)
TotalWebsocketConnections() int
TriggerWebhook(c *request.Context, payload *model.OutgoingWebhookPayload, hook *model.OutgoingWebhook, post *model.Post, channel *model.Channel)
TriggerWebhook(c request.CTX, payload *model.OutgoingWebhookPayload, hook *model.OutgoingWebhook, post *model.Post, channel *model.Channel)
UnregisterPluginCommand(pluginID, teamID, trigger string)
UpdateActive(c *request.Context, user *model.User, active bool) (*model.User, *model.AppError)
UpdateChannelMemberNotifyProps(data map[string]string, channelID string, userID string) (*model.ChannelMember, *model.AppError)
UpdateChannelMemberRoles(channelID string, userID string, newRoles string) (*model.ChannelMember, *model.AppError)
UpdateChannelMemberSchemeRoles(channelID string, userID string, isSchemeGuest bool, isSchemeUser bool, isSchemeAdmin bool) (*model.ChannelMember, *model.AppError)
UpdateChannelPrivacy(c *request.Context, oldChannel *model.Channel, user *model.User) (*model.Channel, *model.AppError)
UpdateChannelMemberNotifyProps(c request.CTX, data map[string]string, channelID string, userID string) (*model.ChannelMember, *model.AppError)
UpdateChannelMemberRoles(c request.CTX, channelID string, userID string, newRoles string) (*model.ChannelMember, *model.AppError)
UpdateChannelMemberSchemeRoles(c request.CTX, channelID string, userID string, isSchemeGuest bool, isSchemeUser bool, isSchemeAdmin bool) (*model.ChannelMember, *model.AppError)
UpdateChannelPrivacy(c request.CTX, oldChannel *model.Channel, user *model.User) (*model.Channel, *model.AppError)
UpdateCommand(oldCmd, updatedCmd *model.Command) (*model.Command, *model.AppError)
UpdateConfig(f func(*model.Config))
UpdateEphemeralPost(userID string, post *model.Post) *model.Post
UpdateEphemeralPost(c request.CTX, userID string, post *model.Post) *model.Post
UpdateExpiredDNDStatuses() ([]*model.Status, error)
UpdateGroup(group *model.Group) (*model.Group, *model.AppError)
UpdateGroupSyncable(groupSyncable *model.GroupSyncable) (*model.GroupSyncable, *model.AppError)
@@ -1097,7 +1097,7 @@ type AppIface interface {
UpdateMobileAppBadge(userID string)
UpdateOAuthApp(oldApp, updatedApp *model.OAuthApp) (*model.OAuthApp, *model.AppError)
UpdateOAuthUserAttrs(userData io.Reader, user *model.User, provider einterfaces.OAuthProvider, service string, tokenUser *model.User) *model.AppError
UpdateOutgoingWebhook(oldHook, updatedHook *model.OutgoingWebhook) (*model.OutgoingWebhook, *model.AppError)
UpdateOutgoingWebhook(c request.CTX, oldHook, updatedHook *model.OutgoingWebhook) (*model.OutgoingWebhook, *model.AppError)
UpdatePassword(user *model.User, newPassword string) *model.AppError
UpdatePasswordAsUser(userID, currentPassword, newPassword string) *model.AppError
UpdatePasswordByUserIdSendEmail(userID, newPassword, method string) *model.AppError
@@ -1110,17 +1110,17 @@ type AppIface interface {
UpdateScheme(scheme *model.Scheme) (*model.Scheme, *model.AppError)
UpdateSharedChannel(sc *model.SharedChannel) (*model.SharedChannel, error)
UpdateSharedChannelRemoteCursor(id string, cursor model.GetPostsSinceForSyncCursor) error
UpdateSidebarCategories(userID, teamID string, categories []*model.SidebarCategoryWithChannels) ([]*model.SidebarCategoryWithChannels, *model.AppError)
UpdateSidebarCategoryOrder(userID, teamID string, categoryOrder []string) *model.AppError
UpdateSidebarCategories(c request.CTX, userID, teamID string, categories []*model.SidebarCategoryWithChannels) ([]*model.SidebarCategoryWithChannels, *model.AppError)
UpdateSidebarCategoryOrder(c request.CTX, userID, teamID string, categoryOrder []string) *model.AppError
UpdateTeam(team *model.Team) (*model.Team, *model.AppError)
UpdateTeamMemberRoles(teamID string, userID string, newRoles string) (*model.TeamMember, *model.AppError)
UpdateTeamMemberSchemeRoles(teamID string, userID string, isSchemeGuest bool, isSchemeUser bool, isSchemeAdmin bool) (*model.TeamMember, *model.AppError)
UpdateTeamPrivacy(teamID string, teamType string, allowOpenInvite bool) *model.AppError
UpdateTeamScheme(team *model.Team) (*model.Team, *model.AppError)
UpdateThreadFollowForUser(userID, teamID, threadID string, state bool) *model.AppError
UpdateThreadFollowForUserFromChannelAdd(userID, teamID, threadID string) *model.AppError
UpdateThreadReadForUser(currentSessionId, userID, teamID, threadID string, timestamp int64) (*model.ThreadResponse, *model.AppError)
UpdateThreadReadForUserByPost(currentSessionId, userID, teamID, threadID, postID string) (*model.ThreadResponse, *model.AppError)
UpdateThreadFollowForUserFromChannelAdd(c request.CTX, userID, teamID, threadID string) *model.AppError
UpdateThreadReadForUser(c request.CTX, currentSessionId, userID, teamID, threadID string, timestamp int64) (*model.ThreadResponse, *model.AppError)
UpdateThreadReadForUserByPost(c request.CTX, currentSessionId, userID, teamID, threadID, postID string) (*model.ThreadResponse, *model.AppError)
UpdateThreadsReadForUser(userID, teamID string) *model.AppError
UpdateUser(user *model.User, sendNotifications bool) (*model.User, *model.AppError)
UpdateUserActive(c *request.Context, userID string, active bool) *model.AppError
@@ -1137,6 +1137,6 @@ type AppIface interface {
UserCanSeeOtherUser(userID string, otherUserId string) (bool, *model.AppError)
VerifyEmailFromToken(userSuppliedTokenString string) *model.AppError
VerifyUserEmail(userID, email string) *model.AppError
ViewChannel(view *model.ChannelView, userID string, currentSessionId string, collapsedThreadsSupported bool) (map[string]int64, *model.AppError)
ViewChannel(c request.CTX, view *model.ChannelView, userID string, currentSessionId string, collapsedThreadsSupported bool) (map[string]int64, *model.AppError)
WriteFile(fr io.Reader, path string) (int64, *model.AppError)
}

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

@@ -4,12 +4,12 @@
package app
import (
"context"
"database/sql"
"errors"
"net/http"
"strings"
"github.com/mattermost/mattermost-server/v6/app/request"
"github.com/mattermost/mattermost-server/v6/model"
"github.com/mattermost/mattermost-server/v6/shared/mlog"
)
@@ -58,7 +58,7 @@ func (a *App) SessionHasPermissionToTeam(session model.Session, teamID string, p
}
// SessionHasPermissionToTeams returns true only if user has access to all teams.
func (a *App) SessionHasPermissionToTeams(session model.Session, teamIDs []string, permission *model.Permission) bool {
func (a *App) SessionHasPermissionToTeams(c request.CTX, session model.Session, teamIDs []string, permission *model.Permission) bool {
for _, teamID := range teamIDs {
if teamID == "" {
return false
@@ -91,7 +91,7 @@ func (a *App) SessionHasPermissionToTeams(session model.Session, teamIDs []strin
return a.RolesGrantPermission(session.GetUserRoles(), permission.Id)
}
func (a *App) SessionHasPermissionToChannel(session model.Session, channelID string, permission *model.Permission) bool {
func (a *App) SessionHasPermissionToChannel(c request.CTX, session model.Session, channelID string, permission *model.Permission) bool {
if channelID == "" {
return false
}
@@ -108,7 +108,7 @@ func (a *App) SessionHasPermissionToChannel(session model.Session, channelID str
}
}
channel, appErr := a.GetChannel(channelID)
channel, appErr := a.GetChannel(c, channelID)
if appErr != nil && appErr.StatusCode == http.StatusNotFound {
return false
}
@@ -125,7 +125,7 @@ func (a *App) SessionHasPermissionToChannel(session model.Session, channelID str
}
// SessionHasPermissionToChannels returns true only if user has access to all channels.
func (a *App) SessionHasPermissionToChannels(session model.Session, channelIDs []string, permission *model.Permission) bool {
func (a *App) SessionHasPermissionToChannels(c request.CTX, session model.Session, channelIDs []string, permission *model.Permission) bool {
for _, channelID := range channelIDs {
if channelID == "" {
return false
@@ -158,7 +158,7 @@ func (a *App) SessionHasPermissionToChannels(session model.Session, channelIDs [
return true
}
channels, appErr := a.GetChannels(channelIDs)
channels, appErr := a.GetChannels(c, channelIDs)
if appErr != nil && appErr.StatusCode == http.StatusNotFound {
return false
}
@@ -177,7 +177,7 @@ func (a *App) SessionHasPermissionToChannels(session model.Session, channelIDs [
}
if appErr == nil && len(teamIDs) > 0 {
return a.SessionHasPermissionToTeams(session, teamIDs, permission)
return a.SessionHasPermissionToTeams(c, session, teamIDs, permission)
}
return a.SessionHasPermissionTo(session, permission)
@@ -219,11 +219,11 @@ func (a *App) SessionHasPermissionToChannelByPost(session model.Session, postID
return a.SessionHasPermissionTo(session, permission)
}
func (a *App) SessionHasPermissionToCategory(session model.Session, userID, teamID, categoryId string) bool {
func (a *App) SessionHasPermissionToCategory(c request.CTX, session model.Session, userID, teamID, categoryId string) bool {
if a.SessionHasPermissionTo(session, model.PermissionEditOtherUsers) {
return true
}
category, err := a.GetSidebarCategory(categoryId)
category, err := a.GetSidebarCategory(c, categoryId)
return err == nil && category != nil && category.UserId == session.UserId && category.UserId == userID && category.TeamId == teamID
}
@@ -285,12 +285,12 @@ func (a *App) HasPermissionToTeam(askingUserId string, teamID string, permission
return a.HasPermissionTo(askingUserId, permission)
}
func (a *App) HasPermissionToChannel(askingUserId string, channelID string, permission *model.Permission) bool {
func (a *App) HasPermissionToChannel(c request.CTX, askingUserId string, channelID string, permission *model.Permission) bool {
if channelID == "" || askingUserId == "" {
return false
}
channelMember, err := a.GetChannelMember(context.Background(), channelID, askingUserId)
channelMember, err := a.GetChannelMember(c, channelID, askingUserId)
if err == nil {
roles := channelMember.GetRoles()
if a.RolesGrantPermission(roles, permission.Id) {
@@ -299,7 +299,7 @@ func (a *App) HasPermissionToChannel(askingUserId string, channelID string, perm
}
var channel *model.Channel
channel, err = a.GetChannel(channelID)
channel, err = a.GetChannel(c, channelID)
if err == nil {
return a.HasPermissionToTeam(askingUserId, channel.TeamId, permission)
}
@@ -393,6 +393,6 @@ func (a *App) SessionHasPermissionToManageBot(session model.Session, botUserId s
return nil
}
func (a *App) HasPermissionToReadChannel(userID string, channel *model.Channel) bool {
return a.HasPermissionToChannel(userID, channel.Id, model.PermissionReadChannel) || (channel.Type == model.ChannelTypeOpen && a.HasPermissionToTeam(userID, channel.TeamId, model.PermissionReadPublicChannel))
func (a *App) HasPermissionToReadChannel(c request.CTX, userID string, channel *model.Channel) bool {
return a.HasPermissionToChannel(c, userID, channel.Id, model.PermissionReadChannel) || (channel.Type == model.ChannelTypeOpen && a.HasPermissionToTeam(userID, channel.TeamId, model.PermissionReadPublicChannel))
}

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

@@ -78,7 +78,7 @@ func TestSessionHasPermissionToChannel(t *testing.T) {
}
t.Run("basic user can access basic channel", func(t *testing.T) {
assert.True(t, th.App.SessionHasPermissionToChannel(session, th.BasicChannel.Id, model.PermissionAddReaction))
assert.True(t, th.App.SessionHasPermissionToChannel(th.Context, session, th.BasicChannel.Id, model.PermissionAddReaction))
})
t.Run("does not panic if fetching channel causes an error", func(t *testing.T) {
@@ -103,7 +103,7 @@ func TestSessionHasPermissionToChannel(t *testing.T) {
// If there's an error returned from the GetChannel call the code should continue to cascade and since there
// are no session level permissions in this test case, the permission should be denied.
assert.False(t, th.App.SessionHasPermissionToChannel(session, th.BasicUser.Id, model.PermissionAddReaction))
assert.False(t, th.App.SessionHasPermissionToChannel(th.Context, session, th.BasicUser.Id, model.PermissionAddReaction))
})
}
@@ -113,16 +113,16 @@ func TestHasPermissionToCategory(t *testing.T) {
session, err := th.App.CreateSession(&model.Session{UserId: th.BasicUser.Id, Props: model.StringMap{}})
require.Nil(t, err)
categories, err := th.App.GetSidebarCategoriesForTeamForUser(th.BasicUser.Id, th.BasicTeam.Id)
categories, err := th.App.GetSidebarCategoriesForTeamForUser(th.Context, th.BasicUser.Id, th.BasicTeam.Id)
require.Nil(t, err)
_, err = th.App.GetSession(session.Token)
require.Nil(t, err)
require.True(t, th.App.SessionHasPermissionToCategory(*session, th.BasicUser.Id, th.BasicTeam.Id, categories.Order[0]))
require.True(t, th.App.SessionHasPermissionToCategory(th.Context, *session, th.BasicUser.Id, th.BasicTeam.Id, categories.Order[0]))
categories2, err := th.App.GetSidebarCategoriesForTeamForUser(th.BasicUser2.Id, th.BasicTeam.Id)
categories2, err := th.App.GetSidebarCategoriesForTeamForUser(th.Context, th.BasicUser2.Id, th.BasicTeam.Id)
require.Nil(t, err)
require.False(t, th.App.SessionHasPermissionToCategory(*session, th.BasicUser.Id, th.BasicTeam.Id, categories2.Order[0]))
require.False(t, th.App.SessionHasPermissionToCategory(th.Context, *session, th.BasicUser.Id, th.BasicTeam.Id, categories2.Order[0]))
}
func TestSessionHasPermissionToGroup(t *testing.T) {

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

@@ -21,7 +21,7 @@ func (a *App) checkIfRespondedToday(createdAt int64, channelId, userId string) (
)
}
func (a *App) SendAutoResponseIfNecessary(c *request.Context, channel *model.Channel, sender *model.User, post *model.Post) (bool, *model.AppError) {
func (a *App) SendAutoResponseIfNecessary(c request.CTX, channel *model.Channel, sender *model.User, post *model.Post) (bool, *model.AppError) {
if channel.Type != model.ChannelTypeDirect {
return false, nil
}
@@ -52,7 +52,7 @@ func (a *App) SendAutoResponseIfNecessary(c *request.Context, channel *model.Cha
return a.SendAutoResponse(c, channel, receiver, post)
}
func (a *App) SendAutoResponse(c *request.Context, channel *model.Channel, receiver *model.User, post *model.Post) (bool, *model.AppError) {
func (a *App) SendAutoResponse(c request.CTX, channel *model.Channel, receiver *model.User, post *model.Post) (bool, *model.AppError) {
if receiver == nil || receiver.NotifyProps == nil {
return false, nil
}

Разница между файлами не показана из-за своего большого размера Загрузить разницу

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

@@ -8,6 +8,7 @@ import (
"errors"
"net/http"
"github.com/mattermost/mattermost-server/v6/app/request"
"github.com/mattermost/mattermost-server/v6/model"
"github.com/mattermost/mattermost-server/v6/shared/mlog"
"github.com/mattermost/mattermost-server/v6/store"
@@ -22,7 +23,7 @@ func (a *App) createInitialSidebarCategories(userID string, opts *store.SidebarC
return categories, nil
}
func (a *App) GetSidebarCategoriesForTeamForUser(userID, teamID string) (*model.OrderedSidebarCategories, *model.AppError) {
func (a *App) GetSidebarCategoriesForTeamForUser(c request.CTX, userID, teamID string) (*model.OrderedSidebarCategories, *model.AppError) {
var appErr *model.AppError
categories, err := a.Srv().Store.Channel().GetSidebarCategoriesForTeamForUser(userID, teamID)
if err == nil && len(categories.Categories) == 0 {
@@ -49,7 +50,7 @@ func (a *App) GetSidebarCategoriesForTeamForUser(userID, teamID string) (*model.
return categories, nil
}
func (a *App) GetSidebarCategories(userID string, opts *store.SidebarCategorySearchOpts) (*model.OrderedSidebarCategories, *model.AppError) {
func (a *App) GetSidebarCategories(c request.CTX, userID string, opts *store.SidebarCategorySearchOpts) (*model.OrderedSidebarCategories, *model.AppError) {
var appErr *model.AppError
categories, err := a.Srv().Store.Channel().GetSidebarCategories(userID, opts)
if err == nil && len(categories.Categories) == 0 {
@@ -73,7 +74,7 @@ func (a *App) GetSidebarCategories(userID string, opts *store.SidebarCategorySea
return categories, nil
}
func (a *App) GetSidebarCategoryOrder(userID, teamID string) ([]string, *model.AppError) {
func (a *App) GetSidebarCategoryOrder(c request.CTX, userID, teamID string) ([]string, *model.AppError) {
categories, err := a.Srv().Store.Channel().GetSidebarCategoryOrder(userID, teamID)
if err != nil {
var nfErr *store.ErrNotFound
@@ -88,7 +89,7 @@ func (a *App) GetSidebarCategoryOrder(userID, teamID string) ([]string, *model.A
return categories, nil
}
func (a *App) GetSidebarCategory(categoryId string) (*model.SidebarCategoryWithChannels, *model.AppError) {
func (a *App) GetSidebarCategory(c request.CTX, categoryId string) (*model.SidebarCategoryWithChannels, *model.AppError) {
category, err := a.Srv().Store.Channel().GetSidebarCategory(categoryId)
if err != nil {
var nfErr *store.ErrNotFound
@@ -103,7 +104,7 @@ func (a *App) GetSidebarCategory(categoryId string) (*model.SidebarCategoryWithC
return category, nil
}
func (a *App) CreateSidebarCategory(userID, teamID string, newCategory *model.SidebarCategoryWithChannels) (*model.SidebarCategoryWithChannels, *model.AppError) {
func (a *App) CreateSidebarCategory(c request.CTX, userID, teamID string, newCategory *model.SidebarCategoryWithChannels) (*model.SidebarCategoryWithChannels, *model.AppError) {
category, err := a.Srv().Store.Channel().CreateSidebarCategory(userID, teamID, newCategory)
if err != nil {
var nfErr *store.ErrNotFound
@@ -120,7 +121,7 @@ func (a *App) CreateSidebarCategory(userID, teamID string, newCategory *model.Si
return category, nil
}
func (a *App) UpdateSidebarCategoryOrder(userID, teamID string, categoryOrder []string) *model.AppError {
func (a *App) UpdateSidebarCategoryOrder(c request.CTX, userID, teamID string, categoryOrder []string) *model.AppError {
err := a.Srv().Store.Channel().UpdateSidebarCategoryOrder(userID, teamID, categoryOrder)
if err != nil {
var nfErr *store.ErrNotFound
@@ -140,7 +141,7 @@ func (a *App) UpdateSidebarCategoryOrder(userID, teamID string, categoryOrder []
return nil
}
func (a *App) UpdateSidebarCategories(userID, teamID string, categories []*model.SidebarCategoryWithChannels) ([]*model.SidebarCategoryWithChannels, *model.AppError) {
func (a *App) UpdateSidebarCategories(c request.CTX, userID, teamID string, categories []*model.SidebarCategoryWithChannels) ([]*model.SidebarCategoryWithChannels, *model.AppError) {
updatedCategories, originalCategories, err := a.Srv().Store.Channel().UpdateSidebarCategories(userID, teamID, categories)
if err != nil {
return nil, model.NewAppError("UpdateSidebarCategories", "app.channel.sidebar_categories.app_error", nil, err.Error(), http.StatusInternalServerError)
@@ -150,19 +151,19 @@ func (a *App) UpdateSidebarCategories(userID, teamID string, categories []*model
updatedCategoriesJSON, jsonErr := json.Marshal(updatedCategories)
if jsonErr != nil {
mlog.Warn("Failed to encode original categories to JSON", mlog.Err(jsonErr))
c.Logger().Warn("Failed to encode original categories to JSON", mlog.Err(jsonErr))
}
message.Add("updatedCategories", string(updatedCategoriesJSON))
a.Publish(message)
a.muteChannelsForUpdatedCategories(userID, updatedCategories, originalCategories)
a.muteChannelsForUpdatedCategories(c, userID, updatedCategories, originalCategories)
return updatedCategories, nil
}
func (a *App) muteChannelsForUpdatedCategories(userID string, updatedCategories []*model.SidebarCategoryWithChannels, originalCategories []*model.SidebarCategoryWithChannels) {
func (a *App) muteChannelsForUpdatedCategories(c request.CTX, userID string, updatedCategories []*model.SidebarCategoryWithChannels, originalCategories []*model.SidebarCategoryWithChannels) {
var channelsToMute []string
var channelsToUnmute []string
@@ -210,9 +211,9 @@ func (a *App) muteChannelsForUpdatedCategories(userID string, updatedCategories
}
if len(channelsToMute) > 0 {
_, err := a.setChannelsMuted(channelsToMute, userID, true)
_, err := a.setChannelsMuted(c, channelsToMute, userID, true)
if err != nil {
mlog.Error(
c.Logger().Error(
"Failed to mute channels to match category",
mlog.String("user_id", userID),
mlog.Err(err),
@@ -221,9 +222,9 @@ func (a *App) muteChannelsForUpdatedCategories(userID string, updatedCategories
}
if len(channelsToUnmute) > 0 {
_, err := a.setChannelsMuted(channelsToUnmute, userID, false)
_, err := a.setChannelsMuted(c, channelsToUnmute, userID, false)
if err != nil {
mlog.Error(
c.Logger().Error(
"Failed to unmute channels to match category",
mlog.String("user_id", userID),
mlog.Err(err),
@@ -267,7 +268,7 @@ func diffChannelsBetweenCategories(updatedCategories []*model.SidebarCategoryWit
return channelsDiff
}
func (a *App) DeleteSidebarCategory(userID, teamID, categoryId string) *model.AppError {
func (a *App) DeleteSidebarCategory(c request.CTX, userID, teamID, categoryId string) *model.AppError {
err := a.Srv().Store.Channel().DeleteSidebarCategory(categoryId)
if err != nil {
var invErr *store.ErrInvalidInput

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

@@ -4,7 +4,6 @@
package app
import (
"context"
"testing"
"github.com/stretchr/testify/assert"
@@ -17,8 +16,8 @@ func TestSidebarCategory(t *testing.T) {
th := Setup(t).InitBasic()
defer th.TearDown()
basicChannel2 := th.CreateChannel(th.BasicTeam)
defer th.App.PermanentDeleteChannel(basicChannel2)
basicChannel2 := th.CreateChannel(th.Context, th.BasicTeam)
defer th.App.PermanentDeleteChannel(th.Context, basicChannel2)
user := th.CreateUser()
defer th.App.Srv().Store.User().PermanentDelete(user.Id)
th.LinkUserToTeam(user, th.BasicTeam)
@@ -32,10 +31,10 @@ func TestSidebarCategory(t *testing.T) {
},
Channels: []string{th.BasicChannel.Id, basicChannel2.Id, basicChannel2.Id},
}
_, err := th.App.CreateSidebarCategory(user.Id, th.BasicTeam.Id, &catData)
_, err := th.App.CreateSidebarCategory(th.Context, user.Id, th.BasicTeam.Id, &catData)
require.NotNil(t, err, "Should return error due to duplicate IDs")
catData.Channels = []string{th.BasicChannel.Id, basicChannel2.Id}
cat, err := th.App.CreateSidebarCategory(user.Id, th.BasicTeam.Id, &catData)
cat, err := th.App.CreateSidebarCategory(th.Context, user.Id, th.BasicTeam.Id, &catData)
require.Nil(t, err, "Expected no error")
require.NotNil(t, cat, "Expected category object, got nil")
createdCategory = cat
@@ -44,7 +43,7 @@ func TestSidebarCategory(t *testing.T) {
t.Run("UpdateSidebarCategories", func(t *testing.T) {
require.NotNil(t, createdCategory)
createdCategory.Channels = []string{th.BasicChannel.Id}
updatedCat, err := th.App.UpdateSidebarCategories(user.Id, th.BasicTeam.Id, []*model.SidebarCategoryWithChannels{createdCategory})
updatedCat, err := th.App.UpdateSidebarCategories(th.Context, user.Id, th.BasicTeam.Id, []*model.SidebarCategoryWithChannels{createdCategory})
require.Nil(t, err, "Expected no error")
require.NotNil(t, updatedCat, "Expected category object, got nil")
require.Len(t, updatedCat, 1)
@@ -53,14 +52,14 @@ func TestSidebarCategory(t *testing.T) {
})
t.Run("UpdateSidebarCategoryOrder", func(t *testing.T) {
err := th.App.UpdateSidebarCategoryOrder(user.Id, th.BasicTeam.Id, []string{th.BasicChannel.Id, basicChannel2.Id})
err := th.App.UpdateSidebarCategoryOrder(th.Context, user.Id, th.BasicTeam.Id, []string{th.BasicChannel.Id, basicChannel2.Id})
require.NotNil(t, err, "Should return error due to invalid order")
actualOrder, err := th.App.GetSidebarCategoryOrder(user.Id, th.BasicTeam.Id)
actualOrder, err := th.App.GetSidebarCategoryOrder(th.Context, user.Id, th.BasicTeam.Id)
require.Nil(t, err, "Should fetch order successfully")
actualOrder[2], actualOrder[3] = actualOrder[3], actualOrder[2]
err = th.App.UpdateSidebarCategoryOrder(user.Id, th.BasicTeam.Id, actualOrder)
err = th.App.UpdateSidebarCategoryOrder(th.Context, user.Id, th.BasicTeam.Id, actualOrder)
require.Nil(t, err, "Should update order successfully")
// We create a copy of actualOrder to prevent racy read
@@ -68,12 +67,12 @@ func TestSidebarCategory(t *testing.T) {
newOrder := make([]string, len(actualOrder))
copy(newOrder, actualOrder)
newOrder[2] = "asd"
err = th.App.UpdateSidebarCategoryOrder(user.Id, th.BasicTeam.Id, newOrder)
err = th.App.UpdateSidebarCategoryOrder(th.Context, user.Id, th.BasicTeam.Id, newOrder)
require.NotNil(t, err, "Should return error due to invalid id")
})
t.Run("GetSidebarCategoryOrder", func(t *testing.T) {
catOrder, err := th.App.GetSidebarCategoryOrder(user.Id, th.BasicTeam.Id)
catOrder, err := th.App.GetSidebarCategoryOrder(th.Context, user.Id, th.BasicTeam.Id)
require.Nil(t, err, "Expected no error")
require.Len(t, catOrder, 4)
require.Equal(t, catOrder[1], createdCategory.Id, "the newly created category should be after favorites")
@@ -85,7 +84,7 @@ func TestGetSidebarCategories(t *testing.T) {
th := Setup(t).InitBasic()
defer th.TearDown()
_, err := th.App.CreateSidebarCategory(th.BasicUser.Id, th.BasicTeam.Id, &model.SidebarCategoryWithChannels{
_, err := th.App.CreateSidebarCategory(th.Context, th.BasicUser.Id, th.BasicTeam.Id, &model.SidebarCategoryWithChannels{
SidebarCategory: model.SidebarCategory{
UserId: th.BasicUser.Id,
TeamId: th.BasicTeam.Id,
@@ -94,7 +93,7 @@ func TestGetSidebarCategories(t *testing.T) {
})
require.Nil(t, err)
categories, err := th.App.GetSidebarCategoriesForTeamForUser(th.BasicUser.Id, th.BasicTeam.Id)
categories, err := th.App.GetSidebarCategoriesForTeamForUser(th.Context, th.BasicUser.Id, th.BasicTeam.Id)
assert.Nil(t, err)
assert.Len(t, categories.Categories, 4)
})
@@ -113,7 +112,7 @@ func TestGetSidebarCategories(t *testing.T) {
}, 100)
require.NoError(t, err)
categories, appErr := th.App.GetSidebarCategoriesForTeamForUser(th.BasicUser.Id, team.Id)
categories, appErr := th.App.GetSidebarCategoriesForTeamForUser(th.Context, th.BasicUser.Id, team.Id)
assert.Nil(t, appErr)
assert.Len(t, categories.Categories, 3)
})
@@ -131,7 +130,7 @@ func TestGetSidebarCategories(t *testing.T) {
require.NoError(t, err)
}()
categories, appErr := th.App.GetSidebarCategoriesForTeamForUser(th.BasicUser.Id, th.BasicTeam.Id)
categories, appErr := th.App.GetSidebarCategoriesForTeamForUser(th.Context, th.BasicUser.Id, th.BasicTeam.Id)
assert.Nil(t, categories)
assert.NotNil(t, appErr)
assert.Equal(t, "app.channel.sidebar_categories.app_error", appErr.Id)
@@ -143,20 +142,20 @@ func TestUpdateSidebarCategories(t *testing.T) {
th := Setup(t).InitBasic()
defer th.TearDown()
categories, err := th.App.GetSidebarCategoriesForTeamForUser(th.BasicUser.Id, th.BasicTeam.Id)
categories, err := th.App.GetSidebarCategoriesForTeamForUser(th.Context, th.BasicUser.Id, th.BasicTeam.Id)
require.Nil(t, err)
channelsCategory := categories.Categories[1]
// Create some channels to be part of the channels category
channel1 := th.CreateChannel(th.BasicTeam)
channel1 := th.CreateChannel(th.Context, th.BasicTeam)
th.AddUserToChannel(th.BasicUser, channel1)
channel2 := th.CreateChannel(th.BasicTeam)
channel2 := th.CreateChannel(th.Context, th.BasicTeam)
th.AddUserToChannel(th.BasicUser, channel2)
// Mute the category
updated, err := th.App.UpdateSidebarCategories(th.BasicUser.Id, th.BasicTeam.Id, []*model.SidebarCategoryWithChannels{
updated, err := th.App.UpdateSidebarCategories(th.Context, th.BasicUser.Id, th.BasicTeam.Id, []*model.SidebarCategoryWithChannels{
{
SidebarCategory: model.SidebarCategory{
Id: channelsCategory.Id,
@@ -169,15 +168,15 @@ func TestUpdateSidebarCategories(t *testing.T) {
assert.True(t, updated[0].Muted)
// Confirm that the channels are now muted
member1, err := th.App.GetChannelMember(context.Background(), channel1.Id, th.BasicUser.Id)
member1, err := th.App.GetChannelMember(th.Context, channel1.Id, th.BasicUser.Id)
require.Nil(t, err)
assert.True(t, member1.IsChannelMuted())
member2, err := th.App.GetChannelMember(context.Background(), channel2.Id, th.BasicUser.Id)
member2, err := th.App.GetChannelMember(th.Context, channel2.Id, th.BasicUser.Id)
require.Nil(t, err)
assert.True(t, member2.IsChannelMuted())
// Unmute the category
updated, err = th.App.UpdateSidebarCategories(th.BasicUser.Id, th.BasicTeam.Id, []*model.SidebarCategoryWithChannels{
updated, err = th.App.UpdateSidebarCategories(th.Context, th.BasicUser.Id, th.BasicTeam.Id, []*model.SidebarCategoryWithChannels{
{
SidebarCategory: model.SidebarCategory{
Id: channelsCategory.Id,
@@ -190,10 +189,10 @@ func TestUpdateSidebarCategories(t *testing.T) {
assert.False(t, updated[0].Muted)
// Confirm that the channels are now unmuted
member1, err = th.App.GetChannelMember(context.Background(), channel1.Id, th.BasicUser.Id)
member1, err = th.App.GetChannelMember(th.Context, channel1.Id, th.BasicUser.Id)
require.Nil(t, err)
assert.False(t, member1.IsChannelMuted())
member2, err = th.App.GetChannelMember(context.Background(), channel2.Id, th.BasicUser.Id)
member2, err = th.App.GetChannelMember(th.Context, channel2.Id, th.BasicUser.Id)
require.Nil(t, err)
assert.False(t, member2.IsChannelMuted())
})
@@ -203,14 +202,14 @@ func TestUpdateSidebarCategories(t *testing.T) {
defer th.TearDown()
// Create some channels
channel1 := th.CreateChannel(th.BasicTeam)
channel1 := th.CreateChannel(th.Context, th.BasicTeam)
th.AddUserToChannel(th.BasicUser, channel1)
channel2 := th.CreateChannel(th.BasicTeam)
channel2 := th.CreateChannel(th.Context, th.BasicTeam)
th.AddUserToChannel(th.BasicUser, channel2)
// And some categories
mutedCategory, err := th.App.CreateSidebarCategory(th.BasicUser.Id, th.BasicTeam.Id, &model.SidebarCategoryWithChannels{
mutedCategory, err := th.App.CreateSidebarCategory(th.Context, th.BasicUser.Id, th.BasicTeam.Id, &model.SidebarCategoryWithChannels{
SidebarCategory: model.SidebarCategory{
DisplayName: "muted",
Muted: true,
@@ -219,7 +218,7 @@ func TestUpdateSidebarCategories(t *testing.T) {
require.Nil(t, err)
require.True(t, mutedCategory.Muted)
unmutedCategory, err := th.App.CreateSidebarCategory(th.BasicUser.Id, th.BasicTeam.Id, &model.SidebarCategoryWithChannels{
unmutedCategory, err := th.App.CreateSidebarCategory(th.Context, th.BasicUser.Id, th.BasicTeam.Id, &model.SidebarCategoryWithChannels{
SidebarCategory: model.SidebarCategory{
DisplayName: "unmuted",
Muted: false,
@@ -230,7 +229,7 @@ func TestUpdateSidebarCategories(t *testing.T) {
require.False(t, unmutedCategory.Muted)
// Move the channels
_, err = th.App.UpdateSidebarCategories(th.BasicUser.Id, th.BasicTeam.Id, []*model.SidebarCategoryWithChannels{
_, err = th.App.UpdateSidebarCategories(th.Context, th.BasicUser.Id, th.BasicTeam.Id, []*model.SidebarCategoryWithChannels{
{
SidebarCategory: model.SidebarCategory{
Id: mutedCategory.Id,
@@ -251,15 +250,15 @@ func TestUpdateSidebarCategories(t *testing.T) {
require.Nil(t, err)
// Confirm that the channels are now muted
member1, err := th.App.GetChannelMember(context.Background(), channel1.Id, th.BasicUser.Id)
member1, err := th.App.GetChannelMember(th.Context, channel1.Id, th.BasicUser.Id)
require.Nil(t, err)
assert.True(t, member1.IsChannelMuted())
member2, err := th.App.GetChannelMember(context.Background(), channel2.Id, th.BasicUser.Id)
member2, err := th.App.GetChannelMember(th.Context, channel2.Id, th.BasicUser.Id)
require.Nil(t, err)
assert.True(t, member2.IsChannelMuted())
// Move the channels back
_, err = th.App.UpdateSidebarCategories(th.BasicUser.Id, th.BasicTeam.Id, []*model.SidebarCategoryWithChannels{
_, err = th.App.UpdateSidebarCategories(th.Context, th.BasicUser.Id, th.BasicTeam.Id, []*model.SidebarCategoryWithChannels{
{
SidebarCategory: model.SidebarCategory{
Id: mutedCategory.Id,
@@ -280,10 +279,10 @@ func TestUpdateSidebarCategories(t *testing.T) {
require.Nil(t, err)
// Confirm that the channels are now unmuted
member1, err = th.App.GetChannelMember(context.Background(), channel1.Id, th.BasicUser.Id)
member1, err = th.App.GetChannelMember(th.Context, channel1.Id, th.BasicUser.Id)
require.Nil(t, err)
assert.False(t, member1.IsChannelMuted())
member2, err = th.App.GetChannelMember(context.Background(), channel2.Id, th.BasicUser.Id)
member2, err = th.App.GetChannelMember(th.Context, channel2.Id, th.BasicUser.Id)
require.Nil(t, err)
assert.False(t, member2.IsChannelMuted())
})
@@ -293,14 +292,14 @@ func TestUpdateSidebarCategories(t *testing.T) {
defer th.TearDown()
// Create some channels
channel1 := th.CreateChannel(th.BasicTeam)
channel1 := th.CreateChannel(th.Context, th.BasicTeam)
th.AddUserToChannel(th.BasicUser, channel1)
channel2 := th.CreateChannel(th.BasicTeam)
channel2 := th.CreateChannel(th.Context, th.BasicTeam)
th.AddUserToChannel(th.BasicUser, channel2)
// And some categories
category1, err := th.App.CreateSidebarCategory(th.BasicUser.Id, th.BasicTeam.Id, &model.SidebarCategoryWithChannels{
category1, err := th.App.CreateSidebarCategory(th.Context, th.BasicUser.Id, th.BasicTeam.Id, &model.SidebarCategoryWithChannels{
SidebarCategory: model.SidebarCategory{
DisplayName: "category1",
Muted: true,
@@ -309,7 +308,7 @@ func TestUpdateSidebarCategories(t *testing.T) {
require.Nil(t, err)
require.True(t, category1.Muted)
category2, err := th.App.CreateSidebarCategory(th.BasicUser.Id, th.BasicTeam.Id, &model.SidebarCategoryWithChannels{
category2, err := th.App.CreateSidebarCategory(th.Context, th.BasicUser.Id, th.BasicTeam.Id, &model.SidebarCategoryWithChannels{
SidebarCategory: model.SidebarCategory{
DisplayName: "category2",
Muted: true,
@@ -320,7 +319,7 @@ func TestUpdateSidebarCategories(t *testing.T) {
require.True(t, category2.Muted)
// Move the unmuted channels
_, err = th.App.UpdateSidebarCategories(th.BasicUser.Id, th.BasicTeam.Id, []*model.SidebarCategoryWithChannels{
_, err = th.App.UpdateSidebarCategories(th.Context, th.BasicUser.Id, th.BasicTeam.Id, []*model.SidebarCategoryWithChannels{
{
SidebarCategory: model.SidebarCategory{
Id: category1.Id,
@@ -341,21 +340,21 @@ func TestUpdateSidebarCategories(t *testing.T) {
require.Nil(t, err)
// Confirm that the channels are still unmuted
member1, err := th.App.GetChannelMember(context.Background(), channel1.Id, th.BasicUser.Id)
member1, err := th.App.GetChannelMember(th.Context, channel1.Id, th.BasicUser.Id)
require.Nil(t, err)
assert.False(t, member1.IsChannelMuted())
member2, err := th.App.GetChannelMember(context.Background(), channel2.Id, th.BasicUser.Id)
member2, err := th.App.GetChannelMember(th.Context, channel2.Id, th.BasicUser.Id)
require.Nil(t, err)
assert.False(t, member2.IsChannelMuted())
// Mute the channels manually
_, err = th.App.ToggleMuteChannel(channel1.Id, th.BasicUser.Id)
_, err = th.App.ToggleMuteChannel(th.Context, channel1.Id, th.BasicUser.Id)
require.Nil(t, err)
_, err = th.App.ToggleMuteChannel(channel2.Id, th.BasicUser.Id)
_, err = th.App.ToggleMuteChannel(th.Context, channel2.Id, th.BasicUser.Id)
require.Nil(t, err)
// Move the muted channels back
_, err = th.App.UpdateSidebarCategories(th.BasicUser.Id, th.BasicTeam.Id, []*model.SidebarCategoryWithChannels{
_, err = th.App.UpdateSidebarCategories(th.Context, th.BasicUser.Id, th.BasicTeam.Id, []*model.SidebarCategoryWithChannels{
{
SidebarCategory: model.SidebarCategory{
Id: category1.Id,
@@ -376,10 +375,10 @@ func TestUpdateSidebarCategories(t *testing.T) {
require.Nil(t, err)
// Confirm that the channels are still muted
member1, err = th.App.GetChannelMember(context.Background(), channel1.Id, th.BasicUser.Id)
member1, err = th.App.GetChannelMember(th.Context, channel1.Id, th.BasicUser.Id)
require.Nil(t, err)
assert.True(t, member1.IsChannelMuted())
member2, err = th.App.GetChannelMember(context.Background(), channel2.Id, th.BasicUser.Id)
member2, err = th.App.GetChannelMember(th.Context, channel2.Id, th.BasicUser.Id)
require.Nil(t, err)
assert.True(t, member2.IsChannelMuted())
})
@@ -389,14 +388,14 @@ func TestUpdateSidebarCategories(t *testing.T) {
defer th.TearDown()
// Create some channels
channel1 := th.CreateChannel(th.BasicTeam)
channel1 := th.CreateChannel(th.Context, th.BasicTeam)
th.AddUserToChannel(th.BasicUser, channel1)
channel2 := th.CreateChannel(th.BasicTeam)
channel2 := th.CreateChannel(th.Context, th.BasicTeam)
th.AddUserToChannel(th.BasicUser, channel2)
// And some categories
category1, err := th.App.CreateSidebarCategory(th.BasicUser.Id, th.BasicTeam.Id, &model.SidebarCategoryWithChannels{
category1, err := th.App.CreateSidebarCategory(th.Context, th.BasicUser.Id, th.BasicTeam.Id, &model.SidebarCategoryWithChannels{
SidebarCategory: model.SidebarCategory{
DisplayName: "category1",
Muted: false,
@@ -405,7 +404,7 @@ func TestUpdateSidebarCategories(t *testing.T) {
require.Nil(t, err)
require.False(t, category1.Muted)
category2, err := th.App.CreateSidebarCategory(th.BasicUser.Id, th.BasicTeam.Id, &model.SidebarCategoryWithChannels{
category2, err := th.App.CreateSidebarCategory(th.Context, th.BasicUser.Id, th.BasicTeam.Id, &model.SidebarCategoryWithChannels{
SidebarCategory: model.SidebarCategory{
DisplayName: "category2",
Muted: false,
@@ -416,7 +415,7 @@ func TestUpdateSidebarCategories(t *testing.T) {
require.False(t, category2.Muted)
// Move the unmuted channels
_, err = th.App.UpdateSidebarCategories(th.BasicUser.Id, th.BasicTeam.Id, []*model.SidebarCategoryWithChannels{
_, err = th.App.UpdateSidebarCategories(th.Context, th.BasicUser.Id, th.BasicTeam.Id, []*model.SidebarCategoryWithChannels{
{
SidebarCategory: model.SidebarCategory{
Id: category1.Id,
@@ -437,21 +436,21 @@ func TestUpdateSidebarCategories(t *testing.T) {
require.Nil(t, err)
// Confirm that the channels are still unmuted
member1, err := th.App.GetChannelMember(context.Background(), channel1.Id, th.BasicUser.Id)
member1, err := th.App.GetChannelMember(th.Context, channel1.Id, th.BasicUser.Id)
require.Nil(t, err)
assert.False(t, member1.IsChannelMuted())
member2, err := th.App.GetChannelMember(context.Background(), channel2.Id, th.BasicUser.Id)
member2, err := th.App.GetChannelMember(th.Context, channel2.Id, th.BasicUser.Id)
require.Nil(t, err)
assert.False(t, member2.IsChannelMuted())
// Mute the channels manually
_, err = th.App.ToggleMuteChannel(channel1.Id, th.BasicUser.Id)
_, err = th.App.ToggleMuteChannel(th.Context, channel1.Id, th.BasicUser.Id)
require.Nil(t, err)
_, err = th.App.ToggleMuteChannel(channel2.Id, th.BasicUser.Id)
_, err = th.App.ToggleMuteChannel(th.Context, channel2.Id, th.BasicUser.Id)
require.Nil(t, err)
// Move the muted channels back
_, err = th.App.UpdateSidebarCategories(th.BasicUser.Id, th.BasicTeam.Id, []*model.SidebarCategoryWithChannels{
_, err = th.App.UpdateSidebarCategories(th.Context, th.BasicUser.Id, th.BasicTeam.Id, []*model.SidebarCategoryWithChannels{
{
SidebarCategory: model.SidebarCategory{
Id: category1.Id,
@@ -472,10 +471,10 @@ func TestUpdateSidebarCategories(t *testing.T) {
require.Nil(t, err)
// Confirm that the channels are still muted
member1, err = th.App.GetChannelMember(context.Background(), channel1.Id, th.BasicUser.Id)
member1, err = th.App.GetChannelMember(th.Context, channel1.Id, th.BasicUser.Id)
require.Nil(t, err)
assert.True(t, member1.IsChannelMuted())
member2, err = th.App.GetChannelMember(context.Background(), channel2.Id, th.BasicUser.Id)
member2, err = th.App.GetChannelMember(th.Context, channel2.Id, th.BasicUser.Id)
require.Nil(t, err)
assert.True(t, member2.IsChannelMuted())
})

Разница между файлами не показана из-за своего большого размера Загрузить разницу

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

@@ -178,12 +178,12 @@ func NewChannels(s *Server, services map[ServiceKey]any) (*Channels, error) {
if samlInterfaceNew != nil {
ch.Saml = samlInterfaceNew(New(ServerConnector(ch)))
if err := ch.Saml.ConfigureSP(); err != nil {
mlog.Error("An error occurred while configuring SAML Service Provider", mlog.Err(err))
s.Log.Error("An error occurred while configuring SAML Service Provider", mlog.Err(err))
}
ch.AddConfigListener(func(_, _ *model.Config) {
if err := ch.Saml.ConfigureSP(); err != nil {
mlog.Error("An error occurred while configuring SAML Service Provider", mlog.Err(err))
s.Log.Error("An error occurred while configuring SAML Service Provider", mlog.Err(err))
}
})
}
@@ -240,7 +240,7 @@ func NewChannels(s *Server, services map[ServiceKey]any) (*Channels, error) {
func (ch *Channels) Start() error {
// Start plugins
ctx := request.EmptyContext()
ctx := request.EmptyContext(ch.srv.GetLogger())
ch.initPlugins(ctx, *ch.cfgSvc.Config().PluginSettings.Directory, *ch.cfgSvc.Config().PluginSettings.ClientDirectory)
ch.AddConfigListener(func(prevCfg, cfg *model.Config) {
@@ -248,7 +248,7 @@ func (ch *Channels) Start() error {
// to ensure we don't re-init plugins unnecessarily.
diffs, err := config.Diff(prevCfg, cfg)
if err != nil {
mlog.Warn("Error in comparing configs", mlog.Err(err))
ch.srv.Log.Warn("Error in comparing configs", mlog.Err(err))
return
}

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

@@ -75,7 +75,7 @@ func (a *App) CreateCommandPost(c *request.Context, post *model.Post, teamID str
}
if (response.ResponseType == "" || response.ResponseType == model.CommandResponseTypeEphemeral) && (response.Text != "" || response.Attachments != nil) {
a.SendEphemeralPost(post.UserId, post)
a.SendEphemeralPost(c, post.UserId, post)
}
return post, nil
@@ -213,7 +213,7 @@ func (a *App) ExecuteCommand(c *request.Context, args *model.CommandArgs) (*mode
}
// Custom commands can override built ins
cmd, response, appErr = a.tryExecuteCustomCommand(args, trigger, message)
cmd, response, appErr = a.tryExecuteCustomCommand(c, args, trigger, message)
if appErr != nil {
return nil, appErr
} else if cmd != nil && response != nil {
@@ -307,7 +307,7 @@ func (a *App) MentionsToTeamMembers(message, teamID string) model.UserMentionMap
// MentionsToPublicChannels returns all the mentions to public channels,
// linking them to their channels
func (a *App) MentionsToPublicChannels(message, teamID string) model.ChannelMentionMap {
func (a *App) MentionsToPublicChannels(c request.CTX, message, teamID string) model.ChannelMentionMap {
type mentionMapItem struct {
Name string
Id string
@@ -321,7 +321,7 @@ func (a *App) MentionsToPublicChannels(message, teamID string) model.ChannelMent
wg.Add(1)
go func(channelName string) {
defer wg.Done()
channel, err := a.GetChannelByName(channelName, teamID, false)
channel, err := a.GetChannelByName(c, channelName, teamID, false)
if err != nil {
return
}
@@ -363,7 +363,7 @@ func (a *App) tryExecuteBuiltInCommand(c *request.Context, args *model.CommandAr
// tryExecuteCustomCommand attempts to run a custom command based on the given arguments. If no such command can be
// found, returns nil for all arguments.
func (a *App) tryExecuteCustomCommand(args *model.CommandArgs, trigger string, message string) (*model.Command, *model.CommandResponse, *model.AppError) {
func (a *App) tryExecuteCustomCommand(c request.CTX, args *model.CommandArgs, trigger string, message string) (*model.Command, *model.CommandResponse, *model.AppError) {
// Handle custom commands
if !*a.Config().ServiceSettings.EnableCommands {
return nil, nil, model.NewAppError("ExecuteCommand", "api.command.disabled.app_error", nil, "", http.StatusNotImplemented)
@@ -467,7 +467,7 @@ func (a *App) tryExecuteCustomCommand(args *model.CommandArgs, trigger string, m
p[key] = values
}
channelMentionMap := a.MentionsToPublicChannels(message, team.Id)
channelMentionMap := a.MentionsToPublicChannels(c, message, team.Id)
for key, values := range channelMentionMap.ToURLValues() {
p[key] = values
}
@@ -579,7 +579,7 @@ func (a *App) HandleCommandResponsePost(c *request.Context, command *model.Comma
post.SetProps(response.Props)
if response.ChannelId != "" {
_, err := a.GetChannelMember(context.Background(), response.ChannelId, args.UserId)
_, err := a.GetChannelMember(c, response.ChannelId, args.UserId)
if err != nil {
err = model.NewAppError("HandleCommandResponsePost", "api.command.command_post.forbidden.app_error", nil, err.Error(), http.StatusForbidden)
return nil, err

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

@@ -16,7 +16,7 @@ func WithMaster(ctx context.Context) context.Context {
return sqlstore.WithMaster(ctx)
}
func pluginContext(c *request.Context) *plugin.Context {
func pluginContext(c request.CTX) *plugin.Context {
context := &plugin.Context{
RequestId: c.RequestId(),
SessionId: c.Session().Id,

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

@@ -97,7 +97,7 @@ func TestExportUserChannels(t *testing.T) {
err := th.App.Srv().Store.Preference().Save(preferences)
require.NoError(t, err)
th.App.UpdateChannelMemberNotifyProps(notifyProps, channel.Id, user.Id)
th.App.UpdateChannelMemberNotifyProps(th.Context, notifyProps, channel.Id, user.Id)
exportData, appErr := th.App.buildUserChannelMemberships(user.Id, team.Id)
require.Nil(t, appErr)
assert.Equal(t, len(*exportData), 3)
@@ -327,7 +327,7 @@ func TestExportGMChannel(t *testing.T) {
th1.LinkUserToTeam(user2, th1.BasicTeam)
// GM Channel
th1.CreateGroupChannel(user1, user2)
th1.CreateGroupChannel(th1.Context, user1, user2)
var b bytes.Buffer
err := th1.App.BulkExport(&b, "somePath", model.BulkExportOpts{})
@@ -359,7 +359,7 @@ func TestExportGMandDMChannels(t *testing.T) {
th1.LinkUserToTeam(user2, th1.BasicTeam)
// GM Channel
th1.CreateGroupChannel(user1, user2)
th1.CreateGroupChannel(th1.Context, user1, user2)
var b bytes.Buffer
err := th1.App.BulkExport(&b, "somePath", model.BulkExportOpts{})
@@ -407,7 +407,7 @@ func TestExportDMandGMPost(t *testing.T) {
th1.LinkUserToTeam(user2, th1.BasicTeam)
// GM Channel
gmChannel := th1.CreateGroupChannel(user1, user2)
gmChannel := th1.CreateGroupChannel(th1.Context, user1, user2)
gmMembers := []string{th1.BasicUser.Username, user1.Username, user2.Username}
// DM posts
@@ -489,7 +489,7 @@ func TestExportPostWithProps(t *testing.T) {
th1.LinkUserToTeam(user2, th1.BasicTeam)
// GM Channel
gmChannel := th1.CreateGroupChannel(user1, user2)
gmChannel := th1.CreateGroupChannel(th1.Context, user1, user2)
gmMembers := []string{th1.BasicUser.Username, user1.Username, user2.Username}
// DM posts
@@ -709,7 +709,7 @@ func TestExportDeletedTeams(t *testing.T) {
defer th1.TearDown()
team1 := th1.CreateTeam()
channel1 := th1.CreateChannel(team1)
channel1 := th1.CreateChannel(th1.Context, team1)
th1.CreatePost(channel1)
// Delete the team to check that this is handled correctly on import.
@@ -733,9 +733,9 @@ func TestExportDeletedTeams(t *testing.T) {
assert.Equal(t, len(teams1), len(teams2))
assert.ElementsMatch(t, teams1, teams2)
channels1, err := th1.App.GetAllChannels(0, 10, model.ChannelSearchOpts{})
channels1, err := th1.App.GetAllChannels(th1.Context, 0, 10, model.ChannelSearchOpts{})
assert.Nil(t, err)
channels2, err := th2.App.GetAllChannels(0, 10, model.ChannelSearchOpts{})
channels2, err := th2.App.GetAllChannels(th1.Context, 0, 10, model.ChannelSearchOpts{})
assert.Nil(t, err)
assert.Equal(t, len(channels1), len(channels2))
assert.ElementsMatch(t, channels1, channels2)

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

@@ -520,7 +520,7 @@ func (a *App) UploadFiles(c *request.Context, teamID string, channelID string, u
// UploadFile uploads a single file in form of a completely constructed byte array for a channel.
func (a *App) UploadFile(c *request.Context, data []byte, channelID string, filename string) (*model.FileInfo, *model.AppError) {
_, err := a.GetChannel(channelID)
_, err := a.GetChannel(c, channelID)
if err != nil && channelID != "" {
return nil, model.NewAppError("UploadFile", "api.file.upload_file.incorrect_channelId.app_error",
map[string]any{"channelId": channelID}, "", http.StatusBadRequest)

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

@@ -200,7 +200,7 @@ func TestUpsertGroupSyncableTeamGroupConstrained(t *testing.T) {
_, err = th.App.UpsertGroupSyncable(model.NewGroupTeam(group1.Id, team.Id, false))
require.Nil(t, err)
channel := th.CreateChannel(team)
channel := th.CreateChannel(th.Context, team)
_, err = th.App.UpsertGroupSyncable(model.NewGroupChannel(group2.Id, channel.Id, false))
require.NotNil(t, err)

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

@@ -99,12 +99,13 @@ func setupTestHelper(dbStore store.Store, enterprise bool, includeCacheLayer boo
th := &TestHelper{
App: New(ServerConnector(s.Channels())),
Context: &request.Context{},
Context: request.EmptyContext(testLogger),
Server: s,
LogBuffer: buffer,
TestLogger: testLogger,
IncludeCacheLayer: includeCacheLayer,
}
th.Context.SetLogger(testLogger)
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.TeamSettings.MaxUsersPerTeam = 50 })
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.RateLimitSettings.Enable = false })
@@ -245,7 +246,7 @@ func (th *TestHelper) InitBasic() *TestHelper {
th.LinkUserToTeam(th.BasicUser, th.BasicTeam)
th.LinkUserToTeam(th.BasicUser2, th.BasicTeam)
th.BasicChannel = th.CreateChannel(th.BasicTeam)
th.BasicChannel = th.CreateChannel(th.Context, th.BasicTeam)
th.BasicPost = th.CreatePost(th.BasicChannel)
return th
}
@@ -327,15 +328,15 @@ func WithShared(v bool) ChannelOption {
}
}
func (th *TestHelper) CreateChannel(team *model.Team, options ...ChannelOption) *model.Channel {
return th.createChannel(team, model.ChannelTypeOpen, options...)
func (th *TestHelper) CreateChannel(c request.CTX, team *model.Team, options ...ChannelOption) *model.Channel {
return th.createChannel(c, team, model.ChannelTypeOpen, options...)
}
func (th *TestHelper) CreatePrivateChannel(team *model.Team) *model.Channel {
return th.createChannel(team, model.ChannelTypePrivate)
func (th *TestHelper) CreatePrivateChannel(c request.CTX, team *model.Team) *model.Channel {
return th.createChannel(c, team, model.ChannelTypePrivate)
}
func (th *TestHelper) createChannel(team *model.Team, channelType model.ChannelType, options ...ChannelOption) *model.Channel {
func (th *TestHelper) createChannel(c request.CTX, team *model.Team, channelType model.ChannelType, options ...ChannelOption) *model.Channel {
id := model.NewId()
channel := &model.Channel{
@@ -357,7 +358,7 @@ func (th *TestHelper) createChannel(team *model.Team, channelType model.ChannelT
if channel.IsShared() {
id := model.NewId()
_, err := th.App.SaveSharedChannel(&model.SharedChannel{
_, err := th.App.SaveSharedChannel(c, &model.SharedChannel{
ChannelId: channel.Id,
TeamId: channel.TeamId,
Home: false,
@@ -383,10 +384,10 @@ func (th *TestHelper) CreateDmChannel(user *model.User) *model.Channel {
return channel
}
func (th *TestHelper) CreateGroupChannel(user1 *model.User, user2 *model.User) *model.Channel {
func (th *TestHelper) CreateGroupChannel(c request.CTX, user1 *model.User, user2 *model.User) *model.Channel {
var err *model.AppError
var channel *model.Channel
if channel, err = th.App.CreateGroupChannel([]string{th.BasicUser.Id, user1.Id, user2.Id}, th.BasicUser.Id); err != nil {
if channel, err = th.App.CreateGroupChannel(c, []string{th.BasicUser.Id, user1.Id, user2.Id}, th.BasicUser.Id); err != nil {
panic(err)
}
return channel
@@ -439,7 +440,7 @@ func (th *TestHelper) RemoveUserFromTeam(user *model.User, team *model.Team) {
}
func (th *TestHelper) AddUserToChannel(user *model.User, channel *model.Channel) *model.ChannelMember {
member, err := th.App.AddUserToChannel(user, channel, false)
member, err := th.App.AddUserToChannel(th.Context, user, channel, false)
if err != nil {
panic(err)
}

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

@@ -302,12 +302,12 @@ func (a *App) importLine(c *request.Context, line LineImportData, dryRun bool) *
if line.User == nil {
return model.NewAppError("BulkImport", "app.import.import_line.null_user.error", nil, "", http.StatusBadRequest)
}
return a.importUser(line.User, dryRun)
return a.importUser(c, line.User, dryRun)
case line.Type == "direct_channel":
if line.DirectChannel == nil {
return model.NewAppError("BulkImport", "app.import.import_line.null_direct_channel.error", nil, "", http.StatusBadRequest)
}
return a.importDirectChannel(line.DirectChannel, dryRun)
return a.importDirectChannel(c, line.DirectChannel, dryRun)
case line.Type == "emoji":
if line.Emoji == nil {
return model.NewAppError("BulkImport", "app.import.import_line.null_emoji.error", nil, "", http.StatusBadRequest)

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

@@ -284,7 +284,7 @@ func (a *App) importChannel(c *request.Context, data *ChannelImportData, dryRun
return err
}
} else {
if _, err := a.UpdateChannel(channel); err != nil {
if _, err := a.UpdateChannel(c, channel); err != nil {
return err
}
}
@@ -292,7 +292,7 @@ func (a *App) importChannel(c *request.Context, data *ChannelImportData, dryRun
return nil
}
func (a *App) importUser(data *UserImportData, dryRun bool) *model.AppError {
func (a *App) importUser(c request.CTX, data *UserImportData, dryRun bool) *model.AppError {
if err := validateUserImportData(data); err != nil {
return err
}
@@ -728,10 +728,10 @@ func (a *App) importUser(data *UserImportData, dryRun bool) *model.AppError {
}
}
return a.importUserTeams(savedUser, data.Teams)
return a.importUserTeams(c, savedUser, data.Teams)
}
func (a *App) importUserTeams(user *model.User, data *[]UserTeamImportData) *model.AppError {
func (a *App) importUserTeams(c request.CTX, user *model.User, data *[]UserTeamImportData) *model.AppError {
if data == nil {
return nil
}
@@ -882,7 +882,7 @@ func (a *App) importUserTeams(user *model.User, data *[]UserTeamImportData) *mod
}
}
channelsToImport := channels[team.Id]
if err := a.importUserChannels(user, team, &channelsToImport); err != nil {
if err := a.importUserChannels(c, user, team, &channelsToImport); err != nil {
return err
}
}
@@ -890,7 +890,7 @@ func (a *App) importUserTeams(user *model.User, data *[]UserTeamImportData) *mod
return nil
}
func (a *App) importUserChannels(user *model.User, team *model.Team, data *[]UserChannelImportData) *model.AppError {
func (a *App) importUserChannels(c request.CTX, user *model.User, team *model.Team, data *[]UserChannelImportData) *model.AppError {
if data == nil {
return nil
}
@@ -1040,12 +1040,12 @@ func (a *App) importUserChannels(user *model.User, team *model.Team, data *[]Use
for _, member := range append(newMembers, oldMembers...) {
if member.ExplicitRoles != rolesByChannelId[member.ChannelId] {
if _, err = a.UpdateChannelMemberRoles(member.ChannelId, user.Id, rolesByChannelId[member.ChannelId]); err != nil {
if _, err = a.UpdateChannelMemberRoles(c, member.ChannelId, user.Id, rolesByChannelId[member.ChannelId]); err != nil {
return err
}
}
a.UpdateChannelMemberSchemeRoles(member.ChannelId, user.Id, isGuestByChannelId[member.ChannelId], isUserByChannelId[member.ChannelId], isAdminByChannelId[member.ChannelId])
a.UpdateChannelMemberSchemeRoles(c, member.ChannelId, user.Id, isGuestByChannelId[member.ChannelId], isUserByChannelId[member.ChannelId], isAdminByChannelId[member.ChannelId])
}
for _, channel := range allChannels {
@@ -1564,7 +1564,7 @@ func (a *App) updateFileInfoWithPostId(post *model.Post) {
}
}
}
func (a *App) importDirectChannel(data *DirectChannelImportData, dryRun bool) *model.AppError {
func (a *App) importDirectChannel(c request.CTX, data *DirectChannelImportData, dryRun bool) *model.AppError {
var err *model.AppError
if err = validateDirectChannelImportData(data); err != nil {
return err
@@ -1587,13 +1587,13 @@ func (a *App) importDirectChannel(data *DirectChannelImportData, dryRun bool) *m
var channel *model.Channel
if len(userIDs) == 2 {
ch, err := a.createDirectChannel(userIDs[0], userIDs[1])
ch, err := a.createDirectChannel(c, userIDs[0], userIDs[1])
if err != nil && err.Id != store.ChannelExistsError {
return model.NewAppError("BulkImport", "app.import.import_direct_channel.create_direct_channel.error", nil, err.Error(), http.StatusBadRequest)
}
channel = ch
} else {
ch, err := a.createGroupChannel(userIDs)
ch, err := a.createGroupChannel(c, userIDs)
if err != nil && err.Id != store.ChannelExistsError {
return model.NewAppError("BulkImport", "app.import.import_direct_channel.create_group_channel.error", nil, err.Error(), http.StatusBadRequest)
}
@@ -1698,7 +1698,7 @@ func (a *App) importMultipleDirectPostLines(c *request.Context, lines []LineImpo
}
channel = ch
} else {
ch, err = a.createGroupChannel(userIDs)
ch, err = a.createGroupChannel(c, userIDs)
if err != nil && err.Id != store.ChannelExistsError {
return line.LineNumber, model.NewAppError("BulkImport", "app.import.import_direct_post.create_group_channel.error", nil, err.Error(), http.StatusBadRequest)
}

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

@@ -671,7 +671,7 @@ func TestImportImportChannel(t *testing.T) {
th.CheckChannelsCount(t, channelCount+1)
// Get the Channel and check all the fields are correct.
channel, err := th.App.GetChannelByName(*data.Name, team.Id, false)
channel, err := th.App.GetChannelByName(th.Context, *data.Name, team.Id, false)
require.Nil(t, err, "Failed to get channel from database.")
assert.Equal(t, *data.Name, channel.Name)
@@ -695,7 +695,7 @@ func TestImportImportChannel(t *testing.T) {
th.CheckChannelsCount(t, channelCount)
// Get the Channel and check all the fields are correct.
channel, err = th.App.GetChannelByName(*data.Name, team.Id, false)
channel, err = th.App.GetChannelByName(th.Context, *data.Name, team.Id, false)
require.Nil(t, err, "Failed to get channel from database.")
assert.Equal(t, *data.Name, channel.Name)
@@ -722,7 +722,7 @@ func TestImportImportUser(t *testing.T) {
data := UserImportData{
Username: ptrStr(model.NewId()),
}
err = th.App.importUser(&data, true)
err = th.App.importUser(th.Context, &data, true)
require.Error(t, err, "Should have failed to import invalid user.")
// Check that no more users are in the DB.
@@ -738,7 +738,7 @@ func TestImportImportUser(t *testing.T) {
Username: ptrStr(model.NewId()),
Email: ptrStr(model.NewId() + "@example.com"),
}
appErr := th.App.importUser(&data, true)
appErr := th.App.importUser(th.Context, &data, true)
require.Nil(t, appErr, "Should have succeeded to import valid user.")
// Check that no more users are in the DB.
@@ -753,7 +753,7 @@ func TestImportImportUser(t *testing.T) {
data = UserImportData{
Username: ptrStr(model.NewId()),
}
err = th.App.importUser(&data, false)
err = th.App.importUser(th.Context, &data, false)
require.Error(t, err, "Should have failed to import invalid user.")
// Check that no more users are in the DB.
@@ -776,7 +776,7 @@ func TestImportImportUser(t *testing.T) {
LastName: ptrStr(model.NewId()),
Position: ptrStr(model.NewId()),
}
appErr = th.App.importUser(&data, false)
appErr = th.App.importUser(th.Context, &data, false)
require.Nil(t, appErr, "Should have succeeded to import valid user.")
// Check that one more user is in the DB.
@@ -819,7 +819,7 @@ func TestImportImportUser(t *testing.T) {
data.Roles = ptrStr("system_admin system_user")
data.Locale = ptrStr("zh_CN")
appErr = th.App.importUser(&data, false)
appErr = th.App.importUser(th.Context, &data, false)
require.Nil(t, appErr, "Should have succeeded to update valid user %v", err)
// Check user count the same.
@@ -851,20 +851,20 @@ func TestImportImportUser(t *testing.T) {
// Check Password and AuthData together.
data.Password = ptrStr("PasswordTest")
appErr = th.App.importUser(&data, false)
appErr = th.App.importUser(th.Context, &data, false)
require.NotNil(t, appErr, "Should have failed to import invalid user.")
data.AuthData = nil
data.AuthService = nil
appErr = th.App.importUser(&data, false)
appErr = th.App.importUser(th.Context, &data, false)
require.Nil(t, appErr, "Should have succeeded to update valid user %v", err)
data.Password = ptrStr("")
appErr = th.App.importUser(&data, false)
appErr = th.App.importUser(th.Context, &data, false)
require.NotNil(t, appErr, "Should have failed to import invalid user.")
data.Password = ptrStr(strings.Repeat("0123456789", 10))
appErr = th.App.importUser(&data, false)
appErr = th.App.importUser(th.Context, &data, false)
require.NotNil(t, appErr, "Should have failed to import invalid user.")
data.Password = ptrStr("TestPassword")
@@ -887,7 +887,7 @@ func TestImportImportUser(t *testing.T) {
DisplayName: ptrStr("Display Name"),
Type: &chanTypeOpen,
}, false)
channel, appErr := th.App.GetChannelByName(channelName, team.Id, false)
channel, appErr := th.App.GetChannelByName(th.Context, channelName, team.Id, false)
require.Nil(t, appErr, "Failed to get channel from database.")
username = model.NewId()
@@ -904,7 +904,7 @@ func TestImportImportUser(t *testing.T) {
require.Nil(t, appErr, "Failed to get team member count")
teamMemberCount := len(teamMembers)
channelMemberCount, appErr := th.App.GetChannelMemberCount(channel.Id)
channelMemberCount, appErr := th.App.GetChannelMemberCount(th.Context, channel.Id)
require.Nil(t, appErr, "Failed to get channel member count")
// Test with an invalid team & channel membership in dry-run mode.
@@ -918,7 +918,7 @@ func TestImportImportUser(t *testing.T) {
},
},
}
appErr = th.App.importUser(&data, true)
appErr = th.App.importUser(th.Context, &data, true)
assert.NotNil(t, appErr)
// Test with an unknown team name & invalid channel membership in dry-run mode.
@@ -932,7 +932,7 @@ func TestImportImportUser(t *testing.T) {
},
},
}
appErr = th.App.importUser(&data, true)
appErr = th.App.importUser(th.Context, &data, true)
assert.NotNil(t, appErr)
// Test with a valid team & invalid channel membership in dry-run mode.
@@ -946,7 +946,7 @@ func TestImportImportUser(t *testing.T) {
},
},
}
appErr = th.App.importUser(&data, true)
appErr = th.App.importUser(th.Context, &data, true)
assert.NotNil(t, appErr)
// Test with a valid team & unknown channel name in dry-run mode.
@@ -960,7 +960,7 @@ func TestImportImportUser(t *testing.T) {
},
},
}
appErr = th.App.importUser(&data, true)
appErr = th.App.importUser(th.Context, &data, true)
assert.Nil(t, appErr)
// Test with a valid team & valid channel name in dry-run mode.
@@ -974,7 +974,7 @@ func TestImportImportUser(t *testing.T) {
},
},
}
appErr = th.App.importUser(&data, true)
appErr = th.App.importUser(th.Context, &data, true)
assert.Nil(t, appErr)
// Check no new member objects were created because dry run mode.
@@ -982,7 +982,7 @@ func TestImportImportUser(t *testing.T) {
require.Nil(t, appErr, "Failed to get Team Member Count")
require.Len(t, tmc, teamMemberCount, "Number of team members not as expected")
cmc, appErr := th.App.GetChannelMemberCount(channel.Id)
cmc, appErr := th.App.GetChannelMemberCount(th.Context, channel.Id)
require.Nil(t, appErr, "Failed to get Channel Member Count")
require.Equal(t, channelMemberCount, cmc, "Number of channel members not as expected")
@@ -997,7 +997,7 @@ func TestImportImportUser(t *testing.T) {
},
},
}
appErr = th.App.importUser(&data, false)
appErr = th.App.importUser(th.Context, &data, false)
assert.NotNil(t, appErr)
// Test with an unknown team name & invalid channel membership in apply mode.
@@ -1011,7 +1011,7 @@ func TestImportImportUser(t *testing.T) {
},
},
}
appErr = th.App.importUser(&data, false)
appErr = th.App.importUser(th.Context, &data, false)
assert.NotNil(t, appErr)
// Test with a valid team & invalid channel membership in apply mode.
@@ -1025,7 +1025,7 @@ func TestImportImportUser(t *testing.T) {
},
},
}
appErr = th.App.importUser(&data, false)
appErr = th.App.importUser(th.Context, &data, false)
assert.NotNil(t, appErr)
// Check no new member objects were created because all tests should have failed so far.
@@ -1033,7 +1033,7 @@ func TestImportImportUser(t *testing.T) {
require.Nil(t, appErr, "Failed to get Team Member Count")
require.Len(t, tmc, teamMemberCount)
cmc, appErr = th.App.GetChannelMemberCount(channel.Id)
cmc, appErr = th.App.GetChannelMemberCount(th.Context, channel.Id)
require.Nil(t, appErr, "Failed to get Channel Member Count")
require.Equal(t, channelMemberCount, cmc)
@@ -1048,7 +1048,7 @@ func TestImportImportUser(t *testing.T) {
},
},
}
appErr = th.App.importUser(&data, false)
appErr = th.App.importUser(th.Context, &data, false)
assert.NotNil(t, appErr)
// Check only new team member object created because dry run mode.
@@ -1056,7 +1056,7 @@ func TestImportImportUser(t *testing.T) {
require.Nil(t, appErr, "Failed to get Team Member Count")
require.Len(t, tmc, teamMemberCount+1)
cmc, appErr = th.App.GetChannelMemberCount(channel.Id)
cmc, appErr = th.App.GetChannelMemberCount(th.Context, channel.Id)
require.Nil(t, appErr, "Failed to get Channel Member Count")
require.Equal(t, channelMemberCount, cmc)
@@ -1079,7 +1079,7 @@ func TestImportImportUser(t *testing.T) {
},
},
}
appErr = th.App.importUser(&data, false)
appErr = th.App.importUser(th.Context, &data, false)
assert.Nil(t, appErr)
// Check only new channel member object created because dry run mode.
@@ -1087,12 +1087,12 @@ func TestImportImportUser(t *testing.T) {
require.Nil(t, appErr, "Failed to get Team Member Count")
require.Len(t, tmc, teamMemberCount+1, "Number of team members not as expected")
cmc, appErr = th.App.GetChannelMemberCount(channel.Id)
cmc, appErr = th.App.GetChannelMemberCount(th.Context, channel.Id)
require.Nil(t, appErr, "Failed to get Channel Member Count")
require.Equal(t, channelMemberCount+1, cmc, "Number of channel members not as expected")
// Check channel member properties.
channelMember, appErr := th.App.GetChannelMember(context.Background(), channel.Id, user.Id)
channelMember, appErr := th.App.GetChannelMember(th.Context, channel.Id, user.Id)
require.Nil(t, appErr, "Failed to get channel member from database.")
assert.Equal(t, "channel_user", channelMember.Roles)
assert.Equal(t, "default", channelMember.NotifyProps[model.DesktopNotifyProp])
@@ -1119,7 +1119,7 @@ func TestImportImportUser(t *testing.T) {
},
},
}
appErr = th.App.importUser(&data, false)
appErr = th.App.importUser(th.Context, &data, false)
assert.Nil(t, appErr)
// Check both member properties.
@@ -1127,7 +1127,7 @@ func TestImportImportUser(t *testing.T) {
require.Nil(t, appErr, "Failed to get team member from database.")
require.Equal(t, "team_user team_admin", teamMember.Roles)
channelMember, appErr = th.App.GetChannelMember(context.Background(), channel.Id, user.Id)
channelMember, appErr = th.App.GetChannelMember(th.Context, channel.Id, user.Id)
require.Nil(t, appErr, "Failed to get channel member Desktop from database.")
assert.Equal(t, "channel_user channel_admin", channelMember.Roles)
assert.Equal(t, model.UserNotifyMention, channelMember.NotifyProps[model.DesktopNotifyProp])
@@ -1142,7 +1142,7 @@ func TestImportImportUser(t *testing.T) {
require.Nil(t, appErr, "Failed to get Team Member Count")
require.Len(t, tmc, teamMemberCount+1, "Number of team members not as expected")
cmc, appErr = th.App.GetChannelMemberCount(channel.Id)
cmc, appErr = th.App.GetChannelMemberCount(th.Context, channel.Id)
require.Nil(t, appErr, "Failed to get Channel Member Count")
require.Equal(t, channelMemberCount+1, cmc, "Number of channel members not as expected")
@@ -1163,7 +1163,7 @@ func TestImportImportUser(t *testing.T) {
ShowUnreadSection: ptrStr("true"),
EmailInterval: ptrStr("immediately"),
}
appErr = th.App.importUser(&data, false)
appErr = th.App.importUser(th.Context, &data, false)
assert.Nil(t, appErr)
// Check their values.
@@ -1195,7 +1195,7 @@ func TestImportImportUser(t *testing.T) {
TutorialStep: ptrStr("2"),
EmailInterval: ptrStr("hour"),
}
appErr = th.App.importUser(&data, false)
appErr = th.App.importUser(th.Context, &data, false)
assert.Nil(t, appErr)
// Check their values again.
@@ -1218,7 +1218,7 @@ func TestImportImportUser(t *testing.T) {
ChannelTrigger: ptrStr("true"),
CommentsTrigger: ptrStr(model.CommentsNotifyRoot),
}
appErr = th.App.importUser(&data, false)
appErr = th.App.importUser(th.Context, &data, false)
assert.Nil(t, appErr)
user, appErr = th.App.GetUserByUsername(username)
@@ -1244,7 +1244,7 @@ func TestImportImportUser(t *testing.T) {
CommentsTrigger: ptrStr(model.CommentsNotifyRoot),
MentionKeys: ptrStr("valid,misc"),
}
appErr = th.App.importUser(&data, false)
appErr = th.App.importUser(th.Context, &data, false)
assert.Nil(t, appErr)
user, appErr = th.App.GetUserByUsername(username)
@@ -1270,7 +1270,7 @@ func TestImportImportUser(t *testing.T) {
CommentsTrigger: ptrStr(model.CommentsNotifyAny),
MentionKeys: ptrStr("misc"),
}
appErr = th.App.importUser(&data, false)
appErr = th.App.importUser(th.Context, &data, false)
assert.Nil(t, appErr)
user, appErr = th.App.GetUserByUsername(username)
@@ -1295,7 +1295,7 @@ func TestImportImportUser(t *testing.T) {
ChannelTrigger: ptrStr("false"),
CommentsTrigger: ptrStr(model.CommentsNotifyAny),
}
appErr = th.App.importUser(&data, false)
appErr = th.App.importUser(th.Context, &data, false)
assert.Nil(t, appErr)
user, appErr = th.App.GetUserByUsername(username)
@@ -1327,7 +1327,7 @@ func TestImportImportUser(t *testing.T) {
MentionKeys: ptrStr("misc"),
}
appErr = th.App.importUser(&data, false)
appErr = th.App.importUser(th.Context, &data, false)
assert.Nil(t, appErr)
user, appErr = th.App.GetUserByUsername(username)
@@ -1413,7 +1413,7 @@ func TestImportImportUser(t *testing.T) {
}
appErr = th.App.importChannel(th.Context, channelData, false)
assert.Nil(t, appErr)
channel, appErr = th.App.GetChannelByName(*channelData.Name, team.Id, false)
channel, appErr = th.App.GetChannelByName(th.Context, *channelData.Name, team.Id, false)
require.Nil(t, appErr, "Failed to get channel from database")
// Test with a valid team & valid channel name in apply mode.
@@ -1433,7 +1433,7 @@ func TestImportImportUser(t *testing.T) {
},
},
}
appErr = th.App.importUser(userData, false)
appErr = th.App.importUser(th.Context, userData, false)
assert.Nil(t, appErr)
user, appErr = th.App.GetUserByUsername(*userData.Username)
@@ -1447,7 +1447,7 @@ func TestImportImportUser(t *testing.T) {
assert.False(t, teamMember.SchemeGuest)
assert.Equal(t, "", teamMember.ExplicitRoles)
channelMember, appErr = th.App.GetChannelMember(context.Background(), channel.Id, user.Id)
channelMember, appErr = th.App.GetChannelMember(th.Context, channel.Id, user.Id)
require.Nil(t, appErr, "Failed to get the channel member")
assert.True(t, channelMember.SchemeAdmin)
@@ -1475,7 +1475,7 @@ func TestImportImportUser(t *testing.T) {
},
},
}
appErr = th.App.importUser(deletedUserData, false)
appErr = th.App.importUser(th.Context, deletedUserData, false)
assert.Nil(t, appErr)
user, appErr = th.App.GetUserByUsername(*deletedUserData.Username)
@@ -1489,7 +1489,7 @@ func TestImportImportUser(t *testing.T) {
assert.False(t, teamMember.SchemeGuest)
assert.Equal(t, "", teamMember.ExplicitRoles)
channelMember, appErr = th.App.GetChannelMember(context.Background(), channel.Id, user.Id)
channelMember, appErr = th.App.GetChannelMember(th.Context, channel.Id, user.Id)
require.Nil(t, appErr, "Failed to get the channel member")
assert.False(t, teamMember.SchemeAdmin)
@@ -1517,7 +1517,7 @@ func TestImportImportUser(t *testing.T) {
},
},
}
appErr = th.App.importUser(deletedGuestData, false)
appErr = th.App.importUser(th.Context, deletedGuestData, false)
assert.Nil(t, appErr)
user, appErr = th.App.GetUserByUsername(*deletedGuestData.Username)
@@ -1531,7 +1531,7 @@ func TestImportImportUser(t *testing.T) {
assert.True(t, teamMember.SchemeGuest)
assert.Equal(t, "", teamMember.ExplicitRoles)
channelMember, appErr = th.App.GetChannelMember(context.Background(), channel.Id, user.Id)
channelMember, appErr = th.App.GetChannelMember(th.Context, channel.Id, user.Id)
require.Nil(t, appErr, "Failed to get the channel member")
assert.False(t, teamMember.SchemeAdmin)
@@ -1544,8 +1544,8 @@ func TestImportUserTeams(t *testing.T) {
th := Setup(t).InitBasic()
defer th.TearDown()
team2 := th.CreateTeam()
channel2 := th.CreateChannel(th.BasicTeam)
channel3 := th.CreateChannel(team2)
channel2 := th.CreateChannel(th.Context, th.BasicTeam)
channel3 := th.CreateChannel(th.Context, team2)
customRole := th.CreateRole("test_custom_role")
sampleTheme := "{\"test\":\"#abcdef\"}"
@@ -1718,7 +1718,7 @@ func TestImportUserTeams(t *testing.T) {
// Two times import must end with the same results
for x := 0; x < 2; x++ {
err := th.App.importUserTeams(user, tc.data)
err := th.App.importUserTeams(th.Context, user, tc.data)
if tc.expectedError {
require.NotNil(t, err)
} else {
@@ -1757,7 +1757,7 @@ func TestImportUserTeams(t *testing.T) {
}
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.TeamSettings.MaxUsersPerTeam = 1 })
defer th.App.UpdateConfig(func(cfg *model.Config) { *cfg.TeamSettings.MaxUsersPerTeam = 100 })
err := th.App.importUserTeams(user, data)
err := th.App.importUserTeams(th.Context, user, data)
require.NotNil(t, err)
})
}
@@ -1765,7 +1765,7 @@ func TestImportUserTeams(t *testing.T) {
func TestImportUserChannels(t *testing.T) {
th := Setup(t).InitBasic()
defer th.TearDown()
channel2 := th.CreateChannel(th.BasicTeam)
channel2 := th.CreateChannel(th.Context, th.BasicTeam)
customRole := th.CreateRole("test_custom_role")
sampleNotifyProps := UserChannelNotifyPropsImportData{
Desktop: model.NewString("all"),
@@ -1872,7 +1872,7 @@ func TestImportUserChannels(t *testing.T) {
// Two times import must end with the same results
for x := 0; x < 2; x++ {
appErr := th.App.importUserChannels(user, th.BasicTeam, tc.data)
appErr := th.App.importUserChannels(th.Context, user, th.BasicTeam, tc.data)
if tc.expectedError {
require.NotNil(t, appErr)
} else {
@@ -1910,7 +1910,7 @@ func TestImportUserDefaultNotifyProps(t *testing.T) {
MentionKeys: ptrStr(""),
},
}
require.Nil(t, th.App.importUser(&data, false))
require.Nil(t, th.App.importUser(th.Context, &data, false))
user, err := th.App.GetUserByUsername(username)
require.Nil(t, err)
@@ -1958,12 +1958,12 @@ func TestImportimportMultiplePostLines(t *testing.T) {
DisplayName: ptrStr("Display Name"),
Type: &chanTypeOpen,
}, false)
channel, err := th.App.GetChannelByName(channelName, team.Id, false)
channel, err := th.App.GetChannelByName(th.Context, channelName, team.Id, false)
require.Nil(t, err, "Failed to get channel from database.")
// Create a user.
username := model.NewId()
th.App.importUser(&UserImportData{
th.App.importUser(th.Context, &UserImportData{
Username: &username,
Email: ptrStr(model.NewId() + "@example.com"),
}, false)
@@ -2211,7 +2211,7 @@ func TestImportimportMultiplePostLines(t *testing.T) {
// Post with flags.
username2 := model.NewId()
th.App.importUser(&UserImportData{
th.App.importUser(th.Context, &UserImportData{
Username: &username2,
Email: ptrStr(model.NewId() + "@example.com"),
}, false)
@@ -2473,7 +2473,7 @@ func TestImportimportMultiplePostLines(t *testing.T) {
DisplayName: ptrStr("Display Name"),
Type: &chanTypeOpen,
}, false)
_, err = th.App.GetChannelByName(channelName, team2.Id, false)
_, err = th.App.GetChannelByName(th.Context, channelName, team2.Id, false)
require.Nil(t, err, "Failed to get channel from database.")
// Count the number of posts in the team2.
@@ -2562,12 +2562,12 @@ func TestImportImportPost(t *testing.T) {
DisplayName: ptrStr("Display Name"),
Type: &chanTypeOpen,
}, false)
channel, appErr := th.App.GetChannelByName(channelName, team.Id, false)
channel, appErr := th.App.GetChannelByName(th.Context, channelName, team.Id, false)
require.Nil(t, appErr, "Failed to get channel from database.")
// Create a user.
username := model.NewId()
th.App.importUser(&UserImportData{
th.App.importUser(th.Context, &UserImportData{
Username: &username,
Email: ptrStr(model.NewId() + "@example.com"),
}, false)
@@ -2575,7 +2575,7 @@ func TestImportImportPost(t *testing.T) {
require.Nil(t, appErr, "Failed to get user from database.")
username2 := model.NewId()
th.App.importUser(&UserImportData{
th.App.importUser(th.Context, &UserImportData{
Username: &username2,
Email: ptrStr(model.NewId() + "@example.com"),
}, false)
@@ -3159,7 +3159,7 @@ func TestImportImportDirectChannel(t *testing.T) {
},
Header: ptrStr("Channel Header"),
}
err = th.App.importDirectChannel(&data, true)
err = th.App.importDirectChannel(th.Context, &data, true)
require.Error(t, err)
// Check that no more channels are in the DB.
@@ -3171,7 +3171,7 @@ func TestImportImportDirectChannel(t *testing.T) {
model.NewId(),
model.NewId(),
}
appErr := th.App.importDirectChannel(&data, true)
appErr := th.App.importDirectChannel(th.Context, &data, true)
require.Nil(t, appErr)
// Check that no more channels are in the DB.
@@ -3184,7 +3184,7 @@ func TestImportImportDirectChannel(t *testing.T) {
model.NewId(),
model.NewId(),
}
appErr = th.App.importDirectChannel(&data, true)
appErr = th.App.importDirectChannel(th.Context, &data, true)
require.Nil(t, appErr)
// Check that no more channels are in the DB.
@@ -3195,7 +3195,7 @@ func TestImportImportDirectChannel(t *testing.T) {
data.Members = &[]string{
model.NewId(),
}
err = th.App.importDirectChannel(&data, false)
err = th.App.importDirectChannel(th.Context, &data, false)
require.Error(t, err)
// Check that no more channels are in the DB.
@@ -3207,7 +3207,7 @@ func TestImportImportDirectChannel(t *testing.T) {
th.BasicUser.Username,
th.BasicUser2.Username,
}
appErr = th.App.importDirectChannel(&data, false)
appErr = th.App.importDirectChannel(th.Context, &data, false)
require.Nil(t, appErr)
// Check that one more DIRECT channel is in the DB.
@@ -3215,7 +3215,7 @@ func TestImportImportDirectChannel(t *testing.T) {
AssertChannelCount(t, th.App, model.ChannelTypeGroup, groupChannelCount)
// Do the same DIRECT channel again.
appErr = th.App.importDirectChannel(&data, false)
appErr = th.App.importDirectChannel(th.Context, &data, false)
require.Nil(t, appErr)
// Check that no more channels are in the DB.
@@ -3224,7 +3224,7 @@ func TestImportImportDirectChannel(t *testing.T) {
// Update the channel's HEADER
data.Header = ptrStr("New Channel Header 2")
appErr = th.App.importDirectChannel(&data, false)
appErr = th.App.importDirectChannel(th.Context, &data, false)
require.Nil(t, appErr)
// Check that no more channels are in the DB.
@@ -3244,7 +3244,7 @@ func TestImportImportDirectChannel(t *testing.T) {
user3.Username,
model.NewId(),
}
appErr = th.App.importDirectChannel(&data, false)
appErr = th.App.importDirectChannel(th.Context, &data, false)
require.NotNil(t, appErr)
// Check that no more channels are in the DB.
@@ -3257,7 +3257,7 @@ func TestImportImportDirectChannel(t *testing.T) {
th.BasicUser2.Username,
user3.Username,
}
appErr = th.App.importDirectChannel(&data, false)
appErr = th.App.importDirectChannel(th.Context, &data, false)
require.Nil(t, appErr)
// Check that one more GROUP channel is in the DB.
@@ -3265,7 +3265,7 @@ func TestImportImportDirectChannel(t *testing.T) {
AssertChannelCount(t, th.App, model.ChannelTypeGroup, groupChannelCount+1)
// Do the same DIRECT channel again.
appErr = th.App.importDirectChannel(&data, false)
appErr = th.App.importDirectChannel(th.Context, &data, false)
require.Nil(t, appErr)
// Check that no more channels are in the DB.
@@ -3274,7 +3274,7 @@ func TestImportImportDirectChannel(t *testing.T) {
// Update the channel's HEADER
data.Header = ptrStr("New Channel Header 3")
appErr = th.App.importDirectChannel(&data, false)
appErr = th.App.importDirectChannel(th.Context, &data, false)
require.Nil(t, appErr)
// Check that no more channels are in the DB.
@@ -3287,7 +3287,7 @@ func TestImportImportDirectChannel(t *testing.T) {
th.BasicUser2.Id,
user3.Id,
}
channel, appErr = th.App.createGroupChannel(userIDs)
channel, appErr = th.App.createGroupChannel(th.Context, userIDs)
require.Equal(t, appErr.Id, store.ChannelExistsError)
require.Equal(t, channel.Header, *data.Header)
@@ -3300,7 +3300,7 @@ func TestImportImportDirectChannel(t *testing.T) {
th.BasicUser.Username,
th.BasicUser2.Username,
}
appErr = th.App.importDirectChannel(&data, false)
appErr = th.App.importDirectChannel(th.Context, &data, false)
require.Nil(t, appErr)
channel, appErr = th.App.GetOrCreateDirectChannel(th.Context, th.BasicUser.Id, th.BasicUser2.Id)
@@ -3320,7 +3320,7 @@ func TestImportImportDirectPost(t *testing.T) {
th.BasicUser2.Username,
},
}
appErr := th.App.importDirectChannel(&channelData, false)
appErr := th.App.importDirectChannel(th.Context, &channelData, false)
require.Nil(t, appErr)
// Get the channel.
@@ -3677,7 +3677,7 @@ func TestImportImportDirectPost(t *testing.T) {
user3.Username,
},
}
appErr = th.App.importDirectChannel(&channelData, false)
appErr = th.App.importDirectChannel(th.Context, &channelData, false)
require.Nil(t, appErr)
// Get the channel.
@@ -3687,7 +3687,7 @@ func TestImportImportDirectPost(t *testing.T) {
th.BasicUser2.Id,
user3.Id,
}
channel, appErr = th.App.createGroupChannel(userIDs)
channel, appErr = th.App.createGroupChannel(th.Context, userIDs)
require.Equal(t, appErr.Id, store.ChannelExistsError)
groupChannel = channel
@@ -4237,12 +4237,12 @@ func TestImportPostAndRepliesWithAttachments(t *testing.T) {
DisplayName: ptrStr("Display Name"),
Type: &chanTypeOpen,
}, false)
_, appErr = th.App.GetChannelByName(channelName, team.Id, false)
_, appErr = th.App.GetChannelByName(th.Context, channelName, team.Id, false)
require.Nil(t, appErr, "Failed to get channel from database.")
// Create a user3.
username := model.NewId()
th.App.importUser(&UserImportData{
th.App.importUser(th.Context, &UserImportData{
Username: &username,
Email: ptrStr(model.NewId() + "@example.com"),
}, false)
@@ -4251,7 +4251,7 @@ func TestImportPostAndRepliesWithAttachments(t *testing.T) {
require.NotNil(t, user3)
username2 := model.NewId()
th.App.importUser(&UserImportData{
th.App.importUser(th.Context, &UserImportData{
Username: &username2,
Email: ptrStr(model.NewId() + "@example.com"),
}, false)
@@ -4260,7 +4260,7 @@ func TestImportPostAndRepliesWithAttachments(t *testing.T) {
// Create direct post users.
username3 := model.NewId()
th.App.importUser(&UserImportData{
th.App.importUser(th.Context, &UserImportData{
Username: &username3,
Email: ptrStr(model.NewId() + "@example.com"),
}, false)
@@ -4268,7 +4268,7 @@ func TestImportPostAndRepliesWithAttachments(t *testing.T) {
require.Nil(t, appErr, "Failed to get user3 from database.")
username4 := model.NewId()
th.App.importUser(&UserImportData{
th.App.importUser(th.Context, &UserImportData{
Username: &username4,
Email: ptrStr(model.NewId() + "@example.com"),
}, false)
@@ -4387,7 +4387,7 @@ func TestImportDirectPostWithAttachments(t *testing.T) {
// Create a user.
username := model.NewId()
th.App.importUser(&UserImportData{
th.App.importUser(th.Context, &UserImportData{
Username: &username,
Email: ptrStr(model.NewId() + "@example.com"),
}, false)
@@ -4395,7 +4395,7 @@ func TestImportDirectPostWithAttachments(t *testing.T) {
require.Nil(t, appErr, "Failed to get user1 from database.")
username2 := model.NewId()
th.App.importUser(&UserImportData{
th.App.importUser(th.Context, &UserImportData{
Username: &username2,
Email: ptrStr(model.NewId() + "@example.com"),
}, false)
@@ -4513,12 +4513,12 @@ func TestZippedImportPostAndRepliesWithAttachments(t *testing.T) {
DisplayName: ptrStr("Display Name"),
Type: &chanTypeOpen,
}, false)
_, appErr = th.App.GetChannelByName(channelName, team.Id, false)
_, appErr = th.App.GetChannelByName(th.Context, channelName, team.Id, false)
require.Nil(t, appErr, "Failed to get channel from database.")
// Create users
username2 := model.NewId()
th.App.importUser(&UserImportData{
th.App.importUser(th.Context, &UserImportData{
Username: &username2,
Email: ptrStr(model.NewId() + "@example.com"),
}, false)
@@ -4527,7 +4527,7 @@ func TestZippedImportPostAndRepliesWithAttachments(t *testing.T) {
// Create direct post users.
username3 := model.NewId()
th.App.importUser(&UserImportData{
th.App.importUser(th.Context, &UserImportData{
Username: &username3,
Email: ptrStr(model.NewId() + "@example.com"),
}, false)
@@ -4535,7 +4535,7 @@ func TestZippedImportPostAndRepliesWithAttachments(t *testing.T) {
require.Nil(t, appErr, "Failed to get user3 from database.")
username4 := model.NewId()
th.App.importUser(&UserImportData{
th.App.importUser(th.Context, &UserImportData{
Username: &username4,
Email: ptrStr(model.NewId() + "@example.com"),
}, false)

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

@@ -301,7 +301,7 @@ func (a *App) DoPostActionWithCookie(c *request.Context, postID, actionId, userI
for key, value := range retain {
ephemeralPost.AddProp(key, value)
}
a.SendEphemeralPost(userID, ephemeralPost)
a.SendEphemeralPost(c, userID, ephemeralPost)
}
return clientTriggerId, nil

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

@@ -140,7 +140,7 @@ func TestPostAction(t *testing.T) {
user1 := th.CreateUser()
user2 := th.CreateUser()
return th.CreateGroupChannel(user1, user2)
return th.CreateGroupChannel(th.Context, user1, user2)
}},
}

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

@@ -15,6 +15,7 @@ import (
"github.com/pkg/errors"
"github.com/mattermost/mattermost-server/v6/app/request"
"github.com/mattermost/mattermost-server/v6/model"
"github.com/mattermost/mattermost-server/v6/shared/i18n"
"github.com/mattermost/mattermost-server/v6/shared/markdown"
@@ -36,7 +37,7 @@ func (a *App) canSendPushNotifications() bool {
return true
}
func (a *App) SendNotifications(post *model.Post, team *model.Team, channel *model.Channel, sender *model.User, parentPostList *model.PostList, setOnline bool) ([]string, error) {
func (a *App) SendNotifications(c request.CTX, post *model.Post, team *model.Team, channel *model.Channel, sender *model.User, parentPostList *model.PostList, setOnline bool) ([]string, error) {
// Do not send notifications in archived channels
if channel.DeleteAt > 0 {
return []string{}, nil
@@ -59,7 +60,7 @@ func (a *App) SendNotifications(post *model.Post, team *model.Team, channel *mod
}()
var gchan chan store.StoreResult
if a.allowGroupMentions(post) {
if a.allowGroupMentions(c, post) {
gchan = make(chan store.StoreResult, 1)
go func() {
groupsMap, err := a.getGroupsAllowedForReferenceInChannel(channel, team)
@@ -134,7 +135,7 @@ func (a *App) SendNotifications(post *model.Post, team *model.Team, channel *mod
mentions.addMention(post.UserId, DMMention)
}
} else {
allowChannelMentions = a.allowChannelMentions(post, len(profileMap))
allowChannelMentions = a.allowChannelMentions(c, post, len(profileMap))
keywords = a.getMentionKeywordsInChannel(profileMap, allowChannelMentions, channelMemberNotifyPropsMap)
mentions = getExplicitMentions(post, keywords, groups)
@@ -155,7 +156,7 @@ func (a *App) SendNotifications(post *model.Post, team *model.Team, channel *mod
}
if !anyUsersMentionedByGroup {
a.sendNoUsersNotifiedByGroupInChannel(sender, post, channel, group)
a.sendNoUsersNotifiedByGroupInChannel(c, sender, post, channel, group)
}
}
@@ -170,7 +171,7 @@ func (a *App) SendNotifications(post *model.Post, team *model.Team, channel *mod
if threadPost.Id == parentPostList.Order[0] && threadPost.IsFromOAuthBot() {
continue
}
if a.IsCRTEnabledForUser(profile.Id) {
if a.IsCRTEnabledForUser(c, profile.Id) {
continue
}
if profile.NotifyProps[model.CommentsNotifyProp] == model.CommentsNotifyAny || (profile.NotifyProps[model.CommentsNotifyProp] == model.CommentsNotifyRoot && threadPost.Id == parentPostList.Order[0]) {
@@ -190,7 +191,7 @@ func (a *App) SendNotifications(post *model.Post, team *model.Team, channel *mod
}
go func() {
_, err := a.sendOutOfChannelMentions(sender, post, channel, mentions.OtherPotentialMentions)
_, err := a.sendOutOfChannelMentions(c, sender, post, channel, mentions.OtherPotentialMentions)
if err != nil {
mlog.Error("Failed to send warning for out of channel mentions", mlog.String("user_id", sender.Id), mlog.String("post_id", post.Id), mlog.Err(err))
}
@@ -203,7 +204,7 @@ func (a *App) SendNotifications(post *model.Post, team *model.Team, channel *mod
channelMemberNotifyPropsMap[profile.Id][model.PushNotifyProp] == model.ChannelNotifyAll) &&
(post.UserId != profile.Id || post.GetProp("from_webhook") == "true") &&
!post.IsSystemMessage() &&
!(a.IsCRTEnabledForUser(profile.Id) && post.RootId != "") {
!(a.IsCRTEnabledForUser(c, profile.Id) && post.RootId != "") {
allActivityPushUserIds = append(allActivityPushUserIds, profile.Id)
}
}
@@ -330,7 +331,7 @@ func (a *App) SendNotifications(post *model.Post, team *model.Team, channel *mod
if isCRTAllowed && post.RootId != "" {
for _, uid := range followers {
profile := profileMap[uid]
if profile == nil || !a.IsCRTEnabledForUser(uid) {
if profile == nil || !a.IsCRTEnabledForUser(c, uid) {
continue
}
@@ -365,12 +366,12 @@ func (a *App) SendNotifications(post *model.Post, team *model.Team, channel *mod
continue
}
if a.userAllowsEmail(profileMap[id], channelMemberNotifyPropsMap[id], post) {
if a.userAllowsEmail(c, profileMap[id], channelMemberNotifyPropsMap[id], post) {
senderProfileImage, _, err := a.GetProfileImage(sender)
if err != nil {
a.Log().Warn("Unable to get the sender user profile image.", mlog.String("user_id", sender.Id), mlog.Err(err))
}
if err := a.sendNotificationEmail(notification, profileMap[id], team, senderProfileImage); err != nil {
if err := a.sendNotificationEmail(c, notification, profileMap[id], team, senderProfileImage); err != nil {
mlog.Warn("Unable to send notification email.", mlog.Err(err))
}
}
@@ -383,6 +384,7 @@ func (a *App) SendNotifications(post *model.Post, team *model.Team, channel *mod
if mentions.HereMentioned {
a.SendEphemeralPost(
c,
post.UserId,
&model.Post{
ChannelId: post.ChannelId,
@@ -394,6 +396,7 @@ func (a *App) SendNotifications(post *model.Post, team *model.Team, channel *mod
if mentions.ChannelMentioned {
a.SendEphemeralPost(
c,
post.UserId,
&model.Post{
ChannelId: post.ChannelId,
@@ -405,6 +408,7 @@ func (a *App) SendNotifications(post *model.Post, team *model.Team, channel *mod
if mentions.AllMentioned {
a.SendEphemeralPost(
c,
post.UserId,
&model.Post{
ChannelId: post.ChannelId,
@@ -563,7 +567,7 @@ func (a *App) SendNotifications(post *model.Post, team *model.Team, channel *mod
message.Add("followers", model.ArrayToJSON(notificationsForCRT.Desktop))
}
published, err := a.publishWebsocketEventForPermalinkPost(post, message)
published, err := a.publishWebsocketEventForPermalinkPost(c, post, message)
if err != nil {
return nil, err
}
@@ -579,7 +583,7 @@ func (a *App) SendNotifications(post *model.Post, team *model.Team, channel *mod
if profileMap[uid] == nil {
continue
}
if a.IsCRTEnabledForUser(uid) {
if a.IsCRTEnabledForUser(c, uid) {
message := model.NewWebSocketEvent(model.WebsocketEventThreadUpdated, team.Id, "", uid, nil)
threadMembership := participantMemberships[uid]
if threadMembership == nil {
@@ -626,7 +630,7 @@ func (a *App) SendNotifications(post *model.Post, team *model.Team, channel *mod
a.sanitizeProfiles(userThread.Participants, false)
userThread.Post.SanitizeProps()
sanitizedPost, err := a.SanitizePostMetadataForUser(userThread.Post, uid)
sanitizedPost, err := a.SanitizePostMetadataForUser(c, userThread.Post, uid)
if err != nil {
return nil, err
}
@@ -655,7 +659,7 @@ func max(a, b int64) int64 {
return a
}
func (a *App) userAllowsEmail(user *model.User, channelMemberNotificationProps model.StringMap, post *model.Post) bool {
func (a *App) userAllowsEmail(c request.CTX, user *model.User, channelMemberNotificationProps model.StringMap, post *model.Post) bool {
// if user is a bot account, then we do not send email
if user.IsBot {
return false
@@ -664,7 +668,7 @@ func (a *App) userAllowsEmail(user *model.User, channelMemberNotificationProps m
userAllowsEmails := user.NotifyProps[model.EmailNotifyProp] != "false"
// if CRT is ON for user and the post is a reply disregard the channelEmail setting
if channelEmail, ok := channelMemberNotificationProps[model.EmailNotifyProp]; ok && !(a.IsCRTEnabledForUser(user.Id) && post.RootId != "") {
if channelEmail, ok := channelMemberNotificationProps[model.EmailNotifyProp]; ok && !(a.IsCRTEnabledForUser(c, user.Id) && post.RootId != "") {
if channelEmail != model.ChannelNotifyDefault {
userAllowsEmails = channelEmail != "false"
}
@@ -696,7 +700,7 @@ func (a *App) userAllowsEmail(user *model.User, channelMemberNotificationProps m
return userAllowsEmails && emailNotificationsAllowedForStatus && user.DeleteAt == 0 && !autoResponderRelated
}
func (a *App) sendNoUsersNotifiedByGroupInChannel(sender *model.User, post *model.Post, channel *model.Channel, group *model.Group) {
func (a *App) sendNoUsersNotifiedByGroupInChannel(c request.CTX, sender *model.User, post *model.Post, channel *model.Channel, group *model.Group) {
T := i18n.GetUserTranslations(sender.Locale)
ephemeralPost := &model.Post{
UserId: sender.Id,
@@ -704,12 +708,12 @@ func (a *App) sendNoUsersNotifiedByGroupInChannel(sender *model.User, post *mode
ChannelId: channel.Id,
Message: T("api.post.check_for_out_of_channel_group_users.message.none", model.StringInterface{"GroupName": group.Name}),
}
a.SendEphemeralPost(post.UserId, ephemeralPost)
a.SendEphemeralPost(c, post.UserId, ephemeralPost)
}
// sendOutOfChannelMentions sends an ephemeral post to the sender of a post if any of the given potential mentions
// are outside of the post's channel. Returns whether or not an ephemeral post was sent.
func (a *App) sendOutOfChannelMentions(sender *model.User, post *model.Post, channel *model.Channel, potentialMentions []string) (bool, error) {
func (a *App) sendOutOfChannelMentions(c request.CTX, sender *model.User, post *model.Post, channel *model.Channel, potentialMentions []string) (bool, error) {
outOfChannelUsers, outOfGroupsUsers, err := a.filterOutOfChannelMentions(sender, post, channel, potentialMentions)
if err != nil {
return false, err
@@ -719,7 +723,7 @@ func (a *App) sendOutOfChannelMentions(sender *model.User, post *model.Post, cha
return false, nil
}
a.SendEphemeralPost(post.UserId, makeOutOfChannelMentionPost(sender, post, outOfChannelUsers, outOfGroupsUsers))
a.SendEphemeralPost(c, post.UserId, makeOutOfChannelMentionPost(sender, post, outOfChannelUsers, outOfGroupsUsers))
return true, nil
}
@@ -1021,8 +1025,8 @@ func getMentionsEnabledFields(post *model.Post) model.StringArray {
}
// allowChannelMentions returns whether or not the channel mentions are allowed for the given post.
func (a *App) allowChannelMentions(post *model.Post, numProfiles int) bool {
if !a.HasPermissionToChannel(post.UserId, post.ChannelId, model.PermissionUseChannelMentions) {
func (a *App) allowChannelMentions(c request.CTX, post *model.Post, numProfiles int) bool {
if !a.HasPermissionToChannel(c, post.UserId, post.ChannelId, model.PermissionUseChannelMentions) {
return false
}
@@ -1038,12 +1042,12 @@ func (a *App) allowChannelMentions(post *model.Post, numProfiles int) bool {
}
// allowGroupMentions returns whether or not the group mentions are allowed for the given post.
func (a *App) allowGroupMentions(post *model.Post) bool {
func (a *App) allowGroupMentions(c request.CTX, post *model.Post) bool {
if license := a.Srv().License(); license == nil || (license.SkuShortName != model.LicenseShortSkuProfessional && license.SkuShortName != model.LicenseShortSkuEnterprise) {
return false
}
if !a.HasPermissionToChannel(post.UserId, post.ChannelId, model.PermissionUseGroupMentions) {
if !a.HasPermissionToChannel(c, post.UserId, post.ChannelId, model.PermissionUseGroupMentions) {
return false
}

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

@@ -12,6 +12,7 @@ import (
"strings"
"time"
"github.com/mattermost/mattermost-server/v6/app/request"
"github.com/mattermost/mattermost-server/v6/model"
"github.com/mattermost/mattermost-server/v6/shared/i18n"
"github.com/mattermost/mattermost-server/v6/shared/mlog"
@@ -19,7 +20,7 @@ import (
"github.com/pkg/errors"
)
func (a *App) sendNotificationEmail(notification *PostNotification, user *model.User, team *model.Team, senderProfileImage []byte) error {
func (a *App) sendNotificationEmail(c request.CTX, notification *PostNotification, user *model.User, team *model.Team, senderProfileImage []byte) error {
channel := notification.Channel
post := notification.Post
@@ -107,7 +108,7 @@ func (a *App) sendNotificationEmail(notification *PostNotification, user *model.
landingURL := a.GetSiteURL() + "/landing#/" + team.Name
var bodyText, err = a.getNotificationEmailBody(user, post, channel, channelName, senderName, team.Name, landingURL, emailNotificationContentsType, useMilitaryTime, translateFunc, senderPhoto)
var bodyText, err = a.getNotificationEmailBody(c, user, post, channel, channelName, senderName, team.Name, landingURL, emailNotificationContentsType, useMilitaryTime, translateFunc, senderPhoto)
if err != nil {
return errors.Wrap(err, "unable to render the email notification template")
}
@@ -215,7 +216,7 @@ type postData struct {
/**
* Computes the email body for notification messages
*/
func (a *App) getNotificationEmailBody(recipient *model.User, post *model.Post, channel *model.Channel, channelName string, senderName string, teamName string, landingURL string, emailNotificationContentsType string, useMilitaryTime bool, translateFunc i18n.TranslateFunc, senderPhoto string) (string, error) {
func (a *App) getNotificationEmailBody(c request.CTX, recipient *model.User, post *model.Post, channel *model.Channel, channelName string, senderName string, teamName string, landingURL string, emailNotificationContentsType string, useMilitaryTime bool, translateFunc i18n.TranslateFunc, senderPhoto string) (string, error) {
pData := postData{
SenderName: truncateUserNames(senderName, 22),
SenderPhoto: senderPhoto,
@@ -237,7 +238,7 @@ func (a *App) getNotificationEmailBody(recipient *model.User, post *model.Post,
mdPostMessage = postMessage
}
normalizedPostMessage, err := a.generateHyperlinkForChannels(mdPostMessage, teamName, landingURL)
normalizedPostMessage, err := a.generateHyperlinkForChannels(c, mdPostMessage, teamName, landingURL)
if err != nil {
mlog.Warn("Encountered error while generating hyperlink for channels", mlog.String("team_name", teamName), mlog.Err(err))
normalizedPostMessage = mdPostMessage
@@ -276,7 +277,7 @@ func (a *App) getNotificationEmailBody(recipient *model.User, post *model.Post,
}
// Override title and subtile for replies with CRT enabled
if a.IsCRTEnabledForUser(recipient.Id) && post.RootId != "" {
if a.IsCRTEnabledForUser(c, recipient.Id) && post.RootId != "" {
// Title is the same in all cases
data.Props["Title"] = translateFunc("app.notification.body.thread.title", map[string]any{"SenderName": senderName})
@@ -347,7 +348,7 @@ func getFormattedPostTime(user *model.User, post *model.Post, useMilitaryTime bo
}
}
func (a *App) generateHyperlinkForChannels(postMessage, teamName, teamURL string) (string, *model.AppError) {
func (a *App) generateHyperlinkForChannels(c request.CTX, postMessage, teamName, teamURL string) (string, *model.AppError) {
team, err := a.GetTeamByName(teamName)
if err != nil {
return "", err
@@ -358,7 +359,7 @@ func (a *App) generateHyperlinkForChannels(postMessage, teamName, teamURL string
return postMessage, nil
}
channels, err := a.GetChannelsByNames(channelNames, team.Id)
channels, err := a.GetChannelsByNames(c, channelNames, team.Id)
if err != nil {
return "", err
}

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

@@ -90,7 +90,7 @@ func TestGetNotificationEmailBodyFullNotificationPublicChannel(t *testing.T) {
teamStoreMock.On("GetByName", "testteam").Return(&model.Team{Name: "testteam"}, nil)
storeMock.On("Team").Return(&teamStoreMock)
body, err := th.App.getNotificationEmailBody(recipient, post, channel, channelName, senderName, teamName, teamURL, emailNotificationContentsType, true, translateFunc, "user-avatar.png")
body, err := th.App.getNotificationEmailBody(th.Context, recipient, post, channel, channelName, senderName, teamName, teamURL, emailNotificationContentsType, true, translateFunc, "user-avatar.png")
require.NoError(t, err)
require.Contains(t, body, "mentioned you in a message", fmt.Sprintf("Expected email text 'mentioned you in a message. Got %s", body))
require.Contains(t, body, post.Message, fmt.Sprintf("Expected email text '%s'. Got %s", post.Message, body))
@@ -121,7 +121,7 @@ func TestGetNotificationEmailBodyFullNotificationGroupChannel(t *testing.T) {
teamStoreMock.On("GetByName", "testteam").Return(&model.Team{Name: "testteam"}, nil)
storeMock.On("Team").Return(&teamStoreMock)
body, err := th.App.getNotificationEmailBody(recipient, post, channel, channelName, senderName, teamName, teamURL, emailNotificationContentsType, true, translateFunc, "user-avatar.png")
body, err := th.App.getNotificationEmailBody(th.Context, recipient, post, channel, channelName, senderName, teamName, teamURL, emailNotificationContentsType, true, translateFunc, "user-avatar.png")
require.NoError(t, err)
require.Contains(t, body, "sent you a new message", fmt.Sprintf("Expected email text 'sent you a new message. Got "+body))
require.Contains(t, body, post.Message, fmt.Sprintf("Expected email text '%s'. Got %s", post.Message, body))
@@ -152,7 +152,7 @@ func TestGetNotificationEmailBodyFullNotificationPrivateChannel(t *testing.T) {
teamStoreMock.On("GetByName", "testteam").Return(&model.Team{Name: "testteam"}, nil)
storeMock.On("Team").Return(&teamStoreMock)
body, err := th.App.getNotificationEmailBody(recipient, post, channel, channelName, senderName, teamName, teamURL, emailNotificationContentsType, true, translateFunc, "user-avatar.png")
body, err := th.App.getNotificationEmailBody(th.Context, recipient, post, channel, channelName, senderName, teamName, teamURL, emailNotificationContentsType, true, translateFunc, "user-avatar.png")
require.NoError(t, err)
require.Contains(t, body, "mentioned you in a message", fmt.Sprintf("Expected email text 'mentioned you in a message. Got "+body))
require.Contains(t, body, post.Message, fmt.Sprintf("Expected email text '%s'. Got %s", post.Message, body))
@@ -183,7 +183,7 @@ func TestGetNotificationEmailBodyFullNotificationDirectChannel(t *testing.T) {
teamStoreMock.On("GetByName", "testteam").Return(&model.Team{Name: "testteam"}, nil)
storeMock.On("Team").Return(&teamStoreMock)
body, err := th.App.getNotificationEmailBody(recipient, post, channel, channelName, senderName, teamName, teamURL, emailNotificationContentsType, true, translateFunc, "user-avatar.png")
body, err := th.App.getNotificationEmailBody(th.Context, recipient, post, channel, channelName, senderName, teamName, teamURL, emailNotificationContentsType, true, translateFunc, "user-avatar.png")
require.NoError(t, err)
require.Contains(t, body, "sent you a new message", fmt.Sprintf("Expected email text 'sent you a new message. Got "+body))
require.Contains(t, body, post.Message, fmt.Sprintf("Expected email text '%s'. Got %s", post.Message, body))
@@ -218,7 +218,7 @@ func TestGetNotificationEmailBodyFullNotificationLocaleTimeWithTimezone(t *testi
teamStoreMock.On("GetByName", "testteam").Return(&model.Team{Name: "testteam"}, nil)
storeMock.On("Team").Return(&teamStoreMock)
body, err := th.App.getNotificationEmailBody(recipient, post, channel, channelName, senderName, teamName, teamURL, emailNotificationContentsType, false, translateFunc, "user-avatar.png")
body, err := th.App.getNotificationEmailBody(th.Context, recipient, post, channel, channelName, senderName, teamName, teamURL, emailNotificationContentsType, false, translateFunc, "user-avatar.png")
require.NoError(t, err)
r, _ := regexp.Compile("E([S|D]+)T")
zone := r.FindString(body)
@@ -267,7 +267,7 @@ func TestGetNotificationEmailBodyFullNotificationLocaleTimeNoTimezone(t *testing
err = tmp.Execute(&text, fmt.Sprintf("%s:%s %s", formattedTime.Hour, formattedTime.Minute, formattedTime.TimeZone))
require.NoError(t, err)
body, err := th.App.getNotificationEmailBody(recipient, post, channel, channelName, senderName, teamName, teamURL, emailNotificationContentsType, true, translateFunc, "user-avatar.png")
body, err := th.App.getNotificationEmailBody(th.Context, recipient, post, channel, channelName, senderName, teamName, teamURL, emailNotificationContentsType, true, translateFunc, "user-avatar.png")
require.NoError(t, err)
postTimeLine := text.String()
require.Contains(t, body, postTimeLine, fmt.Sprintf("Expected email text '%s'. Got %s", postTimeLine, body))
@@ -301,7 +301,7 @@ func TestGetNotificationEmailBodyFullNotificationLocaleTime12Hour(t *testing.T)
teamStoreMock.On("GetByName", "testteam").Return(&model.Team{Name: "testteam"}, nil)
storeMock.On("Team").Return(&teamStoreMock)
body, err := th.App.getNotificationEmailBody(recipient, post, channel, channelName, senderName, teamName, teamURL, emailNotificationContentsType, false, translateFunc, "user-avatar.png")
body, err := th.App.getNotificationEmailBody(th.Context, recipient, post, channel, channelName, senderName, teamName, teamURL, emailNotificationContentsType, false, translateFunc, "user-avatar.png")
require.NoError(t, err)
require.Contains(t, body, "2:30 PM", fmt.Sprintf("Expected email text '2:30 PM'. Got %s", body))
}
@@ -334,7 +334,7 @@ func TestGetNotificationEmailBodyFullNotificationLocaleTime24Hour(t *testing.T)
teamStoreMock.On("GetByName", "testteam").Return(&model.Team{Name: "testteam"}, nil)
storeMock.On("Team").Return(&teamStoreMock)
body, err := th.App.getNotificationEmailBody(recipient, post, channel, channelName, senderName, teamName, teamURL, emailNotificationContentsType, true, translateFunc, "user-avatar.png")
body, err := th.App.getNotificationEmailBody(th.Context, recipient, post, channel, channelName, senderName, teamName, teamURL, emailNotificationContentsType, true, translateFunc, "user-avatar.png")
require.NoError(t, err)
require.Contains(t, body, "14:30", fmt.Sprintf("Expected email text '14:30'. Got %s", body))
}
@@ -364,7 +364,7 @@ func TestGetNotificationEmailBodyGenericNotificationPublicChannel(t *testing.T)
teamStoreMock.On("GetByName", "testteam").Return(&model.Team{Name: "testteam"}, nil)
storeMock.On("Team").Return(&teamStoreMock)
body, err := th.App.getNotificationEmailBody(recipient, post, channel, channelName, senderName, teamName, teamURL, emailNotificationContentsType, true, translateFunc, "user-avatar.png")
body, err := th.App.getNotificationEmailBody(th.Context, recipient, post, channel, channelName, senderName, teamName, teamURL, emailNotificationContentsType, true, translateFunc, "user-avatar.png")
require.NoError(t, err)
require.Contains(t, body, "mentioned you in a message", fmt.Sprintf("Expected email text 'mentioned you in a message. Got %s", body))
require.Contains(t, body, teamURL, fmt.Sprintf("Expected email text '%s'. Got %s", teamURL, body))
@@ -394,7 +394,7 @@ func TestGetNotificationEmailBodyGenericNotificationGroupChannel(t *testing.T) {
teamStoreMock.On("GetByName", "testteam").Return(&model.Team{Name: "testteam"}, nil)
storeMock.On("Team").Return(&teamStoreMock)
body, err := th.App.getNotificationEmailBody(recipient, post, channel, channelName, senderName, teamName, teamURL, emailNotificationContentsType, true, translateFunc, "user-avatar.png")
body, err := th.App.getNotificationEmailBody(th.Context, recipient, post, channel, channelName, senderName, teamName, teamURL, emailNotificationContentsType, true, translateFunc, "user-avatar.png")
require.NoError(t, err)
require.Contains(t, body, "sent you a new message", fmt.Sprintf("Expected email text 'sent you a new message. Got "+body))
require.Contains(t, body, teamURL, fmt.Sprintf("Expected email text '%s'. Got %s", teamURL, body))
@@ -424,7 +424,7 @@ func TestGetNotificationEmailBodyGenericNotificationPrivateChannel(t *testing.T)
teamStoreMock.On("GetByName", "testteam").Return(&model.Team{Name: "testteam"}, nil)
storeMock.On("Team").Return(&teamStoreMock)
body, err := th.App.getNotificationEmailBody(recipient, post, channel, channelName, senderName, teamName, teamURL, emailNotificationContentsType, true, translateFunc, "user-avatar.png")
body, err := th.App.getNotificationEmailBody(th.Context, recipient, post, channel, channelName, senderName, teamName, teamURL, emailNotificationContentsType, true, translateFunc, "user-avatar.png")
require.NoError(t, err)
require.Contains(t, body, "mentioned you in a message", fmt.Sprintf("Expected email text 'mentioned you in a message. Got %s", body))
require.Contains(t, body, teamURL, fmt.Sprintf("Expected email text '%s'. Got %s", teamURL, body))
@@ -454,7 +454,7 @@ func TestGetNotificationEmailBodyGenericNotificationDirectChannel(t *testing.T)
teamStoreMock.On("GetByName", "testteam").Return(&model.Team{Name: "testteam"}, nil)
storeMock.On("Team").Return(&teamStoreMock)
body, err := th.App.getNotificationEmailBody(recipient, post, channel, channelName, senderName, teamName, teamURL, emailNotificationContentsType, true, translateFunc, "user-avatar.png")
body, err := th.App.getNotificationEmailBody(th.Context, recipient, post, channel, channelName, senderName, teamName, teamURL, emailNotificationContentsType, true, translateFunc, "user-avatar.png")
require.NoError(t, err)
require.Contains(t, body, "sent you a new message", fmt.Sprintf("Expected email text 'sent you a new message. Got "+body))
require.Contains(t, body, teamURL, fmt.Sprintf("Expected email text '%s'. Got %s", teamURL, body))
@@ -486,7 +486,7 @@ func TestGetNotificationEmailEscapingChars(t *testing.T) {
teamStoreMock.On("GetByName", "testteam").Return(&model.Team{Name: "testteam"}, nil)
storeMock.On("Team").Return(&teamStoreMock)
body, err := th.App.getNotificationEmailBody(recipient, post, ch,
body, err := th.App.getNotificationEmailBody(th.Context, recipient, post, ch,
channelName, senderName, teamName, teamURL,
emailNotificationContentsType, true, translateFunc, "user-avatar.png")
require.NoError(t, err)
@@ -530,7 +530,7 @@ func TestGetNotificationEmailBodyPublicChannelMention(t *testing.T) {
channelStoreMock.On("GetByNames", "test", []string{ch.Name}, true).Return([]*model.Channel{ch}, nil)
storeMock.On("Channel").Return(&channelStoreMock)
body, err := th.App.getNotificationEmailBody(recipient, post, ch,
body, err := th.App.getNotificationEmailBody(th.Context, recipient, post, ch,
ch.Name, senderName, teamName, teamURL,
emailNotificationContentsType, true, translateFunc, "user-avatar.png")
require.NoError(t, err)
@@ -596,7 +596,7 @@ func TestGetNotificationEmailBodyMultiPublicChannelMention(t *testing.T) {
channelStoreMock.On("GetByNames", "test", []string{ch.Name, ch2.Name, ch3.Name}, true).Return([]*model.Channel{ch, ch2, ch3}, nil)
storeMock.On("Channel").Return(&channelStoreMock)
body, err := th.App.getNotificationEmailBody(recipient, post, ch,
body, err := th.App.getNotificationEmailBody(th.Context, recipient, post, ch,
ch.Name, senderName, teamName, teamURL,
emailNotificationContentsType, true, translateFunc, "user-avatar.png")
require.NoError(t, err)
@@ -645,7 +645,7 @@ func TestGetNotificationEmailBodyPrivateChannelMention(t *testing.T) {
channelStoreMock.On("GetByNames", "test", []string{ch.Name}, true).Return([]*model.Channel{ch}, nil)
storeMock.On("Channel").Return(&channelStoreMock)
body, err := th.App.getNotificationEmailBody(recipient, post, ch,
body, err := th.App.getNotificationEmailBody(th.Context, recipient, post, ch,
ch.Name, senderName, teamName, teamURL,
emailNotificationContentsType, true, translateFunc, "user-avatar.png")
require.NoError(t, err)
@@ -678,7 +678,7 @@ func TestGenerateHyperlinkForChannelsPublic(t *testing.T) {
channelStoreMock.On("GetByNames", "test", []string{ch.Name}, true).Return([]*model.Channel{ch}, nil)
storeMock.On("Channel").Return(&channelStoreMock)
outMessage, err := th.App.generateHyperlinkForChannels(message+mention, teamName, teamURL)
outMessage, err := th.App.generateHyperlinkForChannels(th.Context, message+mention, teamName, teamURL)
require.Nil(t, err)
channelURL := teamURL + "/channels/" + ch.Name
assert.Equal(t, message+"<a href='"+channelURL+"'>"+mention+"</a>", outMessage)
@@ -728,7 +728,7 @@ func TestGenerateHyperlinkForChannelsMultiPublic(t *testing.T) {
channelStoreMock.On("GetByNames", "test", []string{ch.Name, ch2.Name, ch3.Name}, true).Return([]*model.Channel{ch, ch2, ch3}, nil)
storeMock.On("Channel").Return(&channelStoreMock)
outMessage, err := th.App.generateHyperlinkForChannels(message, teamName, teamURL)
outMessage, err := th.App.generateHyperlinkForChannels(th.Context, message, teamName, teamURL)
require.Nil(t, err)
channelURL := teamURL + "/channels/" + ch.Name
channelURL2 := teamURL + "/channels/" + ch2.Name
@@ -762,7 +762,7 @@ func TestGenerateHyperlinkForChannelsPrivate(t *testing.T) {
channelStoreMock.On("GetByNames", "test", []string{ch.Name}, true).Return([]*model.Channel{ch}, nil)
storeMock.On("Channel").Return(&channelStoreMock)
outMessage, err := th.App.generateHyperlinkForChannels(message, teamName, teamURL)
outMessage, err := th.App.generateHyperlinkForChannels(th.Context, message, teamName, teamURL)
require.Nil(t, err)
assert.Equal(t, message, outMessage)
}
@@ -791,7 +791,7 @@ func TestLandingLink(t *testing.T) {
teamStoreMock.On("GetByName", "testteam").Return(&model.Team{Name: "testteam"}, nil)
storeMock.On("Team").Return(&teamStoreMock)
body, err := th.App.getNotificationEmailBody(recipient, post, channel, channelName, senderName, teamName, teamURL, emailNotificationContentsType, true, translateFunc, "user-avatar.png")
body, err := th.App.getNotificationEmailBody(th.Context, recipient, post, channel, channelName, senderName, teamName, teamURL, emailNotificationContentsType, true, translateFunc, "user-avatar.png")
require.NoError(t, err)
require.Contains(t, body, teamURL, fmt.Sprintf("Expected email text '%s'. Got %s", teamURL, body))
}
@@ -821,7 +821,7 @@ func TestLandingLinkPermalink(t *testing.T) {
teamStoreMock.On("GetByName", "testteam").Return(&model.Team{Name: "testteam"}, nil)
storeMock.On("Team").Return(&teamStoreMock)
body, err := th.App.getNotificationEmailBody(recipient, post, channel, channelName, senderName, teamName, teamURL, emailNotificationContentsType, true, translateFunc, "user-avatar.png")
body, err := th.App.getNotificationEmailBody(th.Context, recipient, post, channel, channelName, senderName, teamName, teamURL, emailNotificationContentsType, true, translateFunc, "user-avatar.png")
require.NoError(t, err)
require.Contains(t, body, teamURL+"/pl/"+post.Id, fmt.Sprintf("Expected email text '%s'. Got %s", teamURL, body))
}
@@ -928,7 +928,7 @@ func TestMarkdownConversion(t *testing.T) {
Id: "Test_id",
Message: tt.args,
}
got, err := th.App.getNotificationEmailBody(recipient, post, channel, "ChannelName", "sender", "testteam", "http://localhost:8065/landing#/testteam", model.EmailNotificationContentsFull, true, i18n.GetUserTranslations("en"), "user-avatar.png")
got, err := th.App.getNotificationEmailBody(th.Context, recipient, post, channel, "ChannelName", "sender", "testteam", "http://localhost:8065/landing#/testteam", model.EmailNotificationContentsFull, true, i18n.GetUserTranslations("en"), "user-avatar.png")
require.NoError(t, err)
require.Contains(t, got, tt.want)
})

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

@@ -15,6 +15,7 @@ import (
"github.com/pkg/errors"
"github.com/mattermost/mattermost-server/v6/app/request"
"github.com/mattermost/mattermost-server/v6/model"
"github.com/mattermost/mattermost-server/v6/shared/i18n"
"github.com/mattermost/mattermost-server/v6/shared/mlog"
@@ -56,10 +57,11 @@ type PushNotification struct {
replyToThreadType string
}
func (a *App) sendPushNotificationSync(post *model.Post, user *model.User, channel *model.Channel, channelName string, senderName string,
func (a *App) sendPushNotificationSync(c request.CTX, post *model.Post, user *model.User, channel *model.Channel, channelName string, senderName string,
explicitMention bool, channelWideMention bool, replyToThreadType string) *model.AppError {
cfg := a.Config()
msg, appErr := a.BuildPushNotificationMessage(
c,
*cfg.EmailSettings.PushNotificationContents,
post,
user,
@@ -218,7 +220,7 @@ func (a *App) getPushNotificationMessage(contentsConfig, postMessage string, exp
return senderName + userLocale("api.post.send_notifications_and_forget.push_general_message")
}
func (a *App) clearPushNotificationSync(currentSessionId, userID, channelID, rootID string) *model.AppError {
func (a *App) clearPushNotificationSync(c request.CTX, currentSessionId, userID, channelID, rootID string) *model.AppError {
msg := &model.PushNotification{
Type: model.PushTypeClear,
Version: model.PushMessageV2,
@@ -226,7 +228,7 @@ func (a *App) clearPushNotificationSync(currentSessionId, userID, channelID, roo
RootId: rootID,
ContentAvailable: 1,
Badge: 0,
IsCRTEnabled: a.IsCRTEnabledForUser(userID),
IsCRTEnabled: a.IsCRTEnabledForUser(c, userID),
}
unreadCount, err := a.Srv().Store.User().GetUnreadCount(userID)
@@ -288,7 +290,7 @@ func (a *App) UpdateMobileAppBadge(userID string) {
}
}
func (s *Server) createPushNotificationsHub() {
func (s *Server) createPushNotificationsHub(c request.CTX) {
buffer := *s.Config().EmailSettings.PushNotificationBuffer
hub := PushNotificationsHub{
notificationsChan: make(chan PushNotification, buffer),
@@ -299,11 +301,11 @@ func (s *Server) createPushNotificationsHub() {
stopChan: make(chan struct{}),
buffer: buffer,
}
go hub.start()
go hub.start(c)
s.PushNotificationsHub = hub
}
func (hub *PushNotificationsHub) start() {
func (hub *PushNotificationsHub) start(c request.CTX) {
hub.wg.Add(1)
defer hub.wg.Done()
for {
@@ -330,9 +332,10 @@ func (hub *PushNotificationsHub) start() {
var err *model.AppError
switch notification.notificationType {
case notificationTypeClear:
err = hub.app.clearPushNotificationSync(notification.currentSessionId, notification.userID, notification.channelID, notification.rootID)
err = hub.app.clearPushNotificationSync(c, notification.currentSessionId, notification.userID, notification.channelID, notification.rootID)
case notificationTypeMessage:
err = hub.app.sendPushNotificationSync(
c,
notification.post,
notification.user,
notification.channel,
@@ -552,7 +555,7 @@ func DoesStatusAllowPushNotification(userNotifyProps model.StringMap, status *mo
return false
}
func (a *App) BuildPushNotificationMessage(contentsConfig string, post *model.Post, user *model.User, channel *model.Channel, channelName string, senderName string,
func (a *App) 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) {
var msg *model.PushNotification
@@ -563,9 +566,9 @@ func (a *App) BuildPushNotificationMessage(contentsConfig string, post *model.Po
}
if contentsConfig == model.IdLoadedNotification {
msg = a.buildIdLoadedPushNotificationMessage(channel, post, user)
msg = a.buildIdLoadedPushNotificationMessage(c, channel, post, user)
} else {
msg = a.buildFullPushNotificationMessage(contentsConfig, post, user, channel, channelName, senderName, explicitMention, channelWideMention, replyToThreadType)
msg = a.buildFullPushNotificationMessage(c, contentsConfig, post, user, channel, channelName, senderName, explicitMention, channelWideMention, replyToThreadType)
}
unreadCount, err := a.Srv().Store.User().GetUnreadCount(user.Id)
@@ -615,13 +618,13 @@ func (a *App) SendTestPushNotification(deviceID string) string {
return "true"
}
func (a *App) buildIdLoadedPushNotificationMessage(channel *model.Channel, post *model.Post, user *model.User) *model.PushNotification {
func (a *App) buildIdLoadedPushNotificationMessage(c request.CTX, channel *model.Channel, post *model.Post, user *model.User) *model.PushNotification {
userLocale := i18n.GetUserTranslations(user.Locale)
msg := &model.PushNotification{
PostId: post.Id,
ChannelId: post.ChannelId,
RootId: post.RootId,
IsCRTEnabled: a.IsCRTEnabledForUser(user.Id),
IsCRTEnabled: a.IsCRTEnabledForUser(c, user.Id),
Category: model.CategoryCanReply,
Version: model.PushMessageV2,
TeamId: channel.TeamId,
@@ -634,7 +637,7 @@ func (a *App) buildIdLoadedPushNotificationMessage(channel *model.Channel, post
return msg
}
func (a *App) buildFullPushNotificationMessage(contentsConfig string, post *model.Post, user *model.User, channel *model.Channel, channelName string, senderName string,
func (a *App) buildFullPushNotificationMessage(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 {
msg := &model.PushNotification{
@@ -656,7 +659,7 @@ func (a *App) buildFullPushNotificationMessage(contentsConfig string, post *mode
msg.ChannelName = channelName
}
if a.IsCRTEnabledForUser(user.Id) {
if a.IsCRTEnabledForUser(c, user.Id) {
msg.IsCRTEnabled = true
if post.RootId != "" {
if contentsConfig != model.GenericNoChannelNotification {

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

@@ -941,11 +941,11 @@ func TestBuildPushNotificationMessageMentions(t *testing.T) {
receiver := th.CreateUser()
th.LinkUserToTeam(sender, team)
th.LinkUserToTeam(receiver, team)
channel1 := th.CreateChannel(team)
channel1 := th.CreateChannel(th.Context, team)
th.AddUserToChannel(sender, channel1)
th.AddUserToChannel(receiver, channel1)
channel2 := th.CreateChannel(team)
channel2 := th.CreateChannel(th.Context, team)
th.AddUserToChannel(sender, channel2)
th.AddUserToChannel(receiver, channel2)
@@ -981,7 +981,7 @@ func TestBuildPushNotificationMessageMentions(t *testing.T) {
} {
t.Run(name, func(t *testing.T) {
receiver.NotifyProps["push"] = tc.pushNotifyProps
msg, err := th.App.BuildPushNotificationMessage(model.FullNotification, post, receiver, channel1, channel1.Name, sender.Username, tc.explicitMention, tc.channelWideMention, tc.replyToThreadType)
msg, err := th.App.BuildPushNotificationMessage(th.Context, model.FullNotification, post, receiver, channel1, channel1.Name, sender.Username, tc.explicitMention, tc.channelWideMention, tc.replyToThreadType)
require.Nil(t, err)
assert.Equal(t, tc.expectedBadge, msg.Badge)
})
@@ -1158,7 +1158,7 @@ func TestClearPushNotificationSync(t *testing.T) {
*cfg.ServiceSettings.CollapsedThreads = model.CollapsedThreadsDisabled
})
err := th.App.clearPushNotificationSync(sess1.Id, "user1", "channel1", "")
err := th.App.clearPushNotificationSync(th.Context, sess1.Id, "user1", "channel1", "")
require.Nil(t, err)
// Server side verification.
// We verify that 1 request has been sent, and also check the message contents.
@@ -1180,7 +1180,7 @@ func TestClearPushNotificationSync(t *testing.T) {
mockThreadStore.On("GetTotalUnreadMentions", mock.AnythingOfType("string"), mock.AnythingOfType("string"), mock.Anything).Return(int64(3), nil)
mockStore.On("Thread").Return(&mockThreadStore)
err = th.App.clearPushNotificationSync(sess1.Id, "user1", "channel1", "")
err = th.App.clearPushNotificationSync(th.Context, sess1.Id, "user1", "channel1", "")
require.Nil(t, err)
assert.Equal(t, handler.notifications()[1].Badge, 4)
}
@@ -1425,6 +1425,9 @@ func TestAllPushNotifications(t *testing.T) {
}
func TestPushNotificationRace(t *testing.T) {
th := Setup(t)
defer th.TearDown()
memoryStore := config.NewTestMemoryStore()
mockStore := testlib.GetMockStoreForSetupFunctions()
mockPreferenceStore := mocks.PreferenceStore{}
@@ -1452,7 +1455,7 @@ func TestPushNotificationRace(t *testing.T) {
app := New(ServerConnector(s.Channels()))
require.NotPanics(t, func() {
s.createPushNotificationsHub()
s.createPushNotificationsHub(th.Context)
s.StopPushNotificationsHubWorkers()
@@ -1495,7 +1498,7 @@ func TestPushNotificationAttachment(t *testing.T) {
ch := &model.Channel{}
t.Run("The notification should contain the fallback message from the attachment", func(t *testing.T) {
pn := th.App.buildFullPushNotificationMessage("full", post, user, ch, ch.Name, "test", false, false, "")
pn := th.App.buildFullPushNotificationMessage(th.Context, "full", post, user, ch, ch.Name, "test", false, false, "")
assert.Equal(t, "test: hello world\nfallback text", pn.Message)
})

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

@@ -34,7 +34,7 @@ func TestSendNotifications(t *testing.T) {
th := Setup(t).InitBasic()
defer th.TearDown()
th.App.AddUserToChannel(th.BasicUser2, th.BasicChannel, false)
th.App.AddUserToChannel(th.Context, th.BasicUser2, th.BasicChannel, false)
post1, appErr := th.App.CreatePostMissingChannel(th.Context, &model.Post{
UserId: th.BasicUser.Id,
@@ -45,7 +45,7 @@ func TestSendNotifications(t *testing.T) {
}, true)
require.Nil(t, appErr)
mentions, err := th.App.SendNotifications(post1, th.BasicTeam, th.BasicChannel, th.BasicUser, nil, true)
mentions, err := th.App.SendNotifications(th.Context, post1, th.BasicTeam, th.BasicChannel, th.BasicUser, nil, true)
require.NoError(t, err)
require.NotNil(t, mentions)
require.True(t, utils.StringInSlice(th.BasicUser2.Id, mentions), "mentions", mentions)
@@ -68,14 +68,14 @@ func TestSendNotifications(t *testing.T) {
groupMentionPost, createPostErr := th.App.CreatePost(th.Context, groupMentionPost, th.BasicChannel, false, true)
require.Nil(t, createPostErr)
mentions, err = th.App.SendNotifications(groupMentionPost, th.BasicTeam, th.BasicChannel, th.BasicUser, nil, true)
mentions, err = th.App.SendNotifications(th.Context, groupMentionPost, th.BasicTeam, th.BasicChannel, th.BasicUser, nil, true)
require.NoError(t, err)
require.NotNil(t, mentions)
require.Len(t, mentions, 0)
th.App.Srv().SetLicense(getLicWithSkuShortName(model.LicenseShortSkuProfessional))
mentions, err = th.App.SendNotifications(groupMentionPost, th.BasicTeam, th.BasicChannel, th.BasicUser, nil, true)
mentions, err = th.App.SendNotifications(th.Context, groupMentionPost, th.BasicTeam, th.BasicChannel, th.BasicUser, nil, true)
require.NoError(t, err)
require.NotNil(t, mentions)
require.Len(t, mentions, 1)
@@ -91,7 +91,7 @@ func TestSendNotifications(t *testing.T) {
}, true)
require.Nil(t, appErr)
mentions, err = th.App.SendNotifications(post2, th.BasicTeam, dm, th.BasicUser, nil, true)
mentions, err = th.App.SendNotifications(th.Context, post2, th.BasicTeam, dm, th.BasicUser, nil, true)
require.NoError(t, err)
require.NotNil(t, mentions)
@@ -107,12 +107,12 @@ func TestSendNotifications(t *testing.T) {
}, true)
require.Nil(t, appErr)
mentions, err = th.App.SendNotifications(post3, th.BasicTeam, dm, th.BasicUser, nil, true)
mentions, err = th.App.SendNotifications(th.Context, post3, th.BasicTeam, dm, th.BasicUser, nil, true)
require.NoError(t, err)
require.NotNil(t, mentions)
th.BasicChannel.DeleteAt = 1
mentions, err = th.App.SendNotifications(post1, th.BasicTeam, th.BasicChannel, th.BasicUser, nil, true)
mentions, err = th.App.SendNotifications(th.Context, post1, th.BasicTeam, th.BasicChannel, th.BasicUser, nil, true)
require.NoError(t, err)
require.Empty(t, mentions)
@@ -143,7 +143,7 @@ func TestSendNotifications(t *testing.T) {
Order: []string{rootPost.Id, childPost.Id},
Posts: map[string]*model.Post{rootPost.Id: rootPost, childPost.Id: childPost},
}
mentions, err = th.App.SendNotifications(childPost, th.BasicTeam, th.BasicChannel, th.BasicUser2, &postList, true)
mentions, err = th.App.SendNotifications(th.Context, childPost, th.BasicTeam, th.BasicChannel, th.BasicUser2, &postList, true)
require.NoError(t, err)
require.False(t, utils.StringInSlice(user.Id, mentions))
}
@@ -172,7 +172,7 @@ func TestSendNotificationsWithManyUsers(t *testing.T) {
for i := 0; i < 10; i++ {
user := th.CreateUser()
th.LinkUserToTeam(user, th.BasicTeam)
th.App.AddUserToChannel(user, th.BasicChannel, false)
th.App.AddUserToChannel(th.Context, user, th.BasicChannel, false)
users = append(users, user)
}
@@ -230,7 +230,7 @@ func TestSendOutOfChannelMentions(t *testing.T) {
post := &model.Post{}
potentialMentions := []string{user2.Username}
sent, err := th.App.sendOutOfChannelMentions(user1, post, channel, potentialMentions)
sent, err := th.App.sendOutOfChannelMentions(th.Context, user1, post, channel, potentialMentions)
assert.NoError(t, err)
assert.True(t, sent)
@@ -240,7 +240,7 @@ func TestSendOutOfChannelMentions(t *testing.T) {
post := &model.Post{}
potentialMentions := []string{"not a user"}
sent, err := th.App.sendOutOfChannelMentions(user1, post, channel, potentialMentions)
sent, err := th.App.sendOutOfChannelMentions(th.Context, user1, post, channel, potentialMentions)
assert.NoError(t, err)
assert.False(t, sent)
@@ -258,14 +258,14 @@ func TestFilterOutOfChannelMentions(t *testing.T) {
user3 := th.CreateUser()
guest := th.CreateGuest()
user4 := th.CreateUser()
guestAndUser4Channel := th.CreateChannel(th.BasicTeam)
guestAndUser4Channel := th.CreateChannel(th.Context, th.BasicTeam)
defer th.App.PermanentDeleteUser(th.Context, guest)
th.LinkUserToTeam(user3, th.BasicTeam)
th.LinkUserToTeam(user4, th.BasicTeam)
th.LinkUserToTeam(guest, th.BasicTeam)
th.App.AddUserToChannel(guest, channel, false)
th.App.AddUserToChannel(user4, guestAndUser4Channel, false)
th.App.AddUserToChannel(guest, guestAndUser4Channel, false)
th.App.AddUserToChannel(th.Context, guest, channel, false)
th.App.AddUserToChannel(th.Context, user4, guestAndUser4Channel, false)
th.App.AddUserToChannel(th.Context, guest, guestAndUser4Channel, false)
t.Run("should return users not in the channel", func(t *testing.T) {
post := &model.Post{}
@@ -385,9 +385,9 @@ func TestFilterOutOfChannelMentions(t *testing.T) {
_, appErr = th.App.UpsertGroupMember(group.Id, nonChannelMember.Id)
require.Nil(t, appErr)
constrainedChannel := th.CreateChannel(th.BasicTeam)
constrainedChannel := th.CreateChannel(th.Context, th.BasicTeam)
constrainedChannel.GroupConstrained = model.NewBool(true)
constrainedChannel, appErr = th.App.UpdateChannel(constrainedChannel)
constrainedChannel, appErr = th.App.UpdateChannel(th.Context, constrainedChannel)
require.Nil(t, appErr)
_, appErr = th.App.UpsertGroupSyncable(&model.GroupSyncable{
@@ -1056,24 +1056,24 @@ func TestAllowChannelMentions(t *testing.T) {
post := &model.Post{ChannelId: th.BasicChannel.Id, UserId: th.BasicUser.Id}
t.Run("should return true for a regular post with few channel members", func(t *testing.T) {
allowChannelMentions := th.App.allowChannelMentions(post, 5)
allowChannelMentions := th.App.allowChannelMentions(th.Context, post, 5)
assert.True(t, allowChannelMentions)
})
t.Run("should return false for a channel header post", func(t *testing.T) {
headerChangePost := &model.Post{ChannelId: th.BasicChannel.Id, UserId: th.BasicUser.Id, Type: model.PostTypeHeaderChange}
allowChannelMentions := th.App.allowChannelMentions(headerChangePost, 5)
allowChannelMentions := th.App.allowChannelMentions(th.Context, headerChangePost, 5)
assert.False(t, allowChannelMentions)
})
t.Run("should return false for a channel purpose post", func(t *testing.T) {
purposeChangePost := &model.Post{ChannelId: th.BasicChannel.Id, UserId: th.BasicUser.Id, Type: model.PostTypePurposeChange}
allowChannelMentions := th.App.allowChannelMentions(purposeChangePost, 5)
allowChannelMentions := th.App.allowChannelMentions(th.Context, purposeChangePost, 5)
assert.False(t, allowChannelMentions)
})
t.Run("should return false for a regular post with many channel members", func(t *testing.T) {
allowChannelMentions := th.App.allowChannelMentions(post, int(*th.App.Config().TeamSettings.MaxNotificationsPerChannel)+1)
allowChannelMentions := th.App.allowChannelMentions(th.Context, post, int(*th.App.Config().TeamSettings.MaxNotificationsPerChannel)+1)
assert.False(t, allowChannelMentions)
})
@@ -1082,7 +1082,7 @@ func TestAllowChannelMentions(t *testing.T) {
defer th.AddPermissionToRole(model.PermissionUseChannelMentions.Id, model.ChannelAdminRoleId)
th.RemovePermissionFromRole(model.PermissionUseChannelMentions.Id, model.ChannelUserRoleId)
th.RemovePermissionFromRole(model.PermissionUseChannelMentions.Id, model.ChannelAdminRoleId)
allowChannelMentions := th.App.allowChannelMentions(post, 5)
allowChannelMentions := th.App.allowChannelMentions(th.Context, post, 5)
assert.False(t, allowChannelMentions)
})
}
@@ -1108,26 +1108,26 @@ func TestAllowGroupMentions(t *testing.T) {
for name, tc := range tests {
t.Run(name, func(t *testing.T) {
th.App.Srv().SetLicense(tc.license)
got := th.App.allowGroupMentions(post)
got := th.App.allowGroupMentions(th.Context, post)
assert.Equal(t, tc.want, got)
})
}
})
t.Run("should return true for a regular post with few channel members", func(t *testing.T) {
allowGroupMentions := th.App.allowGroupMentions(post)
allowGroupMentions := th.App.allowGroupMentions(th.Context, post)
assert.True(t, allowGroupMentions)
})
t.Run("should return false for a channel header post", func(t *testing.T) {
headerChangePost := &model.Post{ChannelId: th.BasicChannel.Id, UserId: th.BasicUser.Id, Type: model.PostTypeHeaderChange}
allowGroupMentions := th.App.allowGroupMentions(headerChangePost)
allowGroupMentions := th.App.allowGroupMentions(th.Context, headerChangePost)
assert.False(t, allowGroupMentions)
})
t.Run("should return false for a channel purpose post", func(t *testing.T) {
purposeChangePost := &model.Post{ChannelId: th.BasicChannel.Id, UserId: th.BasicUser.Id, Type: model.PostTypePurposeChange}
allowGroupMentions := th.App.allowGroupMentions(purposeChangePost)
allowGroupMentions := th.App.allowGroupMentions(th.Context, purposeChangePost)
assert.False(t, allowGroupMentions)
})
@@ -1138,7 +1138,7 @@ func TestAllowGroupMentions(t *testing.T) {
}()
th.RemovePermissionFromRole(model.PermissionUseGroupMentions.Id, model.ChannelUserRoleId)
th.RemovePermissionFromRole(model.PermissionUseGroupMentions.Id, model.ChannelAdminRoleId)
allowGroupMentions := th.App.allowGroupMentions(post)
allowGroupMentions := th.App.allowGroupMentions(th.Context, post)
assert.False(t, allowGroupMentions)
})
}
@@ -2407,7 +2407,7 @@ func TestUserAllowsEmail(t *testing.T) {
model.MarkUnreadNotifyProp: model.ChannelMarkUnreadAll,
}
assert.True(t, th.App.userAllowsEmail(user, channelMemberNotificationProps, &model.Post{Type: "some-post-type"}))
assert.True(t, th.App.userAllowsEmail(th.Context, user, channelMemberNotificationProps, &model.Post{Type: "some-post-type"}))
})
t.Run("should return false in case the status is ONLINE", func(t *testing.T) {
@@ -2420,7 +2420,7 @@ func TestUserAllowsEmail(t *testing.T) {
model.MarkUnreadNotifyProp: model.ChannelMarkUnreadAll,
}
assert.False(t, th.App.userAllowsEmail(user, channelMemberNotificationProps, &model.Post{Type: "some-post-type"}))
assert.False(t, th.App.userAllowsEmail(th.Context, user, channelMemberNotificationProps, &model.Post{Type: "some-post-type"}))
})
t.Run("should return false in case the EMAIL_NOTIFY_PROP is false", func(t *testing.T) {
@@ -2433,7 +2433,7 @@ func TestUserAllowsEmail(t *testing.T) {
model.MarkUnreadNotifyProp: model.ChannelMarkUnreadAll,
}
assert.False(t, th.App.userAllowsEmail(user, channelMemberNotificationProps, &model.Post{Type: "some-post-type"}))
assert.False(t, th.App.userAllowsEmail(th.Context, user, channelMemberNotificationProps, &model.Post{Type: "some-post-type"}))
})
t.Run("should return false in case the MARK_UNREAD_NOTIFY_PROP is CHANNEL_MARK_UNREAD_MENTION", func(t *testing.T) {
@@ -2446,7 +2446,7 @@ func TestUserAllowsEmail(t *testing.T) {
model.MarkUnreadNotifyProp: model.ChannelMarkUnreadMention,
}
assert.False(t, th.App.userAllowsEmail(user, channelMemberNotificationProps, &model.Post{Type: "some-post-type"}))
assert.False(t, th.App.userAllowsEmail(th.Context, user, channelMemberNotificationProps, &model.Post{Type: "some-post-type"}))
})
t.Run("should return false in case the Post type is POST_AUTO_RESPONDER", func(t *testing.T) {
@@ -2459,7 +2459,7 @@ func TestUserAllowsEmail(t *testing.T) {
model.MarkUnreadNotifyProp: model.ChannelMarkUnreadAll,
}
assert.False(t, th.App.userAllowsEmail(user, channelMemberNotificationProps, &model.Post{Type: model.PostTypeAutoResponder}))
assert.False(t, th.App.userAllowsEmail(th.Context, user, channelMemberNotificationProps, &model.Post{Type: model.PostTypeAutoResponder}))
})
t.Run("should return false in case the status is STATUS_OUT_OF_OFFICE", func(t *testing.T) {
@@ -2472,7 +2472,7 @@ func TestUserAllowsEmail(t *testing.T) {
model.MarkUnreadNotifyProp: model.ChannelMarkUnreadAll,
}
assert.False(t, th.App.userAllowsEmail(user, channelMemberNotificationProps, &model.Post{Type: model.PostTypeAutoResponder}))
assert.False(t, th.App.userAllowsEmail(th.Context, user, channelMemberNotificationProps, &model.Post{Type: model.PostTypeAutoResponder}))
})
t.Run("should return false in case the status is STATUS_ONLINE", func(t *testing.T) {
@@ -2485,7 +2485,7 @@ func TestUserAllowsEmail(t *testing.T) {
model.MarkUnreadNotifyProp: model.ChannelMarkUnreadAll,
}
assert.False(t, th.App.userAllowsEmail(user, channelMemberNotificationProps, &model.Post{Type: model.PostTypeAutoResponder}))
assert.False(t, th.App.userAllowsEmail(th.Context, user, channelMemberNotificationProps, &model.Post{Type: model.PostTypeAutoResponder}))
})
t.Run("should return false in the case user is a bot", func(t *testing.T) {
@@ -2498,7 +2498,7 @@ func TestUserAllowsEmail(t *testing.T) {
model.MarkUnreadNotifyProp: model.ChannelMarkUnreadAll,
}
assert.False(t, th.App.userAllowsEmail(user, channelMemberNotifcationProps, &model.Post{Type: model.PostTypeAutoResponder}))
assert.False(t, th.App.userAllowsEmail(th.Context, user, channelMemberNotifcationProps, &model.Post{Type: model.PostTypeAutoResponder}))
})
}
@@ -2517,13 +2517,13 @@ func TestInsertGroupMentions(t *testing.T) {
groupChannelMember := th.CreateUser()
th.LinkUserToTeam(groupChannelMember, team)
th.App.AddUserToChannel(groupChannelMember, channel, false)
th.App.AddUserToChannel(th.Context, groupChannelMember, channel, false)
_, err = th.App.UpsertGroupMember(group.Id, groupChannelMember.Id)
require.Nil(t, err)
nonGroupChannelMember := th.CreateUser()
th.LinkUserToTeam(nonGroupChannelMember, team)
th.App.AddUserToChannel(nonGroupChannelMember, channel, false)
th.App.AddUserToChannel(th.Context, nonGroupChannelMember, channel, false)
nonChannelGroupMember := th.CreateUser()
th.LinkUserToTeam(nonChannelGroupMember, team)
@@ -2593,7 +2593,7 @@ func TestInsertGroupMentions(t *testing.T) {
})
t.Run("should add mentions for members while in group channel", func(t *testing.T) {
groupChannel, err := th.App.CreateGroupChannel([]string{groupChannelMember.Id, nonGroupChannelMember.Id, th.BasicUser.Id}, groupChannelMember.Id)
groupChannel, err := th.App.CreateGroupChannel(th.Context, []string{groupChannelMember.Id, nonGroupChannelMember.Id, th.BasicUser.Id}, groupChannelMember.Id)
require.Nil(t, err)
mentions := &ExplicitMentions{}
@@ -2639,9 +2639,9 @@ func TestGetGroupsAllowedForReferenceInChannel(t *testing.T) {
require.Nil(t, err)
// Sync first group to constrained channel
constrainedChannel := th.CreateChannel(th.BasicTeam)
constrainedChannel := th.CreateChannel(th.Context, th.BasicTeam)
constrainedChannel.GroupConstrained = model.NewBool(true)
constrainedChannel, err = th.App.UpdateChannel(constrainedChannel)
constrainedChannel, err = th.App.UpdateChannel(th.Context, constrainedChannel)
require.Nil(t, err)
_, err = th.App.UpsertGroupSyncable(&model.GroupSyncable{
GroupId: group1.Id,
@@ -2812,7 +2812,7 @@ func TestReplyPostNotificationsWithCRT(t *testing.T) {
Order: []string{rootPost.Id, childPost.Id},
Posts: map[string]*model.Post{rootPost.Id: rootPost, childPost.Id: childPost},
}
mentions, err := th.App.SendNotifications(childPost, th.BasicTeam, th.BasicChannel, th.BasicUser2, &postList, true)
mentions, err := th.App.SendNotifications(th.Context, childPost, th.BasicTeam, th.BasicChannel, th.BasicUser2, &postList, true)
require.NoError(t, err)
assert.False(t, utils.StringInSlice(user.Id, mentions))

Разница между файлами не показана из-за своего большого размера Загрузить разницу

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

@@ -13,6 +13,7 @@ import (
"github.com/pkg/errors"
"github.com/mattermost/mattermost-server/v6/app/request"
"github.com/mattermost/mattermost-server/v6/model"
)
@@ -27,8 +28,8 @@ func (s *permissionsServiceWrapper) HasPermissionToTeam(userID string, teamID st
return s.app.HasPermissionToTeam(userID, teamID, permission)
}
func (s *permissionsServiceWrapper) HasPermissionToChannel(askingUserID string, channelID string, permission *model.Permission) bool {
return s.app.HasPermissionToChannel(askingUserID, channelID, permission)
func (s *permissionsServiceWrapper) HasPermissionToChannel(c request.CTX, askingUserID string, channelID string, permission *model.Permission) bool {
return s.app.HasPermissionToChannel(c, askingUserID, channelID, permission)
}
func (a *App) ResetPermissionsSystem() *model.AppError {

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

@@ -5,7 +5,6 @@ package app
import (
"bytes"
"context"
"encoding/json"
"fmt"
"io"
@@ -418,7 +417,7 @@ func (api *PluginAPI) CreateChannel(channel *model.Channel) (*model.Channel, *mo
}
func (api *PluginAPI) DeleteChannel(channelID string) *model.AppError {
channel, err := api.app.GetChannel(channelID)
channel, err := api.app.GetChannel(api.ctx, channelID)
if err != nil {
return err
}
@@ -426,7 +425,7 @@ func (api *PluginAPI) DeleteChannel(channelID string) *model.AppError {
}
func (api *PluginAPI) GetPublicChannelsForTeam(teamID string, page, perPage int) ([]*model.Channel, *model.AppError) {
channels, err := api.app.GetPublicChannelsForTeam(teamID, page*perPage, perPage)
channels, err := api.app.GetPublicChannelsForTeam(api.ctx, teamID, page*perPage, perPage)
if err != nil {
return nil, err
}
@@ -434,19 +433,19 @@ func (api *PluginAPI) GetPublicChannelsForTeam(teamID string, page, perPage int)
}
func (api *PluginAPI) GetChannel(channelID string) (*model.Channel, *model.AppError) {
return api.app.GetChannel(channelID)
return api.app.GetChannel(api.ctx, channelID)
}
func (api *PluginAPI) GetChannelByName(teamID, name string, includeDeleted bool) (*model.Channel, *model.AppError) {
return api.app.GetChannelByName(name, teamID, includeDeleted)
return api.app.GetChannelByName(api.ctx, name, teamID, includeDeleted)
}
func (api *PluginAPI) GetChannelByNameForTeamName(teamName, channelName string, includeDeleted bool) (*model.Channel, *model.AppError) {
return api.app.GetChannelByNameForTeamName(channelName, teamName, includeDeleted)
return api.app.GetChannelByNameForTeamName(api.ctx, channelName, teamName, includeDeleted)
}
func (api *PluginAPI) GetChannelsForTeamForUser(teamID, userID string, includeDeleted bool) ([]*model.Channel, *model.AppError) {
channels, err := api.app.GetChannelsForTeamForUser(teamID, userID, &model.ChannelSearchOpts{
channels, err := api.app.GetChannelsForTeamForUser(api.ctx, teamID, userID, &model.ChannelSearchOpts{
IncludeDeleted: includeDeleted,
LastDeleteAt: 0,
})
@@ -457,11 +456,11 @@ func (api *PluginAPI) GetChannelsForTeamForUser(teamID, userID string, includeDe
}
func (api *PluginAPI) GetChannelStats(channelID string) (*model.ChannelStats, *model.AppError) {
memberCount, err := api.app.GetChannelMemberCount(channelID)
memberCount, err := api.app.GetChannelMemberCount(api.ctx, channelID)
if err != nil {
return nil, err
}
guestCount, err := api.app.GetChannelMemberCount(channelID)
guestCount, err := api.app.GetChannelMemberCount(api.ctx, channelID)
if err != nil {
return nil, err
}
@@ -473,15 +472,15 @@ func (api *PluginAPI) GetDirectChannel(userID1, userID2 string) (*model.Channel,
}
func (api *PluginAPI) GetGroupChannel(userIDs []string) (*model.Channel, *model.AppError) {
return api.app.CreateGroupChannel(userIDs, "")
return api.app.CreateGroupChannel(api.ctx, userIDs, "")
}
func (api *PluginAPI) UpdateChannel(channel *model.Channel) (*model.Channel, *model.AppError) {
return api.app.UpdateChannel(channel)
return api.app.UpdateChannel(api.ctx, channel)
}
func (api *PluginAPI) SearchChannels(teamID string, term string) ([]*model.Channel, *model.AppError) {
channels, err := api.app.SearchChannels(teamID, term)
channels, err := api.app.SearchChannels(api.ctx, teamID, term)
if err != nil {
return nil, err
}
@@ -489,15 +488,15 @@ func (api *PluginAPI) SearchChannels(teamID string, term string) ([]*model.Chann
}
func (api *PluginAPI) CreateChannelSidebarCategory(userID, teamID string, newCategory *model.SidebarCategoryWithChannels) (*model.SidebarCategoryWithChannels, *model.AppError) {
return api.app.CreateSidebarCategory(userID, teamID, newCategory)
return api.app.CreateSidebarCategory(api.ctx, userID, teamID, newCategory)
}
func (api *PluginAPI) GetChannelSidebarCategories(userID, teamID string) (*model.OrderedSidebarCategories, *model.AppError) {
return api.app.GetSidebarCategoriesForTeamForUser(userID, teamID)
return api.app.GetSidebarCategoriesForTeamForUser(api.ctx, userID, teamID)
}
func (api *PluginAPI) UpdateChannelSidebarCategories(userID, teamID string, categories []*model.SidebarCategoryWithChannels) ([]*model.SidebarCategoryWithChannels, *model.AppError) {
return api.app.UpdateSidebarCategories(userID, teamID, categories)
return api.app.UpdateSidebarCategories(api.ctx, userID, teamID, categories)
}
func (api *PluginAPI) SearchUsers(search *model.UserSearch) ([]*model.User, *model.AppError) {
@@ -576,29 +575,29 @@ func (api *PluginAPI) AddUserToChannel(channelID, userID, asUserID string) (*mod
}
func (api *PluginAPI) GetChannelMember(channelID, userID string) (*model.ChannelMember, *model.AppError) {
return api.app.GetChannelMember(context.Background(), channelID, userID)
return api.app.GetChannelMember(api.ctx, channelID, userID)
}
func (api *PluginAPI) GetChannelMembers(channelID string, page, perPage int) (model.ChannelMembers, *model.AppError) {
return api.app.GetChannelMembersPage(channelID, page, perPage)
return api.app.GetChannelMembersPage(api.ctx, channelID, page, perPage)
}
func (api *PluginAPI) GetChannelMembersByIds(channelID string, userIDs []string) (model.ChannelMembers, *model.AppError) {
return api.app.GetChannelMembersByIds(channelID, userIDs)
return api.app.GetChannelMembersByIds(api.ctx, channelID, userIDs)
}
func (api *PluginAPI) GetChannelMembersForUser(_, userID string, page, perPage int) ([]*model.ChannelMember, *model.AppError) {
// The team ID parameter was never used in the SQL query.
// But we keep this to maintain compatibility.
return api.app.GetChannelMembersForUserWithPagination(userID, page, perPage)
return api.app.GetChannelMembersForUserWithPagination(api.ctx, userID, page, perPage)
}
func (api *PluginAPI) UpdateChannelMemberRoles(channelID, userID, newRoles string) (*model.ChannelMember, *model.AppError) {
return api.app.UpdateChannelMemberRoles(channelID, userID, newRoles)
return api.app.UpdateChannelMemberRoles(api.ctx, channelID, userID, newRoles)
}
func (api *PluginAPI) UpdateChannelMemberNotifications(channelID, userID string, notifications map[string]string) (*model.ChannelMember, *model.AppError) {
return api.app.UpdateChannelMemberNotifyProps(notifications, channelID, userID)
return api.app.UpdateChannelMemberNotifyProps(api.ctx, notifications, channelID, userID)
}
func (api *PluginAPI) DeleteChannelMember(channelID, userID string) *model.AppError {
@@ -644,11 +643,11 @@ func (api *PluginAPI) GetReactions(postID string) ([]*model.Reaction, *model.App
}
func (api *PluginAPI) SendEphemeralPost(userID string, post *model.Post) *model.Post {
return api.app.SendEphemeralPost(userID, post)
return api.app.SendEphemeralPost(api.ctx, userID, post)
}
func (api *PluginAPI) UpdateEphemeralPost(userID string, post *model.Post) *model.Post {
return api.app.UpdateEphemeralPost(userID, post)
return api.app.UpdateEphemeralPost(api.ctx, userID, post)
}
func (api *PluginAPI) DeleteEphemeralPost(userID, postID string) {
@@ -656,7 +655,7 @@ func (api *PluginAPI) DeleteEphemeralPost(userID, postID string) {
}
func (api *PluginAPI) DeletePost(postID string) *model.AppError {
_, err := api.app.DeletePost(postID, api.id)
_, err := api.app.DeletePost(api.ctx, postID, api.id)
return err
}
@@ -923,7 +922,7 @@ func (api *PluginAPI) HasPermissionToTeam(userID, teamID string, permission *mod
}
func (api *PluginAPI) HasPermissionToChannel(userID, channelID string, permission *model.Permission) bool {
return api.app.HasPermissionToChannel(userID, channelID, permission)
return api.app.HasPermissionToChannel(api.ctx, userID, channelID, permission)
}
func (api *PluginAPI) RolesGrantPermission(roleNames []string, permissionId string) bool {

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

@@ -154,7 +154,7 @@ func (a *App) tryExecutePluginCommand(c *request.Context, args *model.CommandArg
args.AddUserMention(username, userID)
}
for channelName, channelID := range a.MentionsToPublicChannels(args.Command, args.TeamId) {
for channelName, channelID := range a.MentionsToPublicChannels(c, args.Command, args.TeamId) {
args.AddChannelMention(channelName, channelID)
}

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

@@ -912,6 +912,7 @@ func TestHookContext(t *testing.T) {
// We don't actually have a session, we are faking it so just set something arbitrarily
ctx := request.NewContext(context.Background(), model.NewId(), model.NewId(), model.NewId(), model.NewId(), model.NewId(), model.Session{}, nil)
ctx.SetLogger(th.TestLogger)
ctx.Session().Id = model.NewId()
var mockAPI plugintest.API

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

@@ -638,7 +638,7 @@ func TestChannelsPluginsInit(t *testing.T) {
defer th.TearDown()
runNoPanicTest := func(t *testing.T) {
ctx := request.EmptyContext()
ctx := request.EmptyContext(th.TestLogger)
path, _ := fileutils.FindDir("tests")
require.NotPanics(t, func() {

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

@@ -75,9 +75,9 @@ func (a *App) CreatePostAsUser(c *request.Context, post *model.Post, currentSess
// the post is NOT a reply post with CRT enabled
_, fromWebhook := post.GetProps()["from_webhook"]
_, fromBot := post.GetProps()["from_bot"]
isCRTReply := post.RootId != "" && a.IsCRTEnabledForUser(post.UserId)
isCRTReply := post.RootId != "" && a.IsCRTEnabledForUser(c, post.UserId)
if !fromWebhook && !fromBot && !isCRTReply {
if _, err := a.MarkChannelsAsViewed([]string{post.ChannelId}, post.UserId, currentSessionId, true); err != nil {
if _, err := a.MarkChannelsAsViewed(c, []string{post.ChannelId}, post.UserId, currentSessionId, true); err != nil {
mlog.Warn(
"Encountered error updating last viewed",
mlog.String("channel_id", post.ChannelId),
@@ -90,7 +90,7 @@ func (a *App) CreatePostAsUser(c *request.Context, post *model.Post, currentSess
return rp, nil
}
func (a *App) CreatePostMissingChannel(c *request.Context, post *model.Post, triggerWebhooks bool) (*model.Post, *model.AppError) {
func (a *App) CreatePostMissingChannel(c request.CTX, post *model.Post, triggerWebhooks bool) (*model.Post, *model.AppError) {
channel, err := a.Srv().Store.Channel().Get(post.ChannelId, true)
if err != nil {
var nfErr *store.ErrNotFound
@@ -147,7 +147,7 @@ func (a *App) deduplicateCreatePost(post *model.Post) (foundPost *model.Post, er
return actualPost, nil
}
func (a *App) CreatePost(c *request.Context, post *model.Post, channel *model.Channel, triggerWebhooks, setOnline bool) (savedPost *model.Post, err *model.AppError) {
func (a *App) CreatePost(c request.CTX, post *model.Post, channel *model.Channel, triggerWebhooks, setOnline bool) (savedPost *model.Post, err *model.AppError) {
foundPost, err := a.deduplicateCreatePost(post)
if err != nil {
return nil, err
@@ -199,7 +199,7 @@ func (a *App) CreatePost(c *request.Context, post *model.Post, channel *model.Ch
}
var ephemeralPost *model.Post
if post.Type == "" && !a.HasPermissionToChannel(user.Id, channel.Id, model.PermissionUseChannelMentions) {
if post.Type == "" && !a.HasPermissionToChannel(c, user.Id, channel.Id, model.PermissionUseChannelMentions) {
mention := post.DisableMentionHighlights()
if mention != "" {
T := i18n.GetUserTranslations(user.Locale)
@@ -233,7 +233,7 @@ func (a *App) CreatePost(c *request.Context, post *model.Post, channel *model.Ch
post.Hashtags, _ = model.ParseHashtags(post.Message)
if err = a.FillInPostProps(post, channel); err != nil {
if err = a.FillInPostProps(c, post, channel); err != nil {
return nil, err
}
@@ -280,7 +280,7 @@ func (a *App) CreatePost(c *request.Context, post *model.Post, channel *model.Ch
post.CreateAt = model.GetMillis()
}
post = a.getEmbedsAndImages(post, true)
post = a.getEmbedsAndImages(c, post, true)
previewPost := post.GetPreviewPost()
if previewPost != nil {
post.AddProp(model.PostPropsPreviewedPost, previewPost.PostID)
@@ -359,10 +359,10 @@ func (a *App) CreatePost(c *request.Context, post *model.Post, channel *model.Ch
// Send any ephemeral posts after the post is created to ensure it shows up after the latest post created
if ephemeralPost != nil {
a.SendEphemeralPost(post.UserId, ephemeralPost)
a.SendEphemeralPost(c, post.UserId, ephemeralPost)
}
rpost, err = a.SanitizePostMetadataForUser(rpost, c.Session().UserId)
rpost, err = a.SanitizePostMetadataForUser(c, rpost, c.Session().UserId)
if err != nil {
return nil, err
}
@@ -409,7 +409,7 @@ func (a *App) attachFilesToPost(post *model.Post) *model.AppError {
// channel_mentions.
//
// If channel is nil, FillInPostProps will look up the channel corresponding to the post.
func (a *App) FillInPostProps(post *model.Post, channel *model.Channel) *model.AppError {
func (a *App) FillInPostProps(c request.CTX, post *model.Post, channel *model.Channel) *model.AppError {
channelMentions := post.ChannelMentions()
channelMentionsProp := make(map[string]any)
@@ -422,7 +422,7 @@ func (a *App) FillInPostProps(post *model.Post, channel *model.Channel) *model.A
channel = postChannel
}
mentionedChannels, err := a.GetChannelsByNames(channelMentions, channel.TeamId)
mentionedChannels, err := a.GetChannelsByNames(c, channelMentions, channel.TeamId)
if err != nil {
return err
}
@@ -449,14 +449,14 @@ func (a *App) FillInPostProps(post *model.Post, channel *model.Channel) *model.A
}
matched := atMentionPattern.MatchString(post.Message)
if a.Srv().License() != nil && *a.Srv().License().Features.LDAPGroups && matched && !a.HasPermissionToChannel(post.UserId, post.ChannelId, model.PermissionUseGroupMentions) {
if a.Srv().License() != nil && *a.Srv().License().Features.LDAPGroups && matched && !a.HasPermissionToChannel(c, post.UserId, post.ChannelId, model.PermissionUseGroupMentions) {
post.AddProp(model.PostPropsGroupHighlightDisabled, true)
}
return nil
}
func (a *App) handlePostEvents(c *request.Context, post *model.Post, user *model.User, channel *model.Channel, triggerWebhooks bool, parentPostList *model.PostList, setOnline bool) error {
func (a *App) handlePostEvents(c request.CTX, post *model.Post, user *model.User, channel *model.Channel, triggerWebhooks bool, parentPostList *model.PostList, setOnline bool) error {
var team *model.Team
if channel.TeamId != "" {
t, err := a.Srv().Store.Team().Get(channel.TeamId)
@@ -472,7 +472,7 @@ func (a *App) handlePostEvents(c *request.Context, post *model.Post, user *model
a.invalidateCacheForChannel(channel)
a.invalidateCacheForChannelPosts(channel.Id)
if _, err := a.SendNotifications(post, team, channel, user, parentPostList, setOnline); err != nil {
if _, err := a.SendNotifications(c, post, team, channel, user, parentPostList, setOnline); err != nil {
return err
}
@@ -496,7 +496,7 @@ func (a *App) handlePostEvents(c *request.Context, post *model.Post, user *model
return nil
}
func (a *App) SendEphemeralPost(userID string, post *model.Post) *model.Post {
func (a *App) SendEphemeralPost(c request.CTX, userID string, post *model.Post) *model.Post {
post.Type = model.PostTypeEphemeral
// fill in fields which haven't been specified which have sensible defaults
@@ -512,7 +512,7 @@ func (a *App) SendEphemeralPost(userID string, post *model.Post) *model.Post {
post.GenerateActionIds()
message := model.NewWebSocketEvent(model.WebsocketEventEphemeralMessage, "", post.ChannelId, userID, nil)
post = a.PreparePostForClientWithEmbedsAndImages(post, true, false)
post = a.PreparePostForClientWithEmbedsAndImages(c, post, true, false)
post = model.AddPostActionCookies(post, a.PostActionCookieSecret())
postJSON, jsonErr := post.ToJSON()
@@ -525,7 +525,7 @@ func (a *App) SendEphemeralPost(userID string, post *model.Post) *model.Post {
return post
}
func (a *App) UpdateEphemeralPost(userID string, post *model.Post) *model.Post {
func (a *App) UpdateEphemeralPost(c request.CTX, userID string, post *model.Post) *model.Post {
post.Type = model.PostTypeEphemeral
post.UpdateAt = model.GetMillis()
@@ -535,7 +535,7 @@ func (a *App) UpdateEphemeralPost(userID string, post *model.Post) *model.Post {
post.GenerateActionIds()
message := model.NewWebSocketEvent(model.WebsocketEventPostEdited, "", post.ChannelId, userID, nil)
post = a.PreparePostForClientWithEmbedsAndImages(post, true, false)
post = a.PreparePostForClientWithEmbedsAndImages(c, post, true, false)
post = model.AddPostActionCookies(post, a.PostActionCookieSecret())
postJSON, jsonErr := post.ToJSON()
if jsonErr != nil {
@@ -604,7 +604,7 @@ func (a *App) UpdatePost(c *request.Context, post *model.Post, safeUpdate bool)
return nil, err
}
channel, err := a.GetChannel(oldPost.ChannelId)
channel, err := a.GetChannel(c, oldPost.ChannelId)
if err != nil {
return nil, err
}
@@ -633,7 +633,7 @@ func (a *App) UpdatePost(c *request.Context, post *model.Post, safeUpdate bool)
newPost.EditAt = model.GetMillis()
}
if err = a.FillInPostProps(post, nil); err != nil {
if err = a.FillInPostProps(c, post, nil); err != nil {
return nil, err
}
@@ -674,7 +674,7 @@ func (a *App) UpdatePost(c *request.Context, post *model.Post, safeUpdate bool)
})
}
rpost = a.PreparePostForClientWithEmbedsAndImages(rpost, false, true)
rpost = a.PreparePostForClientWithEmbedsAndImages(c, rpost, false, true)
// Ensure IsFollowing is nil since this updated post will be broadcast to all users
// and we don't want to have to populate it for every single user and broadcast to each
@@ -693,7 +693,7 @@ func (a *App) UpdatePost(c *request.Context, post *model.Post, safeUpdate bool)
}
message.Add("post", postJSON)
published, err := a.publishWebsocketEventForPermalinkPost(rpost, message)
published, err := a.publishWebsocketEventForPermalinkPost(c, rpost, message)
if err != nil {
return nil, err
}
@@ -706,7 +706,7 @@ func (a *App) UpdatePost(c *request.Context, post *model.Post, safeUpdate bool)
return rpost, nil
}
func (a *App) publishWebsocketEventForPermalinkPost(post *model.Post, message *model.WebSocketEvent) (published bool, err *model.AppError) {
func (a *App) publishWebsocketEventForPermalinkPost(c request.CTX, post *model.Post, message *model.WebSocketEvent) (published bool, err *model.AppError) {
var previewedPostID string
if val, ok := post.GetProp(model.PostPropsPreviewedPost).(string); ok {
previewedPostID = val
@@ -728,12 +728,12 @@ func (a *App) publishWebsocketEventForPermalinkPost(post *model.Post, message *m
return false, err
}
channelMembers, err := a.GetChannelMembersPage(post.ChannelId, 0, 10000000)
channelMembers, err := a.GetChannelMembersPage(c, post.ChannelId, 0, 10000000)
if err != nil {
return false, err
}
permalinkPreviewedChannel, err := a.GetChannel(previewedPost.ChannelId)
permalinkPreviewedChannel, err := a.GetChannel(c, previewedPost.ChannelId)
if err != nil {
if err.StatusCode == http.StatusNotFound {
mlog.Warn("channel containing permalinked post not found", mlog.String("referenced_channel_id", previewedPost.ChannelId))
@@ -748,7 +748,7 @@ func (a *App) publishWebsocketEventForPermalinkPost(post *model.Post, message *m
post.Metadata.Embeds[0].Data = permalinkPreviewedPost
}
postForUser := a.sanitizePostMetadataForUserAndChannel(post, permalinkPreviewedPost, permalinkPreviewedChannel, cm.UserId)
postForUser := a.sanitizePostMetadataForUserAndChannel(c, post, permalinkPreviewedPost, permalinkPreviewedChannel, cm.UserId)
// Using DeepCopy here to avoid a race condition
// between publishing the event and setting the "post" data value below.
@@ -774,7 +774,7 @@ func (a *App) PatchPost(c *request.Context, postID string, patch *model.PostPatc
return nil, err
}
channel, err := a.GetChannel(post.ChannelId)
channel, err := a.GetChannel(c, post.ChannelId)
if err != nil {
return nil, err
}
@@ -784,7 +784,7 @@ func (a *App) PatchPost(c *request.Context, postID string, patch *model.PostPatc
return nil, err
}
if !a.HasPermissionToChannel(post.UserId, post.ChannelId, model.PermissionUseChannelMentions) {
if !a.HasPermissionToChannel(c, post.UserId, post.ChannelId, model.PermissionUseChannelMentions) {
patch.DisableMentionHighlights()
}
@@ -946,7 +946,7 @@ func (a *App) GetFlaggedPostsForChannel(userID, channelID string, offset int, li
return postList, nil
}
func (a *App) GetPermalinkPost(c *request.Context, postID string, userID string) (*model.PostList, *model.AppError) {
func (a *App) GetPermalinkPost(c request.CTX, postID string, userID string) (*model.PostList, *model.AppError) {
list, nErr := a.Srv().Store.Post().Get(context.Background(), postID, model.GetPostsOptions{}, userID, a.Config().GetSanitizeOptions())
if nErr != nil {
var nfErr *store.ErrNotFound
@@ -966,7 +966,7 @@ func (a *App) GetPermalinkPost(c *request.Context, postID string, userID string)
}
post := list.Posts[list.Order[0]]
channel, err := a.GetChannel(post.ChannelId)
channel, err := a.GetChannel(c, post.ChannelId)
if err != nil {
return nil, err
}
@@ -1174,10 +1174,10 @@ func (a *App) AddCursorIdsForPostList(originalList *model.PostList, afterPost, b
originalList.NextPostId = nextPostId
originalList.PrevPostId = prevPostId
}
func (a *App) GetPostsForChannelAroundLastUnread(channelID, userID string, limitBefore, limitAfter int, skipFetchThreads bool, collapsedThreads, collapsedThreadsExtended bool) (*model.PostList, *model.AppError) {
func (a *App) GetPostsForChannelAroundLastUnread(c request.CTX, channelID, userID string, limitBefore, limitAfter int, skipFetchThreads bool, collapsedThreads, collapsedThreadsExtended bool) (*model.PostList, *model.AppError) {
var member *model.ChannelMember
var err *model.AppError
if member, err = a.GetChannelMember(context.Background(), channelID, userID); err != nil {
if member, err = a.GetChannelMember(c, channelID, userID); err != nil {
return nil, err
} else if member.LastViewedAt == 0 {
return model.NewPostList(), nil
@@ -1219,13 +1219,13 @@ func (a *App) GetPostsForChannelAroundLastUnread(channelID, userID string, limit
return postList, nil
}
func (a *App) DeletePost(postID, deleteByID string) (*model.Post, *model.AppError) {
func (a *App) DeletePost(c request.CTX, postID, deleteByID string) (*model.Post, *model.AppError) {
post, nErr := a.Srv().Store.Post().GetSingle(postID, false)
if nErr != nil {
return nil, model.NewAppError("DeletePost", "app.post.get.app_error", nil, nErr.Error(), http.StatusBadRequest)
}
channel, err := a.GetChannel(post.ChannelId)
channel, err := a.GetChannel(c, post.ChannelId)
if err != nil {
return nil, err
}
@@ -1299,7 +1299,7 @@ func (a *App) parseAndFetchChannelIdByNameFromInFilter(c *request.Context, chann
userIDs = append(userIDs, user.Id)
}
channel, err := a.GetGroupChannel(userIDs)
channel, err := a.GetGroupChannel(c, userIDs)
if err != nil {
return nil, err
}
@@ -1318,7 +1318,7 @@ func (a *App) parseAndFetchChannelIdByNameFromInFilter(c *request.Context, chann
return channel, nil
}
channel, err := a.GetChannelByName(channelName, teamID, includeDeleted)
channel, err := a.GetChannelByName(c, channelName, teamID, includeDeleted)
if err != nil {
return nil, err
}
@@ -1642,8 +1642,8 @@ func (a *App) MaxPostSize() int {
}
// countThreadMentions returns the number of times the user is mentioned in a specified thread after the timestamp.
func (a *App) countThreadMentions(user *model.User, post *model.Post, teamID string, timestamp int64) (int64, *model.AppError) {
channel, err := a.GetChannel(post.ChannelId)
func (a *App) countThreadMentions(c request.CTX, user *model.User, post *model.Post, teamID string, timestamp int64) (int64, *model.AppError) {
channel, err := a.GetChannel(c, post.ChannelId)
if err != nil {
return 0, err
}
@@ -1702,8 +1702,8 @@ func (a *App) countThreadMentions(user *model.User, post *model.Post, teamID str
// countMentionsFromPost returns the number of posts in the post's channel that mention the user after and including the
// given post.
func (a *App) countMentionsFromPost(user *model.User, post *model.Post) (int, int, *model.AppError) {
channel, err := a.GetChannel(post.ChannelId)
func (a *App) countMentionsFromPost(c request.CTX, user *model.User, post *model.Post) (int, int, *model.AppError) {
channel, err := a.GetChannel(c, post.ChannelId)
if err != nil {
return 0, 0, err
}
@@ -1718,7 +1718,7 @@ func (a *App) countMentionsFromPost(user *model.User, post *model.Post) (int, in
return count, countRoot, nil
}
channelMember, err := a.GetChannelMember(context.Background(), channel.Id, user.Id)
channelMember, err := a.GetChannelMember(c, channel.Id, user.Id)
if err != nil {
return 0, 0, err
}
@@ -1850,18 +1850,18 @@ func (a *App) GetThreadMembershipsForUser(userID, teamID string) ([]*model.Threa
return a.Srv().Store.Thread().GetMembershipsForUser(userID, teamID)
}
func (a *App) GetPostIfAuthorized(postID string, session *model.Session, includeDeleted bool) (*model.Post, *model.AppError) {
func (a *App) GetPostIfAuthorized(c request.CTX, postID string, session *model.Session, includeDeleted bool) (*model.Post, *model.AppError) {
post, err := a.GetSinglePost(postID, includeDeleted)
if err != nil {
return nil, err
}
channel, err := a.GetChannel(post.ChannelId)
channel, err := a.GetChannel(c, post.ChannelId)
if err != nil {
return nil, err
}
if !a.SessionHasPermissionToChannel(*session, channel.Id, model.PermissionReadChannel) {
if !a.SessionHasPermissionToChannel(c, *session, channel.Id, model.PermissionReadChannel) {
if channel.Type == model.ChannelTypeOpen {
if !a.SessionHasPermissionToTeam(*session, channel.TeamId, model.PermissionReadPublicChannel) {
return nil, a.MakePermissionError(session, []*model.Permission{model.PermissionReadPublicChannel})
@@ -1895,7 +1895,7 @@ func (a *App) GetPostsByIds(postIDs []string) ([]*model.Post, bool, *model.AppEr
return posts, hasInaccessiblePosts, nil
}
func (a *App) GetTopThreadsForTeamSince(teamID, userID string, opts *model.InsightsOpts) (*model.TopThreadList, *model.AppError) {
func (a *App) GetTopThreadsForTeamSince(c request.CTX, teamID, userID string, opts *model.InsightsOpts) (*model.TopThreadList, *model.AppError) {
if !a.Config().FeatureFlags.InsightsEnabled {
return nil, model.NewAppError("GetTopChannelsForTeamSince", "app.insights.feature_disabled", nil, "", http.StatusNotImplemented)
}
@@ -1904,14 +1904,14 @@ func (a *App) GetTopThreadsForTeamSince(teamID, userID string, opts *model.Insig
if err != nil {
return nil, model.NewAppError("GetTopChannelsForTeamSince", "app.post.get_top_threads_for_team_since.app_error", nil, err.Error(), http.StatusInternalServerError)
}
topThreadsWithEmbedAndImage, err := includeEmbedsAndImages(a, topThreads, userID)
topThreadsWithEmbedAndImage, err := includeEmbedsAndImages(a, c, topThreads, userID)
if err != nil {
return nil, model.NewAppError("GetTopChannelsForTeamSince", "app.post.get_top_threads_for_team_since.app_error", nil, err.Error(), http.StatusInternalServerError)
}
return topThreadsWithEmbedAndImage, nil
}
func (a *App) GetTopThreadsForUserSince(teamID, userID string, opts *model.InsightsOpts) (*model.TopThreadList, *model.AppError) {
func (a *App) GetTopThreadsForUserSince(c request.CTX, teamID, userID string, opts *model.InsightsOpts) (*model.TopThreadList, *model.AppError) {
if !a.Config().FeatureFlags.InsightsEnabled {
return nil, model.NewAppError("GetTopChannelsForTeamSince", "app.insights.feature_disabled", nil, "", http.StatusNotImplemented)
}
@@ -1920,17 +1920,17 @@ func (a *App) GetTopThreadsForUserSince(teamID, userID string, opts *model.Insig
if err != nil {
return nil, model.NewAppError("GetTopChannelsForTeamSince", "app.post.get_top_threads_for_team_since.app_error", nil, err.Error(), http.StatusInternalServerError)
}
topThreadsWithEmbedAndImage, err := includeEmbedsAndImages(a, topThreads, userID)
topThreadsWithEmbedAndImage, err := includeEmbedsAndImages(a, c, topThreads, userID)
if err != nil {
return nil, model.NewAppError("GetTopChannelsForUserSince", "app.post.get_top_threads_for_user_since.app_error", nil, err.Error(), http.StatusInternalServerError)
}
return topThreadsWithEmbedAndImage, nil
}
func includeEmbedsAndImages(a *App, topThreadList *model.TopThreadList, userID string) (*model.TopThreadList, error) {
func includeEmbedsAndImages(a *App, c request.CTX, topThreadList *model.TopThreadList, userID string) (*model.TopThreadList, error) {
for _, topThread := range topThreadList.Items {
topThread.Post = a.PreparePostForClientWithEmbedsAndImages(topThread.Post, false, false)
sanitizedPost, err := a.SanitizePostMetadataForUser(topThread.Post, userID)
topThread.Post = a.PreparePostForClientWithEmbedsAndImages(c, topThread.Post, false, false)
sanitizedPost, err := a.SanitizePostMetadataForUser(c, topThread.Post, userID)
if err != nil {
return nil, err
}

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

@@ -18,6 +18,7 @@ import (
"github.com/dyatlov/go-opengraph/opengraph"
"github.com/mattermost/mattermost-server/v6/app/request"
"github.com/mattermost/mattermost-server/v6/model"
"github.com/mattermost/mattermost-server/v6/services/cache"
"github.com/mattermost/mattermost-server/v6/shared/markdown"
@@ -51,7 +52,7 @@ func (s *Server) initPostMetadata() {
})
}
func (a *App) PreparePostListForClient(originalList *model.PostList) *model.PostList {
func (a *App) PreparePostListForClient(c request.CTX, originalList *model.PostList) *model.PostList {
list := &model.PostList{
Posts: make(map[string]*model.Post, len(originalList.Posts)),
Order: originalList.Order,
@@ -62,7 +63,7 @@ func (a *App) PreparePostListForClient(originalList *model.PostList) *model.Post
}
for id, originalPost := range originalList.Posts {
post := a.PreparePostForClientWithEmbedsAndImages(originalPost, false, false)
post := a.PreparePostForClientWithEmbedsAndImages(c, originalPost, false, false)
list.Posts[id] = post
}
@@ -132,13 +133,13 @@ func (a *App) PreparePostForClient(originalPost *model.Post, isNewPost, isEditPo
return post
}
func (a *App) PreparePostForClientWithEmbedsAndImages(originalPost *model.Post, isNewPost, isEditPost bool) *model.Post {
func (a *App) PreparePostForClientWithEmbedsAndImages(c request.CTX, originalPost *model.Post, isNewPost, isEditPost bool) *model.Post {
post := a.PreparePostForClient(originalPost, isNewPost, isEditPost)
post = a.getEmbedsAndImages(post, isNewPost)
post = a.getEmbedsAndImages(c, post, isNewPost)
return post
}
func (a *App) getEmbedsAndImages(post *model.Post, isNewPost bool) *model.Post {
func (a *App) getEmbedsAndImages(c request.CTX, post *model.Post, isNewPost bool) *model.Post {
if post.Metadata == nil {
post.Metadata = &model.PostMetadata{}
}
@@ -150,7 +151,7 @@ func (a *App) getEmbedsAndImages(post *model.Post, isNewPost bool) *model.Post {
post.Metadata.Embeds = []*model.PostEmbed{}
}
if embed, err := a.getEmbedForPost(post, firstLink, isNewPost); err != nil {
if embed, err := a.getEmbedForPost(c, post, firstLink, isNewPost); err != nil {
appErr, ok := err.(*model.AppError)
isNotFound := ok && appErr.StatusCode == http.StatusNotFound
// Ignore NotFound errors.
@@ -160,23 +161,23 @@ func (a *App) getEmbedsAndImages(post *model.Post, isNewPost bool) *model.Post {
} else if embed != nil {
post.Metadata.Embeds = append(post.Metadata.Embeds, embed)
}
post.Metadata.Images = a.getImagesForPost(post, images, isNewPost)
post.Metadata.Images = a.getImagesForPost(c, post, images, isNewPost)
return post
}
func (a *App) sanitizePostMetadataForUserAndChannel(post *model.Post, previewedPost *model.PreviewPost, previewedChannel *model.Channel, userID string) *model.Post {
func (a *App) sanitizePostMetadataForUserAndChannel(c request.CTX, post *model.Post, previewedPost *model.PreviewPost, previewedChannel *model.Channel, userID string) *model.Post {
if post.Metadata == nil || len(post.Metadata.Embeds) == 0 || previewedPost == nil {
return post
}
if previewedChannel != nil && !a.HasPermissionToReadChannel(userID, previewedChannel) {
if previewedChannel != nil && !a.HasPermissionToReadChannel(c, userID, previewedChannel) {
post.Metadata.Embeds[0].Data = nil
}
return post
}
func (a *App) SanitizePostMetadataForUser(post *model.Post, userID string) (*model.Post, *model.AppError) {
func (a *App) SanitizePostMetadataForUser(c request.CTX, post *model.Post, userID string) (*model.Post, *model.AppError) {
if post.Metadata == nil || len(post.Metadata.Embeds) == 0 {
return post, nil
}
@@ -186,22 +187,22 @@ func (a *App) SanitizePostMetadataForUser(post *model.Post, userID string) (*mod
return post, nil
}
previewedChannel, err := a.GetChannel(previewPost.Post.ChannelId)
previewedChannel, err := a.GetChannel(c, previewPost.Post.ChannelId)
if err != nil {
return nil, err
}
if previewedChannel != nil && !a.HasPermissionToReadChannel(userID, previewedChannel) {
if previewedChannel != nil && !a.HasPermissionToReadChannel(c, userID, previewedChannel) {
post.Metadata.Embeds[0].Data = nil
}
return post, nil
}
func (a *App) SanitizePostListMetadataForUser(postList *model.PostList, userID string) (*model.PostList, *model.AppError) {
func (a *App) SanitizePostListMetadataForUser(c request.CTX, postList *model.PostList, userID string) (*model.PostList, *model.AppError) {
clonedPostList := postList.Clone()
for postID, post := range clonedPostList.Posts {
sanitizedPost, err := a.SanitizePostMetadataForUser(post, userID)
sanitizedPost, err := a.SanitizePostMetadataForUser(c, post, userID)
if err != nil {
return nil, err
}
@@ -236,7 +237,7 @@ func (a *App) getEmojisAndReactionsForPost(post *model.Post) ([]*model.Emoji, []
return emojis, reactions, nil
}
func (a *App) getEmbedForPost(post *model.Post, firstLink string, isNewPost bool) (*model.PostEmbed, error) {
func (a *App) getEmbedForPost(c request.CTX, post *model.Post, firstLink string, isNewPost bool) (*model.PostEmbed, error) {
if _, ok := post.GetProps()["attachments"]; ok {
return &model.PostEmbed{
Type: model.PostEmbedMessageAttachment,
@@ -259,7 +260,7 @@ func (a *App) getEmbedForPost(post *model.Post, firstLink string, isNewPost bool
return nil, nil
}
og, image, permalink, err := a.getLinkMetadata(firstLink, post.CreateAt, isNewPost, post.GetPreviewedPostProp())
og, image, permalink, err := a.getLinkMetadata(c, firstLink, post.CreateAt, isNewPost, post.GetPreviewedPostProp())
if err != nil {
return nil, err
}
@@ -294,7 +295,7 @@ func (a *App) getEmbedForPost(post *model.Post, firstLink string, isNewPost bool
}, nil
}
func (a *App) getImagesForPost(post *model.Post, imageURLs []string, isNewPost bool) map[string]*model.PostImage {
func (a *App) getImagesForPost(c request.CTX, post *model.Post, imageURLs []string, isNewPost bool) map[string]*model.PostImage {
images := map[string]*model.PostImage{}
for _, embed := range post.Metadata.Embeds {
@@ -336,7 +337,7 @@ func (a *App) getImagesForPost(post *model.Post, imageURLs []string, isNewPost b
}
for _, imageURL := range imageURLs {
if _, image, _, err := a.getLinkMetadata(imageURL, post.CreateAt, isNewPost, post.GetPreviewedPostProp()); err != nil {
if _, image, _, err := a.getLinkMetadata(c, imageURL, post.CreateAt, isNewPost, post.GetPreviewedPostProp()); err != nil {
appErr, ok := err.(*model.AppError)
isNotFound := ok && appErr.StatusCode == http.StatusNotFound
// Ignore NotFound errors.
@@ -513,7 +514,7 @@ func (a *App) containsPermalink(post *model.Post) bool {
return looksLikeAPermalink(link, a.GetSiteURL())
}
func (a *App) getLinkMetadata(requestURL string, timestamp int64, isNewPost bool, previewedPostPropVal string) (*opengraph.OpenGraph, *model.PostImage, *model.Permalink, error) {
func (a *App) getLinkMetadata(c request.CTX, requestURL string, timestamp int64, isNewPost bool, previewedPostPropVal string) (*opengraph.OpenGraph, *model.PostImage, *model.Permalink, error) {
requestURL = resolveMetadataURL(requestURL, a.GetSiteURL())
timestamp = model.FloorToNearestHour(timestamp)
@@ -547,7 +548,7 @@ func (a *App) getLinkMetadata(requestURL string, timestamp int64, isNewPost bool
return nil, nil, nil, appErr
}
referencedChannel, appErr := a.GetChannel(referencedPost.ChannelId)
referencedChannel, appErr := a.GetChannel(c, referencedPost.ChannelId)
if appErr != nil {
return nil, nil, nil, appErr
}
@@ -568,7 +569,7 @@ func (a *App) getLinkMetadata(requestURL string, timestamp int64, isNewPost bool
permalink = &model.Permalink{PreviewPost: model.NewPreviewPost(referencedPost, referencedTeam, referencedChannel)}
} else {
// referencedPost does not contain a permalink: we get its metadata
referencedPostWithMetadata := a.PreparePostForClientWithEmbedsAndImages(referencedPost, false, false)
referencedPostWithMetadata := a.PreparePostForClientWithEmbedsAndImages(c, referencedPost, false, false)
permalink = &model.Permalink{PreviewPost: model.NewPreviewPost(referencedPostWithMetadata, referencedTeam, referencedChannel)}
}
} else {

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

@@ -39,7 +39,7 @@ func TestPreparePostListForClient(t *testing.T) {
postList.AddPost(&model.Post{})
}
clientPostList := th.App.PreparePostListForClient(postList)
clientPostList := th.App.PreparePostListForClient(th.Context, postList)
t.Run("doesn't mutate provided post list", func(t *testing.T) {
assert.NotEqual(t, clientPostList, postList, "should've returned a new post list")
@@ -422,7 +422,7 @@ func TestPreparePostForClient(t *testing.T) {
}, th.BasicChannel, false, true)
require.Nil(t, err)
post.Metadata.Embeds = nil
clientPost := th.App.PreparePostForClientWithEmbedsAndImages(post, false, false)
clientPost := th.App.PreparePostForClientWithEmbedsAndImages(th.Context, post, false, false)
// Reminder that only the first link gets an embed and dimensions
@@ -500,7 +500,7 @@ func TestPreparePostForClient(t *testing.T) {
}, th.BasicChannel, false, true)
require.Nil(t, err)
post.Metadata.Embeds = nil
clientPost := th.App.PreparePostForClientWithEmbedsAndImages(post, false, false)
clientPost := th.App.PreparePostForClientWithEmbedsAndImages(th.Context, post, false, false)
t.Run("populates embeds", func(t *testing.T) {
assert.ElementsMatch(t, []*model.PostEmbed{
@@ -539,7 +539,7 @@ func TestPreparePostForClient(t *testing.T) {
th.AddReactionToPost(post, th.BasicUser, "taco")
post, err = th.App.DeletePost(post.Id, th.BasicUser.Id)
post, err = th.App.DeletePost(th.Context, post.Id, th.BasicUser.Id)
require.Nil(t, err)
// DeleteAt isn't set on the post returned by App.DeletePost
@@ -580,7 +580,7 @@ func TestPreparePostForClient(t *testing.T) {
}, th.BasicChannel, false, true)
require.Nil(t, err)
previewPost.Metadata.Embeds = nil
clientPost := th.App.PreparePostForClientWithEmbedsAndImages(previewPost, false, false)
clientPost := th.App.PreparePostForClientWithEmbedsAndImages(th.Context, previewPost, false, false)
firstEmbed := clientPost.Metadata.Embeds[0]
preview := firstEmbed.Data.(*model.PreviewPost)
require.Equal(t, referencedPost.Id, preview.PostID)
@@ -596,10 +596,10 @@ func TestPreparePostForClient(t *testing.T) {
th.Context.Session().UserId = th.BasicUser.Id
directChannel, err := th.App.createDirectChannel(th.BasicUser.Id, th.BasicUser2.Id)
directChannel, err := th.App.createDirectChannel(th.Context, th.BasicUser.Id, th.BasicUser2.Id)
require.Nil(t, err)
groupChannel, err := th.App.createGroupChannel([]string{th.BasicUser.Id, th.BasicUser2.Id, th.CreateUser().Id})
groupChannel, err := th.App.createGroupChannel(th.Context, []string{th.BasicUser.Id, th.BasicUser2.Id, th.CreateUser().Id})
require.Nil(t, err)
testCases := []struct {
@@ -639,7 +639,7 @@ func TestPreparePostForClient(t *testing.T) {
require.Nil(t, err)
previewPost.Metadata.Embeds = nil
clientPost := th.App.PreparePostForClientWithEmbedsAndImages(previewPost, false, false)
clientPost := th.App.PreparePostForClientWithEmbedsAndImages(th.Context, previewPost, false, false)
firstEmbed := clientPost.Metadata.Embeds[0]
preview := firstEmbed.Data.(*model.PreviewPost)
@@ -677,7 +677,7 @@ func TestPreparePostForClient(t *testing.T) {
require.Nil(t, err)
previewPost.Metadata.Embeds = nil
clientPost := th.App.PreparePostForClientWithEmbedsAndImages(previewPost, false, false)
clientPost := th.App.PreparePostForClientWithEmbedsAndImages(th.Context, previewPost, false, false)
firstEmbed := clientPost.Metadata.Embeds[0]
preview := firstEmbed.Data.(*model.PreviewPost)
referencedPostFirstEmbed := preview.Post.Metadata.Embeds[0]
@@ -724,7 +724,7 @@ func TestPreparePostForClient(t *testing.T) {
require.Nil(t, err)
previewPost.Metadata.Embeds = nil
clientPost := th.App.PreparePostForClientWithEmbedsAndImages(previewPost, false, false)
clientPost := th.App.PreparePostForClientWithEmbedsAndImages(th.Context, previewPost, false, false)
firstEmbed := clientPost.Metadata.Embeds[0]
preview := firstEmbed.Data.(*model.PreviewPost)
referencedPostMetadata := preview.Post.Metadata
@@ -874,7 +874,7 @@ func testProxyOpenGraphImage(t *testing.T, th *TestHelper, shouldProxy bool) {
require.Nil(t, err)
post.Metadata.Embeds = nil
embeds := th.App.PreparePostForClientWithEmbedsAndImages(post, false, false).Metadata.Embeds
embeds := th.App.PreparePostForClientWithEmbedsAndImages(th.Context, post, false, false).Metadata.Embeds
require.Len(t, embeds, 1, "should have one embed")
embed := embeds[0]
@@ -953,7 +953,7 @@ func TestGetEmbedForPost(t *testing.T) {
})
t.Run("should return a message attachment when the post has one", func(t *testing.T) {
embed, err := th.App.getEmbedForPost(&model.Post{
embed, err := th.App.getEmbedForPost(th.Context, &model.Post{
Props: model.StringInterface{
"attachments": []*model.SlackAttachment{
{
@@ -970,7 +970,7 @@ func TestGetEmbedForPost(t *testing.T) {
})
t.Run("should return an image embed when the first link is an image", func(t *testing.T) {
embed, err := th.App.getEmbedForPost(&model.Post{}, imageURL, false)
embed, err := th.App.getEmbedForPost(th.Context, &model.Post{}, imageURL, false)
assert.Equal(t, &model.PostEmbed{
Type: model.PostEmbedImage,
@@ -980,7 +980,7 @@ func TestGetEmbedForPost(t *testing.T) {
})
t.Run("should return an opengraph embed", func(t *testing.T) {
embed, err := th.App.getEmbedForPost(&model.Post{}, ogURL, false)
embed, err := th.App.getEmbedForPost(th.Context, &model.Post{}, ogURL, false)
assert.Equal(t, &model.PostEmbed{
Type: model.PostEmbedOpengraph,
@@ -997,7 +997,7 @@ func TestGetEmbedForPost(t *testing.T) {
th.App.UpdateConfig(func(cfg *model.Config) {
*cfg.LocalizationSettings.DefaultServerLocale = "fr"
})
embed, err := th.App.getEmbedForPost(&model.Post{}, ogURL, false)
embed, err := th.App.getEmbedForPost(th.Context, &model.Post{}, ogURL, false)
assert.Equal(t, &model.PostEmbed{
Type: model.PostEmbedOpengraph,
@@ -1011,7 +1011,7 @@ func TestGetEmbedForPost(t *testing.T) {
})
t.Run("should return a link embed", func(t *testing.T) {
embed, err := th.App.getEmbedForPost(&model.Post{}, otherURL, false)
embed, err := th.App.getEmbedForPost(th.Context, &model.Post{}, otherURL, false)
assert.Equal(t, &model.PostEmbed{
Type: model.PostEmbedLink,
@@ -1031,7 +1031,7 @@ func TestGetEmbedForPost(t *testing.T) {
})
t.Run("should return an embedded message attachment", func(t *testing.T) {
embed, err := th.App.getEmbedForPost(&model.Post{
embed, err := th.App.getEmbedForPost(th.Context, &model.Post{
Props: model.StringInterface{
"attachments": []*model.SlackAttachment{
{
@@ -1048,21 +1048,21 @@ func TestGetEmbedForPost(t *testing.T) {
})
t.Run("should not return an opengraph embed", func(t *testing.T) {
embed, err := th.App.getEmbedForPost(&model.Post{}, ogURL, false)
embed, err := th.App.getEmbedForPost(th.Context, &model.Post{}, ogURL, false)
assert.Nil(t, embed)
assert.NoError(t, err)
})
t.Run("should not return an image embed", func(t *testing.T) {
embed, err := th.App.getEmbedForPost(&model.Post{}, imageURL, false)
embed, err := th.App.getEmbedForPost(th.Context, &model.Post{}, imageURL, false)
assert.Nil(t, embed)
assert.NoError(t, err)
})
t.Run("should not return a link embed", func(t *testing.T) {
embed, err := th.App.getEmbedForPost(&model.Post{}, otherURL, false)
embed, err := th.App.getEmbedForPost(th.Context, &model.Post{}, otherURL, false)
assert.Nil(t, embed)
assert.NoError(t, err)
@@ -1092,7 +1092,7 @@ func TestGetImagesForPost(t *testing.T) {
}
imageURL := server.URL + "/image.png"
images := th.App.getImagesForPost(post, []string{imageURL}, false)
images := th.App.getImagesForPost(th.Context, post, []string{imageURL}, false)
assert.Equal(t, images, map[string]*model.PostImage{
imageURL: {
@@ -1120,7 +1120,7 @@ func TestGetImagesForPost(t *testing.T) {
}
imageURL := server.URL + "/bad_image.png"
images := th.App.getImagesForPost(post, []string{imageURL}, false)
images := th.App.getImagesForPost(th.Context, post, []string{imageURL}, false)
assert.Equal(t, images, map[string]*model.PostImage{})
})
@@ -1168,7 +1168,7 @@ func TestGetImagesForPost(t *testing.T) {
},
}
images := th.App.getImagesForPost(post, []string{}, false)
images := th.App.getImagesForPost(th.Context, post, []string{}, false)
assert.Equal(t, images, map[string]*model.PostImage{
imageURL: {
@@ -1222,7 +1222,7 @@ func TestGetImagesForPost(t *testing.T) {
},
}
images := th.App.getImagesForPost(post, []string{}, false)
images := th.App.getImagesForPost(th.Context, post, []string{}, false)
assert.Equal(t, images, map[string]*model.PostImage{
imageURL: {
@@ -1276,7 +1276,7 @@ func TestGetImagesForPost(t *testing.T) {
},
}
images := th.App.getImagesForPost(post, []string{}, false)
images := th.App.getImagesForPost(th.Context, post, []string{}, false)
assert.Equal(t, images, map[string]*model.PostImage{
imageURL: {
@@ -1306,7 +1306,7 @@ func TestGetImagesForPost(t *testing.T) {
},
}
images := th.App.getImagesForPost(post, []string{}, false)
images := th.App.getImagesForPost(th.Context, post, []string{}, false)
assert.Equal(t, images, map[string]*model.PostImage{})
})
}
@@ -1980,7 +1980,7 @@ func TestGetLinkMetadata(t *testing.T) {
_, _, ok = th.App.getLinkMetadataFromDatabase(requestURL, timestamp)
require.False(t, ok, "data should not exist in database")
og, img, _, err := th.App.getLinkMetadata(requestURL, timestamp, false, "")
og, img, _, err := th.App.getLinkMetadata(th.Context, requestURL, timestamp, false, "")
require.NotNil(t, og)
assert.Nil(t, img)
@@ -1995,7 +1995,7 @@ func TestGetLinkMetadata(t *testing.T) {
_, _, ok = th.App.getLinkMetadataFromDatabase(requestURL, timestamp)
require.False(t, ok, "data should not exist in database")
og, img, _, err := th.App.getLinkMetadata(requestURL, timestamp+60*1000, false, "")
og, img, _, err := th.App.getLinkMetadata(th.Context, requestURL, timestamp+60*1000, false, "")
require.NotNil(t, og)
assert.Nil(t, img)
@@ -2012,7 +2012,7 @@ func TestGetLinkMetadata(t *testing.T) {
_, _, ok = th.App.getLinkMetadataFromDatabase(differentURL, timestamp)
require.False(t, ok, "data should not exist in database")
og, img, _, err := th.App.getLinkMetadata(differentURL, timestamp, false, "")
og, img, _, err := th.App.getLinkMetadata(th.Context, differentURL, timestamp, false, "")
assert.Nil(t, og)
assert.Nil(t, img)
@@ -2028,7 +2028,7 @@ func TestGetLinkMetadata(t *testing.T) {
_, _, ok = th.App.getLinkMetadataFromDatabase(requestURL, differentTimestamp)
require.False(t, ok, "data should not exist in database")
og, img, _, err := th.App.getLinkMetadata(requestURL, differentTimestamp, false, "")
og, img, _, err := th.App.getLinkMetadata(th.Context, requestURL, differentTimestamp, false, "")
assert.Nil(t, og)
assert.Nil(t, img)
@@ -2055,7 +2055,7 @@ func TestGetLinkMetadata(t *testing.T) {
_, _, ok = th.App.getLinkMetadataFromDatabase(requestURL, timestamp)
require.True(t, ok, "data should already exist in database")
og, img, _, err := th.App.getLinkMetadata(requestURL, timestamp, false, "")
og, img, _, err := th.App.getLinkMetadata(th.Context, requestURL, timestamp, false, "")
require.NotNil(t, og)
assert.Nil(t, img)
@@ -2072,7 +2072,7 @@ func TestGetLinkMetadata(t *testing.T) {
_, _, ok = th.App.getLinkMetadataFromDatabase(requestURL, timestamp)
require.True(t, ok, "data should already exist in database")
og, img, _, err := th.App.getLinkMetadata(requestURL, timestamp+60*1000, false, "")
og, img, _, err := th.App.getLinkMetadata(th.Context, requestURL, timestamp+60*1000, false, "")
require.NotNil(t, og)
assert.Nil(t, img)
@@ -2091,7 +2091,7 @@ func TestGetLinkMetadata(t *testing.T) {
_, _, ok = th.App.getLinkMetadataFromDatabase(differentURL, timestamp)
require.False(t, ok, "data should not exist in database")
og, img, _, err := th.App.getLinkMetadata(differentURL, timestamp, false, "")
og, img, _, err := th.App.getLinkMetadata(th.Context, differentURL, timestamp, false, "")
assert.Nil(t, og)
assert.Nil(t, img)
@@ -2109,7 +2109,7 @@ func TestGetLinkMetadata(t *testing.T) {
_, _, ok = th.App.getLinkMetadataFromDatabase(requestURL, differentTimestamp)
require.False(t, ok, "data should not exist in database")
og, img, _, err := th.App.getLinkMetadata(requestURL, differentTimestamp, false, "")
og, img, _, err := th.App.getLinkMetadata(th.Context, requestURL, differentTimestamp, false, "")
assert.Nil(t, og)
assert.Nil(t, img)
@@ -2130,7 +2130,7 @@ func TestGetLinkMetadata(t *testing.T) {
_, _, ok = th.App.getLinkMetadataFromDatabase(requestURL, timestamp)
require.False(t, ok, "data should not exist in database")
og, img, _, err := th.App.getLinkMetadata(requestURL, timestamp, false, "")
og, img, _, err := th.App.getLinkMetadata(th.Context, requestURL, timestamp, false, "")
assert.NotNil(t, og)
assert.Nil(t, img)
@@ -2150,7 +2150,7 @@ func TestGetLinkMetadata(t *testing.T) {
_, _, ok = th.App.getLinkMetadataFromDatabase(requestURL, timestamp)
require.False(t, ok, "data should not exist in database")
og, img, _, err := th.App.getLinkMetadata(requestURL, timestamp, false, "")
og, img, _, err := th.App.getLinkMetadata(th.Context, requestURL, timestamp, false, "")
assert.NotNil(t, og)
assert.Nil(t, img)
@@ -2178,7 +2178,7 @@ func TestGetLinkMetadata(t *testing.T) {
_, _, ok = th.App.getLinkMetadataFromDatabase(requestURL, timestamp)
require.False(t, ok, "data should not exist in database")
og, img, _, err := th.App.getLinkMetadata(requestURL, timestamp, false, "")
og, img, _, err := th.App.getLinkMetadata(th.Context, requestURL, timestamp, false, "")
assert.Nil(t, og)
assert.NotNil(t, img)
@@ -2206,7 +2206,7 @@ func TestGetLinkMetadata(t *testing.T) {
_, _, ok = th.App.getLinkMetadataFromDatabase(requestURL, timestamp)
require.False(t, ok, "data should not exist in database")
og, img, _, err := th.App.getLinkMetadata(requestURL, timestamp, false, "")
og, img, _, err := th.App.getLinkMetadata(th.Context, requestURL, timestamp, false, "")
assert.Nil(t, og)
assert.Nil(t, img)
@@ -2236,7 +2236,7 @@ func TestGetLinkMetadata(t *testing.T) {
_, _, ok = th.App.getLinkMetadataFromDatabase(requestURL, timestamp)
require.False(t, ok, "data should not exist in database")
og, img, _, err := th.App.getLinkMetadata(requestURL, timestamp, false, "")
og, img, _, err := th.App.getLinkMetadata(th.Context, requestURL, timestamp, false, "")
assert.Nil(t, og)
assert.Nil(t, img)
@@ -2270,7 +2270,7 @@ func TestGetLinkMetadata(t *testing.T) {
_, _, ok = th.App.getLinkMetadataFromDatabase(requestURL, timestamp)
require.False(t, ok, "data should not exist in database")
og, img, _, err := th.App.getLinkMetadata(requestURL, timestamp, false, "")
og, img, _, err := th.App.getLinkMetadata(th.Context, requestURL, timestamp, false, "")
assert.Nil(t, og)
assert.Nil(t, img)
@@ -2301,7 +2301,7 @@ func TestGetLinkMetadata(t *testing.T) {
_, _, ok = th.App.getLinkMetadataFromDatabase(requestURL, timestamp)
require.False(t, ok, "data should not exist in database")
_, img, _, err := th.App.getLinkMetadata(requestURL, timestamp, false, "")
_, img, _, err := th.App.getLinkMetadata(th.Context, requestURL, timestamp, false, "")
require.NoError(t, err)
_, _, _, ok = getLinkMetadataFromCache(requestURL, timestamp)
@@ -2323,7 +2323,7 @@ func TestGetLinkMetadata(t *testing.T) {
requestURL := server.URL + "/json?name=" + t.Name()
timestamp := int64(1547510400000)
og, img, _, err := th.App.getLinkMetadata(requestURL, timestamp, false, "")
og, img, _, err := th.App.getLinkMetadata(th.Context, requestURL, timestamp, false, "")
assert.Nil(t, og)
assert.Nil(t, img)
assert.NoError(t, err)
@@ -2338,7 +2338,7 @@ func TestGetLinkMetadata(t *testing.T) {
cacheLinkMetadata(requestURL, timestamp, &opengraph.OpenGraph{Title: "cached"}, nil, nil)
og, img, _, err := th.App.getLinkMetadata(requestURL, timestamp, true, "")
og, img, _, err := th.App.getLinkMetadata(th.Context, requestURL, timestamp, true, "")
assert.NotNil(t, og)
assert.Nil(t, img)
assert.NoError(t, err)
@@ -2353,7 +2353,7 @@ func TestGetLinkMetadata(t *testing.T) {
th.App.saveLinkMetadataToDatabase(requestURL, timestamp, &opengraph.OpenGraph{Title: "cached"}, nil)
og, img, _, err := th.App.getLinkMetadata(requestURL, timestamp, true, "")
og, img, _, err := th.App.getLinkMetadata(th.Context, requestURL, timestamp, true, "")
assert.Nil(t, og)
assert.Nil(t, img)
assert.NoError(t, err)
@@ -2376,7 +2376,7 @@ func TestGetLinkMetadata(t *testing.T) {
requestURL := "/image?height=200&width=300&name=" + t.Name()
timestamp := int64(1547510400000)
og, img, _, err := th.App.getLinkMetadata(requestURL, timestamp, false, "")
og, img, _, err := th.App.getLinkMetadata(th.Context, requestURL, timestamp, false, "")
assert.Nil(t, og)
assert.NotNil(t, img)
assert.NoError(t, err)
@@ -2404,7 +2404,7 @@ func TestGetLinkMetadata(t *testing.T) {
requestURL := server.URL + "/image?height=200&width=300&name=" + t.Name()
timestamp := int64(1547510400000)
og, img, _, err := th.App.getLinkMetadata(requestURL, timestamp, false, "")
og, img, _, err := th.App.getLinkMetadata(th.Context, requestURL, timestamp, false, "")
assert.Nil(t, og)
assert.Nil(t, img)
assert.Error(t, err)
@@ -2414,7 +2414,7 @@ func TestGetLinkMetadata(t *testing.T) {
requestURL = th.App.GetSiteURL() + "/api/v4/image?url=" + url.QueryEscape(requestURL)
// Note that this request still fails while testing because the request made by the image proxy is blocked
og, img, _, err = th.App.getLinkMetadata(requestURL, timestamp, false, "")
og, img, _, err = th.App.getLinkMetadata(th.Context, requestURL, timestamp, false, "")
assert.Nil(t, og)
assert.Nil(t, img)
assert.Error(t, err)
@@ -2428,7 +2428,7 @@ func TestGetLinkMetadata(t *testing.T) {
requestURL := server.URL + "/mixed?name=" + t.Name()
timestamp := int64(1547510400000)
og, img, _, err := th.App.getLinkMetadata(requestURL, timestamp, true, "")
og, img, _, err := th.App.getLinkMetadata(th.Context, requestURL, timestamp, true, "")
assert.Nil(t, og)
assert.NotNil(t, img)
assert.NoError(t, err)
@@ -2447,7 +2447,7 @@ func TestGetLinkMetadata(t *testing.T) {
requestURL := server.URL + "/pl/5rpoy4o3nbgwjm7gs4cm71h6ho"
timestamp := int64(1547510400000)
_, _, _, err := th.App.getLinkMetadata(requestURL, timestamp, true, "")
_, _, _, err := th.App.getLinkMetadata(th.Context, requestURL, timestamp, true, "")
assert.Error(t, err)
})
}
@@ -2699,7 +2699,7 @@ func TestSanitizePostMetadataForUserAndChannel(t *testing.T) {
*cfg.ServiceSettings.SiteURL = "http://mymattermost.com"
})
directChannel, err := th.App.createDirectChannel(th.BasicUser.Id, th.BasicUser2.Id)
directChannel, err := th.App.createDirectChannel(th.Context, th.BasicUser.Id, th.BasicUser2.Id)
assert.Nil(t, err)
userID := model.NewId()
@@ -2724,7 +2724,7 @@ func TestSanitizePostMetadataForUserAndChannel(t *testing.T) {
previewedPost := model.NewPreviewPost(post, th.BasicTeam, directChannel)
actual := th.App.sanitizePostMetadataForUserAndChannel(post, previewedPost, directChannel, th.BasicUser2.Id)
actual := th.App.sanitizePostMetadataForUserAndChannel(th.Context, post, previewedPost, directChannel, th.BasicUser2.Id)
assert.NotNil(t, actual.Metadata.Embeds[0].Data)
guestID := model.NewId()
@@ -2738,6 +2738,6 @@ func TestSanitizePostMetadataForUserAndChannel(t *testing.T) {
guest, appErr := th.App.CreateGuest(th.Context, guest)
require.Nil(t, appErr)
actual = th.App.sanitizePostMetadataForUserAndChannel(post, previewedPost, directChannel, guest.Id)
actual = th.App.sanitizePostMetadataForUserAndChannel(th.Context, post, previewedPost, directChannel, guest.Id)
assert.Nil(t, actual.Metadata.Embeds[0].Data)
}

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

@@ -319,7 +319,7 @@ func TestUpdatePostInArchivedChannel(t *testing.T) {
th := Setup(t).InitBasic()
defer th.TearDown()
archivedChannel := th.CreateChannel(th.BasicTeam)
archivedChannel := th.CreateChannel(th.Context, th.BasicTeam)
post := th.CreatePost(archivedChannel)
th.App.DeleteChannel(th.Context, archivedChannel, "")
@@ -339,7 +339,7 @@ func TestPostReplyToPostWhereRootPosterLeftChannel(t *testing.T) {
userNotInChannel := th.BasicUser
rootPost := th.BasicPost
_, err := th.App.AddUserToChannel(userInChannel, channel, false)
_, err := th.App.AddUserToChannel(th.Context, userInChannel, channel, false)
require.Nil(t, err)
err = th.App.RemoveUserFromChannel(th.Context, userNotInChannel.Id, "", channel)
@@ -416,9 +416,9 @@ func TestPostChannelMentions(t *testing.T) {
TeamId: th.BasicTeam.Id,
}, false)
require.Nil(t, err)
defer th.App.PermanentDeleteChannel(channelToMention)
defer th.App.PermanentDeleteChannel(th.Context, channelToMention)
_, err = th.App.AddUserToChannel(user, channel, false)
_, err = th.App.AddUserToChannel(th.Context, user, channel, false)
require.Nil(t, err)
post := &model.Post{
@@ -649,7 +649,7 @@ func TestDeletePostWithFileAttachments(t *testing.T) {
assert.Nil(t, err)
// Delete the post.
_, err = th.App.DeletePost(post.Id, userID)
_, err = th.App.DeletePost(th.Context, post.Id, userID)
assert.Nil(t, err)
// Wait for the cleanup routine to finish.
@@ -664,11 +664,11 @@ func TestDeletePostInArchivedChannel(t *testing.T) {
th := Setup(t).InitBasic()
defer th.TearDown()
archivedChannel := th.CreateChannel(th.BasicTeam)
archivedChannel := th.CreateChannel(th.Context, th.BasicTeam)
post := th.CreatePost(archivedChannel)
th.App.DeleteChannel(th.Context, archivedChannel, "")
_, err := th.App.DeletePost(post.Id, "")
_, err := th.App.DeletePost(th.Context, post.Id, "")
require.NotNil(t, err)
require.Equal(t, "api.post.delete_post.can_not_delete_post_in_deleted.error", err.Id)
}
@@ -776,7 +776,7 @@ func TestCreatePost(t *testing.T) {
permalink := fmt.Sprintf("%s/%s/pl/%s", *th.App.Config().ServiceSettings.SiteURL, th.BasicTeam.Name, referencedPost.Id)
channelForPreview := th.CreateChannel(th.BasicTeam)
channelForPreview := th.CreateChannel(th.Context, th.BasicTeam)
previewPost := &model.Post{
ChannelId: channelForPreview.Id,
Message: permalink,
@@ -793,7 +793,7 @@ func TestCreatePost(t *testing.T) {
th := Setup(t).InitBasic()
defer th.TearDown()
channelForPreview := th.CreateChannel(th.BasicTeam)
channelForPreview := th.CreateChannel(th.Context, th.BasicTeam)
referencedPost := &model.Post{
ChannelId: th.BasicChannel.Id,
@@ -840,7 +840,7 @@ func TestCreatePost(t *testing.T) {
user1 := th.CreateUser()
user2 := th.CreateUser()
directChannel, err := th.App.createDirectChannel(user1.Id, user2.Id)
directChannel, err := th.App.createDirectChannel(th.Context, user1.Id, user2.Id)
require.Nil(t, err)
referencedPost := &model.Post{
@@ -896,7 +896,7 @@ func TestCreatePost(t *testing.T) {
th := Setup(t).InitBasic()
defer th.TearDown()
channelForPreview := th.CreateChannel(th.BasicTeam)
channelForPreview := th.CreateChannel(th.Context, th.BasicTeam)
for i := 0; i < 20; i++ {
user := th.CreateUser()
@@ -1230,7 +1230,7 @@ func TestPatchPostInArchivedChannel(t *testing.T) {
th := Setup(t).InitBasic()
defer th.TearDown()
archivedChannel := th.CreateChannel(th.BasicTeam)
archivedChannel := th.CreateChannel(th.Context, th.BasicTeam)
post := th.CreatePost(archivedChannel)
th.App.DeleteChannel(th.Context, archivedChannel, "")
@@ -1297,7 +1297,7 @@ func TestUpdatePost(t *testing.T) {
permalink := fmt.Sprintf("%s/%s/pl/%s", *th.App.Config().ServiceSettings.SiteURL, th.BasicTeam.Name, referencedPost.Id)
channelForTestPost := th.CreateChannel(th.BasicTeam)
channelForTestPost := th.CreateChannel(th.Context, th.BasicTeam)
testPost := &model.Post{
ChannelId: channelForTestPost.Id,
Message: "hello world",
@@ -1327,7 +1327,7 @@ func TestUpdatePost(t *testing.T) {
user1 := th.CreateUser()
user2 := th.CreateUser()
directChannel, err := th.App.createDirectChannel(user1.Id, user2.Id)
directChannel, err := th.App.createDirectChannel(th.Context, user1.Id, user2.Id)
require.Nil(t, err)
referencedPost := &model.Post{
@@ -1573,7 +1573,7 @@ func TestCountMentionsFromPost(t *testing.T) {
user1 := th.BasicUser
user2 := th.BasicUser2
channel := th.CreateChannel(th.BasicTeam)
channel := th.CreateChannel(th.Context, th.BasicTeam)
th.AddUserToChannel(user2, channel)
post1, err := th.App.CreatePost(th.Context, &model.Post{
@@ -1595,7 +1595,7 @@ func TestCountMentionsFromPost(t *testing.T) {
}, channel, false, true)
require.Nil(t, err)
count, _, err := th.App.countMentionsFromPost(user2, post1)
count, _, err := th.App.countMentionsFromPost(th.Context, user2, post1)
assert.Nil(t, err)
assert.Equal(t, 0, count)
@@ -1608,7 +1608,7 @@ func TestCountMentionsFromPost(t *testing.T) {
user1 := th.BasicUser
user2 := th.BasicUser2
channel := th.CreateChannel(th.BasicTeam)
channel := th.CreateChannel(th.Context, th.BasicTeam)
th.AddUserToChannel(user2, channel)
user2.NotifyProps[model.MentionKeysNotifyProp] = "apple"
@@ -1634,7 +1634,7 @@ func TestCountMentionsFromPost(t *testing.T) {
// post1 and post3 should mention the user
count, _, err := th.App.countMentionsFromPost(user2, post1)
count, _, err := th.App.countMentionsFromPost(th.Context, user2, post1)
assert.Nil(t, err)
assert.Equal(t, 2, count)
@@ -1647,7 +1647,7 @@ func TestCountMentionsFromPost(t *testing.T) {
user1 := th.BasicUser
user2 := th.BasicUser2
channel := th.CreateChannel(th.BasicTeam)
channel := th.CreateChannel(th.Context, th.BasicTeam)
th.AddUserToChannel(user2, channel)
user2.NotifyProps[model.ChannelMentionsNotifyProp] = "true"
@@ -1673,7 +1673,7 @@ func TestCountMentionsFromPost(t *testing.T) {
// post2 and post3 should mention the user
count, _, err := th.App.countMentionsFromPost(user2, post1)
count, _, err := th.App.countMentionsFromPost(th.Context, user2, post1)
assert.Nil(t, err)
assert.Equal(t, 2, count)
@@ -1686,7 +1686,7 @@ func TestCountMentionsFromPost(t *testing.T) {
user1 := th.BasicUser
user2 := th.BasicUser2
channel := th.CreateChannel(th.BasicTeam)
channel := th.CreateChannel(th.Context, th.BasicTeam)
th.AddUserToChannel(user2, channel)
user2.NotifyProps[model.ChannelMentionsNotifyProp] = "false"
@@ -1710,7 +1710,7 @@ func TestCountMentionsFromPost(t *testing.T) {
}, channel, false, true)
require.Nil(t, err)
count, _, err := th.App.countMentionsFromPost(user2, post1)
count, _, err := th.App.countMentionsFromPost(th.Context, user2, post1)
assert.Nil(t, err)
assert.Equal(t, 0, count)
@@ -1723,12 +1723,12 @@ func TestCountMentionsFromPost(t *testing.T) {
user1 := th.BasicUser
user2 := th.BasicUser2
channel := th.CreateChannel(th.BasicTeam)
channel := th.CreateChannel(th.Context, th.BasicTeam)
th.AddUserToChannel(user2, channel)
user2.NotifyProps[model.ChannelMentionsNotifyProp] = "true"
_, err := th.App.UpdateChannelMemberNotifyProps(map[string]string{
_, err := th.App.UpdateChannelMemberNotifyProps(th.Context, map[string]string{
model.IgnoreChannelMentionsNotifyProp: model.IgnoreChannelMentionsOn,
}, channel.Id, user2.Id)
require.Nil(t, err)
@@ -1752,7 +1752,7 @@ func TestCountMentionsFromPost(t *testing.T) {
}, channel, false, true)
require.Nil(t, err)
count, _, err := th.App.countMentionsFromPost(user2, post1)
count, _, err := th.App.countMentionsFromPost(th.Context, user2, post1)
assert.Nil(t, err)
assert.Equal(t, 0, count)
@@ -1765,7 +1765,7 @@ func TestCountMentionsFromPost(t *testing.T) {
user1 := th.BasicUser
user2 := th.BasicUser2
channel := th.CreateChannel(th.BasicTeam)
channel := th.CreateChannel(th.Context, th.BasicTeam)
th.AddUserToChannel(user2, channel)
user2.NotifyProps[model.CommentsNotifyProp] = model.CommentsNotifyRoot
@@ -1806,7 +1806,7 @@ func TestCountMentionsFromPost(t *testing.T) {
// post2 should mention the user
count, _, err := th.App.countMentionsFromPost(user2, post1)
count, _, err := th.App.countMentionsFromPost(th.Context, user2, post1)
assert.Nil(t, err)
assert.Equal(t, 1, count)
@@ -1819,7 +1819,7 @@ func TestCountMentionsFromPost(t *testing.T) {
user1 := th.BasicUser
user2 := th.BasicUser2
channel := th.CreateChannel(th.BasicTeam)
channel := th.CreateChannel(th.Context, th.BasicTeam)
th.AddUserToChannel(user2, channel)
user2.NotifyProps[model.CommentsNotifyProp] = model.CommentsNotifyAny
@@ -1860,7 +1860,7 @@ func TestCountMentionsFromPost(t *testing.T) {
// post2 and post5 should mention the user
count, _, err := th.App.countMentionsFromPost(user2, post1)
count, _, err := th.App.countMentionsFromPost(th.Context, user2, post1)
assert.Nil(t, err)
assert.Equal(t, 2, count)
@@ -1873,7 +1873,7 @@ func TestCountMentionsFromPost(t *testing.T) {
user1 := th.BasicUser
user2 := th.BasicUser2
channel := th.CreateChannel(th.BasicTeam)
channel := th.CreateChannel(th.Context, th.BasicTeam)
th.AddUserToChannel(user2, channel)
post1, err := th.App.CreatePost(th.Context, &model.Post{
@@ -1909,7 +1909,7 @@ func TestCountMentionsFromPost(t *testing.T) {
// should be mentioned by post2 and post3
count, _, err := th.App.countMentionsFromPost(user2, post1)
count, _, err := th.App.countMentionsFromPost(th.Context, user2, post1)
assert.Nil(t, err)
assert.Equal(t, 2, count)
@@ -1922,7 +1922,7 @@ func TestCountMentionsFromPost(t *testing.T) {
user1 := th.BasicUser
user2 := th.BasicUser2
channel, err := th.App.createDirectChannel(user1.Id, user2.Id)
channel, err := th.App.createDirectChannel(th.Context, user1.Id, user2.Id)
require.Nil(t, err)
post1, err := th.App.CreatePost(th.Context, &model.Post{
@@ -1939,12 +1939,12 @@ func TestCountMentionsFromPost(t *testing.T) {
}, channel, false, true)
require.Nil(t, err)
count, _, err := th.App.countMentionsFromPost(user2, post1)
count, _, err := th.App.countMentionsFromPost(th.Context, user2, post1)
assert.Nil(t, err)
assert.Equal(t, 2, count)
count, _, err = th.App.countMentionsFromPost(user1, post1)
count, _, err = th.App.countMentionsFromPost(th.Context, user1, post1)
assert.Nil(t, err)
assert.Equal(t, 0, count)
@@ -1957,7 +1957,7 @@ func TestCountMentionsFromPost(t *testing.T) {
user1 := th.BasicUser
user2 := th.BasicUser2
channel := th.CreateChannel(th.BasicTeam)
channel := th.CreateChannel(th.Context, th.BasicTeam)
th.AddUserToChannel(user2, channel)
_, err := th.App.CreatePost(th.Context, &model.Post{
@@ -1981,7 +1981,7 @@ func TestCountMentionsFromPost(t *testing.T) {
// post1 and post3 should mention the user, but we only count post3
count, _, err := th.App.countMentionsFromPost(user2, post2)
count, _, err := th.App.countMentionsFromPost(th.Context, user2, post2)
assert.Nil(t, err)
assert.Equal(t, 1, count)
@@ -1994,7 +1994,7 @@ func TestCountMentionsFromPost(t *testing.T) {
user1 := th.BasicUser
user2 := th.BasicUser2
channel := th.CreateChannel(th.BasicTeam)
channel := th.CreateChannel(th.Context, th.BasicTeam)
th.AddUserToChannel(user2, channel)
post1, err := th.App.CreatePost(th.Context, &model.Post{
@@ -2012,7 +2012,7 @@ func TestCountMentionsFromPost(t *testing.T) {
// post2 should mention the user
count, _, err := th.App.countMentionsFromPost(user2, post1)
count, _, err := th.App.countMentionsFromPost(th.Context, user2, post1)
assert.Nil(t, err)
assert.Equal(t, 1, count)
@@ -2025,7 +2025,7 @@ func TestCountMentionsFromPost(t *testing.T) {
user1 := th.BasicUser
user2 := th.BasicUser2
channel := th.CreateChannel(th.BasicTeam)
channel := th.CreateChannel(th.Context, th.BasicTeam)
th.AddUserToChannel(user2, channel)
user2.NotifyProps[model.CommentsNotifyProp] = model.CommentsNotifyAny
@@ -2059,7 +2059,7 @@ func TestCountMentionsFromPost(t *testing.T) {
// post4 should mention the user
count, _, err := th.App.countMentionsFromPost(user2, post3)
count, _, err := th.App.countMentionsFromPost(th.Context, user2, post3)
assert.Nil(t, err)
assert.Equal(t, 1, count)
@@ -2072,7 +2072,7 @@ func TestCountMentionsFromPost(t *testing.T) {
user1 := th.BasicUser
user2 := th.BasicUser2
channel := th.CreateChannel(th.BasicTeam)
channel := th.CreateChannel(th.Context, th.BasicTeam)
th.AddUserToChannel(user2, channel)
post1, err := th.App.CreatePost(th.Context, &model.Post{
@@ -2099,7 +2099,7 @@ func TestCountMentionsFromPost(t *testing.T) {
// post3 should mention the user
count, _, err := th.App.countMentionsFromPost(user2, post1)
count, _, err := th.App.countMentionsFromPost(th.Context, user2, post1)
assert.Nil(t, err)
assert.Equal(t, 1, count)
@@ -2112,7 +2112,7 @@ func TestCountMentionsFromPost(t *testing.T) {
user1 := th.BasicUser
user2 := th.BasicUser2
channel := th.CreateChannel(th.BasicTeam)
channel := th.CreateChannel(th.Context, th.BasicTeam)
th.AddUserToChannel(user2, channel)
numPosts := 215
@@ -2135,7 +2135,7 @@ func TestCountMentionsFromPost(t *testing.T) {
// Every post should mention the user
count, _, err := th.App.countMentionsFromPost(user2, post1)
count, _, err := th.App.countMentionsFromPost(th.Context, user2, post1)
assert.Nil(t, err)
assert.Equal(t, numPosts, count)
@@ -2150,7 +2150,7 @@ func TestFillInPostProps(t *testing.T) {
user1 := th.BasicUser
channel := th.CreateChannel(th.BasicTeam)
channel := th.CreateChannel(th.Context, th.BasicTeam)
post1, err := th.App.CreatePost(th.Context, &model.Post{
UserId: user1.Id,
@@ -2159,7 +2159,7 @@ func TestFillInPostProps(t *testing.T) {
}, channel, false, true)
require.Nil(t, err)
err = th.App.FillInPostProps(post1, channel)
err = th.App.FillInPostProps(th.Context, post1, channel)
assert.Nil(t, err)
assert.Equal(t, post1.Props, model.StringInterface{})
@@ -2181,7 +2181,7 @@ func TestFillInPostProps(t *testing.T) {
require.Nil(t, err)
th.LinkUserToTeam(guest, th.BasicTeam)
channel := th.CreateChannel(th.BasicTeam)
channel := th.CreateChannel(th.Context, th.BasicTeam)
th.AddUserToChannel(guest, channel)
post1, err := th.App.CreatePost(th.Context, &model.Post{
@@ -2191,7 +2191,7 @@ func TestFillInPostProps(t *testing.T) {
}, channel, false, true)
require.Nil(t, err)
err = th.App.FillInPostProps(post1, channel)
err = th.App.FillInPostProps(th.Context, post1, channel)
assert.Nil(t, err)
assert.Equal(t, post1.Props, model.StringInterface{})
@@ -2214,7 +2214,7 @@ func TestFillInPostProps(t *testing.T) {
require.Nil(t, err)
th.LinkUserToTeam(guest, th.BasicTeam)
channel := th.CreateChannel(th.BasicTeam)
channel := th.CreateChannel(th.Context, th.BasicTeam)
th.AddUserToChannel(guest, channel)
post1, err := th.App.CreatePost(th.Context, &model.Post{
@@ -2224,7 +2224,7 @@ func TestFillInPostProps(t *testing.T) {
}, channel, false, true)
require.Nil(t, err)
err = th.App.FillInPostProps(post1, channel)
err = th.App.FillInPostProps(th.Context, post1, channel)
assert.Nil(t, err)
assert.Equal(t, post1.Props, model.StringInterface{"disable_group_highlight": true})
@@ -2243,7 +2243,7 @@ func TestThreadMembership(t *testing.T) {
user1 := th.BasicUser
user2 := th.BasicUser2
channel := th.CreateChannel(th.BasicTeam)
channel := th.CreateChannel(th.Context, th.BasicTeam)
th.AddUserToChannel(user2, channel)
postRoot, err := th.App.CreatePost(th.Context, &model.Post{
@@ -2405,7 +2405,7 @@ func TestViewChannelShouldNotUpdateThreads(t *testing.T) {
m, e := th.App.GetThreadMembershipsForUser(user2.Id, th.BasicTeam.Id)
require.NoError(t, e)
th.App.ViewChannel(&model.ChannelView{
th.App.ViewChannel(th.Context, &model.ChannelView{
ChannelId: channel.Id,
PrevChannelId: "",
}, user2.Id, "", true)
@@ -2427,7 +2427,7 @@ func TestCollapsedThreadFetch(t *testing.T) {
user2 := th.BasicUser2
t.Run("should only return root posts, enriched", func(t *testing.T) {
channel := th.CreateChannel(th.BasicTeam)
channel := th.CreateChannel(th.Context, th.BasicTeam)
th.AddUserToChannel(user2, channel)
defer th.App.DeleteChannel(th.Context, channel, user1.Id)
@@ -2448,8 +2448,8 @@ func TestCollapsedThreadFetch(t *testing.T) {
thread, nErr := th.App.Srv().Store.Thread().Get(postRoot.Id)
require.NoError(t, nErr)
require.Len(t, thread.Participants, 1)
th.App.MarkChannelAsUnreadFromPost(postRoot.Id, user1.Id, true)
l, err := th.App.GetPostsForChannelAroundLastUnread(channel.Id, user1.Id, 10, 10, true, true, false)
th.App.MarkChannelAsUnreadFromPost(th.Context, postRoot.Id, user1.Id, true)
l, err := th.App.GetPostsForChannelAroundLastUnread(th.Context, channel.Id, user1.Id, 10, 10, true, true, false)
require.Nil(t, err)
require.Len(t, l.Order, 1)
require.EqualValues(t, 1, l.Posts[postRoot.Id].ReplyCount)
@@ -2459,7 +2459,7 @@ func TestCollapsedThreadFetch(t *testing.T) {
require.True(t, *l.Posts[postRoot.Id].IsFollowing)
// try extended fetch
l, err = th.App.GetPostsForChannelAroundLastUnread(channel.Id, user1.Id, 10, 10, true, true, true)
l, err = th.App.GetPostsForChannelAroundLastUnread(th.Context, channel.Id, user1.Id, 10, 10, true, true, true)
require.Nil(t, err)
require.Len(t, l.Order, 1)
require.NotEmpty(t, l.Posts[postRoot.Id].Participants[0].Email)
@@ -2472,7 +2472,7 @@ func TestCollapsedThreadFetch(t *testing.T) {
cfg.FeatureFlags.CollapsedThreads = true
})
channel := th.CreateChannel(th.BasicTeam)
channel := th.CreateChannel(th.Context, th.BasicTeam)
th.AddUserToChannel(user2, channel)
defer th.App.DeleteChannel(th.Context, channel, user1.Id)
@@ -2515,7 +2515,7 @@ func TestCollapsedThreadFetch(t *testing.T) {
})
require.Nil(t, err)
channel := th.CreateChannel(th.BasicTeam)
channel := th.CreateChannel(th.Context, th.BasicTeam)
th.LinkUserToTeam(user3, th.BasicTeam)
th.AddUserToChannel(user3, channel)
defer th.App.DeleteChannel(th.Context, channel, user1.Id)
@@ -2553,10 +2553,10 @@ func TestCollapsedThreadFetch(t *testing.T) {
require.NotEmpty(t, l.Posts[postRoot.Id].Participants[0].Email)
require.Empty(t, l.Posts[postRoot.Id].Participants[0].AuthData)
th.App.MarkChannelAsUnreadFromPost(postRoot.Id, user1.Id, true)
th.App.MarkChannelAsUnreadFromPost(th.Context, postRoot.Id, user1.Id, true)
// extended fetch posts around
l, err = th.App.GetPostsForChannelAroundLastUnread(channel.Id, user1.Id, 10, 10, true, true, true)
l, err = th.App.GetPostsForChannelAroundLastUnread(th.Context, channel.Id, user1.Id, 10, 10, true, true, true)
require.Nil(t, err)
require.Len(t, l.Order, 1)
require.NotEmpty(t, l.Posts[postRoot.Id].Participants[0].Email)
@@ -2628,7 +2628,7 @@ func TestSharedChannelSyncForPostActions(t *testing.T) {
user := th.BasicUser
channel := th.CreateChannel(th.BasicTeam, WithShared(true))
channel := th.CreateChannel(th.Context, th.BasicTeam, WithShared(true))
_, err := th.App.CreatePost(th.Context, &model.Post{
UserId: user.Id,
@@ -2652,7 +2652,7 @@ func TestSharedChannelSyncForPostActions(t *testing.T) {
user := th.BasicUser
channel := th.CreateChannel(th.BasicTeam, WithShared(true))
channel := th.CreateChannel(th.Context, th.BasicTeam, WithShared(true))
post, err := th.App.CreatePost(th.Context, &model.Post{
UserId: user.Id,
@@ -2680,7 +2680,7 @@ func TestSharedChannelSyncForPostActions(t *testing.T) {
user := th.BasicUser
channel := th.CreateChannel(th.BasicTeam, WithShared(true))
channel := th.CreateChannel(th.Context, th.BasicTeam, WithShared(true))
post, err := th.App.CreatePost(th.Context, &model.Post{
UserId: user.Id,
@@ -2689,7 +2689,7 @@ func TestSharedChannelSyncForPostActions(t *testing.T) {
}, channel, false, true)
require.Nil(t, err, "Creating a post should not error")
_, err = th.App.DeletePost(post.Id, user.Id)
_, err = th.App.DeletePost(th.Context, post.Id, user.Id)
require.Nil(t, err, "Deleting a post should not error")
// one creation and two deletes
@@ -2747,7 +2747,7 @@ func TestGetPostIfAuthorized(t *testing.T) {
th := Setup(t).InitBasic()
defer th.TearDown()
privateChannel := th.CreatePrivateChannel(th.BasicTeam)
privateChannel := th.CreatePrivateChannel(th.Context, th.BasicTeam)
post, err := th.App.CreatePost(th.Context, &model.Post{UserId: th.BasicUser.Id, ChannelId: privateChannel.Id, Message: "Hello"}, privateChannel, false, false)
require.Nil(t, err)
require.NotNil(t, post)
@@ -2761,11 +2761,11 @@ func TestGetPostIfAuthorized(t *testing.T) {
require.NotNil(t, session2)
// User is not authorized to get post
_, err = th.App.GetPostIfAuthorized(post.Id, session2, false)
_, err = th.App.GetPostIfAuthorized(th.Context, post.Id, session2, false)
require.NotNil(t, err)
// User is authorized to get post
_, err = th.App.GetPostIfAuthorized(post.Id, session1, false)
_, err = th.App.GetPostIfAuthorized(th.Context, post.Id, session1, false)
require.Nil(t, err)
}
@@ -2887,8 +2887,8 @@ func TestGetTopThreadsForTeamSince(t *testing.T) {
defer th.TearDown()
// create a public channel, a private channel
channelPublic := th.CreateChannel(th.BasicTeam)
channelPrivate := th.CreatePrivateChannel(th.BasicTeam)
channelPublic := th.CreateChannel(th.Context, th.BasicTeam)
channelPrivate := th.CreatePrivateChannel(th.Context, th.BasicTeam)
th.AddUserToChannel(th.BasicUser, channelPublic)
th.AddUserToChannel(th.BasicUser, channelPrivate)
th.AddUserToChannel(th.BasicUser2, channelPublic)
@@ -2937,20 +2937,20 @@ func TestGetTopThreadsForTeamSince(t *testing.T) {
// get top threads for team, as user 1 and user 2
// user 1 should see both threads, while user 2 should see only thread in public channel.
topTeamThreadsByUser1, appErr := th.App.GetTopThreadsForTeamSince(th.BasicTeam.Id, th.BasicUser.Id, &model.InsightsOpts{StartUnixMilli: 200, PerPage: 100})
topTeamThreadsByUser1, appErr := th.App.GetTopThreadsForTeamSince(th.Context, th.BasicTeam.Id, th.BasicUser.Id, &model.InsightsOpts{StartUnixMilli: 200, PerPage: 100})
require.Nil(t, appErr)
require.Len(t, topTeamThreadsByUser1.Items, 2)
require.Equal(t, topTeamThreadsByUser1.Items[0].Post.Id, rootPostPrivateChannel.Id)
require.Equal(t, topTeamThreadsByUser1.Items[1].Post.Id, rootPostPublicChannel.Id)
topTeamThreadsByUser2, appErr := th.App.GetTopThreadsForTeamSince(th.BasicTeam.Id, th.BasicUser2.Id, &model.InsightsOpts{StartUnixMilli: 200, PerPage: 100})
topTeamThreadsByUser2, appErr := th.App.GetTopThreadsForTeamSince(th.Context, th.BasicTeam.Id, th.BasicUser2.Id, &model.InsightsOpts{StartUnixMilli: 200, PerPage: 100})
require.Nil(t, appErr)
require.Len(t, topTeamThreadsByUser2.Items, 1)
require.Equal(t, topTeamThreadsByUser2.Items[0].Post.Id, rootPostPublicChannel.Id)
// add user2 to private channel and it can see 2 top threads.
th.AddUserToChannel(th.BasicUser2, channelPrivate)
topTeamThreadsByUser2IncludingPrivate, appErr := th.App.GetTopThreadsForTeamSince(th.BasicTeam.Id, th.BasicUser2.Id, &model.InsightsOpts{StartUnixMilli: 200, PerPage: 100})
topTeamThreadsByUser2IncludingPrivate, appErr := th.App.GetTopThreadsForTeamSince(th.Context, th.BasicTeam.Id, th.BasicUser2.Id, &model.InsightsOpts{StartUnixMilli: 200, PerPage: 100})
require.Nil(t, appErr)
require.Len(t, topTeamThreadsByUser2IncludingPrivate.Items, 2)
}
@@ -2959,8 +2959,8 @@ func TestGetTopThreadsForUserSince(t *testing.T) {
defer th.TearDown()
// create a public channel, a private channel
channelPublic := th.CreateChannel(th.BasicTeam)
channelPrivate := th.CreatePrivateChannel(th.BasicTeam)
channelPublic := th.CreateChannel(th.Context, th.BasicTeam)
channelPrivate := th.CreatePrivateChannel(th.Context, th.BasicTeam)
th.AddUserToChannel(th.BasicUser, channelPublic)
th.AddUserToChannel(th.BasicUser, channelPrivate)
th.AddUserToChannel(th.BasicUser2, channelPublic)
@@ -3012,7 +3012,7 @@ func TestGetTopThreadsForUserSince(t *testing.T) {
// user 1 should see both threads, while user 2 should see only thread in public channel
// (even if user2 is in the private channel it hasn't interacted with the thread there.)
topUser1Threads, appErr := th.App.GetTopThreadsForUserSince(th.BasicTeam.Id, th.BasicUser.Id, &model.InsightsOpts{StartUnixMilli: 200, PerPage: 100})
topUser1Threads, appErr := th.App.GetTopThreadsForUserSince(th.Context, th.BasicTeam.Id, th.BasicUser.Id, &model.InsightsOpts{StartUnixMilli: 200, PerPage: 100})
require.Nil(t, appErr)
require.Len(t, topUser1Threads.Items, 2)
require.Equal(t, topUser1Threads.Items[0].Post.Id, rootPostPrivateChannel.Id)
@@ -3021,17 +3021,17 @@ func TestGetTopThreadsForUserSince(t *testing.T) {
require.Contains(t, topUser1Threads.Items[1].Participants, th.BasicUser2.Id)
require.Equal(t, topUser1Threads.Items[1].ReplyCount, int64(1))
topUser2Threads, appErr := th.App.GetTopThreadsForUserSince(th.BasicTeam.Id, th.BasicUser2.Id, &model.InsightsOpts{StartUnixMilli: 200, PerPage: 100})
topUser2Threads, appErr := th.App.GetTopThreadsForUserSince(th.Context, th.BasicTeam.Id, th.BasicUser2.Id, &model.InsightsOpts{StartUnixMilli: 200, PerPage: 100})
require.Nil(t, appErr)
require.Len(t, topUser2Threads.Items, 1)
require.Equal(t, topUser2Threads.Items[0].Post.Id, rootPostPublicChannel.Id)
require.Equal(t, topUser2Threads.Items[0].ReplyCount, int64(1))
// deleting the root post results in the thread not making it to top threads list
_, appErr = th.App.DeletePost(rootPostPublicChannel.Id, th.BasicUser.Id)
_, appErr = th.App.DeletePost(th.Context, rootPostPublicChannel.Id, th.BasicUser.Id)
require.Nil(t, appErr)
topUser1ThreadsAfterPost1Delete, appErr := th.App.GetTopThreadsForUserSince(th.BasicTeam.Id, th.BasicUser.Id, &model.InsightsOpts{StartUnixMilli: 200, PerPage: 100})
topUser1ThreadsAfterPost1Delete, appErr := th.App.GetTopThreadsForUserSince(th.Context, th.BasicTeam.Id, th.BasicUser.Id, &model.InsightsOpts{StartUnixMilli: 200, PerPage: 100})
require.Nil(t, appErr)
require.Len(t, topUser1ThreadsAfterPost1Delete.Items, 1)
@@ -3044,12 +3044,12 @@ func TestGetTopThreadsForUserSince(t *testing.T) {
}, channelPrivate, false, true)
require.Nil(t, appErr)
topUser2ThreadsAfterPrivateReply, appErr := th.App.GetTopThreadsForUserSince(th.BasicTeam.Id, th.BasicUser2.Id, &model.InsightsOpts{StartUnixMilli: 200, PerPage: 100})
topUser2ThreadsAfterPrivateReply, appErr := th.App.GetTopThreadsForUserSince(th.Context, th.BasicTeam.Id, th.BasicUser2.Id, &model.InsightsOpts{StartUnixMilli: 200, PerPage: 100})
require.Nil(t, appErr)
require.Len(t, topUser2ThreadsAfterPrivateReply.Items, 1)
// deleting reply, and unfollowing thread
_, appErr = th.App.DeletePost(replyPostUser2InPrivate.Id, th.BasicUser2.Id)
_, appErr = th.App.DeletePost(th.Context, replyPostUser2InPrivate.Id, th.BasicUser2.Id)
require.Nil(t, appErr)
// unfollow thread
_, err := th.App.Srv().Store.Thread().MaintainMembership(th.BasicUser2.Id, rootPostPrivateChannel.Id, store.ThreadMembershipOpts{
@@ -3058,7 +3058,7 @@ func TestGetTopThreadsForUserSince(t *testing.T) {
})
require.NoError(t, err)
topUser2ThreadsAfterPrivateReplyDelete, appErr := th.App.GetTopThreadsForUserSince(th.BasicTeam.Id, th.BasicUser2.Id, &model.InsightsOpts{StartUnixMilli: 200, PerPage: 100})
topUser2ThreadsAfterPrivateReplyDelete, appErr := th.App.GetTopThreadsForUserSince(th.Context, th.BasicTeam.Id, th.BasicUser2.Id, &model.InsightsOpts{StartUnixMilli: 200, PerPage: 100})
require.Nil(t, appErr)
require.Len(t, topUser2ThreadsAfterPrivateReplyDelete.Items, 0)
}

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

@@ -20,7 +20,7 @@ func (a *App) SaveReactionForPost(c *request.Context, reaction *model.Reaction)
return nil, err
}
channel, err := a.GetChannel(post.ChannelId)
channel, err := a.GetChannel(c, post.ChannelId)
if err != nil {
return nil, err
}
@@ -126,7 +126,7 @@ func (a *App) DeleteReactionForPost(c *request.Context, reaction *model.Reaction
return err
}
channel, err := a.GetChannel(post.ChannelId)
channel, err := a.GetChannel(c, post.ChannelId)
if err != nil {
return err
}

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

@@ -25,7 +25,7 @@ func TestSharedChannelSyncForReactionActions(t *testing.T) {
user := th.BasicUser
channel := th.CreateChannel(th.BasicTeam, WithShared(true))
channel := th.CreateChannel(th.Context, th.BasicTeam, WithShared(true))
post, err := th.App.CreatePost(th.Context, &model.Post{
UserId: user.Id,
@@ -60,7 +60,7 @@ func TestSharedChannelSyncForReactionActions(t *testing.T) {
user := th.BasicUser
channel := th.CreateChannel(th.BasicTeam, WithShared(true))
channel := th.CreateChannel(th.Context, th.BasicTeam, WithShared(true))
post, err := th.App.CreatePost(th.Context, &model.Post{
UserId: user.Id,

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

@@ -38,9 +38,10 @@ func NewContext(ctx context.Context, requestId, ipAddress, path, userAgent, acce
}
}
func EmptyContext() *Context {
func EmptyContext(logger mlog.LoggerIFace) *Context {
return &Context{
t: i18n.T,
logger: logger,
context: context.Background(),
}
}
@@ -116,3 +117,27 @@ func (c *Context) SetAppError(err *model.AppError) {
func (c *Context) AppError() *model.AppError {
return c.err
}
type CTX interface {
T(string, ...interface{}) string
Session() *model.Session
RequestId() string
IPAddress() string
Path() string
UserAgent() string
AcceptLanguage() string
Context() context.Context
SetSession(s *model.Session)
SetT(i18n.TranslateFunc)
SetRequestId(string)
SetIPAddress(string)
SetUserAgent(string)
SetAcceptLanguage(string)
SetPath(string)
SetContext(ctx context.Context)
GetT() i18n.TranslateFunc
SetLogger(mlog.LoggerIFace)
Logger() mlog.LoggerIFace
SetAppError(*model.AppError)
AppError() *model.AppError
}

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

@@ -114,15 +114,15 @@ func testPermissionInheritance(t *testing.T, testCallback func(t *testing.T, th
defer th.App.DeleteScheme(channelScheme.Id)
team := th.CreateTeam()
defer th.App.PermanentDeleteTeamId(team.Id)
defer th.App.PermanentDeleteTeamId(th.Context, team.Id)
// Make a channel
channel := th.CreateChannel(team)
defer th.App.PermanentDeleteChannel(channel)
channel := th.CreateChannel(th.Context, team)
defer th.App.PermanentDeleteChannel(th.Context, channel)
// Set the channel scheme
channel.SchemeId = &channelScheme.Id
channel, err = th.App.UpdateChannelScheme(channel)
channel, err = th.App.UpdateChannelScheme(th.Context, channel)
require.Nil(t, err)
// Get the truth table from CSV

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

@@ -480,7 +480,7 @@ func NewServer(options ...Option) (*Server, error) {
return nil, errors.Wrap(err, "Unable to create opengraphdata cache")
}
s.createPushNotificationsHub()
s.createPushNotificationsHub(request.EmptyContext(s.GetLogger()))
if err2 := i18n.InitTranslations(*s.Config().LocalizationSettings.DefaultServerLocale, *s.Config().LocalizationSettings.DefaultClientLocale); err2 != nil {
return nil, errors.Wrapf(err2, "unable to load Mattermost translation files")
@@ -653,7 +653,8 @@ func NewServer(options ...Option) (*Server, error) {
s.AddConfigListener(func(old, new *model.Config) {
appInstance := New(ServerConnector(s.Channels()))
if *old.GuestAccountsSettings.Enable && !*new.GuestAccountsSettings.Enable {
if appErr := appInstance.DeactivateGuests(request.EmptyContext()); appErr != nil {
c := request.EmptyContext(s.GetLogger())
if appErr := appInstance.DeactivateGuests(c); appErr != nil {
mlog.Error("Unable to deactivate guest accounts", mlog.Err(appErr))
}
}
@@ -662,7 +663,8 @@ func NewServer(options ...Option) (*Server, error) {
// Disable active guest accounts on first run if guest accounts are disabled
if !*s.Config().GuestAccountsSettings.Enable {
appInstance := New(ServerConnector(s.Channels()))
if appErr := appInstance.DeactivateGuests(request.EmptyContext()); appErr != nil {
c := request.EmptyContext(s.GetLogger())
if appErr := appInstance.DeactivateGuests(c); appErr != nil {
mlog.Error("Unable to deactivate guest accounts", mlog.Err(appErr))
}
}

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

@@ -134,7 +134,7 @@ func TestUpdateSessionOnPromoteDemote(t *testing.T) {
require.Nil(t, err)
assert.Equal(t, "false", rsession.Props[model.SessionPropIsGuest])
err = th.App.DemoteUserToGuest(user)
err = th.App.DemoteUserToGuest(th.Context, user)
require.Nil(t, err)
rsession, err = th.App.GetSession(session.Token)

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

@@ -8,13 +8,14 @@ import (
"fmt"
"net/http"
"github.com/mattermost/mattermost-server/v6/app/request"
"github.com/mattermost/mattermost-server/v6/model"
"github.com/mattermost/mattermost-server/v6/store"
)
func (a *App) checkChannelNotShared(channelId string) error {
func (a *App) checkChannelNotShared(c request.CTX, channelId string) error {
// check that channel exists.
if _, err := a.GetChannel(channelId); err != nil {
if _, err := a.GetChannel(c, channelId); err != nil {
return fmt.Errorf("cannot share this channel: %w", err)
}
@@ -58,8 +59,8 @@ func (a *App) CheckCanInviteToSharedChannel(channelId string) error {
// SharedChannels
func (a *App) SaveSharedChannel(sc *model.SharedChannel) (*model.SharedChannel, error) {
if err := a.checkChannelNotShared(sc.ChannelId); err != nil {
func (a *App) SaveSharedChannel(c request.CTX, sc *model.SharedChannel) (*model.SharedChannel, error) {
if err := a.checkChannelNotShared(c, sc.ChannelId); err != nil {
return nil, err
}
return a.Srv().Store.SharedChannel().Save(sc)

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

@@ -31,7 +31,7 @@ func TestServerSyncSharedChannelHandler(t *testing.T) {
mockService := NewMockSharedChannelService(nil)
mockService.active = true
th.App.ch.srv.SetSharedChannelSyncService(mockService)
channel := th.CreateChannel(th.BasicTeam, WithShared(true))
channel := th.CreateChannel(th.Context, th.BasicTeam, WithShared(true))
websocketEvent := model.NewWebSocketEvent(model.WebsocketEventAddedToTeam, model.NewId(), channel.Id, "", nil)
@@ -61,7 +61,7 @@ func TestServerSyncSharedChannelHandler(t *testing.T) {
mockService.active = true
th.App.ch.srv.SetSharedChannelSyncService(mockService)
channel := th.CreateChannel(th.BasicTeam, WithShared(true))
channel := th.CreateChannel(th.Context, th.BasicTeam, WithShared(true))
websocketEvent := model.NewWebSocketEvent(model.WebsocketEventPosted, model.NewId(), channel.Id, "", nil)
th.App.ch.srv.SharedChannelSyncHandler(websocketEvent)

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

@@ -15,9 +15,9 @@ import (
func TestApp_CheckCanInviteToSharedChannel(t *testing.T) {
th := Setup(t).InitBasic()
channel1 := th.CreateChannel(th.BasicTeam)
channel2 := th.CreateChannel(th.BasicTeam)
channel3 := th.CreateChannel(th.BasicTeam)
channel1 := th.CreateChannel(th.Context, th.BasicTeam)
channel2 := th.CreateChannel(th.Context, th.BasicTeam)
channel3 := th.CreateChannel(th.Context, th.BasicTeam)
data := []struct {
channelId string
@@ -38,22 +38,22 @@ func TestApp_CheckCanInviteToSharedChannel(t *testing.T) {
CreatorId: th.BasicUser.Id,
RemoteId: d.remoteId,
}
_, err := th.App.SaveSharedChannel(sc)
_, err := th.App.SaveSharedChannel(th.Context, sc)
require.NoError(t, err)
}
t.Run("Test checkChannelNotShared: not yet shared channel", func(t *testing.T) {
err := th.App.checkChannelNotShared(channel3.Id)
err := th.App.checkChannelNotShared(th.Context, channel3.Id)
assert.NoError(t, err, "unshared channel should not error")
})
t.Run("Test checkChannelNotShared: already shared channel", func(t *testing.T) {
err := th.App.checkChannelNotShared(channel1.Id)
err := th.App.checkChannelNotShared(th.Context, channel1.Id)
assert.Error(t, err, "already shared channel should error")
})
t.Run("Test checkChannelNotShared: invalid channel", func(t *testing.T) {
err := th.App.checkChannelNotShared(model.NewId())
err := th.App.checkChannelNotShared(th.Context, model.NewId())
assert.Error(t, err, "invalid channel should error")
})

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

@@ -50,7 +50,7 @@ func (a *App) SlackImport(c *request.Context, fileData multipart.File, fileSize
}
importer := slackimport.New(a.ch.srv.Store, actions, a.Config())
return importer.SlackImport(fileData, fileSize, teamID)
return importer.SlackImport(c, fileData, fileSize, teamID)
}
func (a *App) ProcessSlackText(text string) string {

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

@@ -4,8 +4,6 @@
package slashcommands
import (
"context"
"github.com/mattermost/mattermost-server/v6/app"
"github.com/mattermost/mattermost-server/v6/app/request"
"github.com/mattermost/mattermost-server/v6/model"
@@ -38,7 +36,7 @@ func (*HeaderProvider) GetCommand(a *app.App, T i18n.TranslateFunc) *model.Comma
}
func (*HeaderProvider) DoCommand(a *app.App, c *request.Context, args *model.CommandArgs, message string) *model.CommandResponse {
channel, err := a.GetChannel(args.ChannelId)
channel, err := a.GetChannel(c, args.ChannelId)
if err != nil {
return &model.CommandResponse{
Text: args.T("api.command_channel_header.channel.app_error"),
@@ -48,7 +46,7 @@ func (*HeaderProvider) DoCommand(a *app.App, c *request.Context, args *model.Com
switch channel.Type {
case model.ChannelTypeOpen:
if !a.HasPermissionToChannel(args.UserId, args.ChannelId, model.PermissionManagePublicChannelProperties) {
if !a.HasPermissionToChannel(c, args.UserId, args.ChannelId, model.PermissionManagePublicChannelProperties) {
return &model.CommandResponse{
Text: args.T("api.command_channel_header.permission.app_error"),
ResponseType: model.CommandResponseTypeEphemeral,
@@ -56,7 +54,7 @@ func (*HeaderProvider) DoCommand(a *app.App, c *request.Context, args *model.Com
}
case model.ChannelTypePrivate:
if !a.HasPermissionToChannel(args.UserId, args.ChannelId, model.PermissionManagePrivateChannelProperties) {
if !a.HasPermissionToChannel(c, args.UserId, args.ChannelId, model.PermissionManagePrivateChannelProperties) {
return &model.CommandResponse{
Text: args.T("api.command_channel_header.permission.app_error"),
ResponseType: model.CommandResponseTypeEphemeral,
@@ -66,7 +64,7 @@ func (*HeaderProvider) DoCommand(a *app.App, c *request.Context, args *model.Com
case model.ChannelTypeGroup, model.ChannelTypeDirect:
// Modifying the header is not linked to any specific permission for group/dm channels, so just check for membership.
var channelMember *model.ChannelMember
channelMember, err = a.GetChannelMember(context.Background(), args.ChannelId, args.UserId)
channelMember, err = a.GetChannelMember(c, args.ChannelId, args.UserId)
if err != nil || channelMember == nil {
return &model.CommandResponse{
Text: args.T("api.command_channel_header.permission.app_error"),

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

@@ -36,7 +36,7 @@ func (*PurposeProvider) GetCommand(a *app.App, T i18n.TranslateFunc) *model.Comm
}
func (*PurposeProvider) DoCommand(a *app.App, c *request.Context, args *model.CommandArgs, message string) *model.CommandResponse {
channel, err := a.GetChannel(args.ChannelId)
channel, err := a.GetChannel(c, args.ChannelId)
if err != nil {
return &model.CommandResponse{
Text: args.T("api.command_channel_purpose.channel.app_error"),
@@ -46,14 +46,14 @@ func (*PurposeProvider) DoCommand(a *app.App, c *request.Context, args *model.Co
switch channel.Type {
case model.ChannelTypeOpen:
if !a.HasPermissionToChannel(args.UserId, args.ChannelId, model.PermissionManagePublicChannelProperties) {
if !a.HasPermissionToChannel(c, args.UserId, args.ChannelId, model.PermissionManagePublicChannelProperties) {
return &model.CommandResponse{
Text: args.T("api.command_channel_purpose.permission.app_error"),
ResponseType: model.CommandResponseTypeEphemeral,
}
}
case model.ChannelTypePrivate:
if !a.HasPermissionToChannel(args.UserId, args.ChannelId, model.PermissionManagePrivateChannelProperties) {
if !a.HasPermissionToChannel(c, args.UserId, args.ChannelId, model.PermissionManagePrivateChannelProperties) {
return &model.CommandResponse{
Text: args.T("api.command_channel_purpose.permission.app_error"),
ResponseType: model.CommandResponseTypeEphemeral,

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

@@ -39,7 +39,7 @@ func (*RenameProvider) GetCommand(a *app.App, T i18n.TranslateFunc) *model.Comma
}
func (*RenameProvider) DoCommand(a *app.App, c *request.Context, args *model.CommandArgs, message string) *model.CommandResponse {
channel, err := a.GetChannel(args.ChannelId)
channel, err := a.GetChannel(c, args.ChannelId)
if err != nil {
return &model.CommandResponse{
Text: args.T("api.command_channel_rename.channel.app_error"),
@@ -49,14 +49,14 @@ func (*RenameProvider) DoCommand(a *app.App, c *request.Context, args *model.Com
switch channel.Type {
case model.ChannelTypeOpen:
if !a.HasPermissionToChannel(args.UserId, args.ChannelId, model.PermissionManagePublicChannelProperties) {
if !a.HasPermissionToChannel(c, args.UserId, args.ChannelId, model.PermissionManagePublicChannelProperties) {
return &model.CommandResponse{
Text: args.T("api.command_channel_rename.permission.app_error"),
ResponseType: model.CommandResponseTypeEphemeral,
}
}
case model.ChannelTypePrivate:
if !a.HasPermissionToChannel(args.UserId, args.ChannelId, model.PermissionManagePrivateChannelProperties) {
if !a.HasPermissionToChannel(c, args.UserId, args.ChannelId, model.PermissionManagePrivateChannelProperties) {
return &model.CommandResponse{
Text: args.T("api.command_channel_rename.permission.app_error"),
ResponseType: model.CommandResponseTypeEphemeral,

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

@@ -110,13 +110,13 @@ func (*groupmsgProvider) DoCommand(a *app.App, c *request.Context, args *model.C
var channelErr *model.AppError
if a.HasPermissionTo(args.UserId, model.PermissionCreateGroupChannel) {
groupChannel, channelErr = a.CreateGroupChannel(targetUsersSlice, args.UserId)
groupChannel, channelErr = a.CreateGroupChannel(c, targetUsersSlice, args.UserId)
if channelErr != nil {
mlog.Error(channelErr.Error())
return &model.CommandResponse{Text: args.T("api.command_groupmsg.group_fail.app_error"), ResponseType: model.CommandResponseTypeEphemeral}
}
} else {
groupChannel, channelErr = a.GetGroupChannel(targetUsersSlice)
groupChannel, channelErr = a.GetGroupChannel(c, targetUsersSlice)
if channelErr != nil {
return &model.CommandResponse{Text: args.T("api.command_groupmsg.permission.app_error"), ResponseType: model.CommandResponseTypeEphemeral}
}

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

@@ -4,7 +4,6 @@
package slashcommands
import (
"context"
"strings"
"github.com/mattermost/mattermost-server/v6/app"
@@ -73,7 +72,7 @@ func (*InviteProvider) DoCommand(a *app.App, c *request.Context, args *model.Com
if len(splitMessage) > 1 && splitMessage[1] != "" {
targetChannelName := strings.TrimPrefix(strings.TrimSpace(splitMessage[1]), "~")
if channelToJoin, err = a.GetChannelByName(targetChannelName, args.TeamId, false); err != nil {
if channelToJoin, err = a.GetChannelByName(c, targetChannelName, args.TeamId, false); err != nil {
return &model.CommandResponse{
Text: args.T("api.command_invite.channel.error", map[string]any{
"Channel": targetChannelName,
@@ -82,7 +81,7 @@ func (*InviteProvider) DoCommand(a *app.App, c *request.Context, args *model.Com
}
}
} else {
channelToJoin, err = a.GetChannel(args.ChannelId)
channelToJoin, err = a.GetChannel(c, args.ChannelId)
if err != nil {
return &model.CommandResponse{
Text: args.T("api.command_invite.channel.app_error"),
@@ -94,7 +93,7 @@ func (*InviteProvider) DoCommand(a *app.App, c *request.Context, args *model.Com
// Permissions Check
switch channelToJoin.Type {
case model.ChannelTypeOpen:
if !a.HasPermissionToChannel(args.UserId, channelToJoin.Id, model.PermissionManagePublicChannelMembers) {
if !a.HasPermissionToChannel(c, args.UserId, channelToJoin.Id, model.PermissionManagePublicChannelMembers) {
return &model.CommandResponse{
Text: args.T("api.command_invite.permission.app_error", map[string]any{
"User": userProfile.Username,
@@ -104,8 +103,8 @@ func (*InviteProvider) DoCommand(a *app.App, c *request.Context, args *model.Com
}
}
case model.ChannelTypePrivate:
if !a.HasPermissionToChannel(args.UserId, channelToJoin.Id, model.PermissionManagePrivateChannelMembers) {
if _, err = a.GetChannelMember(context.Background(), channelToJoin.Id, args.UserId); err == nil {
if !a.HasPermissionToChannel(c, args.UserId, channelToJoin.Id, model.PermissionManagePrivateChannelMembers) {
if _, err = a.GetChannelMember(c, channelToJoin.Id, args.UserId); err == nil {
// User doing the inviting is a member of the channel.
return &model.CommandResponse{
Text: args.T("api.command_invite.permission.app_error", map[string]any{
@@ -131,7 +130,7 @@ func (*InviteProvider) DoCommand(a *app.App, c *request.Context, args *model.Com
}
// Check if user is already in the channel
_, err = a.GetChannelMember(context.Background(), channelToJoin.Id, userProfile.Id)
_, err = a.GetChannelMember(c, channelToJoin.Id, userProfile.Id)
if err == nil {
return &model.CommandResponse{
Text: args.T("api.command_invite.user_already_in_channel.app_error", map[string]any{

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

@@ -76,7 +76,7 @@ func TestInviteProvider(t *testing.T) {
_, err = th.App.AddChannelMember(th.Context, th.BasicUser.Id, groupChannel, app.ChannelMemberOpts{})
require.Nil(t, err)
groupChannel.GroupConstrained = model.NewBool(true)
groupChannel, _ = th.App.UpdateChannel(groupChannel)
groupChannel, _ = th.App.UpdateChannel(th.Context, groupChannel)
groupChannelNonUser := "@" + th.BasicUser2.Username + " ~" + groupChannel.Name

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

@@ -55,11 +55,11 @@ func (*JoinProvider) DoCommand(a *app.App, c *request.Context, args *model.Comma
switch channel.Type {
case model.ChannelTypeOpen:
if !a.HasPermissionToChannel(args.UserId, channel.Id, model.PermissionJoinPublicChannels) {
if !a.HasPermissionToChannel(c, args.UserId, channel.Id, model.PermissionJoinPublicChannels) {
return &model.CommandResponse{Text: args.T("api.command_join.fail.app_error"), ResponseType: model.CommandResponseTypeEphemeral}
}
case model.ChannelTypePrivate:
if !a.HasPermissionToChannel(args.UserId, channel.Id, model.PermissionReadChannel) {
if !a.HasPermissionToChannel(c, args.UserId, channel.Id, model.PermissionReadChannel) {
return &model.CommandResponse{Text: args.T("api.command_join.fail.app_error"), ResponseType: model.CommandResponseTypeEphemeral}
}
default:

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

@@ -37,7 +37,7 @@ func (*LeaveProvider) GetCommand(a *app.App, T i18n.TranslateFunc) *model.Comman
func (*LeaveProvider) DoCommand(a *app.App, c *request.Context, args *model.CommandArgs, message string) *model.CommandResponse {
var channel *model.Channel
var noChannelErr *model.AppError
if channel, noChannelErr = a.GetChannel(args.ChannelId); noChannelErr != nil {
if channel, noChannelErr = a.GetChannel(c, args.ChannelId); noChannelErr != nil {
return &model.CommandResponse{Text: args.T("api.command_leave.fail.app_error"), ResponseType: model.CommandResponseTypeEphemeral}
}
@@ -65,11 +65,11 @@ func (*LeaveProvider) DoCommand(a *app.App, c *request.Context, args *model.Comm
}
if user.IsGuest() {
members, err := a.GetChannelMembersForUser(team.Id, args.UserId)
members, err := a.GetChannelMembersForUser(c, team.Id, args.UserId)
if err != nil || len(members) == 0 {
return &model.CommandResponse{Text: args.T("api.command_leave.fail.app_error"), ResponseType: model.CommandResponseTypeEphemeral}
}
channel, err := a.GetChannel(members[0].ChannelId)
channel, err := a.GetChannel(c, members[0].ChannelId)
if err != nil {
return &model.CommandResponse{Text: args.T("api.command_leave.fail.app_error"), ResponseType: model.CommandResponseTypeEphemeral}
}

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

@@ -4,7 +4,6 @@
package slashcommands
import (
"context"
"testing"
"github.com/stretchr/testify/assert"
@@ -35,17 +34,17 @@ func TestLeaveProviderDoCommand(t *testing.T) {
CreatorId: th.BasicUser.Id,
}, false)
defaultChannel, err := th.App.GetChannelByName(model.DefaultChannelName, th.BasicTeam.Id, false)
defaultChannel, err := th.App.GetChannelByName(th.Context, model.DefaultChannelName, th.BasicTeam.Id, false)
require.Nil(t, err)
guest := th.createGuest()
th.App.AddUserToTeam(th.Context, th.BasicTeam.Id, th.BasicUser.Id, th.BasicUser.Id)
th.App.AddUserToChannel(th.BasicUser, publicChannel, false)
th.App.AddUserToChannel(th.BasicUser, privateChannel, false)
th.App.AddUserToChannel(th.Context, th.BasicUser, publicChannel, false)
th.App.AddUserToChannel(th.Context, th.BasicUser, privateChannel, false)
th.App.AddUserToTeam(th.Context, th.BasicTeam.Id, guest.Id, guest.Id)
th.App.AddUserToChannel(guest, publicChannel, false)
th.App.AddUserToChannel(guest, defaultChannel, false)
th.App.AddUserToChannel(th.Context, guest, publicChannel, false)
th.App.AddUserToChannel(th.Context, guest, defaultChannel, false)
t.Run("Should error when no Channel ID in args", func(t *testing.T) {
args := &model.CommandArgs{
@@ -81,7 +80,7 @@ func TestLeaveProviderDoCommand(t *testing.T) {
assert.Equal(t, args.SiteURL+"/"+th.BasicTeam.Name+"/channels/"+model.DefaultChannelName, actual.GotoLocation)
assert.Equal(t, "", actual.ResponseType)
_, err = th.App.GetChannelMember(context.Background(), publicChannel.Id, th.BasicUser.Id)
_, err = th.App.GetChannelMember(th.Context, publicChannel.Id, th.BasicUser.Id)
assert.NotNil(t, err)
assert.NotNil(t, err.Id, "app.channel.get_member.missing.app_error")
})
@@ -123,7 +122,7 @@ func TestLeaveProviderDoCommand(t *testing.T) {
assert.Equal(t, args.SiteURL+"/"+th.BasicTeam.Name+"/channels/"+publicChannel.Name, actual.GotoLocation)
assert.Equal(t, "", actual.ResponseType)
_, err = th.App.GetChannelMember(context.Background(), defaultChannel.Id, guest.Id)
_, err = th.App.GetChannelMember(th.Context, defaultChannel.Id, guest.Id)
assert.NotNil(t, err)
assert.NotNil(t, err.Id, "app.channel.get_member.missing.app_error")
})
@@ -141,7 +140,7 @@ func TestLeaveProviderDoCommand(t *testing.T) {
assert.Equal(t, args.SiteURL+"/", actual.GotoLocation)
assert.Equal(t, "", actual.ResponseType)
_, err = th.App.GetChannelMember(context.Background(), publicChannel.Id, guest.Id)
_, err = th.App.GetChannelMember(th.Context, publicChannel.Id, guest.Id)
assert.NotNil(t, err)
assert.NotNil(t, err.Id, "app.channel.get_member.missing.app_error")
})

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

@@ -160,7 +160,7 @@ func (lt *LoadTestProvider) doCommand(a *app.App, c *request.Context, args *mode
}
if strings.HasPrefix(message, "post") {
return lt.PostCommand(a, args, message)
return lt.PostCommand(a, c, args, message)
}
if strings.HasPrefix(message, "threaded_post") {
@@ -444,7 +444,7 @@ func getMatch(re *regexp.Regexp, text string) string {
return ""
}
func (*LoadTestProvider) PostCommand(a *app.App, args *model.CommandArgs, message string) (*model.CommandResponse, error) {
func (*LoadTestProvider) PostCommand(a *app.App, c request.CTX, args *model.CommandArgs, message string) (*model.CommandResponse, error) {
textMessage := getMatch(messageRE, message)
if textMessage == "" {
return &model.CommandResponse{Text: "No message to post", ResponseType: model.CommandResponseTypeEphemeral}, nil
@@ -457,7 +457,7 @@ func (*LoadTestProvider) PostCommand(a *app.App, args *model.CommandArgs, messag
}
channelName := getMatch(channelRE, message)
channel, err := a.GetChannelByName(channelName, team.Id, true)
channel, err := a.GetChannelByName(c, channelName, team.Id, true)
if err != nil {
return &model.CommandResponse{Text: "Failed to get a channel", ResponseType: model.CommandResponseTypeEphemeral}, err
}

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

@@ -41,7 +41,7 @@ func (*MuteProvider) DoCommand(a *app.App, c *request.Context, args *model.Comma
var channel *model.Channel
var noChannelErr *model.AppError
if channel, noChannelErr = a.GetChannel(args.ChannelId); noChannelErr != nil {
if channel, noChannelErr = a.GetChannel(c, args.ChannelId); noChannelErr != nil {
return &model.CommandResponse{Text: args.T("api.command_mute.no_channel.error"), ResponseType: model.CommandResponseTypeEphemeral}
}
@@ -62,7 +62,7 @@ func (*MuteProvider) DoCommand(a *app.App, c *request.Context, args *model.Comma
}
}
channelMember, err := a.ToggleMuteChannel(channel.Id, args.UserId)
channelMember, err := a.ToggleMuteChannel(c, channel.Id, args.UserId)
if err != nil {
return &model.CommandResponse{Text: args.T("api.command_mute.not_member.error", map[string]any{"Channel": channelName}), ResponseType: model.CommandResponseTypeEphemeral}
}

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

@@ -4,7 +4,6 @@
package slashcommands
import (
"context"
"testing"
"time"
@@ -23,7 +22,7 @@ func TestMuteCommandNoChannel(t *testing.T) {
}
channel1 := th.BasicChannel
channel1M, channel1MError := th.App.GetChannelMember(context.Background(), channel1.Id, th.BasicUser.Id)
channel1M, channel1MError := th.App.GetChannelMember(th.Context, channel1.Id, th.BasicUser.Id)
assert.Nil(t, channel1MError, "User is not a member of channel 1")
assert.NotEqual(
@@ -46,7 +45,7 @@ func TestMuteCommandNoArgs(t *testing.T) {
defer th.tearDown()
channel1 := th.BasicChannel
channel1M, _ := th.App.GetChannelMember(context.Background(), channel1.Id, th.BasicUser.Id)
channel1M, _ := th.App.GetChannelMember(th.Context, channel1.Id, th.BasicUser.Id)
assert.Equal(t, model.ChannelNotifyAll, channel1M.NotifyProps[model.MarkUnreadNotifyProp])
@@ -88,7 +87,7 @@ func TestMuteCommandSpecificChannel(t *testing.T) {
CreatorId: th.BasicUser.Id,
}, true)
channel2M, _ := th.App.GetChannelMember(context.Background(), channel2.Id, th.BasicUser.Id)
channel2M, _ := th.App.GetChannelMember(th.Context, channel2.Id, th.BasicUser.Id)
assert.Equal(t, model.ChannelNotifyAll, channel2M.NotifyProps[model.MarkUnreadNotifyProp])
@@ -101,7 +100,7 @@ func TestMuteCommandSpecificChannel(t *testing.T) {
UserId: th.BasicUser.Id,
}, channel2.Name)
assert.Equal(t, "api.command_mute.success_mute", resp.Text)
channel2M, _ = th.App.GetChannelMember(context.Background(), channel2.Id, th.BasicUser.Id)
channel2M, _ = th.App.GetChannelMember(th.Context, channel2.Id, th.BasicUser.Id)
assert.Equal(t, model.ChannelNotifyMention, channel2M.NotifyProps[model.MarkUnreadNotifyProp])
// Now unmute the channel
@@ -112,7 +111,7 @@ func TestMuteCommandSpecificChannel(t *testing.T) {
}, "~"+channel2.Name)
assert.Equal(t, "api.command_mute.success_unmute", resp.Text)
channel2M, _ = th.App.GetChannelMember(context.Background(), channel2.Id, th.BasicUser.Id)
channel2M, _ = th.App.GetChannelMember(th.Context, channel2.Id, th.BasicUser.Id)
assert.Equal(t, model.ChannelNotifyAll, channel2M.NotifyProps[model.MarkUnreadNotifyProp])
}
@@ -174,7 +173,7 @@ func TestMuteCommandDMChannel(t *testing.T) {
}
channel2, _ := th.App.GetOrCreateDirectChannel(th.Context, th.BasicUser.Id, th.BasicUser2.Id)
channel2M, _ := th.App.GetChannelMember(context.Background(), channel2.Id, th.BasicUser.Id)
channel2M, _ := th.App.GetChannelMember(th.Context, channel2.Id, th.BasicUser.Id)
assert.Equal(t, model.ChannelNotifyAll, channel2M.NotifyProps[model.MarkUnreadNotifyProp])
@@ -188,7 +187,7 @@ func TestMuteCommandDMChannel(t *testing.T) {
}, "")
assert.Equal(t, "api.command_mute.success_mute_direct_msg", resp.Text)
time.Sleep(time.Millisecond)
channel2M, _ = th.App.GetChannelMember(context.Background(), channel2.Id, th.BasicUser.Id)
channel2M, _ = th.App.GetChannelMember(th.Context, channel2.Id, th.BasicUser.Id)
assert.Equal(t, model.ChannelNotifyMention, channel2M.NotifyProps[model.MarkUnreadNotifyProp])
// Now unmute the channel
@@ -200,6 +199,6 @@ func TestMuteCommandDMChannel(t *testing.T) {
assert.Equal(t, "api.command_mute.success_unmute_direct_msg", resp.Text)
time.Sleep(time.Millisecond)
channel2M, _ = th.App.GetChannelMember(context.Background(), channel2.Id, th.BasicUser.Id)
channel2M, _ = th.App.GetChannelMember(th.Context, channel2.Id, th.BasicUser.Id)
assert.Equal(t, model.ChannelNotifyAll, channel2M.NotifyProps[model.MarkUnreadNotifyProp])
}

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

@@ -4,7 +4,6 @@
package slashcommands
import (
"context"
"strings"
"github.com/mattermost/mattermost-server/v6/app"
@@ -67,7 +66,7 @@ func (*KickProvider) DoCommand(a *app.App, c *request.Context, args *model.Comma
}
func doCommand(a *app.App, c *request.Context, args *model.CommandArgs, message string) *model.CommandResponse {
channel, err := a.GetChannel(args.ChannelId)
channel, err := a.GetChannel(c, args.ChannelId)
if err != nil {
return &model.CommandResponse{
Text: args.T("api.command_channel_remove.channel.app_error"),
@@ -77,14 +76,14 @@ func doCommand(a *app.App, c *request.Context, args *model.CommandArgs, message
switch channel.Type {
case model.ChannelTypeOpen:
if !a.HasPermissionToChannel(args.UserId, args.ChannelId, model.PermissionManagePublicChannelMembers) {
if !a.HasPermissionToChannel(c, args.UserId, args.ChannelId, model.PermissionManagePublicChannelMembers) {
return &model.CommandResponse{
Text: args.T("api.command_remove.permission.app_error"),
ResponseType: model.CommandResponseTypeEphemeral,
}
}
case model.ChannelTypePrivate:
if !a.HasPermissionToChannel(args.UserId, args.ChannelId, model.PermissionManagePrivateChannelMembers) {
if !a.HasPermissionToChannel(c, args.UserId, args.ChannelId, model.PermissionManagePrivateChannelMembers) {
return &model.CommandResponse{
Text: args.T("api.command_remove.permission.app_error"),
ResponseType: model.CommandResponseTypeEphemeral,
@@ -124,7 +123,7 @@ func doCommand(a *app.App, c *request.Context, args *model.CommandArgs, message
}
}
_, err = a.GetChannelMember(context.Background(), args.ChannelId, userProfile.Id)
_, err = a.GetChannelMember(c, args.ChannelId, userProfile.Id)
if err != nil {
nameFormat := *a.Config().TeamSettings.TeammateNameDisplay
return &model.CommandResponse{

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

@@ -35,8 +35,8 @@ func TestRemoveProviderDoCommand(t *testing.T) {
targetUser := th.createUser()
th.App.AddUserToTeam(th.Context, th.BasicTeam.Id, targetUser.Id, targetUser.Id)
th.App.AddUserToChannel(targetUser, publicChannel, false)
th.App.AddUserToChannel(targetUser, privateChannel, false)
th.App.AddUserToChannel(th.Context, targetUser, publicChannel, false)
th.App.AddUserToChannel(th.Context, targetUser, privateChannel, false)
// Try a public channel *without* permission.
args := &model.CommandArgs{
@@ -49,7 +49,7 @@ func TestRemoveProviderDoCommand(t *testing.T) {
assert.Equal(t, "api.command_remove.permission.app_error", actual)
// Try a public channel *with* permission.
th.App.AddUserToChannel(th.BasicUser, publicChannel, false)
th.App.AddUserToChannel(th.Context, th.BasicUser, publicChannel, false)
args = &model.CommandArgs{
T: func(s string, args ...any) string { return s },
ChannelId: publicChannel.Id,
@@ -70,7 +70,7 @@ func TestRemoveProviderDoCommand(t *testing.T) {
assert.Equal(t, "api.command_remove.permission.app_error", actual)
// Try a private channel *with* permission.
th.App.AddUserToChannel(th.BasicUser, privateChannel, false)
th.App.AddUserToChannel(th.Context, th.BasicUser, privateChannel, false)
args = &model.CommandArgs{
T: func(s string, args ...any) string { return s },
ChannelId: privateChannel.Id,
@@ -110,7 +110,7 @@ func TestRemoveProviderDoCommand(t *testing.T) {
// Try a public channel with a deactivated user.
deactivatedUser := th.createUser()
th.App.AddUserToTeam(th.Context, th.BasicTeam.Id, deactivatedUser.Id, deactivatedUser.Id)
th.App.AddUserToChannel(deactivatedUser, publicChannel, false)
th.App.AddUserToChannel(th.Context, deactivatedUser, publicChannel, false)
th.App.UpdateActive(th.Context, deactivatedUser, false)
args = &model.CommandArgs{

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

@@ -59,11 +59,11 @@ func (sp *ShareProvider) GetCommand(a *app.App, T i18n.TranslateFunc) *model.Com
}
}
func (sp *ShareProvider) GetAutoCompleteListItems(a *app.App, commandArgs *model.CommandArgs, arg *model.AutocompleteArg, parsed, toBeParsed string) ([]model.AutocompleteListItem, error) {
func (sp *ShareProvider) GetAutoCompleteListItems(c request.CTX, a *app.App, commandArgs *model.CommandArgs, arg *model.AutocompleteArg, parsed, toBeParsed string) ([]model.AutocompleteListItem, error) {
switch {
case strings.Contains(parsed, " share "):
return sp.getAutoCompleteShareChannel(a, commandArgs, arg)
return sp.getAutoCompleteShareChannel(c, a, commandArgs, arg)
case strings.Contains(parsed, " invite "):
@@ -77,8 +77,8 @@ func (sp *ShareProvider) GetAutoCompleteListItems(a *app.App, commandArgs *model
return nil, errors.New("invalid action")
}
func (sp *ShareProvider) getAutoCompleteShareChannel(a *app.App, commandArgs *model.CommandArgs, arg *model.AutocompleteArg) ([]model.AutocompleteListItem, error) {
channel, err := a.GetChannel(commandArgs.ChannelId)
func (sp *ShareProvider) getAutoCompleteShareChannel(c request.CTX, a *app.App, commandArgs *model.CommandArgs, arg *model.AutocompleteArg) ([]model.AutocompleteListItem, error) {
channel, err := a.GetChannel(c, commandArgs.ChannelId)
if err != nil {
return nil, err
}
@@ -141,11 +141,11 @@ func (sp *ShareProvider) DoCommand(a *app.App, c *request.Context, args *model.C
switch action {
case "share":
return sp.doShareChannel(a, args, margs)
return sp.doShareChannel(a, c, args, margs)
case "unshare":
return sp.doUnshareChannel(a, args, margs)
case "invite":
return sp.doInviteRemote(a, args, margs)
return sp.doInviteRemote(a, c, args, margs)
case "uninvite":
return sp.doUninviteRemote(a, args, margs)
case "status":
@@ -154,9 +154,9 @@ func (sp *ShareProvider) DoCommand(a *app.App, c *request.Context, args *model.C
return responsef(args.T("api.command_share.unknown_action", map[string]any{"Action": action, "Actions": AvailableShareActions}))
}
func (sp *ShareProvider) doShareChannel(a *app.App, args *model.CommandArgs, margs map[string]string) *model.CommandResponse {
func (sp *ShareProvider) doShareChannel(a *app.App, c request.CTX, args *model.CommandArgs, margs map[string]string) *model.CommandResponse {
// check that channel exists.
channel, errApp := a.GetChannel(args.ChannelId)
channel, errApp := a.GetChannel(c, args.ChannelId)
if errApp != nil {
return responsef(args.T("api.command_share.share_channel.error", map[string]any{"Error": errApp.Error()}))
}
@@ -194,7 +194,7 @@ func (sp *ShareProvider) doShareChannel(a *app.App, args *model.CommandArgs, mar
CreatorId: args.UserId,
}
if _, err := a.SaveSharedChannel(sc); err != nil {
if _, err := a.SaveSharedChannel(c, sc); err != nil {
return responsef(args.T("api.command_share.share_channel.error", map[string]any{"Error": err.Error()}))
}
@@ -222,7 +222,7 @@ func (sp *ShareProvider) doUnshareChannel(a *app.App, args *model.CommandArgs, m
return responsef("##### " + args.T("api.command_share.shared_channel_unavailable"))
}
func (sp *ShareProvider) doInviteRemote(a *app.App, args *model.CommandArgs, margs map[string]string) (resp *model.CommandResponse) {
func (sp *ShareProvider) doInviteRemote(a *app.App, c request.CTX, args *model.CommandArgs, margs map[string]string) (resp *model.CommandResponse) {
remoteId, ok := margs["connectionID"]
if !ok || remoteId == "" {
return responsef(args.T("api.command_share.must_specify_valid_remote"))
@@ -243,7 +243,7 @@ func (sp *ShareProvider) doInviteRemote(a *app.App, args *model.CommandArgs, mar
}
if !hasChan {
// If it doesn't exist, then create it.
resp2 := sp.doShareChannel(a, args, margs)
resp2 := sp.doShareChannel(a, c, args, margs)
// We modify the outgoing response by prepending the text
// from the shareChannel response.
defer func() {
@@ -262,7 +262,7 @@ func (sp *ShareProvider) doInviteRemote(a *app.App, args *model.CommandArgs, mar
return responsef(args.T("api.command_share.remote_id_invalid.error", map[string]any{"Error": appErr.Error()}))
}
channel, errApp := a.GetChannel(args.ChannelId)
channel, errApp := a.GetChannel(c, args.ChannelId)
if errApp != nil {
return responsef(args.T("api.command_share.channel_invite.error", map[string]any{"Name": rc.DisplayName, "Error": errApp.Error()}))
}

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

@@ -50,8 +50,8 @@ func TestMoveCommand(t *testing.T) {
assert.Nil(t, err)
defer func() {
th.App.PermanentDeleteTeam(sourceTeam)
th.App.PermanentDeleteTeam(targetTeam)
th.App.PermanentDeleteTeam(th.Context, sourceTeam)
th.App.PermanentDeleteTeam(th.Context, targetTeam)
}()
// Move a command and check the team is updated.
@@ -610,7 +610,7 @@ func TestMentionsToPublicChannels(t *testing.T) {
}
for _, data := range fixture {
actualMap := th.App.MentionsToPublicChannels(data.message, data.inTeam)
actualMap := th.App.MentionsToPublicChannels(th.Context, data.message, data.inTeam)
require.Equal(t, actualMap, data.expectedMap)
}
}

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

@@ -91,7 +91,7 @@ func setupTestHelper(dbStore store.Store, enterprise bool, includeCacheLayer boo
th := &TestHelper{
App: app.New(app.ServerConnector(s.Channels())),
Context: &request.Context{},
Context: request.EmptyContext(testLogger),
Server: s,
LogBuffer: buffer,
TestLogger: testLogger,
@@ -280,7 +280,7 @@ func (th *TestHelper) createChannel(team *model.Team, channelType model.ChannelT
if channel.IsShared() {
id := model.NewId()
_, err := th.App.SaveSharedChannel(&model.SharedChannel{
_, err := th.App.SaveSharedChannel(th.Context, &model.SharedChannel{
ChannelId: channel.Id,
TeamId: channel.TeamId,
Home: false,
@@ -327,7 +327,7 @@ func (th *TestHelper) createDmChannel(user *model.User) *model.Channel {
func (th *TestHelper) createGroupChannel(user1 *model.User, user2 *model.User) *model.Channel {
var err *model.AppError
var channel *model.Channel
if channel, err = th.App.CreateGroupChannel([]string{th.BasicUser.Id, user1.Id, user2.Id}, th.BasicUser.Id); err != nil {
if channel, err = th.App.CreateGroupChannel(th.Context, []string{th.BasicUser.Id, user1.Id, user2.Id}, th.BasicUser.Id); err != nil {
panic(err)
}
return channel
@@ -358,7 +358,7 @@ func (th *TestHelper) linkUserToTeam(user *model.User, team *model.Team) {
}
func (th *TestHelper) addUserToChannel(user *model.User, channel *model.Channel) *model.ChannelMember {
member, err := th.App.AddUserToChannel(user, channel, false)
member, err := th.App.AddUserToChannel(th.Context, user, channel, false)
if err != nil {
panic(err)
}

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

@@ -25,7 +25,7 @@ func (a *App) createDefaultChannelMemberships(c *request.Context, since int64, c
}
for _, userChannel := range channelMembers {
channel, err := a.GetChannel(userChannel.ChannelID)
channel, err := a.GetChannel(c, userChannel.ChannelID)
if err != nil {
return err
}
@@ -179,7 +179,7 @@ func (a *App) deleteGroupConstrainedChannelMemberships(c *request.Context, chann
}
for _, userChannel := range channelMembers {
channel, err := a.GetChannel(userChannel.ChannelId)
channel, err := a.GetChannel(c, userChannel.ChannelId)
if err != nil {
return err
}
@@ -250,6 +250,6 @@ func (a *App) SyncRolesAndMembership(c *request.Context, syncableID string, sync
case model.GroupSyncableTypeChannel:
a.createDefaultChannelMemberships(c, since, &syncableID, includeRemovedMembers)
a.deleteGroupConstrainedChannelMemberships(c, &syncableID)
a.ClearChannelMembersCache(syncableID)
a.ClearChannelMembersCache(c, syncableID)
}
}

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

@@ -4,7 +4,6 @@
package app
import (
"context"
"testing"
"github.com/stretchr/testify/require"
@@ -114,7 +113,7 @@ func TestCreateDefaultMemberships(t *testing.T) {
if err != nil {
t.Errorf("error retrieving team member: %s", err.Error())
}
_, err = th.App.GetChannelMember(context.Background(), practiceChannel.Id, singer1.Id)
_, err = th.App.GetChannelMember(th.Context, practiceChannel.Id, singer1.Id)
if err != nil {
t.Errorf("error retrieving channel member: %s", err.Error())
}
@@ -129,7 +128,7 @@ func TestCreateDefaultMemberships(t *testing.T) {
t.Errorf("expected %d team members but got %d", expected, actual)
}
cMembersCount, err := th.App.GetChannelMemberCount(practiceChannel.Id)
cMembersCount, err := th.App.GetChannelMemberCount(th.Context, practiceChannel.Id)
if err != nil {
t.Errorf("error retrieving team members: %s", err.Error())
}
@@ -143,7 +142,7 @@ func TestCreateDefaultMemberships(t *testing.T) {
t.Errorf("wrong error: %s", err.Id)
}
_, err = th.App.GetChannelMember(context.Background(), experimentsChannel.Id, scientist1.Id)
_, err = th.App.GetChannelMember(th.Context, experimentsChannel.Id, scientist1.Id)
if err.Id != "app.channel.get_member.missing.app_error" {
t.Errorf("wrong error: %s", err.Id)
}
@@ -158,7 +157,7 @@ func TestCreateDefaultMemberships(t *testing.T) {
t.Errorf("expected %d team members but got %d", expected, actual)
}
cMembersCount, err = th.App.GetChannelMemberCount(experimentsChannel.Id)
cMembersCount, err = th.App.GetChannelMemberCount(th.Context, experimentsChannel.Id)
if err != nil {
t.Errorf("error retrieving team members: %s", err.Error())
}
@@ -185,7 +184,7 @@ func TestCreateDefaultMemberships(t *testing.T) {
t.Errorf("error retrieving team member: %s", err.Error())
}
_, err = th.App.GetChannelMember(context.Background(), experimentsChannel.Id, scientist1.Id)
_, err = th.App.GetChannelMember(th.Context, experimentsChannel.Id, scientist1.Id)
if err.Id != "app.channel.get_member.missing.app_error" {
t.Errorf("wrong error: %s", err.Id)
}
@@ -201,7 +200,7 @@ func TestCreateDefaultMemberships(t *testing.T) {
}
expected = 0
cMembersCount, err = th.App.GetChannelMemberCount(experimentsChannel.Id)
cMembersCount, err = th.App.GetChannelMemberCount(th.Context, experimentsChannel.Id)
if err != nil {
t.Errorf("error retrieving team members: %s", err.Error())
}
@@ -223,7 +222,7 @@ func TestCreateDefaultMemberships(t *testing.T) {
}
expected = 1
cMembersCount, err = th.App.GetChannelMemberCount(experimentsChannel.Id)
cMembersCount, err = th.App.GetChannelMemberCount(th.Context, experimentsChannel.Id)
if err != nil {
t.Errorf("error retrieving team members: %s", err.Error())
}
@@ -256,7 +255,7 @@ func TestCreateDefaultMemberships(t *testing.T) {
t.Error("expected team member to remain deleted")
}
_, err = th.App.GetChannelMember(context.Background(), practiceChannel.Id, singer1.Id)
_, err = th.App.GetChannelMember(th.Context, practiceChannel.Id, singer1.Id)
if err == nil {
t.Error("Expected channel member to remain deleted")
}
@@ -311,7 +310,7 @@ func TestCreateDefaultMemberships(t *testing.T) {
t.Errorf("failed to populate syncables: %s", pErr.Error())
}
_, err = th.App.GetChannelMember(context.Background(), experimentsChannel.Id, scientist1.Id)
_, err = th.App.GetChannelMember(th.Context, experimentsChannel.Id, scientist1.Id)
if err == nil {
t.Error("Expected channel member to remain deleted")
}
@@ -330,7 +329,7 @@ func TestCreateDefaultMemberships(t *testing.T) {
}
// Channel member is re-added.
_, err = th.App.GetChannelMember(context.Background(), experimentsChannel.Id, scientist1.Id)
_, err = th.App.GetChannelMember(th.Context, experimentsChannel.Id, scientist1.Id)
if err != nil {
t.Errorf("expected channel member: %s", err.Error())
}
@@ -368,7 +367,7 @@ func TestCreateDefaultMemberships(t *testing.T) {
require.NoError(t, pErr)
// Ensure only the restricted user was added to both the team and channel
cMembersCount, err = th.App.GetChannelMemberCount(restrictedChannel.Id)
cMembersCount, err = th.App.GetChannelMemberCount(th.Context, restrictedChannel.Id)
require.Nil(t, err)
require.Equal(t, cMembersCount, int64(1))
tmembers, err := th.App.GetTeamMembers(restrictedTeam.Id, 0, 100, nil)
@@ -406,7 +405,7 @@ func TestDeleteGroupMemberships(t *testing.T) {
// make channel group-constrained
channel := th.BasicChannel
channel.GroupConstrained = model.NewBool(true)
channel, err = th.App.UpdateChannel(channel)
channel, err = th.App.UpdateChannel(th.Context, channel)
require.Nil(t, err)
require.True(t, *channel.GroupConstrained)
@@ -421,7 +420,7 @@ func TestDeleteGroupMemberships(t *testing.T) {
require.Nil(t, err)
require.Len(t, tmembers, 3)
cmemberCount, err := th.App.GetChannelMemberCount(th.BasicChannel.Id)
cmemberCount, err := th.App.GetChannelMemberCount(th.Context, th.BasicChannel.Id)
require.Nil(t, err)
require.Equal(t, 3, int(cmemberCount))
@@ -439,7 +438,7 @@ func TestDeleteGroupMemberships(t *testing.T) {
require.Len(t, tmembers, 1)
require.Equal(t, th.SystemAdminUser.Id, tmembers[0].UserId)
cmembers, err := th.App.GetChannelMembersPage(channel.Id, 0, 99)
cmembers, err := th.App.GetChannelMembersPage(th.Context, channel.Id, 0, 99)
require.Nil(t, err)
require.Len(t, cmembers, 1)
require.Equal(t, th.SystemAdminUser.Id, cmembers[0].UserId)
@@ -451,9 +450,9 @@ func TestSyncSyncableRoles(t *testing.T) {
team := th.CreateTeam()
channel := th.CreateChannel(team)
channel := th.CreateChannel(th.Context, team)
channel.GroupConstrained = model.NewBool(true)
channel, err := th.App.UpdateChannel(channel)
channel, err := th.App.UpdateChannel(th.Context, channel)
require.Nil(t, err)
user1 := th.CreateUser()
@@ -506,7 +505,7 @@ func TestSyncSyncableRoles(t *testing.T) {
require.Nil(t, err)
require.True(t, tm.SchemeAdmin)
cm, err := th.App.GetChannelMember(context.Background(), channel.Id, user.Id)
cm, err := th.App.GetChannelMember(th.Context, channel.Id, user.Id)
require.Nil(t, err)
require.True(t, cm.SchemeAdmin)
}

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

@@ -697,7 +697,7 @@ func (a *App) AddUserToTeamByToken(c *request.Context, userID string, tokenID st
}
for _, channel := range channels {
_, err := a.AddUserToChannel(user, channel, false)
_, err := a.AddUserToChannel(c, user, channel, false)
if err != nil {
mlog.Warn("Error adding user to channel", mlog.Err(err))
}
@@ -1193,7 +1193,7 @@ func (a *App) RemoveUserFromTeam(c *request.Context, teamID string, userID strin
return nil
}
func (a *App) postProcessTeamMemberLeave(c *request.Context, teamMember *model.TeamMember, requestorId string) *model.AppError {
func (a *App) postProcessTeamMemberLeave(c request.CTX, teamMember *model.TeamMember, requestorId string) *model.AppError {
if pluginsEnvironment := a.GetPluginsEnvironment(); pluginsEnvironment != nil {
var actor *model.User
if requestorId != "" {
@@ -1745,16 +1745,16 @@ func (a *App) GetTeamsUnreadForUser(excludeTeamId string, userID string, include
return members, nil
}
func (a *App) PermanentDeleteTeamId(teamID string) *model.AppError {
func (a *App) PermanentDeleteTeamId(c request.CTX, teamID string) *model.AppError {
team, err := a.GetTeam(teamID)
if err != nil {
return err
}
return a.PermanentDeleteTeam(team)
return a.PermanentDeleteTeam(c, team)
}
func (a *App) PermanentDeleteTeam(team *model.Team) *model.AppError {
func (a *App) PermanentDeleteTeam(c request.CTX, team *model.Team) *model.AppError {
team.DeleteAt = model.GetMillis()
if _, err := a.Srv().Store.Team().Update(team); err != nil {
var invErr *store.ErrInvalidInput
@@ -1775,8 +1775,8 @@ func (a *App) PermanentDeleteTeam(team *model.Team) *model.AppError {
return model.NewAppError("PermanentDeleteTeam", "app.channel.get_channels.get.app_error", nil, err.Error(), http.StatusInternalServerError)
}
} else {
for _, c := range channels {
a.PermanentDeleteChannel(c)
for _, ch := range channels {
a.PermanentDeleteChannel(c, ch)
}
}

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

@@ -185,7 +185,7 @@ func TestAddUserToTeam(t *testing.T) {
_, _, err := th.App.AddUserToTeam(th.Context, team.Id, user.Id, "")
require.Nil(t, err)
res, err := th.App.GetSidebarCategoriesForTeamForUser(user.Id, team.Id)
res, err := th.App.GetSidebarCategoriesForTeamForUser(th.Context, user.Id, team.Id)
require.Nil(t, err)
assert.Len(t, res.Categories, 3)
assert.Equal(t, model.SidebarCategoryFavorites, res.Categories[0].Type)
@@ -270,7 +270,7 @@ func TestAddUserToTeamByToken(t *testing.T) {
_, nErr := th.App.Srv().Store.Token().GetByToken(token.Token)
require.Error(t, nErr, "The token must be deleted after be used")
members, err := th.App.GetChannelMembersForUser(th.BasicTeam.Id, ruser.Id)
members, err := th.App.GetChannelMembersForUser(th.Context, th.BasicTeam.Id, ruser.Id)
require.Nil(t, err)
assert.Len(t, members, 2)
})
@@ -370,7 +370,7 @@ func TestAddUserToTeamByToken(t *testing.T) {
_, nErr := th.App.Srv().Store.Token().GetByToken(token.Token)
require.Error(t, nErr, "The token must be deleted after be used")
members, err := th.App.GetChannelMembersForUser(th.BasicTeam.Id, rguest.Id)
members, err := th.App.GetChannelMembersForUser(th.Context, th.BasicTeam.Id, rguest.Id)
require.Nil(t, err)
require.Len(t, members, 1)
assert.Equal(t, members[0].ChannelId, th.BasicChannel.Id)
@@ -429,7 +429,7 @@ func TestAddUserToTeamByToken(t *testing.T) {
_, _, err := th.App.AddUserToTeamByToken(th.Context, user.Id, token.Token)
require.Nil(t, err)
res, err := th.App.GetSidebarCategoriesForTeamForUser(user.Id, team.Id)
res, err := th.App.GetSidebarCategoriesForTeamForUser(th.Context, user.Id, team.Id)
require.Nil(t, err)
assert.Len(t, res.Categories, 3)
assert.Equal(t, model.SidebarCategoryFavorites, res.Categories[0].Type)
@@ -670,7 +670,7 @@ func TestPermanentDeleteTeam(t *testing.T) {
require.Nil(t, err, "Should create a team")
defer func() {
th.App.PermanentDeleteTeam(team)
th.App.PermanentDeleteTeam(th.Context, team)
}()
command, err := th.App.CreateCommand(&model.Command{
@@ -687,7 +687,7 @@ func TestPermanentDeleteTeam(t *testing.T) {
require.NotNil(t, command, "command should not be nil")
require.Nil(t, err, "unable to get new command")
err = th.App.PermanentDeleteTeam(team)
err = th.App.PermanentDeleteTeam(th.Context, team)
require.Nil(t, err)
command, err = th.App.GetCommand(command.Id)
@@ -697,18 +697,18 @@ func TestPermanentDeleteTeam(t *testing.T) {
// Test deleting a team with no channels.
team = th.CreateTeam()
defer func() {
th.App.PermanentDeleteTeam(team)
th.App.PermanentDeleteTeam(th.Context, team)
}()
channels, err := th.App.GetPublicChannelsForTeam(team.Id, 0, 1000)
channels, err := th.App.GetPublicChannelsForTeam(th.Context, team.Id, 0, 1000)
require.Nil(t, err)
for _, channel := range channels {
err2 := th.App.PermanentDeleteChannel(channel)
err2 := th.App.PermanentDeleteChannel(th.Context, channel)
require.Nil(t, err2)
}
err = th.App.PermanentDeleteTeam(team)
err = th.App.PermanentDeleteTeam(th.Context, team)
require.Nil(t, err)
}
@@ -929,7 +929,7 @@ func TestJoinUserToTeam(t *testing.T) {
maxUsersPerTeam := th.App.Config().TeamSettings.MaxUsersPerTeam
defer func() {
th.App.UpdateConfig(func(cfg *model.Config) { cfg.TeamSettings.MaxUsersPerTeam = maxUsersPerTeam })
th.App.PermanentDeleteTeam(team)
th.App.PermanentDeleteTeam(th.Context, team)
}()
one := 1
th.App.UpdateConfig(func(cfg *model.Config) { cfg.TeamSettings.MaxUsersPerTeam = &one })
@@ -1250,7 +1250,7 @@ func TestGetTeamStats(t *testing.T) {
teamStats, err := th.App.GetTeamStats(th.BasicTeam.Id, restrictions)
require.Nil(t, err)
require.NotNil(t, teamStats)
members, err := th.App.GetChannelMembersPage(th.BasicChannel.Id, 0, 5)
members, err := th.App.GetChannelMembersPage(th.Context, th.BasicChannel.Id, 0, 5)
require.Nil(t, err)
assert.Equal(t, int64(len(members)), teamStats.TotalMemberCount)
assert.Equal(t, int64(len(members)), teamStats.ActiveMemberCount)

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

@@ -117,7 +117,7 @@ func (a *App) runPluginsHook(c *request.Context, info *model.FileInfo, file io.R
return nil
}
func (a *App) CreateUploadSession(us *model.UploadSession) (*model.UploadSession, *model.AppError) {
func (a *App) CreateUploadSession(c request.CTX, us *model.UploadSession) (*model.UploadSession, *model.AppError) {
if us.FileSize > *a.Config().FileSettings.MaxFileSize {
return nil, model.NewAppError("CreateUploadSession", "app.upload.create.upload_too_large.app_error",
map[string]any{"channelId": us.ChannelId}, "", http.StatusRequestEntityTooLarge)
@@ -136,7 +136,7 @@ func (a *App) CreateUploadSession(us *model.UploadSession) (*model.UploadSession
}
if us.Type == model.UploadTypeAttachment {
channel, err := a.GetChannel(us.ChannelId)
channel, err := a.GetChannel(c, us.ChannelId)
if err != nil {
return nil, model.NewAppError("CreateUploadSession", "app.upload.create.incorrect_channel_id.app_error",
map[string]any{"channelId": us.ChannelId}, "", http.StatusBadRequest)

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

@@ -36,14 +36,14 @@ func TestCreateUploadSession(t *testing.T) {
maxFileSize := *th.App.Config().FileSettings.MaxFileSize
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.FileSettings.MaxFileSize = us.FileSize - 1 })
defer th.App.UpdateConfig(func(cfg *model.Config) { *cfg.FileSettings.MaxFileSize = maxFileSize })
u, err := th.App.CreateUploadSession(us)
u, err := th.App.CreateUploadSession(th.Context, us)
require.NotNil(t, err)
require.Equal(t, "app.upload.create.upload_too_large.app_error", err.Id)
require.Nil(t, u)
})
t.Run("invalid Id", func(t *testing.T) {
u, err := th.App.CreateUploadSession(us)
u, err := th.App.CreateUploadSession(th.Context, us)
require.NotNil(t, err)
require.Equal(t, "model.upload_session.is_valid.id.app_error", err.Id)
require.Nil(t, u)
@@ -52,7 +52,7 @@ func TestCreateUploadSession(t *testing.T) {
t.Run("invalid UserId", func(t *testing.T) {
us.Id = model.NewId()
us.UserId = ""
u, err := th.App.CreateUploadSession(us)
u, err := th.App.CreateUploadSession(th.Context, us)
require.NotNil(t, err)
require.Equal(t, "model.upload_session.is_valid.user_id.app_error", err.Id)
require.Nil(t, u)
@@ -61,7 +61,7 @@ func TestCreateUploadSession(t *testing.T) {
t.Run("invalid ChannelId", func(t *testing.T) {
us.UserId = th.BasicUser.Id
us.ChannelId = ""
u, err := th.App.CreateUploadSession(us)
u, err := th.App.CreateUploadSession(th.Context, us)
require.NotNil(t, err)
require.Equal(t, "model.upload_session.is_valid.channel_id.app_error", err.Id)
require.Nil(t, u)
@@ -69,17 +69,17 @@ func TestCreateUploadSession(t *testing.T) {
t.Run("non-existing channel", func(t *testing.T) {
us.ChannelId = model.NewId()
u, err := th.App.CreateUploadSession(us)
u, err := th.App.CreateUploadSession(th.Context, us)
require.NotNil(t, err)
require.Equal(t, "app.upload.create.incorrect_channel_id.app_error", err.Id)
require.Nil(t, u)
})
t.Run("deleted channel", func(t *testing.T) {
ch := th.CreateChannel(th.BasicTeam)
ch := th.CreateChannel(th.Context, th.BasicTeam)
th.App.DeleteChannel(th.Context, ch, th.BasicUser.Id)
us.ChannelId = ch.Id
u, err := th.App.CreateUploadSession(us)
u, err := th.App.CreateUploadSession(th.Context, us)
require.NotNil(t, err)
require.Equal(t, "app.upload.create.cannot_upload_to_deleted_channel.app_error", err.Id)
require.Nil(t, u)
@@ -87,7 +87,7 @@ func TestCreateUploadSession(t *testing.T) {
t.Run("success", func(t *testing.T) {
us.ChannelId = th.BasicChannel.Id
u, err := th.App.CreateUploadSession(us)
u, err := th.App.CreateUploadSession(th.Context, us)
require.Nil(t, err)
require.NotEmpty(t, u)
})
@@ -106,7 +106,7 @@ func TestUploadData(t *testing.T) {
FileSize: 8 * 1024 * 1024,
}
us, uploadSessionAppErr := th.App.CreateUploadSession(us)
us, uploadSessionAppErr := th.App.CreateUploadSession(th.Context, us)
require.Nil(t, uploadSessionAppErr)
require.NotEmpty(t, us)
@@ -177,7 +177,7 @@ func TestUploadData(t *testing.T) {
t.Run("all at once success", func(t *testing.T) {
us.Id = model.NewId()
var appErr *model.AppError
us, appErr = th.App.CreateUploadSession(us)
us, appErr = th.App.CreateUploadSession(th.Context, us)
require.Nil(t, appErr)
require.NotEmpty(t, us)
@@ -194,7 +194,7 @@ func TestUploadData(t *testing.T) {
us.Id = model.NewId()
us.FileSize = 1024 * 1024
var appErr *model.AppError
us, appErr = th.App.CreateUploadSession(us)
us, appErr = th.App.CreateUploadSession(th.Context, us)
require.Nil(t, appErr)
require.NotEmpty(t, us)
@@ -221,7 +221,7 @@ func TestUploadData(t *testing.T) {
us.Filename = "test.png"
us.FileSize = int64(len(data))
var appErr *model.AppError
us, appErr = th.App.CreateUploadSession(us)
us, appErr = th.App.CreateUploadSession(th.Context, us)
require.Nil(t, appErr)
require.NotEmpty(t, us)
@@ -241,7 +241,7 @@ func TestUploadData(t *testing.T) {
us.Filename = "test.gif"
us.FileSize = int64(len(gifData))
var appErr *model.AppError
us, appErr = th.App.CreateUploadSession(us)
us, appErr = th.App.CreateUploadSession(th.Context, us)
require.Nil(t, appErr)
require.NotEmpty(t, us)
@@ -266,7 +266,7 @@ func TestUploadDataConcurrent(t *testing.T) {
}
var appErr *model.AppError
us, appErr = th.App.CreateUploadSession(us)
us, appErr = th.App.CreateUploadSession(th.Context, us)
require.Nil(t, appErr)
require.NotEmpty(t, us)

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

@@ -98,7 +98,7 @@ func (a *App) CreateUserWithToken(c *request.Context, user *model.User, token *m
return nil, err
}
a.AddDirectChannels(team.Id, ruser)
a.AddDirectChannels(c, team.Id, ruser)
if token.Type == TokenTypeGuestInvitation || (token.Type == TokenTypeTeamInvitation && len(channels) > 0) {
for _, channel := range channels {
@@ -151,7 +151,7 @@ func (a *App) CreateUserWithInviteId(c *request.Context, user *model.User, invit
return nil, err
}
a.AddDirectChannels(team.Id, ruser)
a.AddDirectChannels(c, team.Id, ruser)
if err := a.Srv().EmailService.SendWelcomeEmail(ruser.Id, ruser.Email, ruser.EmailVerified, ruser.DisableWelcomeEmail, ruser.Locale, a.GetSiteURL(), redirect); err != nil {
mlog.Warn("Failed to send welcome email on create user with inviteId", mlog.Err(err))
@@ -367,7 +367,7 @@ func (a *App) CreateOAuthUser(c *request.Context, service string, userData io.Re
return nil, err
}
err = a.AddDirectChannels(teamID, user)
err = a.AddDirectChannels(c, teamID, user)
if err != nil {
mlog.Warn("Failed to add direct channels", mlog.Err(err))
}
@@ -905,14 +905,14 @@ func (a *App) userDeactivated(c *request.Context, userID string) *model.AppError
return nil
}
func (a *App) invalidateUserChannelMembersCaches(userID string) *model.AppError {
func (a *App) invalidateUserChannelMembersCaches(c request.CTX, userID string) *model.AppError {
teamsForUser, err := a.GetTeamsForUser(userID)
if err != nil {
return err
}
for _, team := range teamsForUser {
channelsForUser, err := a.GetChannelsForTeamForUser(team.Id, userID, &model.ChannelSearchOpts{
channelsForUser, err := a.GetChannelsForTeamForUser(c, team.Id, userID, &model.ChannelSearchOpts{
IncludeDeleted: false,
LastDeleteAt: 0,
})
@@ -960,7 +960,7 @@ func (a *App) UpdateActive(c *request.Context, user *model.User, active bool) (*
}
}
a.invalidateUserChannelMembersCaches(user.Id)
a.invalidateUserChannelMembersCaches(c, user.Id)
a.InvalidateCacheForUser(user.Id)
a.sendUpdatedUserEvent(*ruser)
@@ -2185,7 +2185,7 @@ func (a *App) PromoteGuestToUser(c *request.Context, user *model.User, requestor
for _, member := range teamMembers {
a.sendUpdatedMemberRoleEvent(user.Id, member)
channelMembers, err := a.GetChannelMembersForUser(member.TeamId, user.Id)
channelMembers, err := a.GetChannelMembersForUser(c, member.TeamId, user.Id)
if err != nil {
mlog.Warn("Failed to get channel members for user on promote guest to user", mlog.Err(err))
}
@@ -2209,7 +2209,7 @@ func (a *App) PromoteGuestToUser(c *request.Context, user *model.User, requestor
// DemoteUserToGuest Convert user's roles and all his membership's roles from
// regular user roles to guest roles.
func (a *App) DemoteUserToGuest(user *model.User) *model.AppError {
func (a *App) DemoteUserToGuest(c request.CTX, user *model.User) *model.AppError {
demotedUser, nErr := a.ch.srv.userService.DemoteUserToGuest(user)
a.InvalidateCacheForUser(user.Id)
if nErr != nil {
@@ -2229,7 +2229,7 @@ func (a *App) DemoteUserToGuest(user *model.User) *model.AppError {
for _, member := range teamMembers {
a.sendUpdatedMemberRoleEvent(user.Id, member)
channelMembers, err := a.GetChannelMembersForUser(member.TeamId, user.Id)
channelMembers, err := a.GetChannelMembersForUser(c, member.TeamId, user.Id)
if err != nil {
mlog.Warn("Failed to get channel members for users on demote user to guest", mlog.Err(err))
continue
@@ -2468,7 +2468,7 @@ func (a *App) UpdateThreadFollowForUser(userID, teamID, threadID string, state b
return nil
}
func (a *App) UpdateThreadFollowForUserFromChannelAdd(userID, teamID, threadID string) *model.AppError {
func (a *App) UpdateThreadFollowForUserFromChannelAdd(c request.CTX, userID, teamID, threadID string) *model.AppError {
opts := store.ThreadMembershipOpts{
Following: true,
IncrementMentions: false,
@@ -2489,7 +2489,7 @@ func (a *App) UpdateThreadFollowForUserFromChannelAdd(userID, teamID, threadID s
if appErr != nil {
return appErr
}
tm.UnreadMentions, appErr = a.countThreadMentions(user, post, teamID, post.CreateAt-1)
tm.UnreadMentions, appErr = a.countThreadMentions(c, user, post, teamID, post.CreateAt-1)
if appErr != nil {
return appErr
}
@@ -2510,7 +2510,7 @@ func (a *App) UpdateThreadFollowForUserFromChannelAdd(userID, teamID, threadID s
}
a.sanitizeProfiles(userThread.Participants, false)
userThread.Post.SanitizeProps()
sanitizedPost, appErr := a.SanitizePostMetadataForUser(userThread.Post, userID)
sanitizedPost, appErr := a.SanitizePostMetadataForUser(c, userThread.Post, userID)
if appErr != nil {
return appErr
}
@@ -2528,7 +2528,7 @@ func (a *App) UpdateThreadFollowForUserFromChannelAdd(userID, teamID, threadID s
return nil
}
func (a *App) UpdateThreadReadForUserByPost(currentSessionId, userID, teamID, threadID, postID string) (*model.ThreadResponse, *model.AppError) {
func (a *App) UpdateThreadReadForUserByPost(c request.CTX, currentSessionId, userID, teamID, threadID, postID string) (*model.ThreadResponse, *model.AppError) {
post, err := a.GetSinglePost(postID, false)
if err != nil {
return nil, err
@@ -2538,10 +2538,10 @@ func (a *App) UpdateThreadReadForUserByPost(currentSessionId, userID, teamID, th
return nil, model.NewAppError("UpdateThreadReadForUser", "app.user.update_thread_read_for_user_by_post.app_error", nil, "", http.StatusBadRequest)
}
return a.UpdateThreadReadForUser(currentSessionId, userID, teamID, threadID, post.CreateAt-1)
return a.UpdateThreadReadForUser(c, currentSessionId, userID, teamID, threadID, post.CreateAt-1)
}
func (a *App) UpdateThreadReadForUser(currentSessionId, userID, teamID, threadID string, timestamp int64) (*model.ThreadResponse, *model.AppError) {
func (a *App) UpdateThreadReadForUser(c request.CTX, currentSessionId, userID, teamID, threadID string, timestamp int64) (*model.ThreadResponse, *model.AppError) {
user, err := a.GetUser(userID)
if err != nil {
return nil, err
@@ -2566,7 +2566,7 @@ func (a *App) UpdateThreadReadForUser(currentSessionId, userID, teamID, threadID
if err != nil {
return nil, err
}
membership.UnreadMentions, err = a.countThreadMentions(user, post, teamID, timestamp)
membership.UnreadMentions, err = a.countThreadMentions(c, user, post, teamID, timestamp)
if err != nil {
return nil, err
}
@@ -2587,7 +2587,7 @@ func (a *App) UpdateThreadReadForUser(currentSessionId, userID, teamID, threadID
}
// Clear if user has read the messages
if thread.UnreadReplies == 0 && a.IsCRTEnabledForUser(userID) {
if thread.UnreadReplies == 0 && a.IsCRTEnabledForUser(c, userID) {
a.clearPushNotification(currentSessionId, userID, post.ChannelId, threadID)
}

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

@@ -914,7 +914,7 @@ func TestCreateUserWithToken(t *testing.T) {
_, nErr := th.App.Srv().Store.Token().GetByToken(token.Token)
require.Error(t, nErr, "The token must be deleted after be used")
members, err := th.App.GetChannelMembersForUser(th.BasicTeam.Id, newUser.Id)
members, err := th.App.GetChannelMembersForUser(th.Context, th.BasicTeam.Id, newUser.Id)
require.Nil(t, err)
assert.Len(t, members, 2)
})
@@ -936,7 +936,7 @@ func TestCreateUserWithToken(t *testing.T) {
_, nErr := th.App.Srv().Store.Token().GetByToken(token.Token)
require.Error(t, nErr, "The token must be deleted after be used")
members, err := th.App.GetChannelMembersForUser(th.BasicTeam.Id, newGuest.Id)
members, err := th.App.GetChannelMembersForUser(th.Context, th.BasicTeam.Id, newGuest.Id)
require.Nil(t, err)
require.Len(t, members, 1)
assert.Equal(t, members[0].ChannelId, th.BasicChannel.Id)
@@ -982,7 +982,7 @@ func TestCreateUserWithToken(t *testing.T) {
_, nErr := th.App.Srv().Store.Token().GetByToken(grantedDomainToken.Token)
require.Error(t, nErr)
members, err := th.App.GetChannelMembersForUser(th.BasicTeam.Id, newGuest.Id)
members, err := th.App.GetChannelMembersForUser(th.Context, th.BasicTeam.Id, newGuest.Id)
require.Nil(t, err)
require.Len(t, members, 1)
assert.Equal(t, members[0].ChannelId, th.BasicChannel.Id)
@@ -1019,7 +1019,7 @@ func TestCreateUserWithToken(t *testing.T) {
_, nErr := th.App.Srv().Store.Token().GetByToken(token.Token)
require.Error(t, nErr)
members, err := th.App.GetChannelMembersForUser(th.BasicTeam.Id, newGuest.Id)
members, err := th.App.GetChannelMembersForUser(th.Context, th.BasicTeam.Id, newGuest.Id)
require.Nil(t, err)
require.Len(t, members, 1)
assert.Equal(t, members[0].ChannelId, th.BasicChannel.Id)
@@ -1149,24 +1149,24 @@ func TestGetViewUsersRestrictions(t *testing.T) {
th.App.UpdateTeamMemberRoles(team1.Id, user1.Id, "team_user team_admin")
team1channel1 := th.CreateChannel(team1)
team1channel2 := th.CreateChannel(team1)
th.CreateChannel(team1) // Another channel
team1offtopic, err := th.App.GetChannelByName("off-topic", team1.Id, false)
team1channel1 := th.CreateChannel(th.Context, team1)
team1channel2 := th.CreateChannel(th.Context, team1)
th.CreateChannel(th.Context, team1) // Another channel
team1offtopic, err := th.App.GetChannelByName(th.Context, "off-topic", team1.Id, false)
require.Nil(t, err)
team1townsquare, err := th.App.GetChannelByName("town-square", team1.Id, false)
team1townsquare, err := th.App.GetChannelByName(th.Context, "town-square", team1.Id, false)
require.Nil(t, err)
team2channel1 := th.CreateChannel(team2)
th.CreateChannel(team2) // Another channel
team2offtopic, err := th.App.GetChannelByName("off-topic", team2.Id, false)
team2channel1 := th.CreateChannel(th.Context, team2)
th.CreateChannel(th.Context, team2) // Another channel
team2offtopic, err := th.App.GetChannelByName(th.Context, "off-topic", team2.Id, false)
require.Nil(t, err)
team2townsquare, err := th.App.GetChannelByName("town-square", team2.Id, false)
team2townsquare, err := th.App.GetChannelByName(th.Context, "town-square", team2.Id, false)
require.Nil(t, err)
th.App.AddUserToChannel(user1, team1channel1, false)
th.App.AddUserToChannel(user1, team1channel2, false)
th.App.AddUserToChannel(user1, team2channel1, false)
th.App.AddUserToChannel(th.Context, user1, team1channel1, false)
th.App.AddUserToChannel(th.Context, user1, team1channel2, false)
th.App.AddUserToChannel(th.Context, user1, team2channel1, false)
addPermission := func(role *model.Role, permission string) *model.AppError {
newPermissions := append(role.Permissions, permission)
@@ -1317,7 +1317,7 @@ func TestPromoteGuestToUser(t *testing.T) {
assert.Nil(t, err)
assert.False(t, teamMember.SchemeGuest)
assert.True(t, teamMember.SchemeUser)
_, err = th.App.GetChannelMember(context.Background(), th.BasicChannel.Id, guest.Id)
_, err = th.App.GetChannelMember(th.Context, th.BasicChannel.Id, guest.Id)
assert.Nil(t, err)
assert.False(t, teamMember.SchemeGuest)
assert.True(t, teamMember.SchemeUser)
@@ -1336,7 +1336,7 @@ func TestPromoteGuestToUser(t *testing.T) {
require.True(t, channelMember.SchemeGuest)
require.False(t, channelMember.SchemeUser)
channelMembers, err := th.App.GetChannelMembersForUser(th.BasicTeam.Id, guest.Id)
channelMembers, err := th.App.GetChannelMembersForUser(th.Context, th.BasicTeam.Id, guest.Id)
require.Nil(t, err)
require.Len(t, channelMembers, 1)
@@ -1349,12 +1349,12 @@ func TestPromoteGuestToUser(t *testing.T) {
assert.Nil(t, err)
assert.False(t, teamMember.SchemeGuest)
assert.True(t, teamMember.SchemeUser)
_, err = th.App.GetChannelMember(context.Background(), th.BasicChannel.Id, guest.Id)
_, err = th.App.GetChannelMember(th.Context, th.BasicChannel.Id, guest.Id)
assert.Nil(t, err)
assert.False(t, teamMember.SchemeGuest)
assert.True(t, teamMember.SchemeUser)
channelMembers, err = th.App.GetChannelMembersForUser(th.BasicTeam.Id, guest.Id)
channelMembers, err = th.App.GetChannelMembersForUser(th.Context, th.BasicTeam.Id, guest.Id)
require.Nil(t, err)
assert.Len(t, channelMembers, 3)
})
@@ -1368,20 +1368,20 @@ func TestPromoteGuestToUser(t *testing.T) {
require.True(t, teamMember.SchemeGuest)
require.False(t, teamMember.SchemeUser)
guestCount, _ := th.App.GetChannelGuestCount(th.BasicChannel.Id)
guestCount, _ := th.App.GetChannelGuestCount(th.Context, th.BasicChannel.Id)
require.Equal(t, int64(0), guestCount)
channelMember := th.AddUserToChannel(guest, th.BasicChannel)
require.True(t, channelMember.SchemeGuest)
require.False(t, channelMember.SchemeUser)
guestCount, _ = th.App.GetChannelGuestCount(th.BasicChannel.Id)
guestCount, _ = th.App.GetChannelGuestCount(th.Context, th.BasicChannel.Id)
require.Equal(t, int64(1), guestCount)
err = th.App.PromoteGuestToUser(th.Context, guest, th.BasicUser.Id)
require.Nil(t, err)
guestCount, _ = th.App.GetChannelGuestCount(th.BasicChannel.Id)
guestCount, _ = th.App.GetChannelGuestCount(th.Context, th.BasicChannel.Id)
require.Equal(t, int64(0), guestCount)
})
}
@@ -1399,27 +1399,27 @@ func TestDemoteUserToGuest(t *testing.T) {
require.True(t, teamMember.SchemeUser)
require.False(t, teamMember.SchemeGuest)
guestCount, _ := th.App.GetChannelGuestCount(th.BasicChannel.Id)
guestCount, _ := th.App.GetChannelGuestCount(th.Context, th.BasicChannel.Id)
require.Equal(t, int64(0), guestCount)
channelMember := th.AddUserToChannel(user, th.BasicChannel)
require.True(t, channelMember.SchemeUser)
require.False(t, channelMember.SchemeGuest)
guestCount, _ = th.App.GetChannelGuestCount(th.BasicChannel.Id)
guestCount, _ = th.App.GetChannelGuestCount(th.Context, th.BasicChannel.Id)
require.Equal(t, int64(0), guestCount)
err = th.App.DemoteUserToGuest(user)
err = th.App.DemoteUserToGuest(th.Context, user)
require.Nil(t, err)
guestCount, _ = th.App.GetChannelGuestCount(th.BasicChannel.Id)
guestCount, _ = th.App.GetChannelGuestCount(th.Context, th.BasicChannel.Id)
require.Equal(t, int64(1), guestCount)
})
t.Run("Must fail with guest user", func(t *testing.T) {
guest := th.CreateGuest()
require.Equal(t, "system_guest", guest.Roles)
err := th.App.DemoteUserToGuest(guest)
err := th.App.DemoteUserToGuest(th.Context, guest)
require.Nil(t, err)
user, err := th.App.GetUser(guest.Id)
@@ -1431,7 +1431,7 @@ func TestDemoteUserToGuest(t *testing.T) {
user := th.CreateUser()
require.Equal(t, "system_user", user.Roles)
err := th.App.DemoteUserToGuest(user)
err := th.App.DemoteUserToGuest(th.Context, user)
require.Nil(t, err)
user, err = th.App.GetUser(user.Id)
assert.Nil(t, err)
@@ -1447,7 +1447,7 @@ func TestDemoteUserToGuest(t *testing.T) {
require.True(t, teamMember.SchemeUser)
require.False(t, teamMember.SchemeGuest)
err = th.App.DemoteUserToGuest(user)
err = th.App.DemoteUserToGuest(th.Context, user)
require.Nil(t, err)
user, err = th.App.GetUser(user.Id)
assert.Nil(t, err)
@@ -1471,7 +1471,7 @@ func TestDemoteUserToGuest(t *testing.T) {
require.True(t, channelMember.SchemeUser)
require.False(t, channelMember.SchemeGuest)
err = th.App.DemoteUserToGuest(user)
err = th.App.DemoteUserToGuest(th.Context, user)
require.Nil(t, err)
user, err = th.App.GetUser(user.Id)
assert.Nil(t, err)
@@ -1480,7 +1480,7 @@ func TestDemoteUserToGuest(t *testing.T) {
assert.Nil(t, err)
assert.False(t, teamMember.SchemeUser)
assert.True(t, teamMember.SchemeGuest)
_, err = th.App.GetChannelMember(context.Background(), th.BasicChannel.Id, user.Id)
_, err = th.App.GetChannelMember(th.Context, th.BasicChannel.Id, user.Id)
assert.Nil(t, err)
assert.False(t, teamMember.SchemeUser)
assert.True(t, teamMember.SchemeGuest)
@@ -1499,11 +1499,11 @@ func TestDemoteUserToGuest(t *testing.T) {
require.True(t, channelMember.SchemeUser)
require.False(t, channelMember.SchemeGuest)
channelMembers, err := th.App.GetChannelMembersForUser(th.BasicTeam.Id, user.Id)
channelMembers, err := th.App.GetChannelMembersForUser(th.Context, th.BasicTeam.Id, user.Id)
require.Nil(t, err)
require.Len(t, channelMembers, 3)
err = th.App.DemoteUserToGuest(user)
err = th.App.DemoteUserToGuest(th.Context, user)
require.Nil(t, err)
user, err = th.App.GetUser(user.Id)
assert.Nil(t, err)
@@ -1512,12 +1512,12 @@ func TestDemoteUserToGuest(t *testing.T) {
assert.Nil(t, err)
assert.False(t, teamMember.SchemeUser)
assert.True(t, teamMember.SchemeGuest)
_, err = th.App.GetChannelMember(context.Background(), th.BasicChannel.Id, user.Id)
_, err = th.App.GetChannelMember(th.Context, th.BasicChannel.Id, user.Id)
assert.Nil(t, err)
assert.False(t, teamMember.SchemeUser)
assert.True(t, teamMember.SchemeGuest)
channelMembers, err = th.App.GetChannelMembersForUser(th.BasicTeam.Id, user.Id)
channelMembers, err = th.App.GetChannelMembersForUser(th.Context, th.BasicTeam.Id, user.Id)
require.Nil(t, err)
assert.Len(t, channelMembers, 3)
})
@@ -1537,18 +1537,18 @@ func TestDemoteUserToGuest(t *testing.T) {
require.True(t, teamMember.SchemeAdmin)
require.False(t, teamMember.SchemeGuest)
channel := th.CreateChannel(team)
channel := th.CreateChannel(th.Context, team)
th.AddUserToChannel(user, channel)
th.App.UpdateChannelMemberSchemeRoles(channel.Id, user.Id, false, true, true)
th.App.UpdateChannelMemberSchemeRoles(th.Context, channel.Id, user.Id, false, true, true)
channelMember, err := th.App.GetChannelMember(context.Background(), channel.Id, user.Id)
channelMember, err := th.App.GetChannelMember(th.Context, channel.Id, user.Id)
assert.Nil(t, err)
assert.True(t, channelMember.SchemeUser)
assert.True(t, channelMember.SchemeAdmin)
assert.False(t, channelMember.SchemeGuest)
err = th.App.DemoteUserToGuest(user)
err = th.App.DemoteUserToGuest(th.Context, user)
require.Nil(t, err)
user, err = th.App.GetUser(user.Id)
@@ -1561,7 +1561,7 @@ func TestDemoteUserToGuest(t *testing.T) {
assert.False(t, teamMember.SchemeAdmin)
assert.True(t, teamMember.SchemeGuest)
channelMember, err = th.App.GetChannelMember(context.Background(), channel.Id, user.Id)
channelMember, err = th.App.GetChannelMember(th.Context, channel.Id, user.Id)
assert.Nil(t, err)
assert.False(t, channelMember.SchemeUser)
assert.False(t, channelMember.SchemeAdmin)
@@ -1682,7 +1682,7 @@ func TestUpdateThreadReadForUser(t *testing.T) {
require.Nil(t, appErr)
require.Zero(t, threads.Total)
_, appErr = th.App.UpdateThreadReadForUser("currentSessionId", th.BasicUser.Id, th.BasicChannel.TeamId, rootPost.Id, replyPost.CreateAt)
_, appErr = th.App.UpdateThreadReadForUser(th.Context, "currentSessionId", th.BasicUser.Id, th.BasicChannel.TeamId, rootPost.Id, replyPost.CreateAt)
require.Nil(t, appErr)
threads, appErr = th.App.GetThreadsForUser(th.BasicUser.Id, th.BasicTeam.Id, model.GetUserThreadsOpts{})
@@ -1719,7 +1719,7 @@ func TestUpdateThreadReadForUser(t *testing.T) {
mockStore.On("User").Return(&mockUserStore)
mockStore.On("Thread").Return(&mockThreadStore)
_, err = th.App.UpdateThreadReadForUser("currentSessionId", "user1", "team1", "postid", 100)
_, err = th.App.UpdateThreadReadForUser(th.Context, "currentSessionId", "user1", "team1", "postid", 100)
require.Error(t, err)
})
}

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

@@ -44,9 +44,9 @@ func TestRestrictedViewMembers(t *testing.T) {
team1 := th.CreateTeam()
team2 := th.CreateTeam()
channel1 := th.CreateChannel(team1)
channel2 := th.CreateChannel(team1)
channel3 := th.CreateChannel(team2)
channel1 := th.CreateChannel(th.Context, team1)
channel2 := th.CreateChannel(th.Context, team1)
channel3 := th.CreateChannel(th.Context, team2)
th.LinkUserToTeam(user1, team1)
th.LinkUserToTeam(user2, team1)

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

@@ -103,7 +103,7 @@ func TestWebConnShouldSendEvent(t *testing.T) {
th.LinkUserToTeam(th.SystemAdminUser, th.BasicTeam)
// Create another channel with just BasicUser (implicitly) and SystemAdminUser to test channel broadcast
channel2 := th.CreateChannel(th.BasicTeam)
channel2 := th.CreateChannel(th.Context, th.BasicTeam)
th.AddUserToChannel(th.SystemAdminUser, channel2)
cases := []struct {

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

@@ -28,7 +28,7 @@ const (
MaxIntegrationResponseSize = 1024 * 1024 // Posts can be <100KB at most, so this is likely more than enough
)
func (a *App) handleWebhookEvents(c *request.Context, post *model.Post, team *model.Team, channel *model.Channel, user *model.User) *model.AppError {
func (a *App) handleWebhookEvents(c request.CTX, post *model.Post, team *model.Team, channel *model.Channel, user *model.User) *model.AppError {
if !*a.Config().ServiceSettings.EnableOutgoingWebhooks {
return nil
}
@@ -94,7 +94,7 @@ func (a *App) handleWebhookEvents(c *request.Context, post *model.Post, team *mo
return nil
}
func (a *App) TriggerWebhook(c *request.Context, payload *model.OutgoingWebhookPayload, hook *model.OutgoingWebhook, post *model.Post, channel *model.Channel) {
func (a *App) TriggerWebhook(c request.CTX, payload *model.OutgoingWebhookPayload, hook *model.OutgoingWebhook, post *model.Post, channel *model.Channel) {
var body io.Reader
var contentType string
if hook.ContentType == "application/json" {
@@ -262,7 +262,7 @@ func SplitWebhookPost(post *model.Post, maxPostSize int) ([]*model.Post, *model.
return splits, nil
}
func (a *App) CreateWebhookPost(c *request.Context, userID string, channel *model.Channel, text, overrideUsername, overrideIconURL, overrideIconEmoji string, props model.StringInterface, postType string, postRootId string) (*model.Post, *model.AppError) {
func (a *App) CreateWebhookPost(c request.CTX, userID string, channel *model.Channel, text, overrideUsername, overrideIconURL, overrideIconEmoji string, props model.StringInterface, postType string, postRootId string) (*model.Post, *model.AppError) {
// parse links into Markdown format
linkWithTextRegex := regexp.MustCompile(`<([^\n<\|>]+)\|([^\n>]+)>`)
text = linkWithTextRegex.ReplaceAllString(text, "[${2}](${1})")
@@ -514,13 +514,13 @@ func (a *App) CreateOutgoingWebhook(hook *model.OutgoingWebhook) (*model.Outgoin
return webhook, nil
}
func (a *App) UpdateOutgoingWebhook(oldHook, updatedHook *model.OutgoingWebhook) (*model.OutgoingWebhook, *model.AppError) {
func (a *App) UpdateOutgoingWebhook(c request.CTX, oldHook, updatedHook *model.OutgoingWebhook) (*model.OutgoingWebhook, *model.AppError) {
if !*a.Config().ServiceSettings.EnableOutgoingWebhooks {
return nil, model.NewAppError("UpdateOutgoingWebhook", "api.outgoing_webhook.disabled.app_error", nil, "", http.StatusNotImplemented)
}
if updatedHook.ChannelId != "" {
channel, err := a.GetChannel(updatedHook.ChannelId)
channel, err := a.GetChannel(c, updatedHook.ChannelId)
if err != nil {
return nil, err
}
@@ -775,7 +775,7 @@ func (a *App) HandleIncomingWebhook(c *request.Context, hookID string, req *mode
return model.NewAppError("HandleIncomingWebhook", "web.incoming_webhook.user.app_error", nil, result.NErr.Error(), http.StatusForbidden)
}
if channel.Type != model.ChannelTypeOpen && !a.HasPermissionToChannel(hook.UserId, channel.Id, model.PermissionReadChannel) {
if channel.Type != model.ChannelTypeOpen && !a.HasPermissionToChannel(c, hook.UserId, channel.Id, model.PermissionReadChannel) {
return model.NewAppError("HandleIncomingWebhook", "web.incoming_webhook.permissions.app_error", nil, "", http.StatusForbidden)
}

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

@@ -681,7 +681,7 @@ func TestTriggerOutGoingWebhookWithUsernameAndIconURL(t *testing.T) {
}))
defer ts.Close()
channel := th.CreateChannel(th.BasicTeam)
channel := th.CreateChannel(th.Context, th.BasicTeam)
hook, _ := createOutgoingWebhook(channel, ts.URL, th)
payload := getPayload(hook, th, channel)