@@ -203,7 +203,7 @@ func (a *App) TestSiteURL(siteURL string) *model.AppError {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) TestEmail(userId string, cfg *model.Config) *model.AppError {
|
func (a *App) TestEmail(userID string, cfg *model.Config) *model.AppError {
|
||||||
if *cfg.EmailSettings.SMTPServer == "" {
|
if *cfg.EmailSettings.SMTPServer == "" {
|
||||||
return model.NewAppError("testEmail", "api.admin.test_email.missing_server", nil, utils.T("api.context.invalid_param.app_error", map[string]interface{}{"Name": "SMTPServer"}), http.StatusBadRequest)
|
return model.NewAppError("testEmail", "api.admin.test_email.missing_server", nil, utils.T("api.context.invalid_param.app_error", map[string]interface{}{"Name": "SMTPServer"}), http.StatusBadRequest)
|
||||||
}
|
}
|
||||||
@@ -219,7 +219,7 @@ func (a *App) TestEmail(userId string, cfg *model.Config) *model.AppError {
|
|||||||
return model.NewAppError("testEmail", "api.admin.test_email.reenter_password", nil, "", http.StatusBadRequest)
|
return model.NewAppError("testEmail", "api.admin.test_email.reenter_password", nil, "", http.StatusBadRequest)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
user, err := a.GetUser(userId)
|
user, err := a.GetUser(userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ const (
|
|||||||
MonthMilliseconds = 31 * DayMilliseconds
|
MonthMilliseconds = 31 * DayMilliseconds
|
||||||
)
|
)
|
||||||
|
|
||||||
func (a *App) GetAnalytics(name string, teamId string) (model.AnalyticsRows, *model.AppError) {
|
func (a *App) GetAnalytics(name string, teamID string) (model.AnalyticsRows, *model.AppError) {
|
||||||
skipIntensiveQueries := false
|
skipIntensiveQueries := false
|
||||||
var systemUserCount int64
|
var systemUserCount int64
|
||||||
systemUserCount, err := a.Srv().Store.User().Count(model.UserCountOptions{})
|
systemUserCount, err := a.Srv().Store.User().Count(model.UserCountOptions{})
|
||||||
@@ -46,19 +46,19 @@ func (a *App) GetAnalytics(name string, teamId string) (model.AnalyticsRows, *mo
|
|||||||
openChan := make(chan store.StoreResult, 1)
|
openChan := make(chan store.StoreResult, 1)
|
||||||
privateChan := make(chan store.StoreResult, 1)
|
privateChan := make(chan store.StoreResult, 1)
|
||||||
go func() {
|
go func() {
|
||||||
count, err2 := a.Srv().Store.Channel().AnalyticsTypeCount(teamId, model.CHANNEL_OPEN)
|
count, err2 := a.Srv().Store.Channel().AnalyticsTypeCount(teamID, model.CHANNEL_OPEN)
|
||||||
openChan <- store.StoreResult{Data: count, NErr: err2}
|
openChan <- store.StoreResult{Data: count, NErr: err2}
|
||||||
close(openChan)
|
close(openChan)
|
||||||
}()
|
}()
|
||||||
go func() {
|
go func() {
|
||||||
count, err2 := a.Srv().Store.Channel().AnalyticsTypeCount(teamId, model.CHANNEL_PRIVATE)
|
count, err2 := a.Srv().Store.Channel().AnalyticsTypeCount(teamID, model.CHANNEL_PRIVATE)
|
||||||
privateChan <- store.StoreResult{Data: count, NErr: err2}
|
privateChan <- store.StoreResult{Data: count, NErr: err2}
|
||||||
close(privateChan)
|
close(privateChan)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
var userChan chan store.StoreResult
|
var userChan chan store.StoreResult
|
||||||
var userInactiveChan chan store.StoreResult
|
var userInactiveChan chan store.StoreResult
|
||||||
if teamId == "" {
|
if teamID == "" {
|
||||||
userInactiveChan = make(chan store.StoreResult, 1)
|
userInactiveChan = make(chan store.StoreResult, 1)
|
||||||
go func() {
|
go func() {
|
||||||
count, err2 := a.Srv().Store.User().AnalyticsGetInactiveUsersCount()
|
count, err2 := a.Srv().Store.User().AnalyticsGetInactiveUsersCount()
|
||||||
@@ -68,7 +68,7 @@ func (a *App) GetAnalytics(name string, teamId string) (model.AnalyticsRows, *mo
|
|||||||
} else {
|
} else {
|
||||||
userChan = make(chan store.StoreResult, 1)
|
userChan = make(chan store.StoreResult, 1)
|
||||||
go func() {
|
go func() {
|
||||||
count, err2 := a.Srv().Store.User().Count(model.UserCountOptions{TeamId: teamId})
|
count, err2 := a.Srv().Store.User().Count(model.UserCountOptions{TeamId: teamID})
|
||||||
userChan <- store.StoreResult{Data: count, NErr: err2}
|
userChan <- store.StoreResult{Data: count, NErr: err2}
|
||||||
close(userChan)
|
close(userChan)
|
||||||
}()
|
}()
|
||||||
@@ -78,7 +78,7 @@ func (a *App) GetAnalytics(name string, teamId string) (model.AnalyticsRows, *mo
|
|||||||
if !skipIntensiveQueries {
|
if !skipIntensiveQueries {
|
||||||
postChan = make(chan store.StoreResult, 1)
|
postChan = make(chan store.StoreResult, 1)
|
||||||
go func() {
|
go func() {
|
||||||
count, err2 := a.Srv().Store.Post().AnalyticsPostCount(teamId, false, false)
|
count, err2 := a.Srv().Store.Post().AnalyticsPostCount(teamID, false, false)
|
||||||
postChan <- store.StoreResult{Data: count, NErr: err2}
|
postChan <- store.StoreResult{Data: count, NErr: err2}
|
||||||
close(postChan)
|
close(postChan)
|
||||||
}()
|
}()
|
||||||
@@ -199,7 +199,7 @@ func (a *App) GetAnalytics(name string, teamId string) (model.AnalyticsRows, *mo
|
|||||||
return rows, nil
|
return rows, nil
|
||||||
}
|
}
|
||||||
analyticsRows, nErr := a.Srv().Store.Post().AnalyticsPostCountsByDay(&model.AnalyticsPostCountsOptions{
|
analyticsRows, nErr := a.Srv().Store.Post().AnalyticsPostCountsByDay(&model.AnalyticsPostCountsOptions{
|
||||||
TeamId: teamId,
|
TeamId: teamID,
|
||||||
BotsOnly: true,
|
BotsOnly: true,
|
||||||
YesterdayOnly: false,
|
YesterdayOnly: false,
|
||||||
})
|
})
|
||||||
@@ -214,7 +214,7 @@ func (a *App) GetAnalytics(name string, teamId string) (model.AnalyticsRows, *mo
|
|||||||
return rows, nil
|
return rows, nil
|
||||||
}
|
}
|
||||||
analyticsRows, nErr := a.Srv().Store.Post().AnalyticsPostCountsByDay(&model.AnalyticsPostCountsOptions{
|
analyticsRows, nErr := a.Srv().Store.Post().AnalyticsPostCountsByDay(&model.AnalyticsPostCountsOptions{
|
||||||
TeamId: teamId,
|
TeamId: teamID,
|
||||||
BotsOnly: false,
|
BotsOnly: false,
|
||||||
YesterdayOnly: false,
|
YesterdayOnly: false,
|
||||||
})
|
})
|
||||||
@@ -229,7 +229,7 @@ func (a *App) GetAnalytics(name string, teamId string) (model.AnalyticsRows, *mo
|
|||||||
return rows, nil
|
return rows, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
analyticsRows, nErr := a.Srv().Store.Post().AnalyticsUserCountsWithPostsByDay(teamId)
|
analyticsRows, nErr := a.Srv().Store.Post().AnalyticsUserCountsWithPostsByDay(teamID)
|
||||||
if nErr != nil {
|
if nErr != nil {
|
||||||
return nil, model.NewAppError("GetAnalytics", "app.post.analytics_user_counts_posts_by_day.app_error", nil, nErr.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("GetAnalytics", "app.post.analytics_user_counts_posts_by_day.app_error", nil, nErr.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -246,21 +246,21 @@ func (a *App) GetAnalytics(name string, teamId string) (model.AnalyticsRows, *mo
|
|||||||
|
|
||||||
iHookChan := make(chan store.StoreResult, 1)
|
iHookChan := make(chan store.StoreResult, 1)
|
||||||
go func() {
|
go func() {
|
||||||
c, err2 := a.Srv().Store.Webhook().AnalyticsIncomingCount(teamId)
|
c, err2 := a.Srv().Store.Webhook().AnalyticsIncomingCount(teamID)
|
||||||
iHookChan <- store.StoreResult{Data: c, NErr: err2}
|
iHookChan <- store.StoreResult{Data: c, NErr: err2}
|
||||||
close(iHookChan)
|
close(iHookChan)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
oHookChan := make(chan store.StoreResult, 1)
|
oHookChan := make(chan store.StoreResult, 1)
|
||||||
go func() {
|
go func() {
|
||||||
c, err2 := a.Srv().Store.Webhook().AnalyticsOutgoingCount(teamId)
|
c, err2 := a.Srv().Store.Webhook().AnalyticsOutgoingCount(teamID)
|
||||||
oHookChan <- store.StoreResult{Data: c, NErr: err2}
|
oHookChan <- store.StoreResult{Data: c, NErr: err2}
|
||||||
close(oHookChan)
|
close(oHookChan)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
commandChan := make(chan store.StoreResult, 1)
|
commandChan := make(chan store.StoreResult, 1)
|
||||||
go func() {
|
go func() {
|
||||||
c, nErr := a.Srv().Store.Command().AnalyticsCommandCount(teamId)
|
c, nErr := a.Srv().Store.Command().AnalyticsCommandCount(teamID)
|
||||||
commandChan <- store.StoreResult{Data: c, NErr: nErr}
|
commandChan <- store.StoreResult{Data: c, NErr: nErr}
|
||||||
close(commandChan)
|
close(commandChan)
|
||||||
}()
|
}()
|
||||||
@@ -278,14 +278,14 @@ func (a *App) GetAnalytics(name string, teamId string) (model.AnalyticsRows, *mo
|
|||||||
if !skipIntensiveQueries {
|
if !skipIntensiveQueries {
|
||||||
fileChan = make(chan store.StoreResult, 1)
|
fileChan = make(chan store.StoreResult, 1)
|
||||||
go func() {
|
go func() {
|
||||||
count, err2 := a.Srv().Store.Post().AnalyticsPostCount(teamId, true, false)
|
count, err2 := a.Srv().Store.Post().AnalyticsPostCount(teamID, true, false)
|
||||||
fileChan <- store.StoreResult{Data: count, NErr: err2}
|
fileChan <- store.StoreResult{Data: count, NErr: err2}
|
||||||
close(fileChan)
|
close(fileChan)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
hashtagChan = make(chan store.StoreResult, 1)
|
hashtagChan = make(chan store.StoreResult, 1)
|
||||||
go func() {
|
go func() {
|
||||||
count, err2 := a.Srv().Store.Post().AnalyticsPostCount(teamId, false, true)
|
count, err2 := a.Srv().Store.Post().AnalyticsPostCount(teamID, false, true)
|
||||||
hashtagChan <- store.StoreResult{Data: count, NErr: err2}
|
hashtagChan <- store.StoreResult{Data: count, NErr: err2}
|
||||||
close(hashtagChan)
|
close(hashtagChan)
|
||||||
}()
|
}()
|
||||||
@@ -341,8 +341,8 @@ func (a *App) GetAnalytics(name string, teamId string) (model.AnalyticsRows, *mo
|
|||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetRecentlyActiveUsersForTeam(teamId string) (map[string]*model.User, *model.AppError) {
|
func (a *App) GetRecentlyActiveUsersForTeam(teamID string) (map[string]*model.User, *model.AppError) {
|
||||||
users, err := a.Srv().Store.User().GetRecentlyActiveUsersForTeam(teamId, 0, 100, nil)
|
users, err := a.Srv().Store.User().GetRecentlyActiveUsersForTeam(teamID, 0, 100, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("GetRecentlyActiveUsersForTeam", "app.user.get_recently_active_users.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("GetRecentlyActiveUsersForTeam", "app.user.get_recently_active_users.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -356,8 +356,8 @@ func (a *App) GetRecentlyActiveUsersForTeam(teamId string) (map[string]*model.Us
|
|||||||
return userMap, nil
|
return userMap, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetRecentlyActiveUsersForTeamPage(teamId string, page, perPage int, asAdmin bool, viewRestrictions *model.ViewUsersRestrictions) ([]*model.User, *model.AppError) {
|
func (a *App) GetRecentlyActiveUsersForTeamPage(teamID string, page, perPage int, asAdmin bool, viewRestrictions *model.ViewUsersRestrictions) ([]*model.User, *model.AppError) {
|
||||||
users, err := a.Srv().Store.User().GetRecentlyActiveUsersForTeam(teamId, page*perPage, perPage, viewRestrictions)
|
users, err := a.Srv().Store.User().GetRecentlyActiveUsersForTeam(teamID, page*perPage, perPage, viewRestrictions)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("GetRecentlyActiveUsersForTeamPage", "app.user.get_recently_active_users.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("GetRecentlyActiveUsersForTeamPage", "app.user.get_recently_active_users.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -365,8 +365,8 @@ func (a *App) GetRecentlyActiveUsersForTeamPage(teamId string, page, perPage int
|
|||||||
return a.sanitizeProfiles(users, asAdmin), nil
|
return a.sanitizeProfiles(users, asAdmin), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetNewUsersForTeamPage(teamId string, page, perPage int, asAdmin bool, viewRestrictions *model.ViewUsersRestrictions) ([]*model.User, *model.AppError) {
|
func (a *App) GetNewUsersForTeamPage(teamID string, page, perPage int, asAdmin bool, viewRestrictions *model.ViewUsersRestrictions) ([]*model.User, *model.AppError) {
|
||||||
users, err := a.Srv().Store.User().GetNewUsersForTeam(teamId, page*perPage, perPage, viewRestrictions)
|
users, err := a.Srv().Store.User().GetNewUsersForTeam(teamID, page*perPage, perPage, viewRestrictions)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("GetNewUsersForTeamPage", "app.user.get_new_users.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("GetNewUsersForTeamPage", "app.user.get_new_users.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
|
|||||||
476
app/app_iface.go
476
app/app_iface.go
@@ -37,11 +37,11 @@ import (
|
|||||||
type AppIface interface {
|
type AppIface interface {
|
||||||
// @openTracingParams args
|
// @openTracingParams args
|
||||||
ExecuteCommand(args *model.CommandArgs) (*model.CommandResponse, *model.AppError)
|
ExecuteCommand(args *model.CommandArgs) (*model.CommandResponse, *model.AppError)
|
||||||
// @openTracingParams teamId
|
// @openTracingParams teamID
|
||||||
// previous ListCommands now ListAutocompleteCommands
|
// previous ListCommands now ListAutocompleteCommands
|
||||||
ListAutocompleteCommands(teamId string, T goi18n.TranslateFunc) ([]*model.Command, *model.AppError)
|
ListAutocompleteCommands(teamID string, T goi18n.TranslateFunc) ([]*model.Command, *model.AppError)
|
||||||
// @openTracingParams teamId, skipSlackParsing
|
// @openTracingParams teamID, skipSlackParsing
|
||||||
CreateCommandPost(post *model.Post, teamId string, response *model.CommandResponse, skipSlackParsing bool) (*model.Post, *model.AppError)
|
CreateCommandPost(post *model.Post, teamID string, response *model.CommandResponse, skipSlackParsing bool) (*model.Post, *model.AppError)
|
||||||
// AddCursorIdsForPostList adds NextPostId and PrevPostId as cursor to the PostList.
|
// 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,
|
// The conditional blocks ensure that it sets those cursor IDs immediately as afterPost, beforePost or empty,
|
||||||
// and only query to database whenever necessary.
|
// and only query to database whenever necessary.
|
||||||
@@ -126,10 +126,10 @@ type AppIface interface {
|
|||||||
FillInPostProps(post *model.Post, channel *model.Channel) *model.AppError
|
FillInPostProps(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
|
// FilterNonGroupChannelMembers returns the subset of the given user IDs of the users who are not members of groups
|
||||||
// associated to the channel excluding bots
|
// associated to the channel excluding bots
|
||||||
FilterNonGroupChannelMembers(userIds []string, channel *model.Channel) ([]string, error)
|
FilterNonGroupChannelMembers(userIDs []string, channel *model.Channel) ([]string, error)
|
||||||
// FilterNonGroupTeamMembers returns the subset of the given user IDs of the users who are not members of groups
|
// FilterNonGroupTeamMembers returns the subset of the given user IDs of the users who are not members of groups
|
||||||
// associated to the team excluding bots.
|
// associated to the team excluding bots.
|
||||||
FilterNonGroupTeamMembers(userIds []string, team *model.Team) ([]string, error)
|
FilterNonGroupTeamMembers(userIDs []string, team *model.Team) ([]string, error)
|
||||||
// GetAllLdapGroupsPage retrieves all LDAP groups under the configured base DN using the default or configured group
|
// GetAllLdapGroupsPage retrieves all LDAP groups under the configured base DN using the default or configured group
|
||||||
// filter.
|
// filter.
|
||||||
GetAllLdapGroupsPage(page int, perPage int, opts model.LdapGroupSearchOpts) ([]*model.Group, int, *model.AppError)
|
GetAllLdapGroupsPage(page int, perPage int, opts model.LdapGroupSearchOpts) ([]*model.Group, int, *model.AppError)
|
||||||
@@ -155,7 +155,7 @@ type AppIface interface {
|
|||||||
// GetFilteredUsersStats is used to get a count of users based on the set of filters supported by UserCountOptions.
|
// GetFilteredUsersStats is used to get a count of users based on the set of filters supported by UserCountOptions.
|
||||||
GetFilteredUsersStats(options *model.UserCountOptions) (*model.UsersStats, *model.AppError)
|
GetFilteredUsersStats(options *model.UserCountOptions) (*model.UsersStats, *model.AppError)
|
||||||
// GetGroupsByTeam returns the paged list and the total count of group associated to the given team.
|
// GetGroupsByTeam returns the paged list and the total count of group associated to the given team.
|
||||||
GetGroupsByTeam(teamId string, opts model.GroupSearchOpts) ([]*model.GroupWithSchemeAdmin, int, *model.AppError)
|
GetGroupsByTeam(teamID string, opts model.GroupSearchOpts) ([]*model.GroupWithSchemeAdmin, int, *model.AppError)
|
||||||
// GetKnownUsers returns the list of user ids of users with any direct
|
// GetKnownUsers returns the list of user ids of users with any direct
|
||||||
// relationship with a user. That means any user sharing any channel, including
|
// relationship with a user. That means any user sharing any channel, including
|
||||||
// direct and group channels.
|
// direct and group channels.
|
||||||
@@ -178,7 +178,7 @@ type AppIface interface {
|
|||||||
// lock instead.
|
// lock instead.
|
||||||
GetPluginsEnvironment() *plugin.Environment
|
GetPluginsEnvironment() *plugin.Environment
|
||||||
// GetProductNotices is called from the frontend to fetch the product notices that are relevant to the caller
|
// GetProductNotices is called from the frontend to fetch the product notices that are relevant to the caller
|
||||||
GetProductNotices(userId, teamId string, client model.NoticeClientType, clientVersion string, locale string) (model.NoticeMessages, *model.AppError)
|
GetProductNotices(userID, teamID string, client model.NoticeClientType, clientVersion string, locale string) (model.NoticeMessages, *model.AppError)
|
||||||
// GetPublicKey will return the actual public key saved in the `name` file.
|
// GetPublicKey will return the actual public key saved in the `name` file.
|
||||||
GetPublicKey(name string) ([]byte, *model.AppError)
|
GetPublicKey(name string) ([]byte, *model.AppError)
|
||||||
// GetSanitizedConfig gets the configuration for a system admin without any secrets.
|
// GetSanitizedConfig gets the configuration for a system admin without any secrets.
|
||||||
@@ -193,7 +193,7 @@ type AppIface interface {
|
|||||||
// GetTeamGroupUsers returns the users who are associated to the team via GroupTeams and GroupMembers.
|
// GetTeamGroupUsers returns the users who are associated to the team via GroupTeams and GroupMembers.
|
||||||
GetTeamGroupUsers(teamID string) ([]*model.User, *model.AppError)
|
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 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(teamID string) (guestRoleName string, userRoleName string, adminRoleName string, err *model.AppError)
|
||||||
// GetTotalUsersStats is used for the DM list total
|
// GetTotalUsersStats is used for the DM list total
|
||||||
GetTotalUsersStats(viewRestrictions *model.ViewUsersRestrictions) (*model.UsersStats, *model.AppError)
|
GetTotalUsersStats(viewRestrictions *model.ViewUsersRestrictions) (*model.UsersStats, *model.AppError)
|
||||||
// HubRegister registers a connection to a hub.
|
// HubRegister registers a connection to a hub.
|
||||||
@@ -223,10 +223,10 @@ type AppIface interface {
|
|||||||
MarkChannelAsUnreadFromPost(postID string, userID string) (*model.ChannelUnreadAt, *model.AppError)
|
MarkChannelAsUnreadFromPost(postID string, userID string) (*model.ChannelUnreadAt, *model.AppError)
|
||||||
// MentionsToPublicChannels returns all the mentions to public channels,
|
// MentionsToPublicChannels returns all the mentions to public channels,
|
||||||
// linking them to their channels
|
// linking them to their channels
|
||||||
MentionsToPublicChannels(message, teamId string) model.ChannelMentionMap
|
MentionsToPublicChannels(message, teamID string) model.ChannelMentionMap
|
||||||
// MentionsToTeamMembers returns all the @ mentions found in message that
|
// MentionsToTeamMembers returns all the @ mentions found in message that
|
||||||
// belong to users in the specified team, linking them to their users
|
// belong to users in the specified team, linking them to their users
|
||||||
MentionsToTeamMembers(message, teamId string) model.UserMentionMap
|
MentionsToTeamMembers(message, teamID string) model.UserMentionMap
|
||||||
// MoveChannel method is prone to data races if someone joins to channel during the move process. However this
|
// 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.
|
// function is only exposed to sysadmins and the possibility of this edge case is relatively small.
|
||||||
MoveChannel(team *model.Team, channel *model.Channel, user *model.User) *model.AppError
|
MoveChannel(team *model.Team, channel *model.Channel, user *model.User) *model.AppError
|
||||||
@@ -289,7 +289,7 @@ type AppIface interface {
|
|||||||
// SetStatusLastActivityAt sets the last activity at for a user on the local app server and updates
|
// SetStatusLastActivityAt sets the last activity at for a user on the local app server and updates
|
||||||
// status to away if needed. Used by the WS to set status to away if an 'online' device disconnects
|
// status to away if needed. Used by the WS to set status to away if an 'online' device disconnects
|
||||||
// while an 'away' device is still connected
|
// while an 'away' device is still connected
|
||||||
SetStatusLastActivityAt(userId string, activityAt int64)
|
SetStatusLastActivityAt(userID string, activityAt int64)
|
||||||
// SyncPlugins synchronizes the plugins installed locally
|
// SyncPlugins synchronizes the plugins installed locally
|
||||||
// with the plugin bundles available in the file store.
|
// with the plugin bundles available in the file store.
|
||||||
SyncPlugins() *model.AppError
|
SyncPlugins() *model.AppError
|
||||||
@@ -324,10 +324,10 @@ type AppIface interface {
|
|||||||
// UpdateProductNotices is called periodically from a scheduled worker to fetch new notices and update the cache
|
// UpdateProductNotices is called periodically from a scheduled worker to fetch new notices and update the cache
|
||||||
UpdateProductNotices() *model.AppError
|
UpdateProductNotices() *model.AppError
|
||||||
// UpdateViewedProductNotices is called from the frontend to mark a set of notices as 'viewed' by user
|
// UpdateViewedProductNotices is called from the frontend to mark a set of notices as 'viewed' by user
|
||||||
UpdateViewedProductNotices(userId string, noticeIds []string) *model.AppError
|
UpdateViewedProductNotices(userID string, noticeIds []string) *model.AppError
|
||||||
// UpdateViewedProductNoticesForNewUser is called when new user is created to mark all current notices for this
|
// UpdateViewedProductNoticesForNewUser is called when new user is created to mark all current notices for this
|
||||||
// user as viewed in order to avoid showing them imminently on first login
|
// user as viewed in order to avoid showing them imminently on first login
|
||||||
UpdateViewedProductNoticesForNewUser(userId string)
|
UpdateViewedProductNoticesForNewUser(userID string)
|
||||||
// UpdateWebConnUserActivity sets the LastUserActivityAt of the hub for the given session.
|
// UpdateWebConnUserActivity sets the LastUserActivityAt of the hub for the given session.
|
||||||
UpdateWebConnUserActivity(session model.Session, activityAt int64)
|
UpdateWebConnUserActivity(session model.Session, activityAt int64)
|
||||||
// UploadFile uploads a single file in form of a completely constructed byte array for a channel.
|
// UploadFile uploads a single file in form of a completely constructed byte array for a channel.
|
||||||
@@ -341,20 +341,20 @@ type AppIface interface {
|
|||||||
// Uploads some files to the given team and channel as the given user. files and filenames should have
|
// Uploads some files to the given team and channel as the given user. files and filenames should have
|
||||||
// the same length. clientIds should either not be provided or have the same length as files and filenames.
|
// the same length. clientIds should either not be provided or have the same length as files and filenames.
|
||||||
// The provided files should be closed by the caller so that they are not leaked.
|
// The provided files should be closed by the caller so that they are not leaked.
|
||||||
UploadFiles(teamId string, channelId string, userId string, files []io.ReadCloser, filenames []string, clientIds []string, now time.Time) (*model.FileUploadResponse, *model.AppError)
|
UploadFiles(teamID string, channelId string, userID string, files []io.ReadCloser, filenames []string, clientIds []string, now time.Time) (*model.FileUploadResponse, *model.AppError)
|
||||||
// UserIsInAdminRoleGroup returns true at least one of the user's groups are configured to set the members as
|
// UserIsInAdminRoleGroup returns true at least one of the user's groups are configured to set the members as
|
||||||
// admins in the given syncable.
|
// admins in the given syncable.
|
||||||
UserIsInAdminRoleGroup(userID, syncableID string, syncableType model.GroupSyncableType) (bool, *model.AppError)
|
UserIsInAdminRoleGroup(userID, syncableID string, syncableType model.GroupSyncableType) (bool, *model.AppError)
|
||||||
// VerifyPlugin checks that the given signature corresponds to the given plugin and matches a trusted certificate.
|
// VerifyPlugin checks that the given signature corresponds to the given plugin and matches a trusted certificate.
|
||||||
VerifyPlugin(plugin, signature io.ReadSeeker) *model.AppError
|
VerifyPlugin(plugin, signature io.ReadSeeker) *model.AppError
|
||||||
//GetUserStatusesByIds used by apiV4
|
//GetUserStatusesByIds used by apiV4
|
||||||
GetUserStatusesByIds(userIds []string) ([]*model.Status, *model.AppError)
|
GetUserStatusesByIds(userIDs []string) ([]*model.Status, *model.AppError)
|
||||||
AcceptLanguage() string
|
AcceptLanguage() string
|
||||||
AccountMigration() einterfaces.AccountMigrationInterface
|
AccountMigration() einterfaces.AccountMigrationInterface
|
||||||
ActivateMfa(userId, token string) *model.AppError
|
ActivateMfa(userID, token string) *model.AppError
|
||||||
AddChannelMember(userId string, channel *model.Channel, userRequestorId string, postRootId string) (*model.ChannelMember, *model.AppError)
|
AddChannelMember(userID string, channel *model.Channel, userRequestorId string, postRootId string) (*model.ChannelMember, *model.AppError)
|
||||||
AddConfigListener(listener func(*model.Config, *model.Config)) string
|
AddConfigListener(listener func(*model.Config, *model.Config)) string
|
||||||
AddDirectChannels(teamId string, user *model.User) *model.AppError
|
AddDirectChannels(teamID string, user *model.User) *model.AppError
|
||||||
AddLdapPrivateCertificate(fileData *multipart.FileHeader) *model.AppError
|
AddLdapPrivateCertificate(fileData *multipart.FileHeader) *model.AppError
|
||||||
AddLdapPublicCertificate(fileData *multipart.FileHeader) *model.AppError
|
AddLdapPublicCertificate(fileData *multipart.FileHeader) *model.AppError
|
||||||
AddSamlIdpCertificate(fileData *multipart.FileHeader) *model.AppError
|
AddSamlIdpCertificate(fileData *multipart.FileHeader) *model.AppError
|
||||||
@@ -363,27 +363,27 @@ type AppIface interface {
|
|||||||
AddSessionToCache(session *model.Session)
|
AddSessionToCache(session *model.Session)
|
||||||
AddStatusCache(status *model.Status)
|
AddStatusCache(status *model.Status)
|
||||||
AddStatusCacheSkipClusterSend(status *model.Status)
|
AddStatusCacheSkipClusterSend(status *model.Status)
|
||||||
AddTeamMember(teamId, userId string) (*model.TeamMember, *model.AppError)
|
AddTeamMember(teamID, userID string) (*model.TeamMember, *model.AppError)
|
||||||
AddTeamMemberByInviteId(inviteId, userId string) (*model.TeamMember, *model.AppError)
|
AddTeamMemberByInviteId(inviteId, userID string) (*model.TeamMember, *model.AppError)
|
||||||
AddTeamMemberByToken(userId, tokenId string) (*model.TeamMember, *model.AppError)
|
AddTeamMemberByToken(userID, tokenID string) (*model.TeamMember, *model.AppError)
|
||||||
AddTeamMembers(teamId string, userIds []string, userRequestorId string, graceful bool) ([]*model.TeamMemberWithError, *model.AppError)
|
AddTeamMembers(teamID string, userIDs []string, userRequestorId string, graceful bool) ([]*model.TeamMemberWithError, *model.AppError)
|
||||||
AddUserToChannel(user *model.User, channel *model.Channel) (*model.ChannelMember, *model.AppError)
|
AddUserToChannel(user *model.User, channel *model.Channel) (*model.ChannelMember, *model.AppError)
|
||||||
AddUserToTeam(teamId string, userId string, userRequestorId string) (*model.Team, *model.AppError)
|
AddUserToTeam(teamID string, userID string, userRequestorId string) (*model.Team, *model.AppError)
|
||||||
AddUserToTeamByInviteId(inviteId string, userId string) (*model.Team, *model.AppError)
|
AddUserToTeamByInviteId(inviteId string, userID string) (*model.Team, *model.AppError)
|
||||||
AddUserToTeamByTeamId(teamId string, user *model.User) *model.AppError
|
AddUserToTeamByTeamId(teamID string, user *model.User) *model.AppError
|
||||||
AddUserToTeamByToken(userId string, tokenId string) (*model.Team, *model.AppError)
|
AddUserToTeamByToken(userID string, tokenID string) (*model.Team, *model.AppError)
|
||||||
AdjustImage(file io.Reader) (*bytes.Buffer, *model.AppError)
|
AdjustImage(file io.Reader) (*bytes.Buffer, *model.AppError)
|
||||||
AllowOAuthAppAccessToUser(userId string, authRequest *model.AuthorizeRequest) (string, *model.AppError)
|
AllowOAuthAppAccessToUser(userID string, authRequest *model.AuthorizeRequest) (string, *model.AppError)
|
||||||
AppendFile(fr io.Reader, path string) (int64, *model.AppError)
|
AppendFile(fr io.Reader, path string) (int64, *model.AppError)
|
||||||
AsymmetricSigningKey() *ecdsa.PrivateKey
|
AsymmetricSigningKey() *ecdsa.PrivateKey
|
||||||
AttachDeviceId(sessionId string, deviceId string, expiresAt int64) *model.AppError
|
AttachDeviceId(sessionId string, deviceId string, expiresAt int64) *model.AppError
|
||||||
AttachSessionCookies(w http.ResponseWriter, r *http.Request)
|
AttachSessionCookies(w http.ResponseWriter, r *http.Request)
|
||||||
AuthenticateUserForLogin(id, loginId, password, mfaToken, cwsToken string, ldapOnly bool) (user *model.User, err *model.AppError)
|
AuthenticateUserForLogin(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)
|
AuthorizeOAuthUser(w http.ResponseWriter, r *http.Request, service, code, state, redirectUri string) (io.ReadCloser, string, map[string]string, *model.User, *model.AppError)
|
||||||
AutocompleteChannels(teamId string, term string) (*model.ChannelList, *model.AppError)
|
AutocompleteChannels(teamID string, term string) (*model.ChannelList, *model.AppError)
|
||||||
AutocompleteChannelsForSearch(teamId string, userId string, term string) (*model.ChannelList, *model.AppError)
|
AutocompleteChannelsForSearch(teamID string, userID string, term string) (*model.ChannelList, *model.AppError)
|
||||||
AutocompleteUsersInChannel(teamId string, channelId string, term string, options *model.UserSearchOptions) (*model.UserAutocompleteInChannel, *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)
|
AutocompleteUsersInTeam(teamID string, term string, options *model.UserSearchOptions) (*model.UserAutocompleteInTeam, *model.AppError)
|
||||||
BroadcastStatus(status *model.Status)
|
BroadcastStatus(status *model.Status)
|
||||||
BuildPostReactions(postId string) (*[]ReactionImportData, *model.AppError)
|
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(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)
|
||||||
@@ -407,8 +407,8 @@ type AppIface interface {
|
|||||||
ClearChannelMembersCache(channelID string)
|
ClearChannelMembersCache(channelID string)
|
||||||
ClearSessionCacheForAllUsers()
|
ClearSessionCacheForAllUsers()
|
||||||
ClearSessionCacheForAllUsersSkipClusterSend()
|
ClearSessionCacheForAllUsersSkipClusterSend()
|
||||||
ClearSessionCacheForUser(userId string)
|
ClearSessionCacheForUser(userID string)
|
||||||
ClearSessionCacheForUserSkipClusterSend(userId string)
|
ClearSessionCacheForUserSkipClusterSend(userID string)
|
||||||
ClearTeamMembersCache(teamID string)
|
ClearTeamMembersCache(teamID string)
|
||||||
ClientConfig() map[string]string
|
ClientConfig() map[string]string
|
||||||
ClientConfigHash() string
|
ClientConfigHash() string
|
||||||
@@ -416,72 +416,72 @@ type AppIface interface {
|
|||||||
Cluster() einterfaces.ClusterInterface
|
Cluster() einterfaces.ClusterInterface
|
||||||
CompareAndDeletePluginKey(pluginId string, key string, oldValue []byte) (bool, *model.AppError)
|
CompareAndDeletePluginKey(pluginId string, key string, oldValue []byte) (bool, *model.AppError)
|
||||||
CompareAndSetPluginKey(pluginId string, key string, oldValue, newValue []byte) (bool, *model.AppError)
|
CompareAndSetPluginKey(pluginId string, key string, oldValue, newValue []byte) (bool, *model.AppError)
|
||||||
CompleteOAuth(service string, body io.ReadCloser, teamId string, props map[string]string, tokenUser *model.User) (*model.User, *model.AppError)
|
CompleteOAuth(service string, body io.ReadCloser, teamID string, props map[string]string, tokenUser *model.User) (*model.User, *model.AppError)
|
||||||
CompleteSwitchWithOAuth(service string, userData io.Reader, email string, tokenUser *model.User) (*model.User, *model.AppError)
|
CompleteSwitchWithOAuth(service string, userData io.Reader, email string, tokenUser *model.User) (*model.User, *model.AppError)
|
||||||
Compliance() einterfaces.ComplianceInterface
|
Compliance() einterfaces.ComplianceInterface
|
||||||
Config() *model.Config
|
Config() *model.Config
|
||||||
Context() context.Context
|
Context() context.Context
|
||||||
CopyFileInfos(userId string, fileIds []string) ([]string, *model.AppError)
|
CopyFileInfos(userID string, fileIds []string) ([]string, *model.AppError)
|
||||||
CreateChannel(channel *model.Channel, addMember bool) (*model.Channel, *model.AppError)
|
CreateChannel(channel *model.Channel, addMember bool) (*model.Channel, *model.AppError)
|
||||||
CreateChannelWithUser(channel *model.Channel, userId string) (*model.Channel, *model.AppError)
|
CreateChannelWithUser(channel *model.Channel, userID string) (*model.Channel, *model.AppError)
|
||||||
CreateCommand(cmd *model.Command) (*model.Command, *model.AppError)
|
CreateCommand(cmd *model.Command) (*model.Command, *model.AppError)
|
||||||
CreateCommandWebhook(commandId string, args *model.CommandArgs) (*model.CommandWebhook, *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)
|
CreateEmoji(sessionUserId string, emoji *model.Emoji, multiPartImageData *multipart.Form) (*model.Emoji, *model.AppError)
|
||||||
CreateGroup(group *model.Group) (*model.Group, *model.AppError)
|
CreateGroup(group *model.Group) (*model.Group, *model.AppError)
|
||||||
CreateGroupChannel(userIds []string, creatorId string) (*model.Channel, *model.AppError)
|
CreateGroupChannel(userIDs []string, creatorId string) (*model.Channel, *model.AppError)
|
||||||
CreateIncomingWebhookForChannel(creatorId string, channel *model.Channel, hook *model.IncomingWebhook) (*model.IncomingWebhook, *model.AppError)
|
CreateIncomingWebhookForChannel(creatorId string, channel *model.Channel, hook *model.IncomingWebhook) (*model.IncomingWebhook, *model.AppError)
|
||||||
CreateJob(job *model.Job) (*model.Job, *model.AppError)
|
CreateJob(job *model.Job) (*model.Job, *model.AppError)
|
||||||
CreateOAuthApp(app *model.OAuthApp) (*model.OAuthApp, *model.AppError)
|
CreateOAuthApp(app *model.OAuthApp) (*model.OAuthApp, *model.AppError)
|
||||||
CreateOAuthStateToken(extra string) (*model.Token, *model.AppError)
|
CreateOAuthStateToken(extra string) (*model.Token, *model.AppError)
|
||||||
CreateOAuthUser(service string, userData io.Reader, teamId string, tokenUser *model.User) (*model.User, *model.AppError)
|
CreateOAuthUser(service string, userData io.Reader, teamID string, tokenUser *model.User) (*model.User, *model.AppError)
|
||||||
CreateOutgoingWebhook(hook *model.OutgoingWebhook) (*model.OutgoingWebhook, *model.AppError)
|
CreateOutgoingWebhook(hook *model.OutgoingWebhook) (*model.OutgoingWebhook, *model.AppError)
|
||||||
CreatePasswordRecoveryToken(userId, email string) (*model.Token, *model.AppError)
|
CreatePasswordRecoveryToken(userID, email string) (*model.Token, *model.AppError)
|
||||||
CreatePost(post *model.Post, channel *model.Channel, triggerWebhooks, setOnline bool) (savedPost *model.Post, err *model.AppError)
|
CreatePost(post *model.Post, channel *model.Channel, triggerWebhooks, setOnline bool) (savedPost *model.Post, err *model.AppError)
|
||||||
CreatePostAsUser(post *model.Post, currentSessionId string, setOnline bool) (*model.Post, *model.AppError)
|
CreatePostAsUser(post *model.Post, currentSessionId string, setOnline bool) (*model.Post, *model.AppError)
|
||||||
CreatePostMissingChannel(post *model.Post, triggerWebhooks bool) (*model.Post, *model.AppError)
|
CreatePostMissingChannel(post *model.Post, triggerWebhooks bool) (*model.Post, *model.AppError)
|
||||||
CreateRole(role *model.Role) (*model.Role, *model.AppError)
|
CreateRole(role *model.Role) (*model.Role, *model.AppError)
|
||||||
CreateScheme(scheme *model.Scheme) (*model.Scheme, *model.AppError)
|
CreateScheme(scheme *model.Scheme) (*model.Scheme, *model.AppError)
|
||||||
CreateSession(session *model.Session) (*model.Session, *model.AppError)
|
CreateSession(session *model.Session) (*model.Session, *model.AppError)
|
||||||
CreateSidebarCategory(userId, teamId string, newCategory *model.SidebarCategoryWithChannels) (*model.SidebarCategoryWithChannels, *model.AppError)
|
CreateSidebarCategory(userID, teamID string, newCategory *model.SidebarCategoryWithChannels) (*model.SidebarCategoryWithChannels, *model.AppError)
|
||||||
CreateTeam(team *model.Team) (*model.Team, *model.AppError)
|
CreateTeam(team *model.Team) (*model.Team, *model.AppError)
|
||||||
CreateTeamWithUser(team *model.Team, userId string) (*model.Team, *model.AppError)
|
CreateTeamWithUser(team *model.Team, userID string) (*model.Team, *model.AppError)
|
||||||
CreateTermsOfService(text, userId string) (*model.TermsOfService, *model.AppError)
|
CreateTermsOfService(text, userID string) (*model.TermsOfService, *model.AppError)
|
||||||
CreateUploadSession(us *model.UploadSession) (*model.UploadSession, *model.AppError)
|
CreateUploadSession(us *model.UploadSession) (*model.UploadSession, *model.AppError)
|
||||||
CreateUserAccessToken(token *model.UserAccessToken) (*model.UserAccessToken, *model.AppError)
|
CreateUserAccessToken(token *model.UserAccessToken) (*model.UserAccessToken, *model.AppError)
|
||||||
CreateUserAsAdmin(user *model.User, redirect string) (*model.User, *model.AppError)
|
CreateUserAsAdmin(user *model.User, redirect string) (*model.User, *model.AppError)
|
||||||
CreateUserFromSignup(user *model.User, redirect string) (*model.User, *model.AppError)
|
CreateUserFromSignup(user *model.User, redirect string) (*model.User, *model.AppError)
|
||||||
CreateUserWithInviteId(user *model.User, inviteId, redirect string) (*model.User, *model.AppError)
|
CreateUserWithInviteId(user *model.User, inviteId, redirect string) (*model.User, *model.AppError)
|
||||||
CreateUserWithToken(user *model.User, token *model.Token) (*model.User, *model.AppError)
|
CreateUserWithToken(user *model.User, token *model.Token) (*model.User, *model.AppError)
|
||||||
CreateWebhookPost(userId string, channel *model.Channel, text, overrideUsername, overrideIconUrl, overrideIconEmoji string, props model.StringInterface, postType string, postRootId string) (*model.Post, *model.AppError)
|
CreateWebhookPost(userID string, channel *model.Channel, text, overrideUsername, overrideIconURL, overrideIconEmoji string, props model.StringInterface, postType string, postRootId string) (*model.Post, *model.AppError)
|
||||||
DBHealthCheckDelete() error
|
DBHealthCheckDelete() error
|
||||||
DBHealthCheckWrite() error
|
DBHealthCheckWrite() error
|
||||||
DataRetention() einterfaces.DataRetentionInterface
|
DataRetention() einterfaces.DataRetentionInterface
|
||||||
DeactivateGuests() *model.AppError
|
DeactivateGuests() *model.AppError
|
||||||
DeactivateMfa(userId string) *model.AppError
|
DeactivateMfa(userID string) *model.AppError
|
||||||
DeauthorizeOAuthAppForUser(userId, appId string) *model.AppError
|
DeauthorizeOAuthAppForUser(userID, appId string) *model.AppError
|
||||||
DeleteAllExpiredPluginKeys() *model.AppError
|
DeleteAllExpiredPluginKeys() *model.AppError
|
||||||
DeleteAllKeysForPlugin(pluginId string) *model.AppError
|
DeleteAllKeysForPlugin(pluginId string) *model.AppError
|
||||||
DeleteBrandImage() *model.AppError
|
DeleteBrandImage() *model.AppError
|
||||||
DeleteChannel(channel *model.Channel, userId string) *model.AppError
|
DeleteChannel(channel *model.Channel, userID string) *model.AppError
|
||||||
DeleteCommand(commandId string) *model.AppError
|
DeleteCommand(commandID string) *model.AppError
|
||||||
DeleteEmoji(emoji *model.Emoji) *model.AppError
|
DeleteEmoji(emoji *model.Emoji) *model.AppError
|
||||||
DeleteEphemeralPost(userId, postId string)
|
DeleteEphemeralPost(userID, postId string)
|
||||||
DeleteFlaggedPosts(postId string)
|
DeleteFlaggedPosts(postId string)
|
||||||
DeleteGroup(groupID string) (*model.Group, *model.AppError)
|
DeleteGroup(groupID string) (*model.Group, *model.AppError)
|
||||||
DeleteGroupMember(groupID string, userID string) (*model.GroupMember, *model.AppError)
|
DeleteGroupMember(groupID string, userID string) (*model.GroupMember, *model.AppError)
|
||||||
DeleteGroupSyncable(groupID string, syncableID string, syncableType model.GroupSyncableType) (*model.GroupSyncable, *model.AppError)
|
DeleteGroupSyncable(groupID string, syncableID string, syncableType model.GroupSyncableType) (*model.GroupSyncable, *model.AppError)
|
||||||
DeleteIncomingWebhook(hookId string) *model.AppError
|
DeleteIncomingWebhook(hookID string) *model.AppError
|
||||||
DeleteOAuthApp(appId string) *model.AppError
|
DeleteOAuthApp(appId string) *model.AppError
|
||||||
DeleteOutgoingWebhook(hookId string) *model.AppError
|
DeleteOutgoingWebhook(hookID string) *model.AppError
|
||||||
DeletePluginKey(pluginId string, key string) *model.AppError
|
DeletePluginKey(pluginId string, key string) *model.AppError
|
||||||
DeletePost(postId, deleteByID string) (*model.Post, *model.AppError)
|
DeletePost(postId, deleteByID string) (*model.Post, *model.AppError)
|
||||||
DeletePostFiles(post *model.Post)
|
DeletePostFiles(post *model.Post)
|
||||||
DeletePreferences(userId string, preferences model.Preferences) *model.AppError
|
DeletePreferences(userID string, preferences model.Preferences) *model.AppError
|
||||||
DeleteReactionForPost(reaction *model.Reaction) *model.AppError
|
DeleteReactionForPost(reaction *model.Reaction) *model.AppError
|
||||||
DeleteScheme(schemeId string) (*model.Scheme, *model.AppError)
|
DeleteScheme(schemeId string) (*model.Scheme, *model.AppError)
|
||||||
DeleteSidebarCategory(userId, teamId, categoryId string) *model.AppError
|
DeleteSidebarCategory(userID, teamID, categoryId string) *model.AppError
|
||||||
DeleteToken(token *model.Token) *model.AppError
|
DeleteToken(token *model.Token) *model.AppError
|
||||||
DisableAutoResponder(userId string, asAdmin bool) *model.AppError
|
DisableAutoResponder(userID string, asAdmin bool) *model.AppError
|
||||||
DisableUserAccessToken(token *model.UserAccessToken) *model.AppError
|
DisableUserAccessToken(token *model.UserAccessToken) *model.AppError
|
||||||
DoAppMigrations()
|
DoAppMigrations()
|
||||||
DoCommandRequest(cmd *model.Command, p url.Values) (*model.Command, *model.CommandResponse, *model.AppError)
|
DoCommandRequest(cmd *model.Command, p url.Values) (*model.Command, *model.CommandResponse, *model.AppError)
|
||||||
@@ -489,8 +489,8 @@ type AppIface interface {
|
|||||||
DoGuestRolesCreationMigration()
|
DoGuestRolesCreationMigration()
|
||||||
DoLocalRequest(rawURL string, body []byte) (*http.Response, *model.AppError)
|
DoLocalRequest(rawURL string, body []byte) (*http.Response, *model.AppError)
|
||||||
DoLogin(w http.ResponseWriter, r *http.Request, user *model.User, deviceId string, isMobile, isOAuthUser, isSaml bool) *model.AppError
|
DoLogin(w http.ResponseWriter, r *http.Request, user *model.User, deviceId string, isMobile, isOAuthUser, isSaml bool) *model.AppError
|
||||||
DoPostAction(postId, actionId, userId, selectedOption string) (string, *model.AppError)
|
DoPostAction(postId, actionId, userID, selectedOption string) (string, *model.AppError)
|
||||||
DoPostActionWithCookie(postId, actionId, userId, selectedOption string, cookie *model.PostActionCookie) (string, *model.AppError)
|
DoPostActionWithCookie(postId, actionId, userID, selectedOption string, cookie *model.PostActionCookie) (string, *model.AppError)
|
||||||
DoSystemConsoleRolesCreationMigration()
|
DoSystemConsoleRolesCreationMigration()
|
||||||
DoUploadFile(now time.Time, rawTeamId string, rawChannelId string, rawUserId string, rawFilename string, data []byte) (*model.FileInfo, *model.AppError)
|
DoUploadFile(now time.Time, rawTeamId string, rawChannelId string, rawUserId string, rawFilename string, data []byte) (*model.FileInfo, *model.AppError)
|
||||||
DoUploadFileExpectModification(now time.Time, rawTeamId string, rawChannelId string, rawUserId string, rawFilename string, data []byte) (*model.FileInfo, []byte, *model.AppError)
|
DoUploadFileExpectModification(now time.Time, rawTeamId string, rawChannelId string, rawUserId string, rawFilename string, data []byte) (*model.FileInfo, []byte, *model.AppError)
|
||||||
@@ -507,7 +507,7 @@ type AppIface interface {
|
|||||||
FillInChannelsProps(channelList *model.ChannelList) *model.AppError
|
FillInChannelsProps(channelList *model.ChannelList) *model.AppError
|
||||||
FilterUsersByVisible(viewer *model.User, otherUsers []*model.User) ([]*model.User, *model.AppError)
|
FilterUsersByVisible(viewer *model.User, otherUsers []*model.User) ([]*model.User, *model.AppError)
|
||||||
FindTeamByName(name string) bool
|
FindTeamByName(name string) bool
|
||||||
GenerateMfaSecret(userId string) (*model.MfaSecret, *model.AppError)
|
GenerateMfaSecret(userID string) (*model.MfaSecret, *model.AppError)
|
||||||
GeneratePublicLink(siteURL string, info *model.FileInfo) string
|
GeneratePublicLink(siteURL string, info *model.FileInfo) string
|
||||||
GenerateSupportPacket() []model.FileData
|
GenerateSupportPacket() []model.FileData
|
||||||
GetActivePluginManifests() ([]*model.Manifest, *model.AppError)
|
GetActivePluginManifests() ([]*model.Manifest, *model.AppError)
|
||||||
@@ -524,43 +524,43 @@ type AppIface interface {
|
|||||||
GetAllTeams() ([]*model.Team, *model.AppError)
|
GetAllTeams() ([]*model.Team, *model.AppError)
|
||||||
GetAllTeamsPage(offset int, limit int) ([]*model.Team, *model.AppError)
|
GetAllTeamsPage(offset int, limit int) ([]*model.Team, *model.AppError)
|
||||||
GetAllTeamsPageWithCount(offset int, limit int) (*model.TeamsWithCount, *model.AppError)
|
GetAllTeamsPageWithCount(offset int, limit int) (*model.TeamsWithCount, *model.AppError)
|
||||||
GetAnalytics(name string, teamId string) (model.AnalyticsRows, *model.AppError)
|
GetAnalytics(name string, teamID string) (model.AnalyticsRows, *model.AppError)
|
||||||
GetAudits(userId string, limit int) (model.Audits, *model.AppError)
|
GetAudits(userID string, limit int) (model.Audits, *model.AppError)
|
||||||
GetAuditsPage(userId string, page int, perPage int) (model.Audits, *model.AppError)
|
GetAuditsPage(userID string, page int, perPage int) (model.Audits, *model.AppError)
|
||||||
GetAuthorizationCode(w http.ResponseWriter, r *http.Request, service string, props map[string]string, loginHint string) (string, *model.AppError)
|
GetAuthorizationCode(w http.ResponseWriter, r *http.Request, service string, props map[string]string, loginHint string) (string, *model.AppError)
|
||||||
GetAuthorizedAppsForUser(userId string, page, perPage int) ([]*model.OAuthApp, *model.AppError)
|
GetAuthorizedAppsForUser(userID string, page, perPage int) ([]*model.OAuthApp, *model.AppError)
|
||||||
GetBrandImage() ([]byte, *model.AppError)
|
GetBrandImage() ([]byte, *model.AppError)
|
||||||
GetBulkReactionsForPosts(postIds []string) (map[string][]*model.Reaction, *model.AppError)
|
GetBulkReactionsForPosts(postIds []string) (map[string][]*model.Reaction, *model.AppError)
|
||||||
GetChannel(channelId string) (*model.Channel, *model.AppError)
|
GetChannel(channelId string) (*model.Channel, *model.AppError)
|
||||||
GetChannelByName(channelName, teamId string, includeDeleted bool) (*model.Channel, *model.AppError)
|
GetChannelByName(channelName, teamID string, includeDeleted bool) (*model.Channel, *model.AppError)
|
||||||
GetChannelByNameForTeamName(channelName, teamName 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)
|
GetChannelCounts(teamID string, userID string) (*model.ChannelCounts, *model.AppError)
|
||||||
GetChannelGuestCount(channelId string) (int64, *model.AppError)
|
GetChannelGuestCount(channelId string) (int64, *model.AppError)
|
||||||
GetChannelMember(channelId string, userId string) (*model.ChannelMember, *model.AppError)
|
GetChannelMember(channelId string, userID string) (*model.ChannelMember, *model.AppError)
|
||||||
GetChannelMemberCount(channelId string) (int64, *model.AppError)
|
GetChannelMemberCount(channelId string) (int64, *model.AppError)
|
||||||
GetChannelMembersByIds(channelId string, userIds []string) (*model.ChannelMembers, *model.AppError)
|
GetChannelMembersByIds(channelId string, userIDs []string) (*model.ChannelMembers, *model.AppError)
|
||||||
GetChannelMembersForUser(teamId string, userId string) (*model.ChannelMembers, *model.AppError)
|
GetChannelMembersForUser(teamID string, userID string) (*model.ChannelMembers, *model.AppError)
|
||||||
GetChannelMembersForUserWithPagination(teamId, userId string, page, perPage int) ([]*model.ChannelMember, *model.AppError)
|
GetChannelMembersForUserWithPagination(teamID, userID string, page, perPage int) ([]*model.ChannelMember, *model.AppError)
|
||||||
GetChannelMembersPage(channelId string, page, perPage int) (*model.ChannelMembers, *model.AppError)
|
GetChannelMembersPage(channelId string, page, perPage int) (*model.ChannelMembers, *model.AppError)
|
||||||
GetChannelMembersTimezones(channelId string) ([]string, *model.AppError)
|
GetChannelMembersTimezones(channelId string) ([]string, *model.AppError)
|
||||||
GetChannelPinnedPostCount(channelId string) (int64, *model.AppError)
|
GetChannelPinnedPostCount(channelId string) (int64, *model.AppError)
|
||||||
GetChannelUnread(channelId, userId string) (*model.ChannelUnread, *model.AppError)
|
GetChannelUnread(channelId, userID string) (*model.ChannelUnread, *model.AppError)
|
||||||
GetChannelsByNames(channelNames []string, teamId string) ([]*model.Channel, *model.AppError)
|
GetChannelsByNames(channelNames []string, teamID string) ([]*model.Channel, *model.AppError)
|
||||||
GetChannelsForScheme(scheme *model.Scheme, offset int, limit int) (model.ChannelList, *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)
|
GetChannelsForSchemePage(scheme *model.Scheme, page int, perPage int) (model.ChannelList, *model.AppError)
|
||||||
GetChannelsForUser(teamId string, userId string, includeDeleted bool, lastDeleteAt int) (*model.ChannelList, *model.AppError)
|
GetChannelsForUser(teamID string, userID string, includeDeleted bool, lastDeleteAt int) (*model.ChannelList, *model.AppError)
|
||||||
GetChannelsUserNotIn(teamId string, userId string, offset int, limit int) (*model.ChannelList, *model.AppError)
|
GetChannelsUserNotIn(teamID string, userID string, offset int, limit int) (*model.ChannelList, *model.AppError)
|
||||||
GetCloudSession(token string) (*model.Session, *model.AppError)
|
GetCloudSession(token string) (*model.Session, *model.AppError)
|
||||||
GetClusterId() string
|
GetClusterId() string
|
||||||
GetClusterStatus() []*model.ClusterInfo
|
GetClusterStatus() []*model.ClusterInfo
|
||||||
GetCommand(commandId string) (*model.Command, *model.AppError)
|
GetCommand(commandID string) (*model.Command, *model.AppError)
|
||||||
GetComplianceFile(job *model.Compliance) ([]byte, *model.AppError)
|
GetComplianceFile(job *model.Compliance) ([]byte, *model.AppError)
|
||||||
GetComplianceReport(reportId string) (*model.Compliance, *model.AppError)
|
GetComplianceReport(reportId string) (*model.Compliance, *model.AppError)
|
||||||
GetComplianceReports(page, perPage int) (model.Compliances, *model.AppError)
|
GetComplianceReports(page, perPage int) (model.Compliances, *model.AppError)
|
||||||
GetCookieDomain() string
|
GetCookieDomain() string
|
||||||
GetDataRetentionPolicy() (*model.DataRetentionPolicy, *model.AppError)
|
GetDataRetentionPolicy() (*model.DataRetentionPolicy, *model.AppError)
|
||||||
GetDefaultProfileImage(user *model.User) ([]byte, *model.AppError)
|
GetDefaultProfileImage(user *model.User) ([]byte, *model.AppError)
|
||||||
GetDeletedChannels(teamId string, offset int, limit int, userId string) (*model.ChannelList, *model.AppError)
|
GetDeletedChannels(teamID string, offset int, limit int, userID string) (*model.ChannelList, *model.AppError)
|
||||||
GetEmoji(emojiId string) (*model.Emoji, *model.AppError)
|
GetEmoji(emojiId string) (*model.Emoji, *model.AppError)
|
||||||
GetEmojiByName(emojiName string) (*model.Emoji, *model.AppError)
|
GetEmojiByName(emojiName string) (*model.Emoji, *model.AppError)
|
||||||
GetEmojiImage(emojiId string) ([]byte, string, *model.AppError)
|
GetEmojiImage(emojiId string) ([]byte, string, *model.AppError)
|
||||||
@@ -571,30 +571,30 @@ type AppIface interface {
|
|||||||
GetFileInfos(page, perPage int, opt *model.GetFileInfosOptions) ([]*model.FileInfo, *model.AppError)
|
GetFileInfos(page, perPage int, opt *model.GetFileInfosOptions) ([]*model.FileInfo, *model.AppError)
|
||||||
GetFileInfosForPost(postId string, fromMaster bool) ([]*model.FileInfo, *model.AppError)
|
GetFileInfosForPost(postId string, fromMaster bool) ([]*model.FileInfo, *model.AppError)
|
||||||
GetFileInfosForPostWithMigration(postId string) ([]*model.FileInfo, *model.AppError)
|
GetFileInfosForPostWithMigration(postId string) ([]*model.FileInfo, *model.AppError)
|
||||||
GetFlaggedPosts(userId string, offset int, limit int) (*model.PostList, *model.AppError)
|
GetFlaggedPosts(userID string, offset int, limit int) (*model.PostList, *model.AppError)
|
||||||
GetFlaggedPostsForChannel(userId, channelId string, offset int, limit int) (*model.PostList, *model.AppError)
|
GetFlaggedPostsForChannel(userID, channelId string, offset int, limit int) (*model.PostList, *model.AppError)
|
||||||
GetFlaggedPostsForTeam(userId, teamId string, offset int, limit int) (*model.PostList, *model.AppError)
|
GetFlaggedPostsForTeam(userID, teamID string, offset int, limit int) (*model.PostList, *model.AppError)
|
||||||
GetGroup(id string) (*model.Group, *model.AppError)
|
GetGroup(id string) (*model.Group, *model.AppError)
|
||||||
GetGroupByName(name string, opts model.GroupSearchOpts) (*model.Group, *model.AppError)
|
GetGroupByName(name string, opts model.GroupSearchOpts) (*model.Group, *model.AppError)
|
||||||
GetGroupByRemoteID(remoteID string, groupSource model.GroupSource) (*model.Group, *model.AppError)
|
GetGroupByRemoteID(remoteID string, groupSource model.GroupSource) (*model.Group, *model.AppError)
|
||||||
GetGroupChannel(userIds []string) (*model.Channel, *model.AppError)
|
GetGroupChannel(userIDs []string) (*model.Channel, *model.AppError)
|
||||||
GetGroupMemberCount(groupID string) (int64, *model.AppError)
|
GetGroupMemberCount(groupID string) (int64, *model.AppError)
|
||||||
GetGroupMemberUsers(groupID string) ([]*model.User, *model.AppError)
|
GetGroupMemberUsers(groupID string) ([]*model.User, *model.AppError)
|
||||||
GetGroupMemberUsersPage(groupID string, page int, perPage int) ([]*model.User, int, *model.AppError)
|
GetGroupMemberUsersPage(groupID string, page int, perPage int) ([]*model.User, int, *model.AppError)
|
||||||
GetGroupSyncable(groupID string, syncableID string, syncableType model.GroupSyncableType) (*model.GroupSyncable, *model.AppError)
|
GetGroupSyncable(groupID string, syncableID string, syncableType model.GroupSyncableType) (*model.GroupSyncable, *model.AppError)
|
||||||
GetGroupSyncables(groupID string, syncableType model.GroupSyncableType) ([]*model.GroupSyncable, *model.AppError)
|
GetGroupSyncables(groupID string, syncableType model.GroupSyncableType) ([]*model.GroupSyncable, *model.AppError)
|
||||||
GetGroups(page, perPage int, opts model.GroupSearchOpts) ([]*model.Group, *model.AppError)
|
GetGroups(page, perPage int, opts model.GroupSearchOpts) ([]*model.Group, *model.AppError)
|
||||||
GetGroupsAssociatedToChannelsByTeam(teamId string, opts model.GroupSearchOpts) (map[string][]*model.GroupWithSchemeAdmin, *model.AppError)
|
GetGroupsAssociatedToChannelsByTeam(teamID string, opts model.GroupSearchOpts) (map[string][]*model.GroupWithSchemeAdmin, *model.AppError)
|
||||||
GetGroupsByChannel(channelId string, opts model.GroupSearchOpts) ([]*model.GroupWithSchemeAdmin, int, *model.AppError)
|
GetGroupsByChannel(channelId string, opts model.GroupSearchOpts) ([]*model.GroupWithSchemeAdmin, int, *model.AppError)
|
||||||
GetGroupsByIDs(groupIDs []string) ([]*model.Group, *model.AppError)
|
GetGroupsByIDs(groupIDs []string) ([]*model.Group, *model.AppError)
|
||||||
GetGroupsBySource(groupSource model.GroupSource) ([]*model.Group, *model.AppError)
|
GetGroupsBySource(groupSource model.GroupSource) ([]*model.Group, *model.AppError)
|
||||||
GetGroupsByUserId(userId string) ([]*model.Group, *model.AppError)
|
GetGroupsByUserId(userID string) ([]*model.Group, *model.AppError)
|
||||||
GetHubForUserId(userId string) *Hub
|
GetHubForUserId(userID string) *Hub
|
||||||
GetIncomingWebhook(hookId string) (*model.IncomingWebhook, *model.AppError)
|
GetIncomingWebhook(hookID string) (*model.IncomingWebhook, *model.AppError)
|
||||||
GetIncomingWebhooksForTeamPage(teamId string, page, perPage int) ([]*model.IncomingWebhook, *model.AppError)
|
GetIncomingWebhooksForTeamPage(teamID string, page, perPage int) ([]*model.IncomingWebhook, *model.AppError)
|
||||||
GetIncomingWebhooksForTeamPageByUser(teamId string, userId string, page, perPage int) ([]*model.IncomingWebhook, *model.AppError)
|
GetIncomingWebhooksForTeamPageByUser(teamID string, userID string, page, perPage int) ([]*model.IncomingWebhook, *model.AppError)
|
||||||
GetIncomingWebhooksPage(page, perPage int) ([]*model.IncomingWebhook, *model.AppError)
|
GetIncomingWebhooksPage(page, perPage int) ([]*model.IncomingWebhook, *model.AppError)
|
||||||
GetIncomingWebhooksPageByUser(userId string, page, perPage int) ([]*model.IncomingWebhook, *model.AppError)
|
GetIncomingWebhooksPageByUser(userID string, page, perPage int) ([]*model.IncomingWebhook, *model.AppError)
|
||||||
GetJob(id string) (*model.Job, *model.AppError)
|
GetJob(id string) (*model.Job, *model.AppError)
|
||||||
GetJobs(offset int, limit int) ([]*model.Job, *model.AppError)
|
GetJobs(offset int, limit int) ([]*model.Job, *model.AppError)
|
||||||
GetJobsByType(jobType string, offset int, limit int) ([]*model.Job, *model.AppError)
|
GetJobsByType(jobType string, offset int, limit int) ([]*model.Job, *model.AppError)
|
||||||
@@ -606,30 +606,30 @@ type AppIface interface {
|
|||||||
GetMemberCountsByGroup(channelID string, includeTimezones bool) ([]*model.ChannelMemberCountByGroup, *model.AppError)
|
GetMemberCountsByGroup(channelID string, includeTimezones bool) ([]*model.ChannelMemberCountByGroup, *model.AppError)
|
||||||
GetMessageForNotification(post *model.Post, translateFunc i18n.TranslateFunc) string
|
GetMessageForNotification(post *model.Post, translateFunc i18n.TranslateFunc) string
|
||||||
GetMultipleEmojiByName(names []string) ([]*model.Emoji, *model.AppError)
|
GetMultipleEmojiByName(names []string) ([]*model.Emoji, *model.AppError)
|
||||||
GetNewUsersForTeamPage(teamId string, page, perPage int, asAdmin bool, viewRestrictions *model.ViewUsersRestrictions) ([]*model.User, *model.AppError)
|
GetNewUsersForTeamPage(teamID string, page, perPage int, asAdmin bool, viewRestrictions *model.ViewUsersRestrictions) ([]*model.User, *model.AppError)
|
||||||
GetNextPostIdFromPostList(postList *model.PostList) string
|
GetNextPostIdFromPostList(postList *model.PostList) string
|
||||||
GetNotificationNameFormat(user *model.User) string
|
GetNotificationNameFormat(user *model.User) string
|
||||||
GetNumberOfChannelsOnTeam(teamId string) (int, *model.AppError)
|
GetNumberOfChannelsOnTeam(teamID string) (int, *model.AppError)
|
||||||
GetOAuthAccessTokenForCodeFlow(clientId, grantType, redirectUri, code, secret, refreshToken string) (*model.AccessResponse, *model.AppError)
|
GetOAuthAccessTokenForCodeFlow(clientId, grantType, redirectUri, code, secret, refreshToken string) (*model.AccessResponse, *model.AppError)
|
||||||
GetOAuthAccessTokenForImplicitFlow(userId string, authRequest *model.AuthorizeRequest) (*model.Session, *model.AppError)
|
GetOAuthAccessTokenForImplicitFlow(userID string, authRequest *model.AuthorizeRequest) (*model.Session, *model.AppError)
|
||||||
GetOAuthApp(appId string) (*model.OAuthApp, *model.AppError)
|
GetOAuthApp(appId string) (*model.OAuthApp, *model.AppError)
|
||||||
GetOAuthApps(page, perPage int) ([]*model.OAuthApp, *model.AppError)
|
GetOAuthApps(page, perPage int) ([]*model.OAuthApp, *model.AppError)
|
||||||
GetOAuthAppsByCreator(userId string, page, perPage int) ([]*model.OAuthApp, *model.AppError)
|
GetOAuthAppsByCreator(userID string, page, perPage int) ([]*model.OAuthApp, *model.AppError)
|
||||||
GetOAuthCodeRedirect(userId string, authRequest *model.AuthorizeRequest) (string, *model.AppError)
|
GetOAuthCodeRedirect(userID string, authRequest *model.AuthorizeRequest) (string, *model.AppError)
|
||||||
GetOAuthImplicitRedirect(userId string, authRequest *model.AuthorizeRequest) (string, *model.AppError)
|
GetOAuthImplicitRedirect(userID string, authRequest *model.AuthorizeRequest) (string, *model.AppError)
|
||||||
GetOAuthLoginEndpoint(w http.ResponseWriter, r *http.Request, service, teamId, action, redirectTo, loginHint string, isMobile bool) (string, *model.AppError)
|
GetOAuthLoginEndpoint(w http.ResponseWriter, r *http.Request, service, teamID, action, redirectTo, loginHint string, isMobile bool) (string, *model.AppError)
|
||||||
GetOAuthSignupEndpoint(w http.ResponseWriter, r *http.Request, service, teamId string) (string, *model.AppError)
|
GetOAuthSignupEndpoint(w http.ResponseWriter, r *http.Request, service, teamID string) (string, *model.AppError)
|
||||||
GetOAuthStateToken(token string) (*model.Token, *model.AppError)
|
GetOAuthStateToken(token string) (*model.Token, *model.AppError)
|
||||||
GetOpenGraphMetadata(requestURL string) *opengraph.OpenGraph
|
GetOpenGraphMetadata(requestURL string) *opengraph.OpenGraph
|
||||||
GetOrCreateDirectChannel(userId, otherUserId string) (*model.Channel, *model.AppError)
|
GetOrCreateDirectChannel(userID, otherUserId string) (*model.Channel, *model.AppError)
|
||||||
GetOutgoingWebhook(hookId string) (*model.OutgoingWebhook, *model.AppError)
|
GetOutgoingWebhook(hookID string) (*model.OutgoingWebhook, *model.AppError)
|
||||||
GetOutgoingWebhooksForChannelPageByUser(channelId string, userId string, page, perPage int) ([]*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)
|
GetOutgoingWebhooksForTeamPage(teamID string, page, perPage int) ([]*model.OutgoingWebhook, *model.AppError)
|
||||||
GetOutgoingWebhooksForTeamPageByUser(teamId string, userId string, page, perPage int) ([]*model.OutgoingWebhook, *model.AppError)
|
GetOutgoingWebhooksForTeamPageByUser(teamID string, userID string, page, perPage int) ([]*model.OutgoingWebhook, *model.AppError)
|
||||||
GetOutgoingWebhooksPage(page, perPage int) ([]*model.OutgoingWebhook, *model.AppError)
|
GetOutgoingWebhooksPage(page, perPage int) ([]*model.OutgoingWebhook, *model.AppError)
|
||||||
GetOutgoingWebhooksPageByUser(userId string, page, perPage int) ([]*model.OutgoingWebhook, *model.AppError)
|
GetOutgoingWebhooksPageByUser(userID string, page, perPage int) ([]*model.OutgoingWebhook, *model.AppError)
|
||||||
GetPasswordRecoveryToken(token string) (*model.Token, *model.AppError)
|
GetPasswordRecoveryToken(token string) (*model.Token, *model.AppError)
|
||||||
GetPermalinkPost(postId string, userId string) (*model.PostList, *model.AppError)
|
GetPermalinkPost(postId string, userID string) (*model.PostList, *model.AppError)
|
||||||
GetPinnedPosts(channelId string) (*model.PostList, *model.AppError)
|
GetPinnedPosts(channelId string) (*model.PostList, *model.AppError)
|
||||||
GetPluginKey(pluginId string, key string) ([]byte, *model.AppError)
|
GetPluginKey(pluginId string, key string) ([]byte, *model.AppError)
|
||||||
GetPlugins() (*model.PluginsResponse, *model.AppError)
|
GetPlugins() (*model.PluginsResponse, *model.AppError)
|
||||||
@@ -642,20 +642,20 @@ type AppIface interface {
|
|||||||
GetPostsAroundPost(before bool, 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)
|
GetPostsBeforePost(options model.GetPostsOptions) (*model.PostList, *model.AppError)
|
||||||
GetPostsEtag(channelId string, collapsedThreads bool) string
|
GetPostsEtag(channelId string, collapsedThreads bool) string
|
||||||
GetPostsForChannelAroundLastUnread(channelId, userId string, limitBefore, limitAfter int, skipFetchThreads bool, collapsedThreads, collapsedThreadsExtended bool) (*model.PostList, *model.AppError)
|
GetPostsForChannelAroundLastUnread(channelId, userID string, limitBefore, limitAfter int, skipFetchThreads bool, collapsedThreads, collapsedThreadsExtended bool) (*model.PostList, *model.AppError)
|
||||||
GetPostsPage(options model.GetPostsOptions) (*model.PostList, *model.AppError)
|
GetPostsPage(options model.GetPostsOptions) (*model.PostList, *model.AppError)
|
||||||
GetPostsSince(options model.GetPostsSinceOptions) (*model.PostList, *model.AppError)
|
GetPostsSince(options model.GetPostsSinceOptions) (*model.PostList, *model.AppError)
|
||||||
GetPreferenceByCategoryAndNameForUser(userId string, category string, preferenceName string) (*model.Preference, *model.AppError)
|
GetPreferenceByCategoryAndNameForUser(userID string, category string, preferenceName string) (*model.Preference, *model.AppError)
|
||||||
GetPreferenceByCategoryForUser(userId string, category string) (model.Preferences, *model.AppError)
|
GetPreferenceByCategoryForUser(userID string, category string) (model.Preferences, *model.AppError)
|
||||||
GetPreferencesForUser(userId string) (model.Preferences, *model.AppError)
|
GetPreferencesForUser(userID string) (model.Preferences, *model.AppError)
|
||||||
GetPrevPostIdFromPostList(postList *model.PostList) string
|
GetPrevPostIdFromPostList(postList *model.PostList) string
|
||||||
GetPrivateChannelsForTeam(teamId string, offset int, limit int) (*model.ChannelList, *model.AppError)
|
GetPrivateChannelsForTeam(teamID string, offset int, limit int) (*model.ChannelList, *model.AppError)
|
||||||
GetProfileImage(user *model.User) ([]byte, bool, *model.AppError)
|
GetProfileImage(user *model.User) ([]byte, bool, *model.AppError)
|
||||||
GetPublicChannelsByIdsForTeam(teamId string, channelIds []string) (*model.ChannelList, *model.AppError)
|
GetPublicChannelsByIdsForTeam(teamID string, channelIds []string) (*model.ChannelList, *model.AppError)
|
||||||
GetPublicChannelsForTeam(teamId string, offset int, limit int) (*model.ChannelList, *model.AppError)
|
GetPublicChannelsForTeam(teamID string, offset int, limit int) (*model.ChannelList, *model.AppError)
|
||||||
GetReactionsForPost(postId string) ([]*model.Reaction, *model.AppError)
|
GetReactionsForPost(postId string) ([]*model.Reaction, *model.AppError)
|
||||||
GetRecentlyActiveUsersForTeam(teamId string) (map[string]*model.User, *model.AppError)
|
GetRecentlyActiveUsersForTeam(teamID string) (map[string]*model.User, *model.AppError)
|
||||||
GetRecentlyActiveUsersForTeamPage(teamId string, page, perPage int, asAdmin bool, viewRestrictions *model.ViewUsersRestrictions) ([]*model.User, *model.AppError)
|
GetRecentlyActiveUsersForTeamPage(teamID string, page, perPage int, asAdmin bool, viewRestrictions *model.ViewUsersRestrictions) ([]*model.User, *model.AppError)
|
||||||
GetRole(id string) (*model.Role, *model.AppError)
|
GetRole(id string) (*model.Role, *model.AppError)
|
||||||
GetRoleByName(name string) (*model.Role, *model.AppError)
|
GetRoleByName(name string) (*model.Role, *model.AppError)
|
||||||
GetRolesByNames(names []string) ([]*model.Role, *model.AppError)
|
GetRolesByNames(names []string) ([]*model.Role, *model.AppError)
|
||||||
@@ -665,55 +665,55 @@ type AppIface interface {
|
|||||||
GetSanitizeOptions(asAdmin bool) map[string]bool
|
GetSanitizeOptions(asAdmin bool) map[string]bool
|
||||||
GetScheme(id string) (*model.Scheme, *model.AppError)
|
GetScheme(id string) (*model.Scheme, *model.AppError)
|
||||||
GetSchemeByName(name string) (*model.Scheme, *model.AppError)
|
GetSchemeByName(name string) (*model.Scheme, *model.AppError)
|
||||||
GetSchemeRolesForTeam(teamId string) (string, string, string, *model.AppError)
|
GetSchemeRolesForTeam(teamID string) (string, string, string, *model.AppError)
|
||||||
GetSchemes(scope string, offset int, limit int) ([]*model.Scheme, *model.AppError)
|
GetSchemes(scope string, offset int, limit int) ([]*model.Scheme, *model.AppError)
|
||||||
GetSchemesPage(scope string, page int, perPage int) ([]*model.Scheme, *model.AppError)
|
GetSchemesPage(scope string, page int, perPage int) ([]*model.Scheme, *model.AppError)
|
||||||
GetSession(token string) (*model.Session, *model.AppError)
|
GetSession(token string) (*model.Session, *model.AppError)
|
||||||
GetSessionById(sessionId string) (*model.Session, *model.AppError)
|
GetSessionById(sessionId string) (*model.Session, *model.AppError)
|
||||||
GetSessions(userId string) ([]*model.Session, *model.AppError)
|
GetSessions(userID string) ([]*model.Session, *model.AppError)
|
||||||
GetSidebarCategories(userId, teamId string) (*model.OrderedSidebarCategories, *model.AppError)
|
GetSidebarCategories(userID, teamID string) (*model.OrderedSidebarCategories, *model.AppError)
|
||||||
GetSidebarCategory(categoryId string) (*model.SidebarCategoryWithChannels, *model.AppError)
|
GetSidebarCategory(categoryId string) (*model.SidebarCategoryWithChannels, *model.AppError)
|
||||||
GetSidebarCategoryOrder(userId, teamId string) ([]string, *model.AppError)
|
GetSidebarCategoryOrder(userID, teamID string) ([]string, *model.AppError)
|
||||||
GetSinglePost(postId string) (*model.Post, *model.AppError)
|
GetSinglePost(postId string) (*model.Post, *model.AppError)
|
||||||
GetSiteURL() string
|
GetSiteURL() string
|
||||||
GetStatus(userId string) (*model.Status, *model.AppError)
|
GetStatus(userID string) (*model.Status, *model.AppError)
|
||||||
GetStatusFromCache(userId string) *model.Status
|
GetStatusFromCache(userID string) *model.Status
|
||||||
GetStatusesByIds(userIds []string) (map[string]interface{}, *model.AppError)
|
GetStatusesByIds(userIDs []string) (map[string]interface{}, *model.AppError)
|
||||||
GetT() goi18n.TranslateFunc
|
GetT() goi18n.TranslateFunc
|
||||||
GetTeam(teamId string) (*model.Team, *model.AppError)
|
GetTeam(teamID string) (*model.Team, *model.AppError)
|
||||||
GetTeamByInviteId(inviteId string) (*model.Team, *model.AppError)
|
GetTeamByInviteId(inviteId string) (*model.Team, *model.AppError)
|
||||||
GetTeamByName(name string) (*model.Team, *model.AppError)
|
GetTeamByName(name string) (*model.Team, *model.AppError)
|
||||||
GetTeamIcon(team *model.Team) ([]byte, *model.AppError)
|
GetTeamIcon(team *model.Team) ([]byte, *model.AppError)
|
||||||
GetTeamIdFromQuery(query url.Values) (string, *model.AppError)
|
GetTeamIdFromQuery(query url.Values) (string, *model.AppError)
|
||||||
GetTeamMember(teamId, userId string) (*model.TeamMember, *model.AppError)
|
GetTeamMember(teamID, userID string) (*model.TeamMember, *model.AppError)
|
||||||
GetTeamMembers(teamId string, offset int, limit int, teamMembersGetOptions *model.TeamMembersGetOptions) ([]*model.TeamMember, *model.AppError)
|
GetTeamMembers(teamID string, offset int, limit int, teamMembersGetOptions *model.TeamMembersGetOptions) ([]*model.TeamMember, *model.AppError)
|
||||||
GetTeamMembersByIds(teamId string, userIds []string, restrictions *model.ViewUsersRestrictions) ([]*model.TeamMember, *model.AppError)
|
GetTeamMembersByIds(teamID string, userIDs []string, restrictions *model.ViewUsersRestrictions) ([]*model.TeamMember, *model.AppError)
|
||||||
GetTeamMembersForUser(userId string) ([]*model.TeamMember, *model.AppError)
|
GetTeamMembersForUser(userID string) ([]*model.TeamMember, *model.AppError)
|
||||||
GetTeamMembersForUserWithPagination(userId string, page, perPage int) ([]*model.TeamMember, *model.AppError)
|
GetTeamMembersForUserWithPagination(userID string, page, perPage int) ([]*model.TeamMember, *model.AppError)
|
||||||
GetTeamStats(teamId string, restrictions *model.ViewUsersRestrictions) (*model.TeamStats, *model.AppError)
|
GetTeamStats(teamID string, restrictions *model.ViewUsersRestrictions) (*model.TeamStats, *model.AppError)
|
||||||
GetTeamUnread(teamId, userId string) (*model.TeamUnread, *model.AppError)
|
GetTeamUnread(teamID, userID string) (*model.TeamUnread, *model.AppError)
|
||||||
GetTeamsForScheme(scheme *model.Scheme, offset int, limit int) ([]*model.Team, *model.AppError)
|
GetTeamsForScheme(scheme *model.Scheme, offset int, limit int) ([]*model.Team, *model.AppError)
|
||||||
GetTeamsForSchemePage(scheme *model.Scheme, page int, perPage int) ([]*model.Team, *model.AppError)
|
GetTeamsForSchemePage(scheme *model.Scheme, page int, perPage int) ([]*model.Team, *model.AppError)
|
||||||
GetTeamsForUser(userId string) ([]*model.Team, *model.AppError)
|
GetTeamsForUser(userID string) ([]*model.Team, *model.AppError)
|
||||||
GetTeamsUnreadForUser(excludeTeamId string, userId string) ([]*model.TeamUnread, *model.AppError)
|
GetTeamsUnreadForUser(excludeTeamId string, userID string) ([]*model.TeamUnread, *model.AppError)
|
||||||
GetTermsOfService(id string) (*model.TermsOfService, *model.AppError)
|
GetTermsOfService(id string) (*model.TermsOfService, *model.AppError)
|
||||||
GetThreadForUser(userId, teamId, threadId string, extended bool) (*model.ThreadResponse, *model.AppError)
|
GetThreadForUser(userID, teamID, threadId string, extended bool) (*model.ThreadResponse, *model.AppError)
|
||||||
GetThreadMembershipsForUser(userId, teamId string) ([]*model.ThreadMembership, error)
|
GetThreadMembershipsForUser(userID, teamID string) ([]*model.ThreadMembership, error)
|
||||||
GetThreadsForUser(userId, teamId string, options model.GetUserThreadsOpts) (*model.Threads, *model.AppError)
|
GetThreadsForUser(userID, teamID string, options model.GetUserThreadsOpts) (*model.Threads, *model.AppError)
|
||||||
GetUploadSession(uploadId string) (*model.UploadSession, *model.AppError)
|
GetUploadSession(uploadId string) (*model.UploadSession, *model.AppError)
|
||||||
GetUploadSessionsForUser(userId string) ([]*model.UploadSession, *model.AppError)
|
GetUploadSessionsForUser(userID string) ([]*model.UploadSession, *model.AppError)
|
||||||
GetUser(userId string) (*model.User, *model.AppError)
|
GetUser(userID string) (*model.User, *model.AppError)
|
||||||
GetUserAccessToken(tokenId string, sanitize bool) (*model.UserAccessToken, *model.AppError)
|
GetUserAccessToken(tokenID string, sanitize bool) (*model.UserAccessToken, *model.AppError)
|
||||||
GetUserAccessTokens(page, perPage int) ([]*model.UserAccessToken, *model.AppError)
|
GetUserAccessTokens(page, perPage int) ([]*model.UserAccessToken, *model.AppError)
|
||||||
GetUserAccessTokensForUser(userId string, page, perPage int) ([]*model.UserAccessToken, *model.AppError)
|
GetUserAccessTokensForUser(userID string, page, perPage int) ([]*model.UserAccessToken, *model.AppError)
|
||||||
GetUserByAuth(authData *string, authService string) (*model.User, *model.AppError)
|
GetUserByAuth(authData *string, authService string) (*model.User, *model.AppError)
|
||||||
GetUserByEmail(email string) (*model.User, *model.AppError)
|
GetUserByEmail(email string) (*model.User, *model.AppError)
|
||||||
GetUserByUsername(username string) (*model.User, *model.AppError)
|
GetUserByUsername(username string) (*model.User, *model.AppError)
|
||||||
GetUserForLogin(id, loginId string) (*model.User, *model.AppError)
|
GetUserForLogin(id, loginId string) (*model.User, *model.AppError)
|
||||||
GetUserTermsOfService(userId string) (*model.UserTermsOfService, *model.AppError)
|
GetUserTermsOfService(userID string) (*model.UserTermsOfService, *model.AppError)
|
||||||
GetUsers(options *model.UserGetOptions) ([]*model.User, *model.AppError)
|
GetUsers(options *model.UserGetOptions) ([]*model.User, *model.AppError)
|
||||||
GetUsersByGroupChannelIds(channelIds []string, asAdmin bool) (map[string][]*model.User, *model.AppError)
|
GetUsersByGroupChannelIds(channelIds []string, asAdmin bool) (map[string][]*model.User, *model.AppError)
|
||||||
GetUsersByIds(userIds []string, options *store.UserGetByIdsOpts) ([]*model.User, *model.AppError)
|
GetUsersByIds(userIDs []string, options *store.UserGetByIdsOpts) ([]*model.User, *model.AppError)
|
||||||
GetUsersByUsernames(usernames []string, asAdmin bool, viewRestrictions *model.ViewUsersRestrictions) ([]*model.User, *model.AppError)
|
GetUsersByUsernames(usernames []string, asAdmin bool, viewRestrictions *model.ViewUsersRestrictions) ([]*model.User, *model.AppError)
|
||||||
GetUsersEtag(restrictionsHash string) string
|
GetUsersEtag(restrictionsHash string) string
|
||||||
GetUsersInChannel(options *model.UserGetOptions) ([]*model.User, *model.AppError)
|
GetUsersInChannel(options *model.UserGetOptions) ([]*model.User, *model.AppError)
|
||||||
@@ -722,33 +722,33 @@ type AppIface interface {
|
|||||||
GetUsersInChannelPage(options *model.UserGetOptions, asAdmin bool) ([]*model.User, *model.AppError)
|
GetUsersInChannelPage(options *model.UserGetOptions, asAdmin bool) ([]*model.User, *model.AppError)
|
||||||
GetUsersInChannelPageByStatus(options *model.UserGetOptions, asAdmin bool) ([]*model.User, *model.AppError)
|
GetUsersInChannelPageByStatus(options *model.UserGetOptions, asAdmin bool) ([]*model.User, *model.AppError)
|
||||||
GetUsersInTeam(options *model.UserGetOptions) ([]*model.User, *model.AppError)
|
GetUsersInTeam(options *model.UserGetOptions) ([]*model.User, *model.AppError)
|
||||||
GetUsersInTeamEtag(teamId string, restrictionsHash string) string
|
GetUsersInTeamEtag(teamID string, restrictionsHash string) string
|
||||||
GetUsersInTeamPage(options *model.UserGetOptions, asAdmin bool) ([]*model.User, *model.AppError)
|
GetUsersInTeamPage(options *model.UserGetOptions, asAdmin bool) ([]*model.User, *model.AppError)
|
||||||
GetUsersNotInChannel(teamId string, channelId string, groupConstrained bool, offset int, limit int, viewRestrictions *model.ViewUsersRestrictions) ([]*model.User, *model.AppError)
|
GetUsersNotInChannel(teamID string, channelId string, groupConstrained bool, offset int, limit int, viewRestrictions *model.ViewUsersRestrictions) ([]*model.User, *model.AppError)
|
||||||
GetUsersNotInChannelMap(teamId string, channelId string, groupConstrained bool, offset int, limit int, asAdmin bool, viewRestrictions *model.ViewUsersRestrictions) (map[string]*model.User, *model.AppError)
|
GetUsersNotInChannelMap(teamID string, channelId string, groupConstrained bool, offset int, limit int, asAdmin bool, viewRestrictions *model.ViewUsersRestrictions) (map[string]*model.User, *model.AppError)
|
||||||
GetUsersNotInChannelPage(teamId string, channelId string, groupConstrained bool, page int, perPage int, asAdmin bool, viewRestrictions *model.ViewUsersRestrictions) ([]*model.User, *model.AppError)
|
GetUsersNotInChannelPage(teamID string, channelId string, groupConstrained bool, page int, perPage int, asAdmin bool, viewRestrictions *model.ViewUsersRestrictions) ([]*model.User, *model.AppError)
|
||||||
GetUsersNotInTeam(teamId string, groupConstrained bool, offset int, limit int, viewRestrictions *model.ViewUsersRestrictions) ([]*model.User, *model.AppError)
|
GetUsersNotInTeam(teamID string, groupConstrained bool, offset int, limit int, viewRestrictions *model.ViewUsersRestrictions) ([]*model.User, *model.AppError)
|
||||||
GetUsersNotInTeamEtag(teamId string, restrictionsHash string) string
|
GetUsersNotInTeamEtag(teamID string, restrictionsHash string) string
|
||||||
GetUsersNotInTeamPage(teamId string, groupConstrained bool, page int, perPage int, asAdmin bool, viewRestrictions *model.ViewUsersRestrictions) ([]*model.User, *model.AppError)
|
GetUsersNotInTeamPage(teamID string, groupConstrained bool, page int, perPage int, asAdmin bool, viewRestrictions *model.ViewUsersRestrictions) ([]*model.User, *model.AppError)
|
||||||
GetUsersPage(options *model.UserGetOptions, asAdmin bool) ([]*model.User, *model.AppError)
|
GetUsersPage(options *model.UserGetOptions, asAdmin bool) ([]*model.User, *model.AppError)
|
||||||
GetUsersWithoutTeam(options *model.UserGetOptions) ([]*model.User, *model.AppError)
|
GetUsersWithoutTeam(options *model.UserGetOptions) ([]*model.User, *model.AppError)
|
||||||
GetUsersWithoutTeamPage(options *model.UserGetOptions, asAdmin bool) ([]*model.User, *model.AppError)
|
GetUsersWithoutTeamPage(options *model.UserGetOptions, asAdmin bool) ([]*model.User, *model.AppError)
|
||||||
GetVerifyEmailToken(token string) (*model.Token, *model.AppError)
|
GetVerifyEmailToken(token string) (*model.Token, *model.AppError)
|
||||||
GetViewUsersRestrictions(userId string) (*model.ViewUsersRestrictions, *model.AppError)
|
GetViewUsersRestrictions(userID string) (*model.ViewUsersRestrictions, *model.AppError)
|
||||||
GetWarnMetricsStatus() (map[string]*model.WarnMetricStatus, *model.AppError)
|
GetWarnMetricsStatus() (map[string]*model.WarnMetricStatus, *model.AppError)
|
||||||
HTTPService() httpservice.HTTPService
|
HTTPService() httpservice.HTTPService
|
||||||
Handle404(w http.ResponseWriter, r *http.Request)
|
Handle404(w http.ResponseWriter, r *http.Request)
|
||||||
HandleCommandResponse(command *model.Command, args *model.CommandArgs, response *model.CommandResponse, builtIn bool) (*model.CommandResponse, *model.AppError)
|
HandleCommandResponse(command *model.Command, args *model.CommandArgs, response *model.CommandResponse, builtIn bool) (*model.CommandResponse, *model.AppError)
|
||||||
HandleCommandResponsePost(command *model.Command, args *model.CommandArgs, response *model.CommandResponse, builtIn bool) (*model.Post, *model.AppError)
|
HandleCommandResponsePost(command *model.Command, args *model.CommandArgs, response *model.CommandResponse, builtIn bool) (*model.Post, *model.AppError)
|
||||||
HandleCommandWebhook(hookId string, response *model.CommandResponse) *model.AppError
|
HandleCommandWebhook(hookID string, response *model.CommandResponse) *model.AppError
|
||||||
HandleImages(previewPathList []string, thumbnailPathList []string, fileData [][]byte)
|
HandleImages(previewPathList []string, thumbnailPathList []string, fileData [][]byte)
|
||||||
HandleIncomingWebhook(hookId string, req *model.IncomingWebhookRequest) *model.AppError
|
HandleIncomingWebhook(hookID string, req *model.IncomingWebhookRequest) *model.AppError
|
||||||
HandleMessageExportConfig(cfg *model.Config, appCfg *model.Config)
|
HandleMessageExportConfig(cfg *model.Config, appCfg *model.Config)
|
||||||
HasPermissionTo(askingUserId string, permission *model.Permission) bool
|
HasPermissionTo(askingUserId string, permission *model.Permission) bool
|
||||||
HasPermissionToChannel(askingUserId string, channelId string, permission *model.Permission) bool
|
HasPermissionToChannel(askingUserId string, channelId string, permission *model.Permission) bool
|
||||||
HasPermissionToChannelByPost(askingUserId string, postId string, permission *model.Permission) bool
|
HasPermissionToChannelByPost(askingUserId string, postId string, permission *model.Permission) bool
|
||||||
HasPermissionToTeam(askingUserId string, teamId string, permission *model.Permission) bool
|
HasPermissionToTeam(askingUserId string, teamID string, permission *model.Permission) bool
|
||||||
HasPermissionToUser(askingUserId string, userId string) bool
|
HasPermissionToUser(askingUserId string, userID string) bool
|
||||||
HubStop()
|
HubStop()
|
||||||
ImageProxy() *imageproxy.ImageProxy
|
ImageProxy() *imageproxy.ImageProxy
|
||||||
ImageProxyAdder() func(string) string
|
ImageProxyAdder() func(string) string
|
||||||
@@ -759,12 +759,12 @@ type AppIface interface {
|
|||||||
InitServer()
|
InitServer()
|
||||||
InstallPluginFromData(data model.PluginEventData)
|
InstallPluginFromData(data model.PluginEventData)
|
||||||
InvalidateAllEmailInvites() *model.AppError
|
InvalidateAllEmailInvites() *model.AppError
|
||||||
InvalidateCacheForUser(userId string)
|
InvalidateCacheForUser(userID string)
|
||||||
InvalidateWebConnSessionCacheForUser(userId string)
|
InvalidateWebConnSessionCacheForUser(userID string)
|
||||||
InviteGuestsToChannels(teamId string, guestsInvite *model.GuestsInvite, senderId string) *model.AppError
|
InviteGuestsToChannels(teamID string, guestsInvite *model.GuestsInvite, senderId string) *model.AppError
|
||||||
InviteGuestsToChannelsGracefully(teamId string, guestsInvite *model.GuestsInvite, senderId string) ([]*model.EmailInviteWithError, *model.AppError)
|
InviteGuestsToChannelsGracefully(teamID string, guestsInvite *model.GuestsInvite, senderId string) ([]*model.EmailInviteWithError, *model.AppError)
|
||||||
InviteNewUsersToTeam(emailList []string, teamId, senderId string) *model.AppError
|
InviteNewUsersToTeam(emailList []string, teamID, senderId string) *model.AppError
|
||||||
InviteNewUsersToTeamGracefully(emailList []string, teamId, senderId string) ([]*model.EmailInviteWithError, *model.AppError)
|
InviteNewUsersToTeamGracefully(emailList []string, teamID, senderId string) ([]*model.EmailInviteWithError, *model.AppError)
|
||||||
IpAddress() string
|
IpAddress() string
|
||||||
IsFirstUserAccount() bool
|
IsFirstUserAccount() bool
|
||||||
IsLeader() bool
|
IsLeader() bool
|
||||||
@@ -772,22 +772,22 @@ type AppIface interface {
|
|||||||
IsPhase2MigrationCompleted() *model.AppError
|
IsPhase2MigrationCompleted() *model.AppError
|
||||||
IsUserAway(lastActivityAt int64) bool
|
IsUserAway(lastActivityAt int64) bool
|
||||||
IsUserSignUpAllowed() *model.AppError
|
IsUserSignUpAllowed() *model.AppError
|
||||||
JoinChannel(channel *model.Channel, userId string) *model.AppError
|
JoinChannel(channel *model.Channel, userID string) *model.AppError
|
||||||
JoinDefaultChannels(teamId string, user *model.User, shouldBeAdmin bool, userRequestorId string) *model.AppError
|
JoinDefaultChannels(teamID string, user *model.User, shouldBeAdmin bool, userRequestorId string) *model.AppError
|
||||||
JoinUserToTeam(team *model.Team, user *model.User, userRequestorId string) *model.AppError
|
JoinUserToTeam(team *model.Team, user *model.User, userRequestorId string) *model.AppError
|
||||||
Ldap() einterfaces.LdapInterface
|
Ldap() einterfaces.LdapInterface
|
||||||
LeaveChannel(channelId string, userId string) *model.AppError
|
LeaveChannel(channelId string, userID string) *model.AppError
|
||||||
LeaveTeam(team *model.Team, user *model.User, requestorId string) *model.AppError
|
LeaveTeam(team *model.Team, user *model.User, requestorId string) *model.AppError
|
||||||
LimitedClientConfig() map[string]string
|
LimitedClientConfig() map[string]string
|
||||||
ListAllCommands(teamId string, T goi18n.TranslateFunc) ([]*model.Command, *model.AppError)
|
ListAllCommands(teamID string, T goi18n.TranslateFunc) ([]*model.Command, *model.AppError)
|
||||||
ListDirectory(path string) ([]string, *model.AppError)
|
ListDirectory(path string) ([]string, *model.AppError)
|
||||||
ListImports() ([]string, *model.AppError)
|
ListImports() ([]string, *model.AppError)
|
||||||
ListPluginKeys(pluginId string, page, perPage int) ([]string, *model.AppError)
|
ListPluginKeys(pluginId string, page, perPage int) ([]string, *model.AppError)
|
||||||
ListTeamCommands(teamId string) ([]*model.Command, *model.AppError)
|
ListTeamCommands(teamID string) ([]*model.Command, *model.AppError)
|
||||||
Log() *mlog.Logger
|
Log() *mlog.Logger
|
||||||
LoginByOAuth(service string, userData io.Reader, teamId string, tokenUser *model.User) (*model.User, *model.AppError)
|
LoginByOAuth(service string, userData io.Reader, teamID string, tokenUser *model.User) (*model.User, *model.AppError)
|
||||||
MakePermissionError(permissions []*model.Permission) *model.AppError
|
MakePermissionError(permissions []*model.Permission) *model.AppError
|
||||||
MarkChannelsAsViewed(channelIds []string, userId string, currentSessionId string) (map[string]int64, *model.AppError)
|
MarkChannelsAsViewed(channelIds []string, userID string, currentSessionId string) (map[string]int64, *model.AppError)
|
||||||
MaxPostSize() int
|
MaxPostSize() int
|
||||||
MessageExport() einterfaces.MessageExportInterface
|
MessageExport() einterfaces.MessageExportInterface
|
||||||
Metrics() einterfaces.MetricsInterface
|
Metrics() einterfaces.MetricsInterface
|
||||||
@@ -801,26 +801,26 @@ type AppIface interface {
|
|||||||
NotifyAndSetWarnMetricAck(warnMetricId string, sender *model.User, forceAck bool, isBot bool) *model.AppError
|
NotifyAndSetWarnMetricAck(warnMetricId string, sender *model.User, forceAck bool, isBot bool) *model.AppError
|
||||||
OpenInteractiveDialog(request model.OpenDialogRequest) *model.AppError
|
OpenInteractiveDialog(request model.OpenDialogRequest) *model.AppError
|
||||||
OriginChecker() func(*http.Request) bool
|
OriginChecker() func(*http.Request) bool
|
||||||
PatchChannel(channel *model.Channel, patch *model.ChannelPatch, userId string) (*model.Channel, *model.AppError)
|
PatchChannel(channel *model.Channel, patch *model.ChannelPatch, userID string) (*model.Channel, *model.AppError)
|
||||||
PatchPost(postId string, patch *model.PostPatch) (*model.Post, *model.AppError)
|
PatchPost(postId string, patch *model.PostPatch) (*model.Post, *model.AppError)
|
||||||
PatchRole(role *model.Role, patch *model.RolePatch) (*model.Role, *model.AppError)
|
PatchRole(role *model.Role, patch *model.RolePatch) (*model.Role, *model.AppError)
|
||||||
PatchScheme(scheme *model.Scheme, patch *model.SchemePatch) (*model.Scheme, *model.AppError)
|
PatchScheme(scheme *model.Scheme, patch *model.SchemePatch) (*model.Scheme, *model.AppError)
|
||||||
PatchTeam(teamId string, patch *model.TeamPatch) (*model.Team, *model.AppError)
|
PatchTeam(teamID string, patch *model.TeamPatch) (*model.Team, *model.AppError)
|
||||||
PatchUser(userId string, patch *model.UserPatch, asAdmin bool) (*model.User, *model.AppError)
|
PatchUser(userID string, patch *model.UserPatch, asAdmin bool) (*model.User, *model.AppError)
|
||||||
Path() string
|
Path() string
|
||||||
PermanentDeleteAllUsers() *model.AppError
|
PermanentDeleteAllUsers() *model.AppError
|
||||||
PermanentDeleteChannel(channel *model.Channel) *model.AppError
|
PermanentDeleteChannel(channel *model.Channel) *model.AppError
|
||||||
PermanentDeleteTeam(team *model.Team) *model.AppError
|
PermanentDeleteTeam(team *model.Team) *model.AppError
|
||||||
PermanentDeleteTeamId(teamId string) *model.AppError
|
PermanentDeleteTeamId(teamID string) *model.AppError
|
||||||
PermanentDeleteUser(user *model.User) *model.AppError
|
PermanentDeleteUser(user *model.User) *model.AppError
|
||||||
PluginCommandsForTeam(teamId string) []*model.Command
|
PluginCommandsForTeam(teamID string) []*model.Command
|
||||||
PluginContext() *plugin.Context
|
PluginContext() *plugin.Context
|
||||||
PostActionCookieSecret() []byte
|
PostActionCookieSecret() []byte
|
||||||
PostAddToChannelMessage(user *model.User, addedUser *model.User, channel *model.Channel, postRootId string) *model.AppError
|
PostAddToChannelMessage(user *model.User, addedUser *model.User, channel *model.Channel, postRootId string) *model.AppError
|
||||||
PostPatchWithProxyRemovedFromImageURLs(patch *model.PostPatch) *model.PostPatch
|
PostPatchWithProxyRemovedFromImageURLs(patch *model.PostPatch) *model.PostPatch
|
||||||
PostUpdateChannelDisplayNameMessage(userId string, channel *model.Channel, oldChannelDisplayName, newChannelDisplayName string) *model.AppError
|
PostUpdateChannelDisplayNameMessage(userID string, channel *model.Channel, oldChannelDisplayName, newChannelDisplayName string) *model.AppError
|
||||||
PostUpdateChannelHeaderMessage(userId string, channel *model.Channel, oldChannelHeader, newChannelHeader string) *model.AppError
|
PostUpdateChannelHeaderMessage(userID string, channel *model.Channel, oldChannelHeader, newChannelHeader string) *model.AppError
|
||||||
PostUpdateChannelPurposeMessage(userId string, channel *model.Channel, oldChannelPurpose string, newChannelPurpose string) *model.AppError
|
PostUpdateChannelPurposeMessage(userID string, channel *model.Channel, oldChannelPurpose string, newChannelPurpose string) *model.AppError
|
||||||
PostWithProxyAddedToImageURLs(post *model.Post) *model.Post
|
PostWithProxyAddedToImageURLs(post *model.Post) *model.Post
|
||||||
PostWithProxyRemovedFromImageURLs(post *model.Post) *model.Post
|
PostWithProxyRemovedFromImageURLs(post *model.Post) *model.Post
|
||||||
PreparePostForClient(originalPost *model.Post, isNewPost bool, isEditPost bool) *model.Post
|
PreparePostForClient(originalPost *model.Post, isNewPost bool, isEditPost bool) *model.Post
|
||||||
@@ -828,7 +828,7 @@ type AppIface interface {
|
|||||||
ProcessSlackText(text string) string
|
ProcessSlackText(text string) string
|
||||||
Publish(message *model.WebSocketEvent)
|
Publish(message *model.WebSocketEvent)
|
||||||
PublishSkipClusterSend(message *model.WebSocketEvent)
|
PublishSkipClusterSend(message *model.WebSocketEvent)
|
||||||
PublishUserTyping(userId, channelId, parentId string) *model.AppError
|
PublishUserTyping(userID, channelId, parentId string) *model.AppError
|
||||||
PurgeBleveIndexes() *model.AppError
|
PurgeBleveIndexes() *model.AppError
|
||||||
PurgeElasticsearchIndexes() *model.AppError
|
PurgeElasticsearchIndexes() *model.AppError
|
||||||
ReadFile(path string) ([]byte, *model.AppError)
|
ReadFile(path string) ([]byte, *model.AppError)
|
||||||
@@ -836,7 +836,7 @@ type AppIface interface {
|
|||||||
RegenCommandToken(cmd *model.Command) (*model.Command, *model.AppError)
|
RegenCommandToken(cmd *model.Command) (*model.Command, *model.AppError)
|
||||||
RegenOutgoingWebhookToken(hook *model.OutgoingWebhook) (*model.OutgoingWebhook, *model.AppError)
|
RegenOutgoingWebhookToken(hook *model.OutgoingWebhook) (*model.OutgoingWebhook, *model.AppError)
|
||||||
RegenerateOAuthAppSecret(app *model.OAuthApp) (*model.OAuthApp, *model.AppError)
|
RegenerateOAuthAppSecret(app *model.OAuthApp) (*model.OAuthApp, *model.AppError)
|
||||||
RegenerateTeamInviteId(teamId string) (*model.Team, *model.AppError)
|
RegenerateTeamInviteId(teamID string) (*model.Team, *model.AppError)
|
||||||
RegisterPluginCommand(pluginId string, command *model.Command) error
|
RegisterPluginCommand(pluginId string, command *model.Command) error
|
||||||
ReloadConfig() error
|
ReloadConfig() error
|
||||||
RemoveAllDeactivatedMembersFromChannel(channel *model.Channel) *model.AppError
|
RemoveAllDeactivatedMembersFromChannel(channel *model.Channel) *model.AppError
|
||||||
@@ -850,24 +850,24 @@ type AppIface interface {
|
|||||||
RemoveSamlIdpCertificate() *model.AppError
|
RemoveSamlIdpCertificate() *model.AppError
|
||||||
RemoveSamlPrivateCertificate() *model.AppError
|
RemoveSamlPrivateCertificate() *model.AppError
|
||||||
RemoveSamlPublicCertificate() *model.AppError
|
RemoveSamlPublicCertificate() *model.AppError
|
||||||
RemoveTeamIcon(teamId string) *model.AppError
|
RemoveTeamIcon(teamID string) *model.AppError
|
||||||
RemoveTeamMemberFromTeam(teamMember *model.TeamMember, requestorId string) *model.AppError
|
RemoveTeamMemberFromTeam(teamMember *model.TeamMember, requestorId string) *model.AppError
|
||||||
RemoveUserFromChannel(userIdToRemove string, removerUserId string, channel *model.Channel) *model.AppError
|
RemoveUserFromChannel(userIDToRemove string, removerUserId string, channel *model.Channel) *model.AppError
|
||||||
RemoveUserFromTeam(teamId string, userId string, requestorId string) *model.AppError
|
RemoveUserFromTeam(teamID string, userID string, requestorId string) *model.AppError
|
||||||
RemoveUsersFromChannelNotMemberOfTeam(remover *model.User, channel *model.Channel, team *model.Team) *model.AppError
|
RemoveUsersFromChannelNotMemberOfTeam(remover *model.User, channel *model.Channel, team *model.Team) *model.AppError
|
||||||
RequestId() string
|
RequestId() string
|
||||||
RequestLicenseAndAckWarnMetric(warnMetricId string, isBot bool) *model.AppError
|
RequestLicenseAndAckWarnMetric(warnMetricId string, isBot bool) *model.AppError
|
||||||
ResetPasswordFromToken(userSuppliedTokenString, newPassword string) *model.AppError
|
ResetPasswordFromToken(userSuppliedTokenString, newPassword string) *model.AppError
|
||||||
ResetPermissionsSystem() *model.AppError
|
ResetPermissionsSystem() *model.AppError
|
||||||
RestoreChannel(channel *model.Channel, userId string) (*model.Channel, *model.AppError)
|
RestoreChannel(channel *model.Channel, userID string) (*model.Channel, *model.AppError)
|
||||||
RestoreTeam(teamId string) *model.AppError
|
RestoreTeam(teamID string) *model.AppError
|
||||||
RestrictUsersGetByPermissions(userId string, options *model.UserGetOptions) (*model.UserGetOptions, *model.AppError)
|
RestrictUsersGetByPermissions(userID string, options *model.UserGetOptions) (*model.UserGetOptions, *model.AppError)
|
||||||
RestrictUsersSearchByPermissions(userId string, options *model.UserSearchOptions) (*model.UserSearchOptions, *model.AppError)
|
RestrictUsersSearchByPermissions(userID string, options *model.UserSearchOptions) (*model.UserSearchOptions, *model.AppError)
|
||||||
RevokeAccessToken(token string) *model.AppError
|
RevokeAccessToken(token string) *model.AppError
|
||||||
RevokeAllSessions(userId string) *model.AppError
|
RevokeAllSessions(userID string) *model.AppError
|
||||||
RevokeSession(session *model.Session) *model.AppError
|
RevokeSession(session *model.Session) *model.AppError
|
||||||
RevokeSessionById(sessionId string) *model.AppError
|
RevokeSessionById(sessionId string) *model.AppError
|
||||||
RevokeSessionsForDeviceId(userId string, deviceId string, currentSessionId string) *model.AppError
|
RevokeSessionsForDeviceId(userID string, deviceId string, currentSessionId string) *model.AppError
|
||||||
RevokeUserAccessToken(token *model.UserAccessToken) *model.AppError
|
RevokeUserAccessToken(token *model.UserAccessToken) *model.AppError
|
||||||
RolesGrantPermission(roleNames []string, permissionId string) bool
|
RolesGrantPermission(roleNames []string, permissionId string) bool
|
||||||
Saml() einterfaces.SamlInterface
|
Saml() einterfaces.SamlInterface
|
||||||
@@ -878,32 +878,32 @@ type AppIface interface {
|
|||||||
SaveBrandImage(imageData *multipart.FileHeader) *model.AppError
|
SaveBrandImage(imageData *multipart.FileHeader) *model.AppError
|
||||||
SaveComplianceReport(job *model.Compliance) (*model.Compliance, *model.AppError)
|
SaveComplianceReport(job *model.Compliance) (*model.Compliance, *model.AppError)
|
||||||
SaveReactionForPost(reaction *model.Reaction) (*model.Reaction, *model.AppError)
|
SaveReactionForPost(reaction *model.Reaction) (*model.Reaction, *model.AppError)
|
||||||
SaveUserTermsOfService(userId, termsOfServiceId string, accepted bool) *model.AppError
|
SaveUserTermsOfService(userID, termsOfServiceId string, accepted bool) *model.AppError
|
||||||
SchemesIterator(scope string, batchSize int) func() []*model.Scheme
|
SchemesIterator(scope string, batchSize int) func() []*model.Scheme
|
||||||
SearchArchivedChannels(teamId string, term string, userId string) (*model.ChannelList, *model.AppError)
|
SearchArchivedChannels(teamID string, term string, userID string) (*model.ChannelList, *model.AppError)
|
||||||
SearchChannels(teamId string, term string) (*model.ChannelList, *model.AppError)
|
SearchChannels(teamID string, term string) (*model.ChannelList, *model.AppError)
|
||||||
SearchChannelsForUser(userId, teamId, 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)
|
SearchChannelsUserNotIn(teamID string, userID string, term string) (*model.ChannelList, *model.AppError)
|
||||||
SearchEmoji(name string, prefixOnly bool, limit int) ([]*model.Emoji, *model.AppError)
|
SearchEmoji(name string, prefixOnly bool, limit int) ([]*model.Emoji, *model.AppError)
|
||||||
SearchEngine() *searchengine.Broker
|
SearchEngine() *searchengine.Broker
|
||||||
SearchGroupChannels(userId, term string) (*model.ChannelList, *model.AppError)
|
SearchGroupChannels(userID, term string) (*model.ChannelList, *model.AppError)
|
||||||
SearchPostsInTeam(teamId string, paramsList []*model.SearchParams) (*model.PostList, *model.AppError)
|
SearchPostsInTeam(teamID string, paramsList []*model.SearchParams) (*model.PostList, *model.AppError)
|
||||||
SearchPostsInTeamForUser(terms string, userId string, teamId string, isOrSearch bool, includeDeletedChannels bool, timeZoneOffset int, page, perPage int) (*model.PostSearchResults, *model.AppError)
|
SearchPostsInTeamForUser(terms string, userID string, teamID string, isOrSearch bool, includeDeletedChannels bool, timeZoneOffset int, page, perPage int) (*model.PostSearchResults, *model.AppError)
|
||||||
SearchPrivateTeams(term string) ([]*model.Team, *model.AppError)
|
SearchPrivateTeams(term string) ([]*model.Team, *model.AppError)
|
||||||
SearchPublicTeams(term string) ([]*model.Team, *model.AppError)
|
SearchPublicTeams(term string) ([]*model.Team, *model.AppError)
|
||||||
SearchUserAccessTokens(term string) ([]*model.UserAccessToken, *model.AppError)
|
SearchUserAccessTokens(term string) ([]*model.UserAccessToken, *model.AppError)
|
||||||
SearchUsers(props *model.UserSearch, options *model.UserSearchOptions) ([]*model.User, *model.AppError)
|
SearchUsers(props *model.UserSearch, options *model.UserSearchOptions) ([]*model.User, *model.AppError)
|
||||||
SearchUsersInChannel(channelId string, term string, options *model.UserSearchOptions) ([]*model.User, *model.AppError)
|
SearchUsersInChannel(channelId string, term string, options *model.UserSearchOptions) ([]*model.User, *model.AppError)
|
||||||
SearchUsersInGroup(groupID string, term string, options *model.UserSearchOptions) ([]*model.User, *model.AppError)
|
SearchUsersInGroup(groupID string, term string, options *model.UserSearchOptions) ([]*model.User, *model.AppError)
|
||||||
SearchUsersInTeam(teamId, term string, options *model.UserSearchOptions) ([]*model.User, *model.AppError)
|
SearchUsersInTeam(teamID, term string, options *model.UserSearchOptions) ([]*model.User, *model.AppError)
|
||||||
SearchUsersNotInChannel(teamId string, channelId string, term string, options *model.UserSearchOptions) ([]*model.User, *model.AppError)
|
SearchUsersNotInChannel(teamID string, channelId string, term string, options *model.UserSearchOptions) ([]*model.User, *model.AppError)
|
||||||
SearchUsersNotInTeam(notInTeamId string, term string, options *model.UserSearchOptions) ([]*model.User, *model.AppError)
|
SearchUsersNotInTeam(notInTeamId string, term string, options *model.UserSearchOptions) ([]*model.User, *model.AppError)
|
||||||
SearchUsersWithoutTeam(term string, options *model.UserSearchOptions) ([]*model.User, *model.AppError)
|
SearchUsersWithoutTeam(term string, options *model.UserSearchOptions) ([]*model.User, *model.AppError)
|
||||||
SendAckToPushProxy(ack *model.PushNotificationAck) error
|
SendAckToPushProxy(ack *model.PushNotificationAck) error
|
||||||
SendAutoResponse(channel *model.Channel, receiver *model.User, post *model.Post) (bool, *model.AppError)
|
SendAutoResponse(channel *model.Channel, receiver *model.User, post *model.Post) (bool, *model.AppError)
|
||||||
SendAutoResponseIfNecessary(channel *model.Channel, sender *model.User, post *model.Post) (bool, *model.AppError)
|
SendAutoResponseIfNecessary(channel *model.Channel, sender *model.User, post *model.Post) (bool, *model.AppError)
|
||||||
SendEmailVerification(user *model.User, newEmail, redirect string) *model.AppError
|
SendEmailVerification(user *model.User, newEmail, redirect string) *model.AppError
|
||||||
SendEphemeralPost(userId string, post *model.Post) *model.Post
|
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)
|
SendNotifications(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)
|
SendPasswordReset(email string, siteURL string) (bool, *model.AppError)
|
||||||
SendPaymentFailedEmail(failedPayment *model.FailedPayment) *model.AppError
|
SendPaymentFailedEmail(failedPayment *model.FailedPayment) *model.AppError
|
||||||
@@ -913,14 +913,14 @@ type AppIface interface {
|
|||||||
SessionCacheLength() int
|
SessionCacheLength() int
|
||||||
SessionHasPermissionTo(session model.Session, permission *model.Permission) bool
|
SessionHasPermissionTo(session model.Session, permission *model.Permission) bool
|
||||||
SessionHasPermissionToAny(session model.Session, permissions []*model.Permission) bool
|
SessionHasPermissionToAny(session model.Session, permissions []*model.Permission) bool
|
||||||
SessionHasPermissionToCategory(session model.Session, userId, teamId, categoryId string) bool
|
SessionHasPermissionToCategory(session model.Session, userID, teamID, categoryId string) bool
|
||||||
SessionHasPermissionToChannel(session model.Session, channelId string, permission *model.Permission) bool
|
SessionHasPermissionToChannel(session model.Session, channelId string, permission *model.Permission) bool
|
||||||
SessionHasPermissionToChannelByPost(session model.Session, postId string, permission *model.Permission) bool
|
SessionHasPermissionToChannelByPost(session model.Session, postId string, permission *model.Permission) bool
|
||||||
SessionHasPermissionToTeam(session model.Session, teamId string, permission *model.Permission) bool
|
SessionHasPermissionToTeam(session model.Session, teamID string, permission *model.Permission) bool
|
||||||
SessionHasPermissionToUser(session model.Session, userId string) bool
|
SessionHasPermissionToUser(session model.Session, userID string) bool
|
||||||
SessionHasPermissionToUserOrBot(session model.Session, userId string) bool
|
SessionHasPermissionToUserOrBot(session model.Session, userID string) bool
|
||||||
SetAcceptLanguage(s string)
|
SetAcceptLanguage(s string)
|
||||||
SetActiveChannel(userId string, channelId string) *model.AppError
|
SetActiveChannel(userID string, channelId string) *model.AppError
|
||||||
SetAutoResponderStatus(user *model.User, oldNotifyProps model.StringMap)
|
SetAutoResponderStatus(user *model.User, oldNotifyProps model.StringMap)
|
||||||
SetContext(c context.Context)
|
SetContext(c context.Context)
|
||||||
SetDefaultProfileImage(user *model.User) *model.AppError
|
SetDefaultProfileImage(user *model.User) *model.AppError
|
||||||
@@ -931,26 +931,26 @@ type AppIface interface {
|
|||||||
SetPluginKeyWithExpiry(pluginId string, key string, value []byte, expireInSeconds int64) *model.AppError
|
SetPluginKeyWithExpiry(pluginId string, key string, value []byte, expireInSeconds int64) *model.AppError
|
||||||
SetPluginKeyWithOptions(pluginId string, key string, value []byte, options model.PluginKVSetOptions) (bool, *model.AppError)
|
SetPluginKeyWithOptions(pluginId string, key string, value []byte, options model.PluginKVSetOptions) (bool, *model.AppError)
|
||||||
SetPluginsEnvironment(pluginsEnvironment *plugin.Environment)
|
SetPluginsEnvironment(pluginsEnvironment *plugin.Environment)
|
||||||
SetProfileImage(userId string, imageData *multipart.FileHeader) *model.AppError
|
SetProfileImage(userID string, imageData *multipart.FileHeader) *model.AppError
|
||||||
SetProfileImageFromFile(userId string, file io.Reader) *model.AppError
|
SetProfileImageFromFile(userID string, file io.Reader) *model.AppError
|
||||||
SetProfileImageFromMultiPartFile(userId string, file multipart.File) *model.AppError
|
SetProfileImageFromMultiPartFile(userID string, file multipart.File) *model.AppError
|
||||||
SetRequestId(s string)
|
SetRequestId(s string)
|
||||||
SetSamlIdpCertificateFromMetadata(data []byte) *model.AppError
|
SetSamlIdpCertificateFromMetadata(data []byte) *model.AppError
|
||||||
SetSearchEngine(se *searchengine.Broker)
|
SetSearchEngine(se *searchengine.Broker)
|
||||||
SetServer(srv *Server)
|
SetServer(srv *Server)
|
||||||
SetSession(s *model.Session)
|
SetSession(s *model.Session)
|
||||||
SetStatusAwayIfNeeded(userId string, manual bool)
|
SetStatusAwayIfNeeded(userID string, manual bool)
|
||||||
SetStatusDoNotDisturb(userId string)
|
SetStatusDoNotDisturb(userID string)
|
||||||
SetStatusOffline(userId string, manual bool)
|
SetStatusOffline(userID string, manual bool)
|
||||||
SetStatusOnline(userId string, manual bool)
|
SetStatusOnline(userID string, manual bool)
|
||||||
SetStatusOutOfOffice(userId string)
|
SetStatusOutOfOffice(userID string)
|
||||||
SetT(t goi18n.TranslateFunc)
|
SetT(t goi18n.TranslateFunc)
|
||||||
SetTeamIcon(teamId string, imageData *multipart.FileHeader) *model.AppError
|
SetTeamIcon(teamID string, imageData *multipart.FileHeader) *model.AppError
|
||||||
SetTeamIconFromFile(team *model.Team, file io.Reader) *model.AppError
|
SetTeamIconFromFile(team *model.Team, file io.Reader) *model.AppError
|
||||||
SetTeamIconFromMultiPartFile(teamId string, file multipart.File) *model.AppError
|
SetTeamIconFromMultiPartFile(teamID string, file multipart.File) *model.AppError
|
||||||
SetUserAgent(s string)
|
SetUserAgent(s string)
|
||||||
SlackImport(fileData multipart.File, fileSize int64, teamID string) (*model.AppError, *bytes.Buffer)
|
SlackImport(fileData multipart.File, fileSize int64, teamID string) (*model.AppError, *bytes.Buffer)
|
||||||
SoftDeleteTeam(teamId string) *model.AppError
|
SoftDeleteTeam(teamID string) *model.AppError
|
||||||
Srv() *Server
|
Srv() *Server
|
||||||
SubmitInteractiveDialog(request model.SubmitDialogRequest) (*model.SubmitDialogResponse, *model.AppError)
|
SubmitInteractiveDialog(request model.SubmitDialogRequest) (*model.SubmitDialogResponse, *model.AppError)
|
||||||
SwitchEmailToLdap(email, password, code, ldapLoginId, ldapPassword string) (string, *model.AppError)
|
SwitchEmailToLdap(email, password, code, ldapLoginId, ldapPassword string) (string, *model.AppError)
|
||||||
@@ -964,72 +964,72 @@ type AppIface interface {
|
|||||||
TeamMembersToRemove(teamID *string) ([]*model.TeamMember, *model.AppError)
|
TeamMembersToRemove(teamID *string) ([]*model.TeamMember, *model.AppError)
|
||||||
TelemetryId() string
|
TelemetryId() string
|
||||||
TestElasticsearch(cfg *model.Config) *model.AppError
|
TestElasticsearch(cfg *model.Config) *model.AppError
|
||||||
TestEmail(userId string, cfg *model.Config) *model.AppError
|
TestEmail(userID string, cfg *model.Config) *model.AppError
|
||||||
TestFilesStoreConnection() *model.AppError
|
TestFilesStoreConnection() *model.AppError
|
||||||
TestFilesStoreConnectionWithConfig(cfg *model.FileSettings) *model.AppError
|
TestFilesStoreConnectionWithConfig(cfg *model.FileSettings) *model.AppError
|
||||||
TestLdap() *model.AppError
|
TestLdap() *model.AppError
|
||||||
TestSiteURL(siteURL string) *model.AppError
|
TestSiteURL(siteURL string) *model.AppError
|
||||||
Timezones() *timezones.Timezones
|
Timezones() *timezones.Timezones
|
||||||
ToggleMuteChannel(channelId, userId string) (*model.ChannelMember, *model.AppError)
|
ToggleMuteChannel(channelId, userID string) (*model.ChannelMember, *model.AppError)
|
||||||
TotalWebsocketConnections() int
|
TotalWebsocketConnections() int
|
||||||
TriggerWebhook(payload *model.OutgoingWebhookPayload, hook *model.OutgoingWebhook, post *model.Post, channel *model.Channel)
|
TriggerWebhook(payload *model.OutgoingWebhookPayload, hook *model.OutgoingWebhook, post *model.Post, channel *model.Channel)
|
||||||
UnregisterPluginCommand(pluginId, teamId, trigger string)
|
UnregisterPluginCommand(pluginId, teamID, trigger string)
|
||||||
UnregisterPluginCommands(pluginId string)
|
UnregisterPluginCommands(pluginId string)
|
||||||
UpdateActive(user *model.User, active bool) (*model.User, *model.AppError)
|
UpdateActive(user *model.User, active bool) (*model.User, *model.AppError)
|
||||||
UpdateChannelLastViewedAt(channelIds []string, userId string) *model.AppError
|
UpdateChannelLastViewedAt(channelIds []string, userID string) *model.AppError
|
||||||
UpdateChannelMemberNotifyProps(data map[string]string, channelId string, userId string) (*model.ChannelMember, *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)
|
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)
|
UpdateChannelMemberSchemeRoles(channelId string, userID string, isSchemeGuest bool, isSchemeUser bool, isSchemeAdmin bool) (*model.ChannelMember, *model.AppError)
|
||||||
UpdateChannelPrivacy(oldChannel *model.Channel, user *model.User) (*model.Channel, *model.AppError)
|
UpdateChannelPrivacy(oldChannel *model.Channel, user *model.User) (*model.Channel, *model.AppError)
|
||||||
UpdateCommand(oldCmd, updatedCmd *model.Command) (*model.Command, *model.AppError)
|
UpdateCommand(oldCmd, updatedCmd *model.Command) (*model.Command, *model.AppError)
|
||||||
UpdateConfig(f func(*model.Config))
|
UpdateConfig(f func(*model.Config))
|
||||||
UpdateEphemeralPost(userId string, post *model.Post) *model.Post
|
UpdateEphemeralPost(userID string, post *model.Post) *model.Post
|
||||||
UpdateGroup(group *model.Group) (*model.Group, *model.AppError)
|
UpdateGroup(group *model.Group) (*model.Group, *model.AppError)
|
||||||
UpdateGroupSyncable(groupSyncable *model.GroupSyncable) (*model.GroupSyncable, *model.AppError)
|
UpdateGroupSyncable(groupSyncable *model.GroupSyncable) (*model.GroupSyncable, *model.AppError)
|
||||||
UpdateHashedPassword(user *model.User, newHashedPassword string) *model.AppError
|
UpdateHashedPassword(user *model.User, newHashedPassword string) *model.AppError
|
||||||
UpdateHashedPasswordByUserId(userId, newHashedPassword string) *model.AppError
|
UpdateHashedPasswordByUserId(userID, newHashedPassword string) *model.AppError
|
||||||
UpdateIncomingWebhook(oldHook, updatedHook *model.IncomingWebhook) (*model.IncomingWebhook, *model.AppError)
|
UpdateIncomingWebhook(oldHook, updatedHook *model.IncomingWebhook) (*model.IncomingWebhook, *model.AppError)
|
||||||
UpdateLastActivityAtIfNeeded(session model.Session)
|
UpdateLastActivityAtIfNeeded(session model.Session)
|
||||||
UpdateMfa(activate bool, userId, token string) *model.AppError
|
UpdateMfa(activate bool, userID, token string) *model.AppError
|
||||||
UpdateMobileAppBadge(userId string)
|
UpdateMobileAppBadge(userID string)
|
||||||
UpdateOAuthUserAttrs(userData io.Reader, user *model.User, provider einterfaces.OauthProvider, service string, tokenUser *model.User) *model.AppError
|
UpdateOAuthUserAttrs(userData io.Reader, user *model.User, provider einterfaces.OauthProvider, service string, tokenUser *model.User) *model.AppError
|
||||||
UpdateOauthApp(oldApp, updatedApp *model.OAuthApp) (*model.OAuthApp, *model.AppError)
|
UpdateOauthApp(oldApp, updatedApp *model.OAuthApp) (*model.OAuthApp, *model.AppError)
|
||||||
UpdateOutgoingWebhook(oldHook, updatedHook *model.OutgoingWebhook) (*model.OutgoingWebhook, *model.AppError)
|
UpdateOutgoingWebhook(oldHook, updatedHook *model.OutgoingWebhook) (*model.OutgoingWebhook, *model.AppError)
|
||||||
UpdatePassword(user *model.User, newPassword string) *model.AppError
|
UpdatePassword(user *model.User, newPassword string) *model.AppError
|
||||||
UpdatePasswordAsUser(userId, currentPassword, newPassword string) *model.AppError
|
UpdatePasswordAsUser(userID, currentPassword, newPassword string) *model.AppError
|
||||||
UpdatePasswordByUserIdSendEmail(userId, newPassword, method string) *model.AppError
|
UpdatePasswordByUserIdSendEmail(userID, newPassword, method string) *model.AppError
|
||||||
UpdatePasswordSendEmail(user *model.User, newPassword, method string) *model.AppError
|
UpdatePasswordSendEmail(user *model.User, newPassword, method string) *model.AppError
|
||||||
UpdatePost(post *model.Post, safeUpdate bool) (*model.Post, *model.AppError)
|
UpdatePost(post *model.Post, safeUpdate bool) (*model.Post, *model.AppError)
|
||||||
UpdatePreferences(userId string, preferences model.Preferences) *model.AppError
|
UpdatePreferences(userID string, preferences model.Preferences) *model.AppError
|
||||||
UpdateRole(role *model.Role) (*model.Role, *model.AppError)
|
UpdateRole(role *model.Role) (*model.Role, *model.AppError)
|
||||||
UpdateScheme(scheme *model.Scheme) (*model.Scheme, *model.AppError)
|
UpdateScheme(scheme *model.Scheme) (*model.Scheme, *model.AppError)
|
||||||
UpdateSessionsIsGuest(userId string, isGuest bool)
|
UpdateSessionsIsGuest(userID string, isGuest bool)
|
||||||
UpdateSidebarCategories(userId, teamId string, categories []*model.SidebarCategoryWithChannels) ([]*model.SidebarCategoryWithChannels, *model.AppError)
|
UpdateSidebarCategories(userID, teamID string, categories []*model.SidebarCategoryWithChannels) ([]*model.SidebarCategoryWithChannels, *model.AppError)
|
||||||
UpdateSidebarCategoryOrder(userId, teamId string, categoryOrder []string) *model.AppError
|
UpdateSidebarCategoryOrder(userID, teamID string, categoryOrder []string) *model.AppError
|
||||||
UpdateTeam(team *model.Team) (*model.Team, *model.AppError)
|
UpdateTeam(team *model.Team) (*model.Team, *model.AppError)
|
||||||
UpdateTeamMemberRoles(teamId string, userId string, newRoles string) (*model.TeamMember, *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)
|
UpdateTeamMemberSchemeRoles(teamID string, userID string, isSchemeGuest bool, isSchemeUser bool, isSchemeAdmin bool) (*model.TeamMember, *model.AppError)
|
||||||
UpdateTeamPrivacy(teamId string, teamType string, allowOpenInvite bool) *model.AppError
|
UpdateTeamPrivacy(teamID string, teamType string, allowOpenInvite bool) *model.AppError
|
||||||
UpdateTeamScheme(team *model.Team) (*model.Team, *model.AppError)
|
UpdateTeamScheme(team *model.Team) (*model.Team, *model.AppError)
|
||||||
UpdateThreadFollowForUser(userId, threadId string, state bool) *model.AppError
|
UpdateThreadFollowForUser(userID, threadId string, state bool) *model.AppError
|
||||||
UpdateThreadReadForUser(userId, teamId, threadId string, timestamp int64) *model.AppError
|
UpdateThreadReadForUser(userID, teamID, threadId string, timestamp int64) *model.AppError
|
||||||
UpdateThreadsReadForUser(userId, teamId string) *model.AppError
|
UpdateThreadsReadForUser(userID, teamID string) *model.AppError
|
||||||
UpdateUser(user *model.User, sendNotifications bool) (*model.User, *model.AppError)
|
UpdateUser(user *model.User, sendNotifications bool) (*model.User, *model.AppError)
|
||||||
UpdateUserActive(userId string, active bool) *model.AppError
|
UpdateUserActive(userID string, active bool) *model.AppError
|
||||||
UpdateUserAsUser(user *model.User, asAdmin bool) (*model.User, *model.AppError)
|
UpdateUserAsUser(user *model.User, asAdmin bool) (*model.User, *model.AppError)
|
||||||
UpdateUserAuth(userId string, userAuth *model.UserAuth) (*model.UserAuth, *model.AppError)
|
UpdateUserAuth(userID string, userAuth *model.UserAuth) (*model.UserAuth, *model.AppError)
|
||||||
UpdateUserNotifyProps(userId string, props map[string]string, sendNotifications bool) (*model.User, *model.AppError)
|
UpdateUserNotifyProps(userID string, props map[string]string, sendNotifications bool) (*model.User, *model.AppError)
|
||||||
UpdateUserRoles(userId string, newRoles string, sendWebSocketEvent bool) (*model.User, *model.AppError)
|
UpdateUserRoles(userID string, newRoles string, sendWebSocketEvent bool) (*model.User, *model.AppError)
|
||||||
UploadData(us *model.UploadSession, rd io.Reader) (*model.FileInfo, *model.AppError)
|
UploadData(us *model.UploadSession, rd io.Reader) (*model.FileInfo, *model.AppError)
|
||||||
UploadEmojiImage(id string, imageData *multipart.FileHeader) *model.AppError
|
UploadEmojiImage(id string, imageData *multipart.FileHeader) *model.AppError
|
||||||
UploadMultipartFiles(teamId string, channelId string, userId string, fileHeaders []*multipart.FileHeader, clientIds []string, now time.Time) (*model.FileUploadResponse, *model.AppError)
|
UploadMultipartFiles(teamID string, channelId string, userID string, fileHeaders []*multipart.FileHeader, clientIds []string, now time.Time) (*model.FileUploadResponse, *model.AppError)
|
||||||
UpsertGroupMember(groupID string, userID string) (*model.GroupMember, *model.AppError)
|
UpsertGroupMember(groupID string, userID string) (*model.GroupMember, *model.AppError)
|
||||||
UpsertGroupSyncable(groupSyncable *model.GroupSyncable) (*model.GroupSyncable, *model.AppError)
|
UpsertGroupSyncable(groupSyncable *model.GroupSyncable) (*model.GroupSyncable, *model.AppError)
|
||||||
UserAgent() string
|
UserAgent() string
|
||||||
UserCanSeeOtherUser(userId string, otherUserId string) (bool, *model.AppError)
|
UserCanSeeOtherUser(userID string, otherUserId string) (bool, *model.AppError)
|
||||||
VerifyEmailFromToken(userSuppliedTokenString string) *model.AppError
|
VerifyEmailFromToken(userSuppliedTokenString string) *model.AppError
|
||||||
VerifyUserEmail(userId, email string) *model.AppError
|
VerifyUserEmail(userID, email string) *model.AppError
|
||||||
ViewChannel(view *model.ChannelView, userId string, currentSessionId string) (map[string]int64, *model.AppError)
|
ViewChannel(view *model.ChannelView, userID string, currentSessionId string) (map[string]int64, *model.AppError)
|
||||||
WaitForChannelMembership(channelId string, userId string)
|
WaitForChannelMembership(channelId string, userID string)
|
||||||
WriteFile(fr io.Reader, path string) (int64, *model.AppError)
|
WriteFile(fr io.Reader, path string) (int64, *model.AppError)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,8 +32,8 @@ var (
|
|||||||
LevelCLI = mlog.LvlAuditCLI
|
LevelCLI = mlog.LvlAuditCLI
|
||||||
)
|
)
|
||||||
|
|
||||||
func (a *App) GetAudits(userId string, limit int) (model.Audits, *model.AppError) {
|
func (a *App) GetAudits(userID string, limit int) (model.Audits, *model.AppError) {
|
||||||
audits, err := a.Srv().Store.Audit().Get(userId, 0, limit)
|
audits, err := a.Srv().Store.Audit().Get(userID, 0, limit)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
var outErr *store.ErrOutOfBounds
|
var outErr *store.ErrOutOfBounds
|
||||||
switch {
|
switch {
|
||||||
@@ -46,8 +46,8 @@ func (a *App) GetAudits(userId string, limit int) (model.Audits, *model.AppError
|
|||||||
return audits, nil
|
return audits, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetAuditsPage(userId string, page int, perPage int) (model.Audits, *model.AppError) {
|
func (a *App) GetAuditsPage(userID string, page int, perPage int) (model.Audits, *model.AppError) {
|
||||||
audits, err := a.Srv().Store.Audit().Get(userId, page*perPage, perPage)
|
audits, err := a.Srv().Store.Audit().Get(userID, page*perPage, perPage)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
var outErr *store.ErrOutOfBounds
|
var outErr *store.ErrOutOfBounds
|
||||||
switch {
|
switch {
|
||||||
|
|||||||
@@ -36,15 +36,15 @@ func (a *App) SessionHasPermissionToAny(session model.Session, permissions []*mo
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) SessionHasPermissionToTeam(session model.Session, teamId string, permission *model.Permission) bool {
|
func (a *App) SessionHasPermissionToTeam(session model.Session, teamID string, permission *model.Permission) bool {
|
||||||
if teamId == "" {
|
if teamID == "" {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
if session.IsUnrestricted() {
|
if session.IsUnrestricted() {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
teamMember := session.GetTeamByTeamId(teamId)
|
teamMember := session.GetTeamByTeamId(teamID)
|
||||||
if teamMember != nil {
|
if teamMember != nil {
|
||||||
if a.RolesGrantPermission(teamMember.GetRoles(), permission.Id) {
|
if a.RolesGrantPermission(teamMember.GetRoles(), permission.Id) {
|
||||||
return true
|
return true
|
||||||
@@ -104,23 +104,23 @@ func (a *App) SessionHasPermissionToChannelByPost(session model.Session, postId
|
|||||||
return a.SessionHasPermissionTo(session, permission)
|
return a.SessionHasPermissionTo(session, permission)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) SessionHasPermissionToCategory(session model.Session, userId, teamId, categoryId string) bool {
|
func (a *App) SessionHasPermissionToCategory(session model.Session, userID, teamID, categoryId string) bool {
|
||||||
if a.SessionHasPermissionTo(session, model.PERMISSION_EDIT_OTHER_USERS) {
|
if a.SessionHasPermissionTo(session, model.PERMISSION_EDIT_OTHER_USERS) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
category, err := a.GetSidebarCategory(categoryId)
|
category, err := a.GetSidebarCategory(categoryId)
|
||||||
return err == nil && category != nil && category.UserId == session.UserId && category.UserId == userId && category.TeamId == teamId
|
return err == nil && category != nil && category.UserId == session.UserId && category.UserId == userID && category.TeamId == teamID
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) SessionHasPermissionToUser(session model.Session, userId string) bool {
|
func (a *App) SessionHasPermissionToUser(session model.Session, userID string) bool {
|
||||||
if userId == "" {
|
if userID == "" {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
if session.IsUnrestricted() {
|
if session.IsUnrestricted() {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
if session.UserId == userId {
|
if session.UserId == userID {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -131,15 +131,15 @@ func (a *App) SessionHasPermissionToUser(session model.Session, userId string) b
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) SessionHasPermissionToUserOrBot(session model.Session, userId string) bool {
|
func (a *App) SessionHasPermissionToUserOrBot(session model.Session, userID string) bool {
|
||||||
if session.IsUnrestricted() {
|
if session.IsUnrestricted() {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
if a.SessionHasPermissionToUser(session, userId) {
|
if a.SessionHasPermissionToUser(session, userID) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := a.SessionHasPermissionToManageBot(session, userId); err == nil {
|
if err := a.SessionHasPermissionToManageBot(session, userID); err == nil {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -157,11 +157,11 @@ func (a *App) HasPermissionTo(askingUserId string, permission *model.Permission)
|
|||||||
return a.RolesGrantPermission(roles, permission.Id)
|
return a.RolesGrantPermission(roles, permission.Id)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) HasPermissionToTeam(askingUserId string, teamId string, permission *model.Permission) bool {
|
func (a *App) HasPermissionToTeam(askingUserId string, teamID string, permission *model.Permission) bool {
|
||||||
if teamId == "" || askingUserId == "" {
|
if teamID == "" || askingUserId == "" {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
teamMember, _ := a.GetTeamMember(teamId, askingUserId)
|
teamMember, _ := a.GetTeamMember(teamID, askingUserId)
|
||||||
if teamMember != nil && teamMember.DeleteAt == 0 {
|
if teamMember != nil && teamMember.DeleteAt == 0 {
|
||||||
if a.RolesGrantPermission(teamMember.GetRoles(), permission.Id) {
|
if a.RolesGrantPermission(teamMember.GetRoles(), permission.Id) {
|
||||||
return true
|
return true
|
||||||
@@ -206,8 +206,8 @@ func (a *App) HasPermissionToChannelByPost(askingUserId string, postId string, p
|
|||||||
return a.HasPermissionTo(askingUserId, permission)
|
return a.HasPermissionTo(askingUserId, permission)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) HasPermissionToUser(askingUserId string, userId string) bool {
|
func (a *App) HasPermissionToUser(askingUserId string, userID string) bool {
|
||||||
if askingUserId == userId {
|
if askingUserId == userID {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -76,8 +76,8 @@ func (a *App) SetAutoResponderStatus(user *model.User, oldNotifyProps model.Stri
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) DisableAutoResponder(userId string, asAdmin bool) *model.AppError {
|
func (a *App) DisableAutoResponder(userID string, asAdmin bool) *model.AppError {
|
||||||
user, err := a.GetUser(userId)
|
user, err := a.GetUser(userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -89,7 +89,7 @@ func (a *App) DisableAutoResponder(userId string, asAdmin bool) *model.AppError
|
|||||||
patch.NotifyProps = user.NotifyProps
|
patch.NotifyProps = user.NotifyProps
|
||||||
patch.NotifyProps[model.AUTO_RESPONDER_ACTIVE_NOTIFY_PROP] = "false"
|
patch.NotifyProps[model.AUTO_RESPONDER_ACTIVE_NOTIFY_PROP] = "false"
|
||||||
|
|
||||||
_, err := a.PatchUser(userId, patch, asAdmin)
|
_, err := a.PatchUser(userID, patch, asAdmin)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
10
app/bot.go
10
app/bot.go
@@ -335,11 +335,11 @@ func (a *App) UpdateBotOwner(botUserId, newOwnerId string) (*model.Bot, *model.A
|
|||||||
}
|
}
|
||||||
|
|
||||||
// disableUserBots disables all bots owned by the given user.
|
// disableUserBots disables all bots owned by the given user.
|
||||||
func (a *App) disableUserBots(userId string) *model.AppError {
|
func (a *App) disableUserBots(userID string) *model.AppError {
|
||||||
perPage := 20
|
perPage := 20
|
||||||
for {
|
for {
|
||||||
options := &model.BotGetOptions{
|
options := &model.BotGetOptions{
|
||||||
OwnerId: userId,
|
OwnerId: userID,
|
||||||
IncludeDeleted: false,
|
IncludeDeleted: false,
|
||||||
OnlyOrphaned: false,
|
OnlyOrphaned: false,
|
||||||
Page: 0,
|
Page: 0,
|
||||||
@@ -368,10 +368,10 @@ func (a *App) disableUserBots(userId string) *model.AppError {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) notifySysadminsBotOwnerDeactivated(userId string) *model.AppError {
|
func (a *App) notifySysadminsBotOwnerDeactivated(userID string) *model.AppError {
|
||||||
perPage := 25
|
perPage := 25
|
||||||
botOptions := &model.BotGetOptions{
|
botOptions := &model.BotGetOptions{
|
||||||
OwnerId: userId,
|
OwnerId: userID,
|
||||||
IncludeDeleted: false,
|
IncludeDeleted: false,
|
||||||
OnlyOrphaned: false,
|
OnlyOrphaned: false,
|
||||||
Page: 0,
|
Page: 0,
|
||||||
@@ -423,7 +423,7 @@ func (a *App) notifySysadminsBotOwnerDeactivated(userId string) *model.AppError
|
|||||||
}
|
}
|
||||||
|
|
||||||
// user being disabled
|
// user being disabled
|
||||||
user, err := a.GetUser(userId)
|
user, err := a.GetUser(userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
332
app/channel.go
332
app/channel.go
@@ -63,7 +63,7 @@ func (a *App) DefaultChannelNames() []string {
|
|||||||
return names
|
return names
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) JoinDefaultChannels(teamId string, user *model.User, shouldBeAdmin bool, userRequestorId string) *model.AppError {
|
func (a *App) JoinDefaultChannels(teamID string, user *model.User, shouldBeAdmin bool, userRequestorId string) *model.AppError {
|
||||||
var requestor *model.User
|
var requestor *model.User
|
||||||
var nErr error
|
var nErr error
|
||||||
if userRequestorId != "" {
|
if userRequestorId != "" {
|
||||||
@@ -81,7 +81,7 @@ func (a *App) JoinDefaultChannels(teamId string, user *model.User, shouldBeAdmin
|
|||||||
|
|
||||||
var err *model.AppError
|
var err *model.AppError
|
||||||
for _, channelName := range a.DefaultChannelNames() {
|
for _, channelName := range a.DefaultChannelNames() {
|
||||||
channel, channelErr := a.Srv().Store.Channel().GetByName(teamId, channelName, true)
|
channel, channelErr := a.Srv().Store.Channel().GetByName(teamID, channelName, true)
|
||||||
if channelErr != nil {
|
if channelErr != nil {
|
||||||
var nfErr *store.ErrNotFound
|
var nfErr *store.ErrNotFound
|
||||||
switch {
|
switch {
|
||||||
@@ -170,7 +170,7 @@ func (a *App) postJoinMessageForDefaultChannel(user *model.User, requestor *mode
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) CreateChannelWithUser(channel *model.Channel, userId string) (*model.Channel, *model.AppError) {
|
func (a *App) CreateChannelWithUser(channel *model.Channel, userID string) (*model.Channel, *model.AppError) {
|
||||||
if channel.IsGroupOrDirect() {
|
if channel.IsGroupOrDirect() {
|
||||||
return nil, model.NewAppError("CreateChannelWithUser", "api.channel.create_channel.direct_channel.app_error", nil, "", http.StatusBadRequest)
|
return nil, model.NewAppError("CreateChannelWithUser", "api.channel.create_channel.direct_channel.app_error", nil, "", http.StatusBadRequest)
|
||||||
}
|
}
|
||||||
@@ -189,7 +189,7 @@ func (a *App) CreateChannelWithUser(channel *model.Channel, userId string) (*mod
|
|||||||
return nil, model.NewAppError("CreateChannelWithUser", "api.channel.create_channel.max_channel_limit.app_error", map[string]interface{}{"MaxChannelsPerTeam": *a.Config().TeamSettings.MaxChannelsPerTeam}, "", http.StatusBadRequest)
|
return nil, model.NewAppError("CreateChannelWithUser", "api.channel.create_channel.max_channel_limit.app_error", map[string]interface{}{"MaxChannelsPerTeam": *a.Config().TeamSettings.MaxChannelsPerTeam}, "", http.StatusBadRequest)
|
||||||
}
|
}
|
||||||
|
|
||||||
channel.CreatorId = userId
|
channel.CreatorId = userID
|
||||||
|
|
||||||
rchannel, err := a.CreateChannel(channel, true)
|
rchannel, err := a.CreateChannel(channel, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -197,13 +197,13 @@ func (a *App) CreateChannelWithUser(channel *model.Channel, userId string) (*mod
|
|||||||
}
|
}
|
||||||
|
|
||||||
var user *model.User
|
var user *model.User
|
||||||
if user, err = a.GetUser(userId); err != nil {
|
if user, err = a.GetUser(userID); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
a.postJoinChannelMessage(user, channel)
|
a.postJoinChannelMessage(user, channel)
|
||||||
|
|
||||||
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_CHANNEL_CREATED, "", "", userId, nil)
|
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_CHANNEL_CREATED, "", "", userID, nil)
|
||||||
message.Add("channel_id", channel.Id)
|
message.Add("channel_id", channel.Id)
|
||||||
message.Add("team_id", channel.TeamId)
|
message.Add("team_id", channel.TeamId)
|
||||||
a.Publish(message)
|
a.Publish(message)
|
||||||
@@ -320,13 +320,13 @@ func (a *App) CreateChannel(channel *model.Channel, addMember bool) (*model.Chan
|
|||||||
return sc, nil
|
return sc, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetOrCreateDirectChannel(userId, otherUserId string) (*model.Channel, *model.AppError) {
|
func (a *App) GetOrCreateDirectChannel(userID, otherUserId string) (*model.Channel, *model.AppError) {
|
||||||
channel, nErr := a.Srv().Store.Channel().GetByName("", model.GetDMNameFromIds(userId, otherUserId), true)
|
channel, nErr := a.Srv().Store.Channel().GetByName("", model.GetDMNameFromIds(userID, otherUserId), true)
|
||||||
if nErr != nil {
|
if nErr != nil {
|
||||||
var nfErr *store.ErrNotFound
|
var nfErr *store.ErrNotFound
|
||||||
if errors.As(nErr, &nfErr) {
|
if errors.As(nErr, &nfErr) {
|
||||||
var err *model.AppError
|
var err *model.AppError
|
||||||
channel, err = a.createDirectChannel(userId, otherUserId)
|
channel, err = a.createDirectChannel(userID, otherUserId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if err.Id == store.ChannelExistsError {
|
if err.Id == store.ChannelExistsError {
|
||||||
return channel, nil
|
return channel, nil
|
||||||
@@ -334,9 +334,9 @@ func (a *App) GetOrCreateDirectChannel(userId, otherUserId string) (*model.Chann
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
a.WaitForChannelMembership(channel.Id, userId)
|
a.WaitForChannelMembership(channel.Id, userID)
|
||||||
|
|
||||||
a.InvalidateCacheForUser(userId)
|
a.InvalidateCacheForUser(userID)
|
||||||
a.InvalidateCacheForUser(otherUserId)
|
a.InvalidateCacheForUser(otherUserId)
|
||||||
|
|
||||||
if pluginsEnvironment := a.GetPluginsEnvironment(); pluginsEnvironment != nil {
|
if pluginsEnvironment := a.GetPluginsEnvironment(); pluginsEnvironment != nil {
|
||||||
@@ -360,11 +360,11 @@ func (a *App) GetOrCreateDirectChannel(userId, otherUserId string) (*model.Chann
|
|||||||
return channel, nil
|
return channel, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) createDirectChannel(userId string, otherUserId string) (*model.Channel, *model.AppError) {
|
func (a *App) createDirectChannel(userID string, otherUserId string) (*model.Channel, *model.AppError) {
|
||||||
uc1 := make(chan store.StoreResult, 1)
|
uc1 := make(chan store.StoreResult, 1)
|
||||||
uc2 := make(chan store.StoreResult, 1)
|
uc2 := make(chan store.StoreResult, 1)
|
||||||
go func() {
|
go func() {
|
||||||
user, err := a.Srv().Store.User().Get(userId)
|
user, err := a.Srv().Store.User().Get(userID)
|
||||||
uc1 <- store.StoreResult{Data: user, NErr: err}
|
uc1 <- store.StoreResult{Data: user, NErr: err}
|
||||||
close(uc1)
|
close(uc1)
|
||||||
}()
|
}()
|
||||||
@@ -376,7 +376,7 @@ func (a *App) createDirectChannel(userId string, otherUserId string) (*model.Cha
|
|||||||
|
|
||||||
result := <-uc1
|
result := <-uc1
|
||||||
if result.NErr != nil {
|
if result.NErr != nil {
|
||||||
return nil, model.NewAppError("CreateDirectChannel", "api.channel.create_direct_channel.invalid_user.app_error", nil, userId, http.StatusBadRequest)
|
return nil, model.NewAppError("CreateDirectChannel", "api.channel.create_direct_channel.invalid_user.app_error", nil, userID, http.StatusBadRequest)
|
||||||
}
|
}
|
||||||
user := result.Data.(*model.User)
|
user := result.Data.(*model.User)
|
||||||
|
|
||||||
@@ -418,10 +418,10 @@ func (a *App) createDirectChannel(userId string, otherUserId string) (*model.Cha
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := a.Srv().Store.ChannelMemberHistory().LogJoinEvent(userId, channel.Id, model.GetMillis()); err != nil {
|
if err := a.Srv().Store.ChannelMemberHistory().LogJoinEvent(userID, channel.Id, model.GetMillis()); err != nil {
|
||||||
return nil, model.NewAppError("CreateDirectChannel", "app.channel_member_history.log_join_event.internal_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("CreateDirectChannel", "app.channel_member_history.log_join_event.internal_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
if userId != otherUserId {
|
if userID != otherUserId {
|
||||||
if err := a.Srv().Store.ChannelMemberHistory().LogJoinEvent(otherUserId, channel.Id, model.GetMillis()); err != nil {
|
if err := a.Srv().Store.ChannelMemberHistory().LogJoinEvent(otherUserId, channel.Id, model.GetMillis()); err != nil {
|
||||||
return nil, model.NewAppError("CreateDirectChannel", "app.channel_member_history.log_join_event.internal_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("CreateDirectChannel", "app.channel_member_history.log_join_event.internal_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -430,7 +430,7 @@ func (a *App) createDirectChannel(userId string, otherUserId string) (*model.Cha
|
|||||||
return channel, nil
|
return channel, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) WaitForChannelMembership(channelId string, userId string) {
|
func (a *App) WaitForChannelMembership(channelId string, userID string) {
|
||||||
if len(a.Config().SqlSettings.DataSourceReplicas) == 0 {
|
if len(a.Config().SqlSettings.DataSourceReplicas) == 0 {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -441,7 +441,7 @@ func (a *App) WaitForChannelMembership(channelId string, userId string) {
|
|||||||
|
|
||||||
time.Sleep(100 * time.Millisecond)
|
time.Sleep(100 * time.Millisecond)
|
||||||
|
|
||||||
_, err := a.Srv().Store.Channel().GetMember(channelId, userId)
|
_, err := a.Srv().Store.Channel().GetMember(channelId, userID)
|
||||||
|
|
||||||
// If the membership was found then return
|
// If the membership was found then return
|
||||||
if err == nil {
|
if err == nil {
|
||||||
@@ -455,11 +455,11 @@ func (a *App) WaitForChannelMembership(channelId string, userId string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mlog.Error("WaitForChannelMembership giving up", mlog.String("channel_id", channelId), mlog.String("user_id", userId))
|
mlog.Error("WaitForChannelMembership giving up", mlog.String("channel_id", channelId), mlog.String("user_id", userID))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) CreateGroupChannel(userIds []string, creatorId string) (*model.Channel, *model.AppError) {
|
func (a *App) CreateGroupChannel(userIDs []string, creatorId string) (*model.Channel, *model.AppError) {
|
||||||
channel, err := a.createGroupChannel(userIds)
|
channel, err := a.createGroupChannel(userIDs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if err.Id == store.ChannelExistsError {
|
if err.Id == store.ChannelExistsError {
|
||||||
return channel, nil
|
return channel, nil
|
||||||
@@ -467,37 +467,37 @@ func (a *App) CreateGroupChannel(userIds []string, creatorId string) (*model.Cha
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, userId := range userIds {
|
for _, userID := range userIDs {
|
||||||
if userId == creatorId {
|
if userID == creatorId {
|
||||||
a.WaitForChannelMembership(channel.Id, creatorId)
|
a.WaitForChannelMembership(channel.Id, creatorId)
|
||||||
}
|
}
|
||||||
|
|
||||||
a.InvalidateCacheForUser(userId)
|
a.InvalidateCacheForUser(userID)
|
||||||
}
|
}
|
||||||
|
|
||||||
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_GROUP_ADDED, "", channel.Id, "", nil)
|
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_GROUP_ADDED, "", channel.Id, "", nil)
|
||||||
message.Add("teammate_ids", model.ArrayToJson(userIds))
|
message.Add("teammate_ids", model.ArrayToJson(userIDs))
|
||||||
a.Publish(message)
|
a.Publish(message)
|
||||||
|
|
||||||
return channel, nil
|
return channel, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) createGroupChannel(userIds []string) (*model.Channel, *model.AppError) {
|
func (a *App) createGroupChannel(userIDs []string) (*model.Channel, *model.AppError) {
|
||||||
if len(userIds) > model.CHANNEL_GROUP_MAX_USERS || len(userIds) < model.CHANNEL_GROUP_MIN_USERS {
|
if len(userIDs) > model.CHANNEL_GROUP_MAX_USERS || len(userIDs) < model.CHANNEL_GROUP_MIN_USERS {
|
||||||
return nil, model.NewAppError("CreateGroupChannel", "api.channel.create_group.bad_size.app_error", nil, "", http.StatusBadRequest)
|
return nil, model.NewAppError("CreateGroupChannel", "api.channel.create_group.bad_size.app_error", nil, "", http.StatusBadRequest)
|
||||||
}
|
}
|
||||||
|
|
||||||
users, err := a.Srv().Store.User().GetProfileByIds(userIds, nil, true)
|
users, err := a.Srv().Store.User().GetProfileByIds(userIDs, nil, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("createGroupChannel", "app.user.get_profiles.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("createGroupChannel", "app.user.get_profiles.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(users) != len(userIds) {
|
if len(users) != len(userIDs) {
|
||||||
return nil, model.NewAppError("CreateGroupChannel", "api.channel.create_group.bad_user.app_error", nil, "user_ids="+model.ArrayToJson(userIds), http.StatusBadRequest)
|
return nil, model.NewAppError("CreateGroupChannel", "api.channel.create_group.bad_user.app_error", nil, "user_ids="+model.ArrayToJson(userIDs), http.StatusBadRequest)
|
||||||
}
|
}
|
||||||
|
|
||||||
group := &model.Channel{
|
group := &model.Channel{
|
||||||
Name: model.GetGroupNameFromUserIds(userIds),
|
Name: model.GetGroupNameFromUserIds(userIDs),
|
||||||
DisplayName: model.GetGroupDisplayNameFromUsers(users, true),
|
DisplayName: model.GetGroupDisplayNameFromUsers(users, true),
|
||||||
Type: model.CHANNEL_GROUP,
|
Type: model.CHANNEL_GROUP,
|
||||||
}
|
}
|
||||||
@@ -561,21 +561,21 @@ func (a *App) createGroupChannel(userIds []string) (*model.Channel, *model.AppEr
|
|||||||
return channel, nil
|
return channel, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetGroupChannel(userIds []string) (*model.Channel, *model.AppError) {
|
func (a *App) GetGroupChannel(userIDs []string) (*model.Channel, *model.AppError) {
|
||||||
if len(userIds) > model.CHANNEL_GROUP_MAX_USERS || len(userIds) < model.CHANNEL_GROUP_MIN_USERS {
|
if len(userIDs) > model.CHANNEL_GROUP_MAX_USERS || len(userIDs) < model.CHANNEL_GROUP_MIN_USERS {
|
||||||
return nil, model.NewAppError("GetGroupChannel", "api.channel.create_group.bad_size.app_error", nil, "", http.StatusBadRequest)
|
return nil, model.NewAppError("GetGroupChannel", "api.channel.create_group.bad_size.app_error", nil, "", http.StatusBadRequest)
|
||||||
}
|
}
|
||||||
|
|
||||||
users, err := a.Srv().Store.User().GetProfileByIds(userIds, nil, true)
|
users, err := a.Srv().Store.User().GetProfileByIds(userIDs, nil, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("GetGroupChannel", "app.user.get_profiles.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("GetGroupChannel", "app.user.get_profiles.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(users) != len(userIds) {
|
if len(users) != len(userIDs) {
|
||||||
return nil, model.NewAppError("GetGroupChannel", "api.channel.create_group.bad_user.app_error", nil, "user_ids="+model.ArrayToJson(userIds), http.StatusBadRequest)
|
return nil, model.NewAppError("GetGroupChannel", "api.channel.create_group.bad_user.app_error", nil, "user_ids="+model.ArrayToJson(userIDs), http.StatusBadRequest)
|
||||||
}
|
}
|
||||||
|
|
||||||
channel, appErr := a.GetChannelByName(model.GetGroupNameFromUserIds(userIds), "", true)
|
channel, appErr := a.GetChannelByName(model.GetGroupNameFromUserIds(userIDs), "", true)
|
||||||
if appErr != nil {
|
if appErr != nil {
|
||||||
return nil, appErr
|
return nil, appErr
|
||||||
}
|
}
|
||||||
@@ -697,7 +697,7 @@ func (a *App) postChannelPrivacyMessage(user *model.User, channel *model.Channel
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) RestoreChannel(channel *model.Channel, userId string) (*model.Channel, *model.AppError) {
|
func (a *App) RestoreChannel(channel *model.Channel, userID string) (*model.Channel, *model.AppError) {
|
||||||
if channel.DeleteAt == 0 {
|
if channel.DeleteAt == 0 {
|
||||||
return nil, model.NewAppError("restoreChannel", "api.channel.restore_channel.restored.app_error", nil, "", http.StatusBadRequest)
|
return nil, model.NewAppError("restoreChannel", "api.channel.restore_channel.restored.app_error", nil, "", http.StatusBadRequest)
|
||||||
}
|
}
|
||||||
@@ -712,7 +712,7 @@ func (a *App) RestoreChannel(channel *model.Channel, userId string) (*model.Chan
|
|||||||
message.Add("channel_id", channel.Id)
|
message.Add("channel_id", channel.Id)
|
||||||
a.Publish(message)
|
a.Publish(message)
|
||||||
|
|
||||||
user, nErr := a.Srv().Store.User().Get(userId)
|
user, nErr := a.Srv().Store.User().Get(userID)
|
||||||
if nErr != nil {
|
if nErr != nil {
|
||||||
var nfErr *store.ErrNotFound
|
var nfErr *store.ErrNotFound
|
||||||
switch {
|
switch {
|
||||||
@@ -730,7 +730,7 @@ func (a *App) RestoreChannel(channel *model.Channel, userId string) (*model.Chan
|
|||||||
ChannelId: channel.Id,
|
ChannelId: channel.Id,
|
||||||
Message: T("api.channel.restore_channel.unarchived", map[string]interface{}{"Username": user.Username}),
|
Message: T("api.channel.restore_channel.unarchived", map[string]interface{}{"Username": user.Username}),
|
||||||
Type: model.POST_CHANNEL_RESTORED,
|
Type: model.POST_CHANNEL_RESTORED,
|
||||||
UserId: userId,
|
UserId: userID,
|
||||||
Props: model.StringInterface{
|
Props: model.StringInterface{
|
||||||
"username": user.Username,
|
"username": user.Username,
|
||||||
},
|
},
|
||||||
@@ -744,7 +744,7 @@ func (a *App) RestoreChannel(channel *model.Channel, userId string) (*model.Chan
|
|||||||
return channel, nil
|
return channel, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) PatchChannel(channel *model.Channel, patch *model.ChannelPatch, userId string) (*model.Channel, *model.AppError) {
|
func (a *App) PatchChannel(channel *model.Channel, patch *model.ChannelPatch, userID string) (*model.Channel, *model.AppError) {
|
||||||
oldChannelDisplayName := channel.DisplayName
|
oldChannelDisplayName := channel.DisplayName
|
||||||
oldChannelHeader := channel.Header
|
oldChannelHeader := channel.Header
|
||||||
oldChannelPurpose := channel.Purpose
|
oldChannelPurpose := channel.Purpose
|
||||||
@@ -756,19 +756,19 @@ func (a *App) PatchChannel(channel *model.Channel, patch *model.ChannelPatch, us
|
|||||||
}
|
}
|
||||||
|
|
||||||
if oldChannelDisplayName != channel.DisplayName {
|
if oldChannelDisplayName != channel.DisplayName {
|
||||||
if err = a.PostUpdateChannelDisplayNameMessage(userId, channel, oldChannelDisplayName, channel.DisplayName); err != nil {
|
if err = a.PostUpdateChannelDisplayNameMessage(userID, channel, oldChannelDisplayName, channel.DisplayName); err != nil {
|
||||||
mlog.Warn(err.Error())
|
mlog.Warn(err.Error())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if channel.Header != oldChannelHeader {
|
if channel.Header != oldChannelHeader {
|
||||||
if err = a.PostUpdateChannelHeaderMessage(userId, channel, oldChannelHeader, channel.Header); err != nil {
|
if err = a.PostUpdateChannelHeaderMessage(userID, channel, oldChannelHeader, channel.Header); err != nil {
|
||||||
mlog.Warn(err.Error())
|
mlog.Warn(err.Error())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if channel.Purpose != oldChannelPurpose {
|
if channel.Purpose != oldChannelPurpose {
|
||||||
if err = a.PostUpdateChannelPurposeMessage(userId, channel, oldChannelPurpose, channel.Purpose); err != nil {
|
if err = a.PostUpdateChannelPurposeMessage(userID, channel, oldChannelPurpose, channel.Purpose); err != nil {
|
||||||
mlog.Warn(err.Error())
|
mlog.Warn(err.Error())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -801,8 +801,8 @@ func (a *App) GetSchemeRolesForChannel(channelId string) (guestRoleName, userRol
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetTeamSchemeChannelRoles Checks if a team has an override scheme and returns the scheme channel role names or default channel role names.
|
// GetTeamSchemeChannelRoles Checks if a team has an override scheme and returns the scheme channel role names or default channel role names.
|
||||||
func (a *App) GetTeamSchemeChannelRoles(teamId string) (guestRoleName, userRoleName, adminRoleName string, err *model.AppError) {
|
func (a *App) GetTeamSchemeChannelRoles(teamID string) (guestRoleName, userRoleName, adminRoleName string, err *model.AppError) {
|
||||||
team, err := a.GetTeam(teamId)
|
team, err := a.GetTeam(teamID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -1040,10 +1040,10 @@ func buildChannelModerations(channelType string, memberRole *model.Role, guestRo
|
|||||||
return channelModerations
|
return channelModerations
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) UpdateChannelMemberRoles(channelId string, userId string, newRoles string) (*model.ChannelMember, *model.AppError) {
|
func (a *App) UpdateChannelMemberRoles(channelId string, userID string, newRoles string) (*model.ChannelMember, *model.AppError) {
|
||||||
var member *model.ChannelMember
|
var member *model.ChannelMember
|
||||||
var err *model.AppError
|
var err *model.AppError
|
||||||
if member, err = a.GetChannelMember(channelId, userId); err != nil {
|
if member, err = a.GetChannelMember(channelId, userID); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1099,8 +1099,8 @@ func (a *App) UpdateChannelMemberRoles(channelId string, userId string, newRoles
|
|||||||
return a.updateChannelMember(member)
|
return a.updateChannelMember(member)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) UpdateChannelMemberSchemeRoles(channelId string, userId string, isSchemeGuest bool, isSchemeUser bool, isSchemeAdmin bool) (*model.ChannelMember, *model.AppError) {
|
func (a *App) UpdateChannelMemberSchemeRoles(channelId string, userID string, isSchemeGuest bool, isSchemeUser bool, isSchemeAdmin bool) (*model.ChannelMember, *model.AppError) {
|
||||||
member, err := a.GetChannelMember(channelId, userId)
|
member, err := a.GetChannelMember(channelId, userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -1121,10 +1121,10 @@ func (a *App) UpdateChannelMemberSchemeRoles(channelId string, userId string, is
|
|||||||
return a.updateChannelMember(member)
|
return a.updateChannelMember(member)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) UpdateChannelMemberNotifyProps(data map[string]string, channelId string, userId string) (*model.ChannelMember, *model.AppError) {
|
func (a *App) UpdateChannelMemberNotifyProps(data map[string]string, channelId string, userID string) (*model.ChannelMember, *model.AppError) {
|
||||||
var member *model.ChannelMember
|
var member *model.ChannelMember
|
||||||
var err *model.AppError
|
var err *model.AppError
|
||||||
if member, err = a.GetChannelMember(channelId, userId); err != nil {
|
if member, err = a.GetChannelMember(channelId, userID); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1184,7 +1184,7 @@ func (a *App) updateChannelMember(member *model.ChannelMember) (*model.ChannelMe
|
|||||||
return member, nil
|
return member, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) DeleteChannel(channel *model.Channel, userId string) *model.AppError {
|
func (a *App) DeleteChannel(channel *model.Channel, userID string) *model.AppError {
|
||||||
ihc := make(chan store.StoreResult, 1)
|
ihc := make(chan store.StoreResult, 1)
|
||||||
ohc := make(chan store.StoreResult, 1)
|
ohc := make(chan store.StoreResult, 1)
|
||||||
|
|
||||||
@@ -1201,9 +1201,9 @@ func (a *App) DeleteChannel(channel *model.Channel, userId string) *model.AppErr
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
var user *model.User
|
var user *model.User
|
||||||
if userId != "" {
|
if userID != "" {
|
||||||
var nErr error
|
var nErr error
|
||||||
user, nErr = a.Srv().Store.User().Get(userId)
|
user, nErr = a.Srv().Store.User().Get(userID)
|
||||||
if nErr != nil {
|
if nErr != nil {
|
||||||
var nfErr *store.ErrNotFound
|
var nfErr *store.ErrNotFound
|
||||||
switch {
|
switch {
|
||||||
@@ -1245,7 +1245,7 @@ func (a *App) DeleteChannel(channel *model.Channel, userId string) *model.AppErr
|
|||||||
ChannelId: channel.Id,
|
ChannelId: channel.Id,
|
||||||
Message: fmt.Sprintf(T("api.channel.delete_channel.archived"), user.Username),
|
Message: fmt.Sprintf(T("api.channel.delete_channel.archived"), user.Username),
|
||||||
Type: model.POST_CHANNEL_DELETED,
|
Type: model.POST_CHANNEL_DELETED,
|
||||||
UserId: userId,
|
UserId: userID,
|
||||||
Props: model.StringInterface{
|
Props: model.StringInterface{
|
||||||
"username": user.Username,
|
"username": user.Username,
|
||||||
},
|
},
|
||||||
@@ -1372,8 +1372,8 @@ func (a *App) AddUserToChannel(user *model.User, channel *model.Channel) (*model
|
|||||||
return newMember, nil
|
return newMember, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) AddChannelMember(userId string, channel *model.Channel, userRequestorId string, postRootId string) (*model.ChannelMember, *model.AppError) {
|
func (a *App) AddChannelMember(userID string, channel *model.Channel, userRequestorId string, postRootId string) (*model.ChannelMember, *model.AppError) {
|
||||||
if member, err := a.Srv().Store.Channel().GetMember(channel.Id, userId); err != nil {
|
if member, err := a.Srv().Store.Channel().GetMember(channel.Id, userID); err != nil {
|
||||||
var nfErr *store.ErrNotFound
|
var nfErr *store.ErrNotFound
|
||||||
if !errors.As(err, &nfErr) {
|
if !errors.As(err, &nfErr) {
|
||||||
return nil, model.NewAppError("AddChannelMember", "app.channel.get_member.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("AddChannelMember", "app.channel.get_member.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
@@ -1385,7 +1385,7 @@ func (a *App) AddChannelMember(userId string, channel *model.Channel, userReques
|
|||||||
var user *model.User
|
var user *model.User
|
||||||
var err *model.AppError
|
var err *model.AppError
|
||||||
|
|
||||||
if user, err = a.GetUser(userId); err != nil {
|
if user, err = a.GetUser(userID); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1411,7 +1411,7 @@ func (a *App) AddChannelMember(userId string, channel *model.Channel, userReques
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
if userRequestorId == "" || userId == userRequestorId {
|
if userRequestorId == "" || userID == userRequestorId {
|
||||||
a.postJoinChannelMessage(user, channel)
|
a.postJoinChannelMessage(user, channel)
|
||||||
} else {
|
} else {
|
||||||
a.Srv().Go(func() {
|
a.Srv().Go(func() {
|
||||||
@@ -1422,12 +1422,12 @@ func (a *App) AddChannelMember(userId string, channel *model.Channel, userReques
|
|||||||
return cm, nil
|
return cm, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) AddDirectChannels(teamId string, user *model.User) *model.AppError {
|
func (a *App) AddDirectChannels(teamID string, user *model.User) *model.AppError {
|
||||||
var profiles []*model.User
|
var profiles []*model.User
|
||||||
options := &model.UserGetOptions{InTeamId: teamId, Page: 0, PerPage: 100}
|
options := &model.UserGetOptions{InTeamId: teamID, Page: 0, PerPage: 100}
|
||||||
profiles, err := a.Srv().Store.User().GetProfiles(options)
|
profiles, err := a.Srv().Store.User().GetProfiles(options)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return model.NewAppError("AddDirectChannels", "api.user.add_direct_channels_and_forget.failed.error", map[string]interface{}{"UserId": user.Id, "TeamId": teamId, "Error": err.Error()}, "", http.StatusInternalServerError)
|
return model.NewAppError("AddDirectChannels", "api.user.add_direct_channels_and_forget.failed.error", map[string]interface{}{"UserId": user.Id, "TeamId": teamID, "Error": err.Error()}, "", http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
|
|
||||||
var preferences model.Preferences
|
var preferences model.Preferences
|
||||||
@@ -1452,14 +1452,14 @@ func (a *App) AddDirectChannels(teamId string, user *model.User) *model.AppError
|
|||||||
}
|
}
|
||||||
|
|
||||||
if err := a.Srv().Store.Preference().Save(&preferences); err != nil {
|
if err := a.Srv().Store.Preference().Save(&preferences); err != nil {
|
||||||
return model.NewAppError("AddDirectChannels", "api.user.add_direct_channels_and_forget.failed.error", map[string]interface{}{"UserId": user.Id, "TeamId": teamId, "Error": err.Error()}, "", http.StatusInternalServerError)
|
return model.NewAppError("AddDirectChannels", "api.user.add_direct_channels_and_forget.failed.error", map[string]interface{}{"UserId": user.Id, "TeamId": teamID, "Error": err.Error()}, "", http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) PostUpdateChannelHeaderMessage(userId string, channel *model.Channel, oldChannelHeader, newChannelHeader string) *model.AppError {
|
func (a *App) PostUpdateChannelHeaderMessage(userID string, channel *model.Channel, oldChannelHeader, newChannelHeader string) *model.AppError {
|
||||||
user, err := a.Srv().Store.User().Get(userId)
|
user, err := a.Srv().Store.User().Get(userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return model.NewAppError("PostUpdateChannelHeaderMessage", "api.channel.post_update_channel_header_message_and_forget.retrieve_user.error", nil, err.Error(), http.StatusBadRequest)
|
return model.NewAppError("PostUpdateChannelHeaderMessage", "api.channel.post_update_channel_header_message_and_forget.retrieve_user.error", nil, err.Error(), http.StatusBadRequest)
|
||||||
}
|
}
|
||||||
@@ -1477,7 +1477,7 @@ func (a *App) PostUpdateChannelHeaderMessage(userId string, channel *model.Chann
|
|||||||
ChannelId: channel.Id,
|
ChannelId: channel.Id,
|
||||||
Message: message,
|
Message: message,
|
||||||
Type: model.POST_HEADER_CHANGE,
|
Type: model.POST_HEADER_CHANGE,
|
||||||
UserId: userId,
|
UserId: userID,
|
||||||
Props: model.StringInterface{
|
Props: model.StringInterface{
|
||||||
"username": user.Username,
|
"username": user.Username,
|
||||||
"old_header": oldChannelHeader,
|
"old_header": oldChannelHeader,
|
||||||
@@ -1492,8 +1492,8 @@ func (a *App) PostUpdateChannelHeaderMessage(userId string, channel *model.Chann
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) PostUpdateChannelPurposeMessage(userId string, channel *model.Channel, oldChannelPurpose string, newChannelPurpose string) *model.AppError {
|
func (a *App) PostUpdateChannelPurposeMessage(userID string, channel *model.Channel, oldChannelPurpose string, newChannelPurpose string) *model.AppError {
|
||||||
user, err := a.Srv().Store.User().Get(userId)
|
user, err := a.Srv().Store.User().Get(userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return model.NewAppError("PostUpdateChannelPurposeMessage", "app.channel.post_update_channel_purpose_message.retrieve_user.error", nil, err.Error(), http.StatusBadRequest)
|
return model.NewAppError("PostUpdateChannelPurposeMessage", "app.channel.post_update_channel_purpose_message.retrieve_user.error", nil, err.Error(), http.StatusBadRequest)
|
||||||
}
|
}
|
||||||
@@ -1511,7 +1511,7 @@ func (a *App) PostUpdateChannelPurposeMessage(userId string, channel *model.Chan
|
|||||||
ChannelId: channel.Id,
|
ChannelId: channel.Id,
|
||||||
Message: message,
|
Message: message,
|
||||||
Type: model.POST_PURPOSE_CHANGE,
|
Type: model.POST_PURPOSE_CHANGE,
|
||||||
UserId: userId,
|
UserId: userID,
|
||||||
Props: model.StringInterface{
|
Props: model.StringInterface{
|
||||||
"username": user.Username,
|
"username": user.Username,
|
||||||
"old_purpose": oldChannelPurpose,
|
"old_purpose": oldChannelPurpose,
|
||||||
@@ -1525,8 +1525,8 @@ func (a *App) PostUpdateChannelPurposeMessage(userId string, channel *model.Chan
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) PostUpdateChannelDisplayNameMessage(userId string, channel *model.Channel, oldChannelDisplayName, newChannelDisplayName string) *model.AppError {
|
func (a *App) PostUpdateChannelDisplayNameMessage(userID string, channel *model.Channel, oldChannelDisplayName, newChannelDisplayName string) *model.AppError {
|
||||||
user, err := a.Srv().Store.User().Get(userId)
|
user, err := a.Srv().Store.User().Get(userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return model.NewAppError("PostUpdateChannelDisplayNameMessage", "api.channel.post_update_channel_displayname_message_and_forget.retrieve_user.error", nil, err.Error(), http.StatusBadRequest)
|
return model.NewAppError("PostUpdateChannelDisplayNameMessage", "api.channel.post_update_channel_displayname_message_and_forget.retrieve_user.error", nil, err.Error(), http.StatusBadRequest)
|
||||||
}
|
}
|
||||||
@@ -1537,7 +1537,7 @@ func (a *App) PostUpdateChannelDisplayNameMessage(userId string, channel *model.
|
|||||||
ChannelId: channel.Id,
|
ChannelId: channel.Id,
|
||||||
Message: message,
|
Message: message,
|
||||||
Type: model.POST_DISPLAYNAME_CHANGE,
|
Type: model.POST_DISPLAYNAME_CHANGE,
|
||||||
UserId: userId,
|
UserId: userID,
|
||||||
Props: model.StringInterface{
|
Props: model.StringInterface{
|
||||||
"username": user.Username,
|
"username": user.Username,
|
||||||
"old_displayname": oldChannelDisplayName,
|
"old_displayname": oldChannelDisplayName,
|
||||||
@@ -1566,14 +1566,14 @@ func (a *App) GetChannel(channelId string) (*model.Channel, *model.AppError) {
|
|||||||
return channel, nil
|
return channel, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetChannelByName(channelName, teamId string, includeDeleted bool) (*model.Channel, *model.AppError) {
|
func (a *App) GetChannelByName(channelName, teamID string, includeDeleted bool) (*model.Channel, *model.AppError) {
|
||||||
var channel *model.Channel
|
var channel *model.Channel
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
if includeDeleted {
|
if includeDeleted {
|
||||||
channel, err = a.Srv().Store.Channel().GetByNameIncludeDeleted(teamId, channelName, false)
|
channel, err = a.Srv().Store.Channel().GetByNameIncludeDeleted(teamID, channelName, false)
|
||||||
} else {
|
} else {
|
||||||
channel, err = a.Srv().Store.Channel().GetByName(teamId, channelName, false)
|
channel, err = a.Srv().Store.Channel().GetByName(teamID, channelName, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -1589,8 +1589,8 @@ func (a *App) GetChannelByName(channelName, teamId string, includeDeleted bool)
|
|||||||
return channel, nil
|
return channel, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetChannelsByNames(channelNames []string, teamId string) ([]*model.Channel, *model.AppError) {
|
func (a *App) GetChannelsByNames(channelNames []string, teamID string) ([]*model.Channel, *model.AppError) {
|
||||||
channels, err := a.Srv().Store.Channel().GetByNames(teamId, channelNames, true)
|
channels, err := a.Srv().Store.Channel().GetByNames(teamID, channelNames, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("GetChannelsByNames", "app.channel.get_by_name.existing.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("GetChannelsByNames", "app.channel.get_by_name.existing.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -1633,8 +1633,8 @@ func (a *App) GetChannelByNameForTeamName(channelName, teamName string, includeD
|
|||||||
return result, nil
|
return result, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetChannelsForUser(teamId string, userId string, includeDeleted bool, lastDeleteAt int) (*model.ChannelList, *model.AppError) {
|
func (a *App) GetChannelsForUser(teamID string, userID string, includeDeleted bool, lastDeleteAt int) (*model.ChannelList, *model.AppError) {
|
||||||
list, err := a.Srv().Store.Channel().GetChannels(teamId, userId, includeDeleted, lastDeleteAt)
|
list, err := a.Srv().Store.Channel().GetChannels(teamID, userID, includeDeleted, lastDeleteAt)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
var nfErr *store.ErrNotFound
|
var nfErr *store.ErrNotFound
|
||||||
switch {
|
switch {
|
||||||
@@ -1682,8 +1682,8 @@ func (a *App) GetAllChannelsCount(opts model.ChannelSearchOpts) (int64, *model.A
|
|||||||
return count, nil
|
return count, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetDeletedChannels(teamId string, offset int, limit int, userId string) (*model.ChannelList, *model.AppError) {
|
func (a *App) GetDeletedChannels(teamID string, offset int, limit int, userID string) (*model.ChannelList, *model.AppError) {
|
||||||
list, err := a.Srv().Store.Channel().GetDeleted(teamId, offset, limit, userId)
|
list, err := a.Srv().Store.Channel().GetDeleted(teamID, offset, limit, userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
var nfErr *store.ErrNotFound
|
var nfErr *store.ErrNotFound
|
||||||
switch {
|
switch {
|
||||||
@@ -1697,16 +1697,16 @@ func (a *App) GetDeletedChannels(teamId string, offset int, limit int, userId st
|
|||||||
return list, nil
|
return list, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetChannelsUserNotIn(teamId string, userId string, offset int, limit int) (*model.ChannelList, *model.AppError) {
|
func (a *App) GetChannelsUserNotIn(teamID string, userID string, offset int, limit int) (*model.ChannelList, *model.AppError) {
|
||||||
channels, err := a.Srv().Store.Channel().GetMoreChannels(teamId, userId, offset, limit)
|
channels, err := a.Srv().Store.Channel().GetMoreChannels(teamID, userID, offset, limit)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("GetChannelsUserNotIn", "app.channel.get_more_channels.get.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("GetChannelsUserNotIn", "app.channel.get_more_channels.get.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
return channels, nil
|
return channels, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetPublicChannelsByIdsForTeam(teamId string, channelIds []string) (*model.ChannelList, *model.AppError) {
|
func (a *App) GetPublicChannelsByIdsForTeam(teamID string, channelIds []string) (*model.ChannelList, *model.AppError) {
|
||||||
list, err := a.Srv().Store.Channel().GetPublicChannelsByIdsForTeam(teamId, channelIds)
|
list, err := a.Srv().Store.Channel().GetPublicChannelsByIdsForTeam(teamID, channelIds)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
var nfErr *store.ErrNotFound
|
var nfErr *store.ErrNotFound
|
||||||
switch {
|
switch {
|
||||||
@@ -1720,8 +1720,8 @@ func (a *App) GetPublicChannelsByIdsForTeam(teamId string, channelIds []string)
|
|||||||
return list, nil
|
return list, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetPublicChannelsForTeam(teamId string, offset int, limit int) (*model.ChannelList, *model.AppError) {
|
func (a *App) GetPublicChannelsForTeam(teamID string, offset int, limit int) (*model.ChannelList, *model.AppError) {
|
||||||
list, err := a.Srv().Store.Channel().GetPublicChannelsForTeam(teamId, offset, limit)
|
list, err := a.Srv().Store.Channel().GetPublicChannelsForTeam(teamID, offset, limit)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("GetPublicChannelsForTeam", "app.channel.get_public_channels.get.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("GetPublicChannelsForTeam", "app.channel.get_public_channels.get.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -1729,8 +1729,8 @@ func (a *App) GetPublicChannelsForTeam(teamId string, offset int, limit int) (*m
|
|||||||
return list, nil
|
return list, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetPrivateChannelsForTeam(teamId string, offset int, limit int) (*model.ChannelList, *model.AppError) {
|
func (a *App) GetPrivateChannelsForTeam(teamID string, offset int, limit int) (*model.ChannelList, *model.AppError) {
|
||||||
list, err := a.Srv().Store.Channel().GetPrivateChannelsForTeam(teamId, offset, limit)
|
list, err := a.Srv().Store.Channel().GetPrivateChannelsForTeam(teamID, offset, limit)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("GetPrivateChannelsForTeam", "app.channel.get_private_channels.get.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("GetPrivateChannelsForTeam", "app.channel.get_private_channels.get.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -1738,8 +1738,8 @@ func (a *App) GetPrivateChannelsForTeam(teamId string, offset int, limit int) (*
|
|||||||
return list, nil
|
return list, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetChannelMember(channelId string, userId string) (*model.ChannelMember, *model.AppError) {
|
func (a *App) GetChannelMember(channelId string, userID string) (*model.ChannelMember, *model.AppError) {
|
||||||
channelMember, err := a.Srv().Store.Channel().GetMember(channelId, userId)
|
channelMember, err := a.Srv().Store.Channel().GetMember(channelId, userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
var nfErr *store.ErrNotFound
|
var nfErr *store.ErrNotFound
|
||||||
switch {
|
switch {
|
||||||
@@ -1779,8 +1779,8 @@ func (a *App) GetChannelMembersTimezones(channelId string) ([]string, *model.App
|
|||||||
return model.RemoveDuplicateStrings(timezones), nil
|
return model.RemoveDuplicateStrings(timezones), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetChannelMembersByIds(channelId string, userIds []string) (*model.ChannelMembers, *model.AppError) {
|
func (a *App) GetChannelMembersByIds(channelId string, userIDs []string) (*model.ChannelMembers, *model.AppError) {
|
||||||
members, err := a.Srv().Store.Channel().GetMembersByIds(channelId, userIds)
|
members, err := a.Srv().Store.Channel().GetMembersByIds(channelId, userIDs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("GetChannelMembersByIds", "app.channel.get_members_by_ids.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("GetChannelMembersByIds", "app.channel.get_members_by_ids.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -1788,8 +1788,8 @@ func (a *App) GetChannelMembersByIds(channelId string, userIds []string) (*model
|
|||||||
return members, nil
|
return members, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetChannelMembersForUser(teamId string, userId string) (*model.ChannelMembers, *model.AppError) {
|
func (a *App) GetChannelMembersForUser(teamID string, userID string) (*model.ChannelMembers, *model.AppError) {
|
||||||
channelMembers, err := a.Srv().Store.Channel().GetMembersForUser(teamId, userId)
|
channelMembers, err := a.Srv().Store.Channel().GetMembersForUser(teamID, userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("GetChannelMembersForUser", "app.channel.get_members.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("GetChannelMembersForUser", "app.channel.get_members.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -1797,8 +1797,8 @@ func (a *App) GetChannelMembersForUser(teamId string, userId string) (*model.Cha
|
|||||||
return channelMembers, nil
|
return channelMembers, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetChannelMembersForUserWithPagination(teamId, userId string, page, perPage int) ([]*model.ChannelMember, *model.AppError) {
|
func (a *App) GetChannelMembersForUserWithPagination(teamID, userID string, page, perPage int) ([]*model.ChannelMember, *model.AppError) {
|
||||||
m, err := a.Srv().Store.Channel().GetMembersForUserWithPagination(teamId, userId, page, perPage)
|
m, err := a.Srv().Store.Channel().GetMembersForUserWithPagination(teamID, userID, page, perPage)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("GetChannelMembersForUserWithPagination", "app.channel.get_members.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("GetChannelMembersForUserWithPagination", "app.channel.get_members.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -1840,8 +1840,8 @@ func (a *App) GetChannelPinnedPostCount(channelId string) (int64, *model.AppErro
|
|||||||
return count, nil
|
return count, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetChannelCounts(teamId string, userId string) (*model.ChannelCounts, *model.AppError) {
|
func (a *App) GetChannelCounts(teamID string, userID string) (*model.ChannelCounts, *model.AppError) {
|
||||||
counts, err := a.Srv().Store.Channel().GetChannelCounts(teamId, userId)
|
counts, err := a.Srv().Store.Channel().GetChannelCounts(teamID, userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("SqlChannelStore.GetChannelCounts", "app.channel.get_channel_counts.get.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("SqlChannelStore.GetChannelCounts", "app.channel.get_channel_counts.get.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -1849,8 +1849,8 @@ func (a *App) GetChannelCounts(teamId string, userId string) (*model.ChannelCoun
|
|||||||
return counts, nil
|
return counts, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetChannelUnread(channelId, userId string) (*model.ChannelUnread, *model.AppError) {
|
func (a *App) GetChannelUnread(channelId, userID string) (*model.ChannelUnread, *model.AppError) {
|
||||||
channelUnread, err := a.Srv().Store.Channel().GetChannelUnread(channelId, userId)
|
channelUnread, err := a.Srv().Store.Channel().GetChannelUnread(channelId, userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
var nfErr *store.ErrNotFound
|
var nfErr *store.ErrNotFound
|
||||||
switch {
|
switch {
|
||||||
@@ -1868,16 +1868,16 @@ func (a *App) GetChannelUnread(channelId, userId string) (*model.ChannelUnread,
|
|||||||
return channelUnread, nil
|
return channelUnread, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) JoinChannel(channel *model.Channel, userId string) *model.AppError {
|
func (a *App) JoinChannel(channel *model.Channel, userID string) *model.AppError {
|
||||||
userChan := make(chan store.StoreResult, 1)
|
userChan := make(chan store.StoreResult, 1)
|
||||||
memberChan := make(chan store.StoreResult, 1)
|
memberChan := make(chan store.StoreResult, 1)
|
||||||
go func() {
|
go func() {
|
||||||
user, err := a.Srv().Store.User().Get(userId)
|
user, err := a.Srv().Store.User().Get(userID)
|
||||||
userChan <- store.StoreResult{Data: user, NErr: err}
|
userChan <- store.StoreResult{Data: user, NErr: err}
|
||||||
close(userChan)
|
close(userChan)
|
||||||
}()
|
}()
|
||||||
go func() {
|
go func() {
|
||||||
member, err := a.Srv().Store.Channel().GetMember(channel.Id, userId)
|
member, err := a.Srv().Store.Channel().GetMember(channel.Id, userID)
|
||||||
memberChan <- store.StoreResult{Data: member, NErr: err}
|
memberChan <- store.StoreResult{Data: member, NErr: err}
|
||||||
close(memberChan)
|
close(memberChan)
|
||||||
}()
|
}()
|
||||||
@@ -1971,7 +1971,7 @@ func (a *App) postJoinTeamMessage(user *model.User, channel *model.Channel) *mod
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) LeaveChannel(channelId string, userId string) *model.AppError {
|
func (a *App) LeaveChannel(channelId string, userID string) *model.AppError {
|
||||||
sc := make(chan store.StoreResult, 1)
|
sc := make(chan store.StoreResult, 1)
|
||||||
go func() {
|
go func() {
|
||||||
channel, err := a.Srv().Store.Channel().Get(channelId, true)
|
channel, err := a.Srv().Store.Channel().Get(channelId, true)
|
||||||
@@ -1981,7 +1981,7 @@ func (a *App) LeaveChannel(channelId string, userId string) *model.AppError {
|
|||||||
|
|
||||||
uc := make(chan store.StoreResult, 1)
|
uc := make(chan store.StoreResult, 1)
|
||||||
go func() {
|
go func() {
|
||||||
user, err := a.Srv().Store.User().Get(userId)
|
user, err := a.Srv().Store.User().Get(userID)
|
||||||
uc <- store.StoreResult{Data: user, NErr: err}
|
uc <- store.StoreResult{Data: user, NErr: err}
|
||||||
close(uc)
|
close(uc)
|
||||||
}()
|
}()
|
||||||
@@ -2032,7 +2032,7 @@ func (a *App) LeaveChannel(channelId string, userId string) *model.AppError {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := a.removeUserFromChannel(userId, userId, channel); err != nil {
|
if err := a.removeUserFromChannel(userID, userID, channel); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2142,8 +2142,8 @@ func (a *App) postRemoveFromChannelMessage(removerUserId string, removedUser *mo
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) removeUserFromChannel(userIdToRemove string, removerUserId string, channel *model.Channel) *model.AppError {
|
func (a *App) removeUserFromChannel(userIDToRemove string, removerUserId string, channel *model.Channel) *model.AppError {
|
||||||
user, nErr := a.Srv().Store.User().Get(userIdToRemove)
|
user, nErr := a.Srv().Store.User().Get(userIDToRemove)
|
||||||
if nErr != nil {
|
if nErr != nil {
|
||||||
var nfErr *store.ErrNotFound
|
var nfErr *store.ErrNotFound
|
||||||
switch {
|
switch {
|
||||||
@@ -2161,8 +2161,8 @@ func (a *App) removeUserFromChannel(userIdToRemove string, removerUserId string,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if channel.IsGroupConstrained() && userIdToRemove != removerUserId && !user.IsBot {
|
if channel.IsGroupConstrained() && userIDToRemove != removerUserId && !user.IsBot {
|
||||||
nonMembers, err := a.FilterNonGroupChannelMembers([]string{userIdToRemove}, channel)
|
nonMembers, err := a.FilterNonGroupChannelMembers([]string{userIDToRemove}, channel)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return model.NewAppError("removeUserFromChannel", "api.channel.remove_user_from_channel.app_error", nil, "", http.StatusInternalServerError)
|
return model.NewAppError("removeUserFromChannel", "api.channel.remove_user_from_channel.app_error", nil, "", http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -2171,25 +2171,25 @@ func (a *App) removeUserFromChannel(userIdToRemove string, removerUserId string,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cm, err := a.GetChannelMember(channel.Id, userIdToRemove)
|
cm, err := a.GetChannelMember(channel.Id, userIDToRemove)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := a.Srv().Store.Channel().RemoveMember(channel.Id, userIdToRemove); err != nil {
|
if err := a.Srv().Store.Channel().RemoveMember(channel.Id, userIDToRemove); err != nil {
|
||||||
return model.NewAppError("removeUserFromChannel", "app.channel.remove_member.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return model.NewAppError("removeUserFromChannel", "app.channel.remove_member.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
if err := a.Srv().Store.ChannelMemberHistory().LogLeaveEvent(userIdToRemove, channel.Id, model.GetMillis()); err != nil {
|
if err := a.Srv().Store.ChannelMemberHistory().LogLeaveEvent(userIDToRemove, channel.Id, model.GetMillis()); err != nil {
|
||||||
return model.NewAppError("removeUserFromChannel", "app.channel_member_history.log_leave_event.internal_error", nil, err.Error(), http.StatusInternalServerError)
|
return model.NewAppError("removeUserFromChannel", "app.channel_member_history.log_leave_event.internal_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
|
|
||||||
if isGuest {
|
if isGuest {
|
||||||
currentMembers, err := a.GetChannelMembersForUser(channel.TeamId, userIdToRemove)
|
currentMembers, err := a.GetChannelMembersForUser(channel.TeamId, userIDToRemove)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if len(*currentMembers) == 0 {
|
if len(*currentMembers) == 0 {
|
||||||
teamMember, err := a.GetTeamMember(channel.TeamId, userIdToRemove)
|
teamMember, err := a.GetTeamMember(channel.TeamId, userIDToRemove)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return model.NewAppError("removeUserFromChannel", "api.team.remove_user_from_team.missing.app_error", nil, err.Error(), http.StatusBadRequest)
|
return model.NewAppError("removeUserFromChannel", "api.team.remove_user_from_team.missing.app_error", nil, err.Error(), http.StatusBadRequest)
|
||||||
}
|
}
|
||||||
@@ -2200,7 +2200,7 @@ func (a *App) removeUserFromChannel(userIdToRemove string, removerUserId string,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
a.InvalidateCacheForUser(userIdToRemove)
|
a.InvalidateCacheForUser(userIDToRemove)
|
||||||
a.invalidateCacheForChannelMembers(channel.Id)
|
a.invalidateCacheForChannelMembers(channel.Id)
|
||||||
|
|
||||||
if pluginsEnvironment := a.GetPluginsEnvironment(); pluginsEnvironment != nil {
|
if pluginsEnvironment := a.GetPluginsEnvironment(); pluginsEnvironment != nil {
|
||||||
@@ -2219,12 +2219,12 @@ func (a *App) removeUserFromChannel(userIdToRemove string, removerUserId string,
|
|||||||
}
|
}
|
||||||
|
|
||||||
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_USER_REMOVED, "", channel.Id, "", nil)
|
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_USER_REMOVED, "", channel.Id, "", nil)
|
||||||
message.Add("user_id", userIdToRemove)
|
message.Add("user_id", userIDToRemove)
|
||||||
message.Add("remover_id", removerUserId)
|
message.Add("remover_id", removerUserId)
|
||||||
a.Publish(message)
|
a.Publish(message)
|
||||||
|
|
||||||
// because the removed user no longer belongs to the channel we need to send a separate websocket event
|
// because the removed user no longer belongs to the channel we need to send a separate websocket event
|
||||||
userMsg := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_USER_REMOVED, "", "", userIdToRemove, nil)
|
userMsg := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_USER_REMOVED, "", "", userIDToRemove, nil)
|
||||||
userMsg.Add("channel_id", channel.Id)
|
userMsg.Add("channel_id", channel.Id)
|
||||||
userMsg.Add("remover_id", removerUserId)
|
userMsg.Add("remover_id", removerUserId)
|
||||||
a.Publish(userMsg)
|
a.Publish(userMsg)
|
||||||
@@ -2232,19 +2232,19 @@ func (a *App) removeUserFromChannel(userIdToRemove string, removerUserId string,
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) RemoveUserFromChannel(userIdToRemove string, removerUserId string, channel *model.Channel) *model.AppError {
|
func (a *App) RemoveUserFromChannel(userIDToRemove string, removerUserId string, channel *model.Channel) *model.AppError {
|
||||||
var err *model.AppError
|
var err *model.AppError
|
||||||
|
|
||||||
if err = a.removeUserFromChannel(userIdToRemove, removerUserId, channel); err != nil {
|
if err = a.removeUserFromChannel(userIDToRemove, removerUserId, channel); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
var user *model.User
|
var user *model.User
|
||||||
if user, err = a.GetUser(userIdToRemove); err != nil {
|
if user, err = a.GetUser(userIDToRemove); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if userIdToRemove == removerUserId {
|
if userIDToRemove == removerUserId {
|
||||||
a.postLeaveChannelMessage(user, channel)
|
a.postLeaveChannelMessage(user, channel)
|
||||||
} else {
|
} else {
|
||||||
a.Srv().Go(func() {
|
a.Srv().Go(func() {
|
||||||
@@ -2255,9 +2255,9 @@ func (a *App) RemoveUserFromChannel(userIdToRemove string, removerUserId string,
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetNumberOfChannelsOnTeam(teamId string) (int, *model.AppError) {
|
func (a *App) GetNumberOfChannelsOnTeam(teamID string) (int, *model.AppError) {
|
||||||
// Get total number of channels on current team
|
// Get total number of channels on current team
|
||||||
list, err := a.Srv().Store.Channel().GetTeamChannels(teamId)
|
list, err := a.Srv().Store.Channel().GetTeamChannels(teamID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
var nfErr *store.ErrNotFound
|
var nfErr *store.ErrNotFound
|
||||||
switch {
|
switch {
|
||||||
@@ -2270,13 +2270,13 @@ func (a *App) GetNumberOfChannelsOnTeam(teamId string) (int, *model.AppError) {
|
|||||||
return len(*list), nil
|
return len(*list), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) SetActiveChannel(userId string, channelId string) *model.AppError {
|
func (a *App) SetActiveChannel(userID string, channelId string) *model.AppError {
|
||||||
status, err := a.GetStatus(userId)
|
status, err := a.GetStatus(userID)
|
||||||
|
|
||||||
oldStatus := model.STATUS_OFFLINE
|
oldStatus := model.STATUS_OFFLINE
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
status = &model.Status{UserId: userId, Status: model.STATUS_ONLINE, Manual: false, LastActivityAt: model.GetMillis(), ActiveChannel: channelId}
|
status = &model.Status{UserId: userID, Status: model.STATUS_ONLINE, Manual: false, LastActivityAt: model.GetMillis(), ActiveChannel: channelId}
|
||||||
} else {
|
} else {
|
||||||
oldStatus = status.Status
|
oldStatus = status.Status
|
||||||
status.ActiveChannel = channelId
|
status.ActiveChannel = channelId
|
||||||
@@ -2295,8 +2295,8 @@ func (a *App) SetActiveChannel(userId string, channelId string) *model.AppError
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) UpdateChannelLastViewedAt(channelIds []string, userId string) *model.AppError {
|
func (a *App) UpdateChannelLastViewedAt(channelIds []string, userID string) *model.AppError {
|
||||||
if _, err := a.Srv().Store.Channel().UpdateLastViewedAt(channelIds, userId, *a.Config().ServiceSettings.ThreadAutoFollow); err != nil {
|
if _, err := a.Srv().Store.Channel().UpdateLastViewedAt(channelIds, userID, *a.Config().ServiceSettings.ThreadAutoFollow); err != nil {
|
||||||
var invErr *store.ErrInvalidInput
|
var invErr *store.ErrInvalidInput
|
||||||
switch {
|
switch {
|
||||||
case errors.As(err, &invErr):
|
case errors.As(err, &invErr):
|
||||||
@@ -2308,7 +2308,7 @@ func (a *App) UpdateChannelLastViewedAt(channelIds []string, userId string) *mod
|
|||||||
|
|
||||||
if *a.Config().ServiceSettings.EnableChannelViewedMessages {
|
if *a.Config().ServiceSettings.EnableChannelViewedMessages {
|
||||||
for _, channelId := range channelIds {
|
for _, channelId := range channelIds {
|
||||||
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_CHANNEL_VIEWED, "", "", userId, nil)
|
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_CHANNEL_VIEWED, "", "", userID, nil)
|
||||||
message.Add("channel_id", channelId)
|
message.Add("channel_id", channelId)
|
||||||
a.Publish(message)
|
a.Publish(message)
|
||||||
}
|
}
|
||||||
@@ -2369,11 +2369,11 @@ func (a *App) MarkChannelAsUnreadFromPost(postID string, userID string) (*model.
|
|||||||
return channelUnread, nil
|
return channelUnread, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) AutocompleteChannels(teamId string, term string) (*model.ChannelList, *model.AppError) {
|
func (a *App) AutocompleteChannels(teamID string, term string) (*model.ChannelList, *model.AppError) {
|
||||||
includeDeleted := *a.Config().TeamSettings.ExperimentalViewArchivedChannels
|
includeDeleted := *a.Config().TeamSettings.ExperimentalViewArchivedChannels
|
||||||
term = strings.TrimSpace(term)
|
term = strings.TrimSpace(term)
|
||||||
|
|
||||||
channelList, err := a.Srv().Store.Channel().AutocompleteInTeam(teamId, term, includeDeleted)
|
channelList, err := a.Srv().Store.Channel().AutocompleteInTeam(teamID, term, includeDeleted)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("AutocompleteChannels", "app.channel.search.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("AutocompleteChannels", "app.channel.search.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -2381,12 +2381,12 @@ func (a *App) AutocompleteChannels(teamId string, term string) (*model.ChannelLi
|
|||||||
return channelList, nil
|
return channelList, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) AutocompleteChannelsForSearch(teamId string, userId string, term string) (*model.ChannelList, *model.AppError) {
|
func (a *App) AutocompleteChannelsForSearch(teamID string, userID string, term string) (*model.ChannelList, *model.AppError) {
|
||||||
includeDeleted := *a.Config().TeamSettings.ExperimentalViewArchivedChannels
|
includeDeleted := *a.Config().TeamSettings.ExperimentalViewArchivedChannels
|
||||||
|
|
||||||
term = strings.TrimSpace(term)
|
term = strings.TrimSpace(term)
|
||||||
|
|
||||||
channelList, err := a.Srv().Store.Channel().AutocompleteInTeamForSearch(teamId, userId, term, includeDeleted)
|
channelList, err := a.Srv().Store.Channel().AutocompleteInTeamForSearch(teamID, userID, term, includeDeleted)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("AutocompleteChannelsForSearch", "app.channel.search.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("AutocompleteChannelsForSearch", "app.channel.search.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -2423,12 +2423,12 @@ func (a *App) SearchAllChannels(term string, opts model.ChannelSearchOpts) (*mod
|
|||||||
return channelList, totalCount, nil
|
return channelList, totalCount, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) SearchChannels(teamId string, term string) (*model.ChannelList, *model.AppError) {
|
func (a *App) SearchChannels(teamID string, term string) (*model.ChannelList, *model.AppError) {
|
||||||
includeDeleted := *a.Config().TeamSettings.ExperimentalViewArchivedChannels
|
includeDeleted := *a.Config().TeamSettings.ExperimentalViewArchivedChannels
|
||||||
|
|
||||||
term = strings.TrimSpace(term)
|
term = strings.TrimSpace(term)
|
||||||
|
|
||||||
channelList, err := a.Srv().Store.Channel().SearchInTeam(teamId, term, includeDeleted)
|
channelList, err := a.Srv().Store.Channel().SearchInTeam(teamID, term, includeDeleted)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("SearchChannels", "app.channel.search.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("SearchChannels", "app.channel.search.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -2436,10 +2436,10 @@ func (a *App) SearchChannels(teamId string, term string) (*model.ChannelList, *m
|
|||||||
return channelList, nil
|
return channelList, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) SearchArchivedChannels(teamId string, term string, userId string) (*model.ChannelList, *model.AppError) {
|
func (a *App) SearchArchivedChannels(teamID string, term string, userID string) (*model.ChannelList, *model.AppError) {
|
||||||
term = strings.TrimSpace(term)
|
term = strings.TrimSpace(term)
|
||||||
|
|
||||||
channelList, err := a.Srv().Store.Channel().SearchArchivedInTeam(teamId, term, userId)
|
channelList, err := a.Srv().Store.Channel().SearchArchivedInTeam(teamID, term, userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("SearchArchivedChannels", "app.channel.search.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("SearchArchivedChannels", "app.channel.search.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -2447,12 +2447,12 @@ func (a *App) SearchArchivedChannels(teamId string, term string, userId string)
|
|||||||
return channelList, nil
|
return channelList, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) SearchChannelsForUser(userId, teamId, term string) (*model.ChannelList, *model.AppError) {
|
func (a *App) SearchChannelsForUser(userID, teamID, term string) (*model.ChannelList, *model.AppError) {
|
||||||
includeDeleted := *a.Config().TeamSettings.ExperimentalViewArchivedChannels
|
includeDeleted := *a.Config().TeamSettings.ExperimentalViewArchivedChannels
|
||||||
|
|
||||||
term = strings.TrimSpace(term)
|
term = strings.TrimSpace(term)
|
||||||
|
|
||||||
channelList, err := a.Srv().Store.Channel().SearchForUserInTeam(userId, teamId, term, includeDeleted)
|
channelList, err := a.Srv().Store.Channel().SearchForUserInTeam(userID, teamID, term, includeDeleted)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("SearchChannelsForUser", "app.channel.search.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("SearchChannelsForUser", "app.channel.search.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -2460,21 +2460,21 @@ func (a *App) SearchChannelsForUser(userId, teamId, term string) (*model.Channel
|
|||||||
return channelList, nil
|
return channelList, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) SearchGroupChannels(userId, term string) (*model.ChannelList, *model.AppError) {
|
func (a *App) SearchGroupChannels(userID, term string) (*model.ChannelList, *model.AppError) {
|
||||||
if term == "" {
|
if term == "" {
|
||||||
return &model.ChannelList{}, nil
|
return &model.ChannelList{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
channelList, err := a.Srv().Store.Channel().SearchGroupChannels(userId, term)
|
channelList, err := a.Srv().Store.Channel().SearchGroupChannels(userID, term)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("SearchGroupChannels", "app.channel.search_group_channels.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("SearchGroupChannels", "app.channel.search_group_channels.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
return channelList, nil
|
return channelList, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) SearchChannelsUserNotIn(teamId string, userId string, term string) (*model.ChannelList, *model.AppError) {
|
func (a *App) SearchChannelsUserNotIn(teamID string, userID string, term string) (*model.ChannelList, *model.AppError) {
|
||||||
term = strings.TrimSpace(term)
|
term = strings.TrimSpace(term)
|
||||||
channelList, err := a.Srv().Store.Channel().SearchMore(userId, teamId, term)
|
channelList, err := a.Srv().Store.Channel().SearchMore(userID, teamID, term)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("SearchChannelsUserNotIn", "app.channel.search.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("SearchChannelsUserNotIn", "app.channel.search.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -2482,7 +2482,7 @@ func (a *App) SearchChannelsUserNotIn(teamId string, userId string, term string)
|
|||||||
return channelList, nil
|
return channelList, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) MarkChannelsAsViewed(channelIds []string, userId string, currentSessionId string) (map[string]int64, *model.AppError) {
|
func (a *App) MarkChannelsAsViewed(channelIds []string, userID string, currentSessionId string) (map[string]int64, *model.AppError) {
|
||||||
// I start looking for channels with notifications before I mark it as read, to clear the push notifications if needed
|
// I start looking for channels with notifications before I mark it as read, to clear the push notifications if needed
|
||||||
channelsToClearPushNotifications := []string{}
|
channelsToClearPushNotifications := []string{}
|
||||||
if *a.Config().EmailSettings.SendPushNotifications {
|
if *a.Config().EmailSettings.SendPushNotifications {
|
||||||
@@ -2493,7 +2493,7 @@ func (a *App) MarkChannelsAsViewed(channelIds []string, userId string, currentSe
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
member, err := a.Srv().Store.Channel().GetMember(channelId, userId)
|
member, err := a.Srv().Store.Channel().GetMember(channelId, userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mlog.Warn("Failed to get membership", mlog.Err(err))
|
mlog.Warn("Failed to get membership", mlog.Err(err))
|
||||||
continue
|
continue
|
||||||
@@ -2501,21 +2501,21 @@ func (a *App) MarkChannelsAsViewed(channelIds []string, userId string, currentSe
|
|||||||
|
|
||||||
notify := member.NotifyProps[model.PUSH_NOTIFY_PROP]
|
notify := member.NotifyProps[model.PUSH_NOTIFY_PROP]
|
||||||
if notify == model.CHANNEL_NOTIFY_DEFAULT {
|
if notify == model.CHANNEL_NOTIFY_DEFAULT {
|
||||||
user, err := a.GetUser(userId)
|
user, err := a.GetUser(userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mlog.Warn("Failed to get user", mlog.String("user_id", userId), mlog.Err(err))
|
mlog.Warn("Failed to get user", mlog.String("user_id", userID), mlog.Err(err))
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
notify = user.NotifyProps[model.PUSH_NOTIFY_PROP]
|
notify = user.NotifyProps[model.PUSH_NOTIFY_PROP]
|
||||||
}
|
}
|
||||||
if notify == model.USER_NOTIFY_ALL {
|
if notify == model.USER_NOTIFY_ALL {
|
||||||
if count, err := a.Srv().Store.User().GetAnyUnreadPostCountForChannel(userId, channelId); err == nil {
|
if count, err := a.Srv().Store.User().GetAnyUnreadPostCountForChannel(userID, channelId); err == nil {
|
||||||
if count > 0 {
|
if count > 0 {
|
||||||
channelsToClearPushNotifications = append(channelsToClearPushNotifications, channelId)
|
channelsToClearPushNotifications = append(channelsToClearPushNotifications, channelId)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if notify == model.USER_NOTIFY_MENTION || channel.Type == model.CHANNEL_DIRECT {
|
} else if notify == model.USER_NOTIFY_MENTION || channel.Type == model.CHANNEL_DIRECT {
|
||||||
if count, err := a.Srv().Store.User().GetUnreadCountForChannel(userId, channelId); err == nil {
|
if count, err := a.Srv().Store.User().GetUnreadCountForChannel(userID, channelId); err == nil {
|
||||||
if count > 0 {
|
if count > 0 {
|
||||||
channelsToClearPushNotifications = append(channelsToClearPushNotifications, channelId)
|
channelsToClearPushNotifications = append(channelsToClearPushNotifications, channelId)
|
||||||
}
|
}
|
||||||
@@ -2523,7 +2523,7 @@ func (a *App) MarkChannelsAsViewed(channelIds []string, userId string, currentSe
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
times, err := a.Srv().Store.Channel().UpdateLastViewedAt(channelIds, userId, *a.Config().ServiceSettings.ThreadAutoFollow)
|
times, err := a.Srv().Store.Channel().UpdateLastViewedAt(channelIds, userID, *a.Config().ServiceSettings.ThreadAutoFollow)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
var invErr *store.ErrInvalidInput
|
var invErr *store.ErrInvalidInput
|
||||||
switch {
|
switch {
|
||||||
@@ -2536,19 +2536,19 @@ func (a *App) MarkChannelsAsViewed(channelIds []string, userId string, currentSe
|
|||||||
|
|
||||||
if *a.Config().ServiceSettings.EnableChannelViewedMessages {
|
if *a.Config().ServiceSettings.EnableChannelViewedMessages {
|
||||||
for _, channelId := range channelIds {
|
for _, channelId := range channelIds {
|
||||||
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_CHANNEL_VIEWED, "", "", userId, nil)
|
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_CHANNEL_VIEWED, "", "", userID, nil)
|
||||||
message.Add("channel_id", channelId)
|
message.Add("channel_id", channelId)
|
||||||
a.Publish(message)
|
a.Publish(message)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for _, channelId := range channelsToClearPushNotifications {
|
for _, channelId := range channelsToClearPushNotifications {
|
||||||
a.clearPushNotification(currentSessionId, userId, channelId)
|
a.clearPushNotification(currentSessionId, userID, channelId)
|
||||||
}
|
}
|
||||||
return times, nil
|
return times, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) ViewChannel(view *model.ChannelView, userId string, currentSessionId string) (map[string]int64, *model.AppError) {
|
func (a *App) ViewChannel(view *model.ChannelView, userID string, currentSessionId string) (map[string]int64, *model.AppError) {
|
||||||
if err := a.SetActiveChannel(userId, view.ChannelId); err != nil {
|
if err := a.SetActiveChannel(userID, view.ChannelId); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2566,7 +2566,7 @@ func (a *App) ViewChannel(view *model.ChannelView, userId string, currentSession
|
|||||||
return map[string]int64{}, nil
|
return map[string]int64{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return a.MarkChannelsAsViewed(channelIds, userId, currentSessionId)
|
return a.MarkChannelsAsViewed(channelIds, userID, currentSessionId)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) PermanentDeleteChannel(channel *model.Channel) *model.AppError {
|
func (a *App) PermanentDeleteChannel(channel *model.Channel) *model.AppError {
|
||||||
@@ -2760,8 +2760,8 @@ func (a *App) RemoveUsersFromChannelNotMemberOfTeam(remover *model.User, channel
|
|||||||
if remover != nil {
|
if remover != nil {
|
||||||
removerId = remover.Id
|
removerId = remover.Id
|
||||||
}
|
}
|
||||||
for userId := range channelMemberMap {
|
for userID := range channelMemberMap {
|
||||||
if err := a.removeUserFromChannel(userId, removerId, channel); err != nil {
|
if err := a.removeUserFromChannel(userID, removerId, channel); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2780,8 +2780,8 @@ func (a *App) GetPinnedPosts(channelId string) (*model.PostList, *model.AppError
|
|||||||
return posts, nil
|
return posts, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) ToggleMuteChannel(channelId, userId string) (*model.ChannelMember, *model.AppError) {
|
func (a *App) ToggleMuteChannel(channelId, userID string) (*model.ChannelMember, *model.AppError) {
|
||||||
member, nErr := a.Srv().Store.Channel().GetMember(channelId, userId)
|
member, nErr := a.Srv().Store.Channel().GetMember(channelId, userID)
|
||||||
if nErr != nil {
|
if nErr != nil {
|
||||||
var appErr *model.AppError
|
var appErr *model.AppError
|
||||||
var nfErr *store.ErrNotFound
|
var nfErr *store.ErrNotFound
|
||||||
@@ -2807,8 +2807,8 @@ func (a *App) ToggleMuteChannel(channelId, userId string) (*model.ChannelMember,
|
|||||||
return member, nil
|
return member, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) setChannelsMuted(channelIds []string, userId string, muted bool) ([]*model.ChannelMember, *model.AppError) {
|
func (a *App) setChannelsMuted(channelIds []string, userID string, muted bool) ([]*model.ChannelMember, *model.AppError) {
|
||||||
members, nErr := a.Srv().Store.Channel().GetMembersByChannelIds(channelIds, userId)
|
members, nErr := a.Srv().Store.Channel().GetMembersByChannelIds(channelIds, userID)
|
||||||
if nErr != nil {
|
if nErr != nil {
|
||||||
var appErr *model.AppError
|
var appErr *model.AppError
|
||||||
switch {
|
switch {
|
||||||
@@ -2871,7 +2871,7 @@ func (a *App) FillInChannelsProps(channelList *model.ChannelList) *model.AppErro
|
|||||||
channelsByTeam[channel.TeamId] = append(channelsByTeam[channel.TeamId], channel)
|
channelsByTeam[channel.TeamId] = append(channelsByTeam[channel.TeamId], channel)
|
||||||
}
|
}
|
||||||
|
|
||||||
for teamId, channelList := range channelsByTeam {
|
for teamID, channelList := range channelsByTeam {
|
||||||
allChannelMentions := make(map[string]bool)
|
allChannelMentions := make(map[string]bool)
|
||||||
channelMentions := make(map[*model.Channel][]string, len(channelList))
|
channelMentions := make(map[*model.Channel][]string, len(channelList))
|
||||||
|
|
||||||
@@ -2890,7 +2890,7 @@ func (a *App) FillInChannelsProps(channelList *model.ChannelList) *model.AppErro
|
|||||||
}
|
}
|
||||||
|
|
||||||
if len(allChannelMentionNames) > 0 {
|
if len(allChannelMentionNames) > 0 {
|
||||||
mentionedChannels, err := a.GetChannelsByNames(allChannelMentionNames, teamId)
|
mentionedChannels, err := a.GetChannelsByNames(allChannelMentionNames, teamID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,8 +13,8 @@ import (
|
|||||||
"github.com/mattermost/mattermost-server/v5/store"
|
"github.com/mattermost/mattermost-server/v5/store"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (a *App) createInitialSidebarCategories(userId, teamId string) *model.AppError {
|
func (a *App) createInitialSidebarCategories(userID, teamID string) *model.AppError {
|
||||||
nErr := a.Srv().Store.Channel().CreateInitialSidebarCategories(userId, teamId)
|
nErr := a.Srv().Store.Channel().CreateInitialSidebarCategories(userID, teamID)
|
||||||
|
|
||||||
if nErr != nil {
|
if nErr != nil {
|
||||||
return model.NewAppError("createInitialSidebarCategories", "app.channel.create_initial_sidebar_categories.internal_error", nil, nErr.Error(), http.StatusInternalServerError)
|
return model.NewAppError("createInitialSidebarCategories", "app.channel.create_initial_sidebar_categories.internal_error", nil, nErr.Error(), http.StatusInternalServerError)
|
||||||
@@ -23,17 +23,17 @@ func (a *App) createInitialSidebarCategories(userId, teamId string) *model.AppEr
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetSidebarCategories(userId, teamId string) (*model.OrderedSidebarCategories, *model.AppError) {
|
func (a *App) GetSidebarCategories(userID, teamID string) (*model.OrderedSidebarCategories, *model.AppError) {
|
||||||
categories, err := a.Srv().Store.Channel().GetSidebarCategories(userId, teamId)
|
categories, err := a.Srv().Store.Channel().GetSidebarCategories(userID, teamID)
|
||||||
|
|
||||||
if err == nil && len(categories.Categories) == 0 {
|
if err == nil && len(categories.Categories) == 0 {
|
||||||
// A user must always have categories, so migration must not have happened yet, and we should run it ourselves
|
// A user must always have categories, so migration must not have happened yet, and we should run it ourselves
|
||||||
appErr := a.createInitialSidebarCategories(userId, teamId)
|
appErr := a.createInitialSidebarCategories(userID, teamID)
|
||||||
if appErr != nil {
|
if appErr != nil {
|
||||||
return nil, appErr
|
return nil, appErr
|
||||||
}
|
}
|
||||||
|
|
||||||
categories, err = a.waitForSidebarCategories(userId, teamId)
|
categories, err = a.waitForSidebarCategories(userID, teamID)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -51,10 +51,10 @@ func (a *App) GetSidebarCategories(userId, teamId string) (*model.OrderedSidebar
|
|||||||
|
|
||||||
// waitForSidebarCategories is used to get a user's sidebar categories after they've been created since there may be
|
// waitForSidebarCategories is used to get a user's sidebar categories after they've been created since there may be
|
||||||
// replication lag if any database replicas exist. It will wait until results are available to return them.
|
// replication lag if any database replicas exist. It will wait until results are available to return them.
|
||||||
func (a *App) waitForSidebarCategories(userId, teamId string) (*model.OrderedSidebarCategories, error) {
|
func (a *App) waitForSidebarCategories(userID, teamID string) (*model.OrderedSidebarCategories, error) {
|
||||||
if len(a.Config().SqlSettings.DataSourceReplicas) == 0 {
|
if len(a.Config().SqlSettings.DataSourceReplicas) == 0 {
|
||||||
// The categories should be available immediately on a single database
|
// The categories should be available immediately on a single database
|
||||||
return a.Srv().Store.Channel().GetSidebarCategories(userId, teamId)
|
return a.Srv().Store.Channel().GetSidebarCategories(userID, teamID)
|
||||||
}
|
}
|
||||||
|
|
||||||
now := model.GetMillis()
|
now := model.GetMillis()
|
||||||
@@ -62,7 +62,7 @@ func (a *App) waitForSidebarCategories(userId, teamId string) (*model.OrderedSid
|
|||||||
for model.GetMillis()-now < 12000 {
|
for model.GetMillis()-now < 12000 {
|
||||||
time.Sleep(100 * time.Millisecond)
|
time.Sleep(100 * time.Millisecond)
|
||||||
|
|
||||||
categories, err := a.Srv().Store.Channel().GetSidebarCategories(userId, teamId)
|
categories, err := a.Srv().Store.Channel().GetSidebarCategories(userID, teamID)
|
||||||
|
|
||||||
if err != nil || len(categories.Categories) > 0 {
|
if err != nil || len(categories.Categories) > 0 {
|
||||||
// We've found something, so return
|
// We've found something, so return
|
||||||
@@ -70,13 +70,13 @@ func (a *App) waitForSidebarCategories(userId, teamId string) (*model.OrderedSid
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mlog.Error("waitForSidebarCategories giving up", mlog.String("user_id", userId), mlog.String("team_id", teamId))
|
mlog.Error("waitForSidebarCategories giving up", mlog.String("user_id", userID), mlog.String("team_id", teamID))
|
||||||
|
|
||||||
return &model.OrderedSidebarCategories{}, nil
|
return &model.OrderedSidebarCategories{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetSidebarCategoryOrder(userId, teamId string) ([]string, *model.AppError) {
|
func (a *App) GetSidebarCategoryOrder(userID, teamID string) ([]string, *model.AppError) {
|
||||||
categories, err := a.Srv().Store.Channel().GetSidebarCategoryOrder(userId, teamId)
|
categories, err := a.Srv().Store.Channel().GetSidebarCategoryOrder(userID, teamID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
var nfErr *store.ErrNotFound
|
var nfErr *store.ErrNotFound
|
||||||
switch {
|
switch {
|
||||||
@@ -105,8 +105,8 @@ func (a *App) GetSidebarCategory(categoryId string) (*model.SidebarCategoryWithC
|
|||||||
return category, nil
|
return category, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) CreateSidebarCategory(userId, teamId string, newCategory *model.SidebarCategoryWithChannels) (*model.SidebarCategoryWithChannels, *model.AppError) {
|
func (a *App) CreateSidebarCategory(userID, teamID string, newCategory *model.SidebarCategoryWithChannels) (*model.SidebarCategoryWithChannels, *model.AppError) {
|
||||||
category, err := a.Srv().Store.Channel().CreateSidebarCategory(userId, teamId, newCategory)
|
category, err := a.Srv().Store.Channel().CreateSidebarCategory(userID, teamID, newCategory)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
var nfErr *store.ErrNotFound
|
var nfErr *store.ErrNotFound
|
||||||
switch {
|
switch {
|
||||||
@@ -116,14 +116,14 @@ func (a *App) CreateSidebarCategory(userId, teamId string, newCategory *model.Si
|
|||||||
return nil, model.NewAppError("CreateSidebarCategory", "app.channel.sidebar_categories.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("CreateSidebarCategory", "app.channel.sidebar_categories.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_SIDEBAR_CATEGORY_CREATED, teamId, "", userId, nil)
|
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_SIDEBAR_CATEGORY_CREATED, teamID, "", userID, nil)
|
||||||
message.Add("category_id", category.Id)
|
message.Add("category_id", category.Id)
|
||||||
a.Publish(message)
|
a.Publish(message)
|
||||||
return category, nil
|
return category, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) UpdateSidebarCategoryOrder(userId, teamId string, categoryOrder []string) *model.AppError {
|
func (a *App) UpdateSidebarCategoryOrder(userID, teamID string, categoryOrder []string) *model.AppError {
|
||||||
err := a.Srv().Store.Channel().UpdateSidebarCategoryOrder(userId, teamId, categoryOrder)
|
err := a.Srv().Store.Channel().UpdateSidebarCategoryOrder(userID, teamID, categoryOrder)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
var nfErr *store.ErrNotFound
|
var nfErr *store.ErrNotFound
|
||||||
var invErr *store.ErrInvalidInput
|
var invErr *store.ErrInvalidInput
|
||||||
@@ -136,27 +136,27 @@ func (a *App) UpdateSidebarCategoryOrder(userId, teamId string, categoryOrder []
|
|||||||
return model.NewAppError("UpdateSidebarCategoryOrder", "app.channel.sidebar_categories.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return model.NewAppError("UpdateSidebarCategoryOrder", "app.channel.sidebar_categories.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_SIDEBAR_CATEGORY_ORDER_UPDATED, teamId, "", userId, nil)
|
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_SIDEBAR_CATEGORY_ORDER_UPDATED, teamID, "", userID, nil)
|
||||||
message.Add("order", categoryOrder)
|
message.Add("order", categoryOrder)
|
||||||
a.Publish(message)
|
a.Publish(message)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) UpdateSidebarCategories(userId, teamId string, categories []*model.SidebarCategoryWithChannels) ([]*model.SidebarCategoryWithChannels, *model.AppError) {
|
func (a *App) UpdateSidebarCategories(userID, teamID string, categories []*model.SidebarCategoryWithChannels) ([]*model.SidebarCategoryWithChannels, *model.AppError) {
|
||||||
updatedCategories, originalCategories, err := a.Srv().Store.Channel().UpdateSidebarCategories(userId, teamId, categories)
|
updatedCategories, originalCategories, err := a.Srv().Store.Channel().UpdateSidebarCategories(userID, teamID, categories)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("UpdateSidebarCategories", "app.channel.sidebar_categories.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("UpdateSidebarCategories", "app.channel.sidebar_categories.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
|
|
||||||
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_SIDEBAR_CATEGORY_UPDATED, teamId, "", userId, nil)
|
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_SIDEBAR_CATEGORY_UPDATED, teamID, "", userID, nil)
|
||||||
a.Publish(message)
|
a.Publish(message)
|
||||||
|
|
||||||
a.muteChannelsForUpdatedCategories(userId, updatedCategories, originalCategories)
|
a.muteChannelsForUpdatedCategories(userID, updatedCategories, originalCategories)
|
||||||
|
|
||||||
return updatedCategories, nil
|
return updatedCategories, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) muteChannelsForUpdatedCategories(userId string, updatedCategories []*model.SidebarCategoryWithChannels, originalCategories []*model.SidebarCategoryWithChannels) {
|
func (a *App) muteChannelsForUpdatedCategories(userID string, updatedCategories []*model.SidebarCategoryWithChannels, originalCategories []*model.SidebarCategoryWithChannels) {
|
||||||
var channelsToMute []string
|
var channelsToMute []string
|
||||||
var channelsToUnmute []string
|
var channelsToUnmute []string
|
||||||
|
|
||||||
@@ -204,22 +204,22 @@ func (a *App) muteChannelsForUpdatedCategories(userId string, updatedCategories
|
|||||||
}
|
}
|
||||||
|
|
||||||
if len(channelsToMute) > 0 {
|
if len(channelsToMute) > 0 {
|
||||||
_, err := a.setChannelsMuted(channelsToMute, userId, true)
|
_, err := a.setChannelsMuted(channelsToMute, userID, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mlog.Error(
|
mlog.Error(
|
||||||
"Failed to mute channels to match category",
|
"Failed to mute channels to match category",
|
||||||
mlog.String("user_id", userId),
|
mlog.String("user_id", userID),
|
||||||
mlog.Err(err),
|
mlog.Err(err),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(channelsToUnmute) > 0 {
|
if len(channelsToUnmute) > 0 {
|
||||||
_, err := a.setChannelsMuted(channelsToUnmute, userId, false)
|
_, err := a.setChannelsMuted(channelsToUnmute, userID, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mlog.Error(
|
mlog.Error(
|
||||||
"Failed to unmute channels to match category",
|
"Failed to unmute channels to match category",
|
||||||
mlog.String("user_id", userId),
|
mlog.String("user_id", userID),
|
||||||
mlog.Err(err),
|
mlog.Err(err),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -261,7 +261,7 @@ func diffChannelsBetweenCategories(updatedCategories []*model.SidebarCategoryWit
|
|||||||
return channelsDiff
|
return channelsDiff
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) DeleteSidebarCategory(userId, teamId, categoryId string) *model.AppError {
|
func (a *App) DeleteSidebarCategory(userID, teamID, categoryId string) *model.AppError {
|
||||||
err := a.Srv().Store.Channel().DeleteSidebarCategory(categoryId)
|
err := a.Srv().Store.Channel().DeleteSidebarCategory(categoryId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
var invErr *store.ErrInvalidInput
|
var invErr *store.ErrInvalidInput
|
||||||
@@ -273,7 +273,7 @@ func (a *App) DeleteSidebarCategory(userId, teamId, categoryId string) *model.Ap
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_SIDEBAR_CATEGORY_DELETED, teamId, "", userId, nil)
|
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_SIDEBAR_CATEGORY_DELETED, teamID, "", userID, nil)
|
||||||
message.Add("category_id", categoryId)
|
message.Add("category_id", categoryId)
|
||||||
a.Publish(message)
|
a.Publish(message)
|
||||||
|
|
||||||
|
|||||||
@@ -42,8 +42,8 @@ func GetCommandProvider(name string) CommandProvider {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// @openTracingParams teamId, skipSlackParsing
|
// @openTracingParams teamID, skipSlackParsing
|
||||||
func (a *App) CreateCommandPost(post *model.Post, teamId string, response *model.CommandResponse, skipSlackParsing bool) (*model.Post, *model.AppError) {
|
func (a *App) CreateCommandPost(post *model.Post, teamID string, response *model.CommandResponse, skipSlackParsing bool) (*model.Post, *model.AppError) {
|
||||||
if skipSlackParsing {
|
if skipSlackParsing {
|
||||||
post.Message = response.Text
|
post.Message = response.Text
|
||||||
} else {
|
} else {
|
||||||
@@ -73,13 +73,13 @@ func (a *App) CreateCommandPost(post *model.Post, teamId string, response *model
|
|||||||
return post, nil
|
return post, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// @openTracingParams teamId
|
// @openTracingParams teamID
|
||||||
// previous ListCommands now ListAutocompleteCommands
|
// previous ListCommands now ListAutocompleteCommands
|
||||||
func (a *App) ListAutocompleteCommands(teamId string, T goi18n.TranslateFunc) ([]*model.Command, *model.AppError) {
|
func (a *App) ListAutocompleteCommands(teamID string, T goi18n.TranslateFunc) ([]*model.Command, *model.AppError) {
|
||||||
commands := make([]*model.Command, 0, 32)
|
commands := make([]*model.Command, 0, 32)
|
||||||
seen := make(map[string]bool)
|
seen := make(map[string]bool)
|
||||||
|
|
||||||
for _, cmd := range a.PluginCommandsForTeam(teamId) {
|
for _, cmd := range a.PluginCommandsForTeam(teamID) {
|
||||||
if cmd.AutoComplete && !seen[cmd.Trigger] {
|
if cmd.AutoComplete && !seen[cmd.Trigger] {
|
||||||
seen[cmd.Trigger] = true
|
seen[cmd.Trigger] = true
|
||||||
commands = append(commands, cmd)
|
commands = append(commands, cmd)
|
||||||
@@ -87,7 +87,7 @@ func (a *App) ListAutocompleteCommands(teamId string, T goi18n.TranslateFunc) ([
|
|||||||
}
|
}
|
||||||
|
|
||||||
if *a.Config().ServiceSettings.EnableCommands {
|
if *a.Config().ServiceSettings.EnableCommands {
|
||||||
teamCmds, err := a.Srv().Store.Command().GetByTeam(teamId)
|
teamCmds, err := a.Srv().Store.Command().GetByTeam(teamID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("ListAutocompleteCommands", "app.command.listautocompletecommands.internal_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("ListAutocompleteCommands", "app.command.listautocompletecommands.internal_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -115,12 +115,12 @@ func (a *App) ListAutocompleteCommands(teamId string, T goi18n.TranslateFunc) ([
|
|||||||
return commands, nil
|
return commands, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) ListTeamCommands(teamId string) ([]*model.Command, *model.AppError) {
|
func (a *App) ListTeamCommands(teamID string) ([]*model.Command, *model.AppError) {
|
||||||
if !*a.Config().ServiceSettings.EnableCommands {
|
if !*a.Config().ServiceSettings.EnableCommands {
|
||||||
return nil, model.NewAppError("ListTeamCommands", "api.command.disabled.app_error", nil, "", http.StatusNotImplemented)
|
return nil, model.NewAppError("ListTeamCommands", "api.command.disabled.app_error", nil, "", http.StatusNotImplemented)
|
||||||
}
|
}
|
||||||
|
|
||||||
teamCmds, err := a.Srv().Store.Command().GetByTeam(teamId)
|
teamCmds, err := a.Srv().Store.Command().GetByTeam(teamID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("ListTeamCommands", "app.command.listteamcommands.internal_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("ListTeamCommands", "app.command.listteamcommands.internal_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -128,7 +128,7 @@ func (a *App) ListTeamCommands(teamId string) ([]*model.Command, *model.AppError
|
|||||||
return teamCmds, nil
|
return teamCmds, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) ListAllCommands(teamId string, T goi18n.TranslateFunc) ([]*model.Command, *model.AppError) {
|
func (a *App) ListAllCommands(teamID string, T goi18n.TranslateFunc) ([]*model.Command, *model.AppError) {
|
||||||
commands := make([]*model.Command, 0, 32)
|
commands := make([]*model.Command, 0, 32)
|
||||||
seen := make(map[string]bool)
|
seen := make(map[string]bool)
|
||||||
for _, value := range commandProviders {
|
for _, value := range commandProviders {
|
||||||
@@ -142,7 +142,7 @@ func (a *App) ListAllCommands(teamId string, T goi18n.TranslateFunc) ([]*model.C
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, cmd := range a.PluginCommandsForTeam(teamId) {
|
for _, cmd := range a.PluginCommandsForTeam(teamID) {
|
||||||
if !seen[cmd.Trigger] {
|
if !seen[cmd.Trigger] {
|
||||||
seen[cmd.Trigger] = true
|
seen[cmd.Trigger] = true
|
||||||
commands = append(commands, cmd)
|
commands = append(commands, cmd)
|
||||||
@@ -150,7 +150,7 @@ func (a *App) ListAllCommands(teamId string, T goi18n.TranslateFunc) ([]*model.C
|
|||||||
}
|
}
|
||||||
|
|
||||||
if *a.Config().ServiceSettings.EnableCommands {
|
if *a.Config().ServiceSettings.EnableCommands {
|
||||||
teamCmds, err := a.Srv().Store.Command().GetByTeam(teamId)
|
teamCmds, err := a.Srv().Store.Command().GetByTeam(teamID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("ListAllCommands", "app.command.listallcommands.internal_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("ListAllCommands", "app.command.listallcommands.internal_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -218,7 +218,7 @@ func (a *App) ExecuteCommand(args *model.CommandArgs) (*model.CommandResponse, *
|
|||||||
|
|
||||||
// MentionsToTeamMembers returns all the @ mentions found in message that
|
// MentionsToTeamMembers returns all the @ mentions found in message that
|
||||||
// belong to users in the specified team, linking them to their users
|
// belong to users in the specified team, linking them to their users
|
||||||
func (a *App) MentionsToTeamMembers(message, teamId string) model.UserMentionMap {
|
func (a *App) MentionsToTeamMembers(message, teamID string) model.UserMentionMap {
|
||||||
type mentionMapItem struct {
|
type mentionMapItem struct {
|
||||||
Name string
|
Name string
|
||||||
Id string
|
Id string
|
||||||
@@ -254,7 +254,7 @@ func (a *App) MentionsToTeamMembers(message, teamId string) model.UserMentionMap
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := a.GetTeamMember(teamId, userFromTrimmed.Id)
|
_, err := a.GetTeamMember(teamID, userFromTrimmed.Id)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// The user is not in the team, so we should ignore it
|
// The user is not in the team, so we should ignore it
|
||||||
return
|
return
|
||||||
@@ -267,7 +267,7 @@ func (a *App) MentionsToTeamMembers(message, teamId string) model.UserMentionMap
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := a.GetTeamMember(teamId, user.Id)
|
_, err := a.GetTeamMember(teamID, user.Id)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// The user is not in the team, so we should ignore it
|
// The user is not in the team, so we should ignore it
|
||||||
return
|
return
|
||||||
@@ -290,7 +290,7 @@ func (a *App) MentionsToTeamMembers(message, teamId string) model.UserMentionMap
|
|||||||
|
|
||||||
// MentionsToPublicChannels returns all the mentions to public channels,
|
// MentionsToPublicChannels returns all the mentions to public channels,
|
||||||
// linking them to their channels
|
// linking them to their channels
|
||||||
func (a *App) MentionsToPublicChannels(message, teamId string) model.ChannelMentionMap {
|
func (a *App) MentionsToPublicChannels(message, teamID string) model.ChannelMentionMap {
|
||||||
type mentionMapItem struct {
|
type mentionMapItem struct {
|
||||||
Name string
|
Name string
|
||||||
Id string
|
Id string
|
||||||
@@ -304,7 +304,7 @@ func (a *App) MentionsToPublicChannels(message, teamId string) model.ChannelMent
|
|||||||
wg.Add(1)
|
wg.Add(1)
|
||||||
go func(channelName string) {
|
go func(channelName string) {
|
||||||
defer wg.Done()
|
defer wg.Done()
|
||||||
channel, err := a.GetChannelByName(channelName, teamId, false)
|
channel, err := a.GetChannelByName(channelName, teamID, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -655,17 +655,17 @@ func (a *App) createCommand(cmd *model.Command) (*model.Command, *model.AppError
|
|||||||
return command, nil
|
return command, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetCommand(commandId string) (*model.Command, *model.AppError) {
|
func (a *App) GetCommand(commandID string) (*model.Command, *model.AppError) {
|
||||||
if !*a.Config().ServiceSettings.EnableCommands {
|
if !*a.Config().ServiceSettings.EnableCommands {
|
||||||
return nil, model.NewAppError("GetCommand", "api.command.disabled.app_error", nil, "", http.StatusNotImplemented)
|
return nil, model.NewAppError("GetCommand", "api.command.disabled.app_error", nil, "", http.StatusNotImplemented)
|
||||||
}
|
}
|
||||||
|
|
||||||
command, err := a.Srv().Store.Command().Get(commandId)
|
command, err := a.Srv().Store.Command().Get(commandID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
var nfErr *store.ErrNotFound
|
var nfErr *store.ErrNotFound
|
||||||
switch {
|
switch {
|
||||||
case errors.As(err, &nfErr):
|
case errors.As(err, &nfErr):
|
||||||
return nil, model.NewAppError("SqlCommandStore.Get", "store.sql_command.get.missing.app_error", map[string]interface{}{"command_id": commandId}, "", http.StatusNotFound)
|
return nil, model.NewAppError("SqlCommandStore.Get", "store.sql_command.get.missing.app_error", map[string]interface{}{"command_id": commandID}, "", http.StatusNotFound)
|
||||||
default:
|
default:
|
||||||
return nil, model.NewAppError("GetCommand", "app.command.getcommand.internal_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("GetCommand", "app.command.getcommand.internal_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -749,12 +749,12 @@ func (a *App) RegenCommandToken(cmd *model.Command) (*model.Command, *model.AppE
|
|||||||
return command, nil
|
return command, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) DeleteCommand(commandId string) *model.AppError {
|
func (a *App) DeleteCommand(commandID string) *model.AppError {
|
||||||
if !*a.Config().ServiceSettings.EnableCommands {
|
if !*a.Config().ServiceSettings.EnableCommands {
|
||||||
return model.NewAppError("DeleteCommand", "api.command.disabled.app_error", nil, "", http.StatusNotImplemented)
|
return model.NewAppError("DeleteCommand", "api.command.disabled.app_error", nil, "", http.StatusNotImplemented)
|
||||||
}
|
}
|
||||||
|
|
||||||
err := a.Srv().Store.Command().Delete(commandId, model.GetMillis())
|
err := a.Srv().Store.Command().Delete(commandID, model.GetMillis())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return model.NewAppError("DeleteCommand", "app.command.deletecommand.internal_error", nil, err.Error(), http.StatusInternalServerError)
|
return model.NewAppError("DeleteCommand", "app.command.deletecommand.internal_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -188,7 +188,7 @@ func (es *EmailService) SendSignInChangeEmail(email, method, locale, siteURL str
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (es *EmailService) sendWelcomeEmail(userId string, email string, verified bool, locale, siteURL, redirect string) *model.AppError {
|
func (es *EmailService) sendWelcomeEmail(userID string, email string, verified bool, locale, siteURL, redirect string) *model.AppError {
|
||||||
if !*es.srv.Config().EmailSettings.SendEmailNotifications && !*es.srv.Config().EmailSettings.RequireEmailVerification {
|
if !*es.srv.Config().EmailSettings.SendEmailNotifications && !*es.srv.Config().EmailSettings.RequireEmailVerification {
|
||||||
return model.NewAppError("SendWelcomeEmail", "api.user.send_welcome_email_and_forget.failed.error", nil, "Send Email Notifications and Require Email Verification is disabled in the system console", http.StatusInternalServerError)
|
return model.NewAppError("SendWelcomeEmail", "api.user.send_welcome_email_and_forget.failed.error", nil, "Send Email Notifications and Require Email Verification is disabled in the system console", http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -216,7 +216,7 @@ func (es *EmailService) sendWelcomeEmail(userId string, email string, verified b
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !verified && *es.srv.Config().EmailSettings.RequireEmailVerification {
|
if !verified && *es.srv.Config().EmailSettings.RequireEmailVerification {
|
||||||
token, err := es.CreateVerifyEmailToken(userId, email)
|
token, err := es.CreateVerifyEmailToken(userID, email)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -568,12 +568,12 @@ func (es *EmailService) sendMailWithEmbeddedFiles(to, subject, htmlBody string,
|
|||||||
return mailservice.SendMailWithEmbeddedFilesUsingConfig(to, subject, htmlBody, embeddedFiles, config, license != nil && *license.Features.Compliance, "")
|
return mailservice.SendMailWithEmbeddedFilesUsingConfig(to, subject, htmlBody, embeddedFiles, config, license != nil && *license.Features.Compliance, "")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (es *EmailService) CreateVerifyEmailToken(userId string, newEmail string) (*model.Token, *model.AppError) {
|
func (es *EmailService) CreateVerifyEmailToken(userID string, newEmail string) (*model.Token, *model.AppError) {
|
||||||
tokenExtra := struct {
|
tokenExtra := struct {
|
||||||
UserId string
|
UserId string
|
||||||
Email string
|
Email string
|
||||||
}{
|
}{
|
||||||
userId,
|
userID,
|
||||||
newEmail,
|
newEmail,
|
||||||
}
|
}
|
||||||
jsonData, err := json.Marshal(tokenExtra)
|
jsonData, err := json.Marshal(tokenExtra)
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ func (es *EmailService) AddNotificationEmailToBatch(user *model.User, post *mode
|
|||||||
}
|
}
|
||||||
|
|
||||||
type batchedNotification struct {
|
type batchedNotification struct {
|
||||||
userId string
|
userID string
|
||||||
post *model.Post
|
post *model.Post
|
||||||
teamName string
|
teamName string
|
||||||
}
|
}
|
||||||
@@ -85,7 +85,7 @@ func (job *EmailBatchingJob) Start() {
|
|||||||
|
|
||||||
func (job *EmailBatchingJob) Add(user *model.User, post *model.Post, team *model.Team) bool {
|
func (job *EmailBatchingJob) Add(user *model.User, post *model.Post, team *model.Team) bool {
|
||||||
notification := &batchedNotification{
|
notification := &batchedNotification{
|
||||||
userId: user.Id,
|
userID: user.Id,
|
||||||
post: post,
|
post: post,
|
||||||
teamName: team.Name,
|
teamName: team.Name,
|
||||||
}
|
}
|
||||||
@@ -116,12 +116,12 @@ func (job *EmailBatchingJob) handleNewNotifications() {
|
|||||||
for receiving {
|
for receiving {
|
||||||
select {
|
select {
|
||||||
case notification := <-job.newNotifications:
|
case notification := <-job.newNotifications:
|
||||||
userId := notification.userId
|
userID := notification.userID
|
||||||
|
|
||||||
if _, ok := job.pendingNotifications[userId]; !ok {
|
if _, ok := job.pendingNotifications[userID]; !ok {
|
||||||
job.pendingNotifications[userId] = []*batchedNotification{notification}
|
job.pendingNotifications[userID] = []*batchedNotification{notification}
|
||||||
} else {
|
} else {
|
||||||
job.pendingNotifications[userId] = append(job.pendingNotifications[userId], notification)
|
job.pendingNotifications[userID] = append(job.pendingNotifications[userID], notification)
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
receiving = false
|
receiving = false
|
||||||
@@ -130,7 +130,7 @@ func (job *EmailBatchingJob) handleNewNotifications() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (job *EmailBatchingJob) checkPendingNotifications(now time.Time, handler func(string, []*batchedNotification)) {
|
func (job *EmailBatchingJob) checkPendingNotifications(now time.Time, handler func(string, []*batchedNotification)) {
|
||||||
for userId, notifications := range job.pendingNotifications {
|
for userID, notifications := range job.pendingNotifications {
|
||||||
batchStartTime := notifications[0].post.CreateAt
|
batchStartTime := notifications[0].post.CreateAt
|
||||||
inspectedTeamNames := make(map[string]string)
|
inspectedTeamNames := make(map[string]string)
|
||||||
for _, notification := range notifications {
|
for _, notification := range notifications {
|
||||||
@@ -151,7 +151,7 @@ func (job *EmailBatchingJob) checkPendingNotifications(now time.Time, handler fu
|
|||||||
|
|
||||||
// if the user has viewed any channels in this team since the notification was queued, delete
|
// if the user has viewed any channels in this team since the notification was queued, delete
|
||||||
// all queued notifications
|
// all queued notifications
|
||||||
channelMembers, err := job.server.Store.Channel().GetMembersForUser(inspectedTeamNames[notification.teamName], userId)
|
channelMembers, err := job.server.Store.Channel().GetMembersForUser(inspectedTeamNames[notification.teamName], userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mlog.Error("Unable to find ChannelMembers for user", mlog.Err(err))
|
mlog.Error("Unable to find ChannelMembers for user", mlog.Err(err))
|
||||||
continue
|
continue
|
||||||
@@ -159,8 +159,8 @@ func (job *EmailBatchingJob) checkPendingNotifications(now time.Time, handler fu
|
|||||||
|
|
||||||
for _, channelMember := range *channelMembers {
|
for _, channelMember := range *channelMembers {
|
||||||
if channelMember.LastViewedAt >= batchStartTime {
|
if channelMember.LastViewedAt >= batchStartTime {
|
||||||
mlog.Debug("Deleted notifications for user", mlog.String("user_id", userId))
|
mlog.Debug("Deleted notifications for user", mlog.String("user_id", userID))
|
||||||
delete(job.pendingNotifications, userId)
|
delete(job.pendingNotifications, userID)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -168,7 +168,7 @@ func (job *EmailBatchingJob) checkPendingNotifications(now time.Time, handler fu
|
|||||||
|
|
||||||
// get how long we need to wait to send notifications to the user
|
// get how long we need to wait to send notifications to the user
|
||||||
var interval int64
|
var interval int64
|
||||||
preference, err := job.server.Store.Preference().Get(userId, model.PREFERENCE_CATEGORY_NOTIFICATIONS, model.PREFERENCE_NAME_EMAIL_INTERVAL)
|
preference, err := job.server.Store.Preference().Get(userID, model.PREFERENCE_CATEGORY_NOTIFICATIONS, model.PREFERENCE_NAME_EMAIL_INTERVAL)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// use the default batching interval if an error ocurrs while fetching user preferences
|
// use the default batching interval if an error ocurrs while fetching user preferences
|
||||||
interval, _ = strconv.ParseInt(model.PREFERENCE_EMAIL_INTERVAL_BATCHING_SECONDS, 10, 64)
|
interval, _ = strconv.ParseInt(model.PREFERENCE_EMAIL_INTERVAL_BATCHING_SECONDS, 10, 64)
|
||||||
@@ -182,19 +182,19 @@ func (job *EmailBatchingJob) checkPendingNotifications(now time.Time, handler fu
|
|||||||
}
|
}
|
||||||
|
|
||||||
// send the email notification if there are notifications to send AND it's been long enough
|
// send the email notification if there are notifications to send AND it's been long enough
|
||||||
if len(job.pendingNotifications[userId]) > 0 && now.Sub(time.Unix(batchStartTime/1000, 0)) > time.Duration(interval)*time.Second {
|
if len(job.pendingNotifications[userID]) > 0 && now.Sub(time.Unix(batchStartTime/1000, 0)) > time.Duration(interval)*time.Second {
|
||||||
job.server.Go(func(userId string, notifications []*batchedNotification) func() {
|
job.server.Go(func(userID string, notifications []*batchedNotification) func() {
|
||||||
return func() {
|
return func() {
|
||||||
handler(userId, notifications)
|
handler(userID, notifications)
|
||||||
}
|
}
|
||||||
}(userId, job.pendingNotifications[userId]))
|
}(userID, job.pendingNotifications[userID]))
|
||||||
delete(job.pendingNotifications, userId)
|
delete(job.pendingNotifications, userID)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (es *EmailService) sendBatchedEmailNotification(userId string, notifications []*batchedNotification) {
|
func (es *EmailService) sendBatchedEmailNotification(userID string, notifications []*batchedNotification) {
|
||||||
user, err := es.srv.Store.User().Get(userId)
|
user, err := es.srv.Store.User().Get(userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mlog.Warn("Unable to find recipient for batched email notification")
|
mlog.Warn("Unable to find recipient for batched email notification")
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -256,10 +256,10 @@ func (a *App) exportAllUsers(writer io.Writer) *model.AppError {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) buildUserTeamAndChannelMemberships(userId string) (*[]UserTeamImportData, *model.AppError) {
|
func (a *App) buildUserTeamAndChannelMemberships(userID string) (*[]UserTeamImportData, *model.AppError) {
|
||||||
var memberships []UserTeamImportData
|
var memberships []UserTeamImportData
|
||||||
|
|
||||||
members, err := a.Srv().Store.Team().GetTeamMembersForExport(userId)
|
members, err := a.Srv().Store.Team().GetTeamMembersForExport(userID)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("buildUserTeamAndChannelMemberships", "app.team.get_members.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("buildUserTeamAndChannelMemberships", "app.team.get_members.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
@@ -274,7 +274,7 @@ func (a *App) buildUserTeamAndChannelMemberships(userId string) (*[]UserTeamImpo
|
|||||||
memberData := ImportUserTeamDataFromTeamMember(member)
|
memberData := ImportUserTeamDataFromTeamMember(member)
|
||||||
|
|
||||||
// Do the Channel Memberships.
|
// Do the Channel Memberships.
|
||||||
channelMembers, err := a.buildUserChannelMemberships(userId, member.TeamId)
|
channelMembers, err := a.buildUserChannelMemberships(userID, member.TeamId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -293,16 +293,16 @@ func (a *App) buildUserTeamAndChannelMemberships(userId string) (*[]UserTeamImpo
|
|||||||
return &memberships, nil
|
return &memberships, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) buildUserChannelMemberships(userId string, teamId string) (*[]UserChannelImportData, *model.AppError) {
|
func (a *App) buildUserChannelMemberships(userID string, teamID string) (*[]UserChannelImportData, *model.AppError) {
|
||||||
var memberships []UserChannelImportData
|
var memberships []UserChannelImportData
|
||||||
|
|
||||||
members, nErr := a.Srv().Store.Channel().GetChannelMembersForExport(userId, teamId)
|
members, nErr := a.Srv().Store.Channel().GetChannelMembersForExport(userID, teamID)
|
||||||
if nErr != nil {
|
if nErr != nil {
|
||||||
return nil, model.NewAppError("buildUserChannelMemberships", "app.channel.get_members.app_error", nil, nErr.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("buildUserChannelMemberships", "app.channel.get_members.app_error", nil, nErr.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
|
|
||||||
category := model.PREFERENCE_CATEGORY_FAVORITE_CHANNEL
|
category := model.PREFERENCE_CATEGORY_FAVORITE_CHANNEL
|
||||||
preferences, err := a.GetPreferenceByCategoryForUser(userId, category)
|
preferences, err := a.GetPreferenceByCategoryForUser(userID, category)
|
||||||
if err != nil && err.StatusCode != http.StatusNotFound {
|
if err != nil && err.StatusCode != http.StatusNotFound {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|||||||
50
app/file.go
50
app/file.go
@@ -250,9 +250,9 @@ func (a *App) RemoveDirectory(path string) *model.AppError {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) getInfoForFilename(post *model.Post, teamId, channelId, userId, oldId, filename string) *model.FileInfo {
|
func (a *App) getInfoForFilename(post *model.Post, teamID, channelId, userID, oldId, filename string) *model.FileInfo {
|
||||||
name, _ := url.QueryUnescape(filename)
|
name, _ := url.QueryUnescape(filename)
|
||||||
pathPrefix := fmt.Sprintf("teams/%s/channels/%s/users/%s/%s/", teamId, channelId, userId, oldId)
|
pathPrefix := fmt.Sprintf("teams/%s/channels/%s/users/%s/%s/", teamID, channelId, userID, oldId)
|
||||||
path := pathPrefix + name
|
path := pathPrefix + name
|
||||||
|
|
||||||
// Open the file and populate the fields of the FileInfo
|
// Open the file and populate the fields of the FileInfo
|
||||||
@@ -324,8 +324,8 @@ func (a *App) findTeamIdForFilename(post *model.Post, id, filename string) strin
|
|||||||
var fileMigrationLock sync.Mutex
|
var fileMigrationLock sync.Mutex
|
||||||
var oldFilenameMatchExp *regexp.Regexp = regexp.MustCompile(`^\/([a-z\d]{26})\/([a-z\d]{26})\/([a-z\d]{26})\/([^\/]+)$`)
|
var oldFilenameMatchExp *regexp.Regexp = regexp.MustCompile(`^\/([a-z\d]{26})\/([a-z\d]{26})\/([a-z\d]{26})\/([^\/]+)$`)
|
||||||
|
|
||||||
// Parse the path from the Filename of the form /{channelId}/{userId}/{uid}/{nameWithExtension}
|
// Parse the path from the Filename of the form /{channelId}/{userID}/{uid}/{nameWithExtension}
|
||||||
func parseOldFilenames(filenames []string, channelId, userId string) [][]string {
|
func parseOldFilenames(filenames []string, channelId, userID string) [][]string {
|
||||||
parsed := [][]string{}
|
parsed := [][]string{}
|
||||||
for _, filename := range filenames {
|
for _, filename := range filenames {
|
||||||
matches := oldFilenameMatchExp.FindStringSubmatch(filename)
|
matches := oldFilenameMatchExp.FindStringSubmatch(filename)
|
||||||
@@ -335,8 +335,8 @@ func parseOldFilenames(filenames []string, channelId, userId string) [][]string
|
|||||||
}
|
}
|
||||||
if matches[1] != channelId {
|
if matches[1] != channelId {
|
||||||
mlog.Error("ChannelId in Filename does not match", mlog.String("channel_id", channelId), mlog.String("matched", matches[1]))
|
mlog.Error("ChannelId in Filename does not match", mlog.String("channel_id", channelId), mlog.String("matched", matches[1]))
|
||||||
} else if matches[2] != userId {
|
} else if matches[2] != userID {
|
||||||
mlog.Error("UserId in Filename does not match", mlog.String("user_id", userId), mlog.String("matched", matches[2]))
|
mlog.Error("UserId in Filename does not match", mlog.String("user_id", userID), mlog.String("matched", matches[2]))
|
||||||
} else {
|
} else {
|
||||||
parsed = append(parsed, matches[1:])
|
parsed = append(parsed, matches[1:])
|
||||||
}
|
}
|
||||||
@@ -373,17 +373,17 @@ func (a *App) MigrateFilenamesToFileInfos(post *model.Post) []*model.FileInfo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Find the team that was used to make this post since its part of the file path that isn't saved in the Filename
|
// Find the team that was used to make this post since its part of the file path that isn't saved in the Filename
|
||||||
var teamId string
|
var teamID string
|
||||||
if channel.TeamId == "" {
|
if channel.TeamId == "" {
|
||||||
// This post was made in a cross-team DM channel, so we need to find where its files were saved
|
// This post was made in a cross-team DM channel, so we need to find where its files were saved
|
||||||
teamId = a.findTeamIdForFilename(post, parsedFilenames[0][2], parsedFilenames[0][3])
|
teamID = a.findTeamIdForFilename(post, parsedFilenames[0][2], parsedFilenames[0][3])
|
||||||
} else {
|
} else {
|
||||||
teamId = channel.TeamId
|
teamID = channel.TeamId
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create FileInfo objects for this post
|
// Create FileInfo objects for this post
|
||||||
infos := make([]*model.FileInfo, 0, len(filenames))
|
infos := make([]*model.FileInfo, 0, len(filenames))
|
||||||
if teamId == "" {
|
if teamID == "" {
|
||||||
mlog.Error(
|
mlog.Error(
|
||||||
"Unable to find team id for files when migrating post to use FileInfos",
|
"Unable to find team id for files when migrating post to use FileInfos",
|
||||||
mlog.String("filenames", strings.Join(filenames, ",")),
|
mlog.String("filenames", strings.Join(filenames, ",")),
|
||||||
@@ -391,7 +391,7 @@ func (a *App) MigrateFilenamesToFileInfos(post *model.Post) []*model.FileInfo {
|
|||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
for _, parsed := range parsedFilenames {
|
for _, parsed := range parsedFilenames {
|
||||||
info := a.getInfoForFilename(post, teamId, parsed[0], parsed[1], parsed[2], parsed[3])
|
info := a.getInfoForFilename(post, teamID, parsed[0], parsed[1], parsed[2], parsed[3])
|
||||||
if info == nil {
|
if info == nil {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
@@ -476,7 +476,7 @@ func GeneratePublicLinkHash(fileId, salt string) string {
|
|||||||
return base64.RawURLEncoding.EncodeToString(hash.Sum(nil))
|
return base64.RawURLEncoding.EncodeToString(hash.Sum(nil))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) UploadMultipartFiles(teamId string, channelId string, userId string, fileHeaders []*multipart.FileHeader, clientIds []string, now time.Time) (*model.FileUploadResponse, *model.AppError) {
|
func (a *App) UploadMultipartFiles(teamID string, channelId string, userID string, fileHeaders []*multipart.FileHeader, clientIds []string, now time.Time) (*model.FileUploadResponse, *model.AppError) {
|
||||||
files := make([]io.ReadCloser, len(fileHeaders))
|
files := make([]io.ReadCloser, len(fileHeaders))
|
||||||
filenames := make([]string, len(fileHeaders))
|
filenames := make([]string, len(fileHeaders))
|
||||||
|
|
||||||
@@ -494,13 +494,13 @@ func (a *App) UploadMultipartFiles(teamId string, channelId string, userId strin
|
|||||||
filenames[i] = fileHeader.Filename
|
filenames[i] = fileHeader.Filename
|
||||||
}
|
}
|
||||||
|
|
||||||
return a.UploadFiles(teamId, channelId, userId, files, filenames, clientIds, now)
|
return a.UploadFiles(teamID, channelId, userID, files, filenames, clientIds, now)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Uploads some files to the given team and channel as the given user. files and filenames should have
|
// Uploads some files to the given team and channel as the given user. files and filenames should have
|
||||||
// the same length. clientIds should either not be provided or have the same length as files and filenames.
|
// the same length. clientIds should either not be provided or have the same length as files and filenames.
|
||||||
// The provided files should be closed by the caller so that they are not leaked.
|
// The provided files should be closed by the caller so that they are not leaked.
|
||||||
func (a *App) UploadFiles(teamId string, channelId string, userId string, files []io.ReadCloser, filenames []string, clientIds []string, now time.Time) (*model.FileUploadResponse, *model.AppError) {
|
func (a *App) UploadFiles(teamID string, channelId string, userID string, files []io.ReadCloser, filenames []string, clientIds []string, now time.Time) (*model.FileUploadResponse, *model.AppError) {
|
||||||
if *a.Config().FileSettings.DriverName == "" {
|
if *a.Config().FileSettings.DriverName == "" {
|
||||||
return nil, model.NewAppError("UploadFiles", "api.file.upload_file.storage.app_error", nil, "", http.StatusNotImplemented)
|
return nil, model.NewAppError("UploadFiles", "api.file.upload_file.storage.app_error", nil, "", http.StatusNotImplemented)
|
||||||
}
|
}
|
||||||
@@ -523,7 +523,7 @@ func (a *App) UploadFiles(teamId string, channelId string, userId string, files
|
|||||||
io.Copy(buf, file)
|
io.Copy(buf, file)
|
||||||
data := buf.Bytes()
|
data := buf.Bytes()
|
||||||
|
|
||||||
info, data, err := a.DoUploadFileExpectModification(now, teamId, channelId, userId, filenames[i], data)
|
info, data, err := a.DoUploadFileExpectModification(now, teamID, channelId, userID, filenames[i], data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -575,15 +575,15 @@ func (a *App) DoUploadFile(now time.Time, rawTeamId string, rawChannelId string,
|
|||||||
return info, err
|
return info, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func UploadFileSetTeamId(teamId string) func(t *UploadFileTask) {
|
func UploadFileSetTeamId(teamID string) func(t *UploadFileTask) {
|
||||||
return func(t *UploadFileTask) {
|
return func(t *UploadFileTask) {
|
||||||
t.TeamId = filepath.Base(teamId)
|
t.TeamId = filepath.Base(teamID)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func UploadFileSetUserId(userId string) func(t *UploadFileTask) {
|
func UploadFileSetUserId(userID string) func(t *UploadFileTask) {
|
||||||
return func(t *UploadFileTask) {
|
return func(t *UploadFileTask) {
|
||||||
t.UserId = filepath.Base(userId)
|
t.UserId = filepath.Base(userID)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -940,9 +940,9 @@ func (t UploadFileTask) newAppError(id string, details interface{}, httpStatus i
|
|||||||
|
|
||||||
func (a *App) DoUploadFileExpectModification(now time.Time, rawTeamId string, rawChannelId string, rawUserId string, rawFilename string, data []byte) (*model.FileInfo, []byte, *model.AppError) {
|
func (a *App) DoUploadFileExpectModification(now time.Time, rawTeamId string, rawChannelId string, rawUserId string, rawFilename string, data []byte) (*model.FileInfo, []byte, *model.AppError) {
|
||||||
filename := filepath.Base(rawFilename)
|
filename := filepath.Base(rawFilename)
|
||||||
teamId := filepath.Base(rawTeamId)
|
teamID := filepath.Base(rawTeamId)
|
||||||
channelId := filepath.Base(rawChannelId)
|
channelId := filepath.Base(rawChannelId)
|
||||||
userId := filepath.Base(rawUserId)
|
userID := filepath.Base(rawUserId)
|
||||||
|
|
||||||
info, err := model.GetInfoForBytes(filename, bytes.NewReader(data), len(data))
|
info, err := model.GetInfoForBytes(filename, bytes.NewReader(data), len(data))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -959,10 +959,10 @@ func (a *App) DoUploadFileExpectModification(now time.Time, rawTeamId string, ra
|
|||||||
}
|
}
|
||||||
|
|
||||||
info.Id = model.NewId()
|
info.Id = model.NewId()
|
||||||
info.CreatorId = userId
|
info.CreatorId = userID
|
||||||
info.CreateAt = now.UnixNano() / int64(time.Millisecond)
|
info.CreateAt = now.UnixNano() / int64(time.Millisecond)
|
||||||
|
|
||||||
pathPrefix := now.Format("20060102") + "/teams/" + teamId + "/channels/" + channelId + "/users/" + userId + "/" + info.Id + "/"
|
pathPrefix := now.Format("20060102") + "/teams/" + teamID + "/channels/" + channelId + "/users/" + userID + "/" + info.Id + "/"
|
||||||
info.Path = pathPrefix + filename
|
info.Path = pathPrefix + filename
|
||||||
|
|
||||||
if info.IsImage() {
|
if info.IsImage() {
|
||||||
@@ -1223,7 +1223,7 @@ func (a *App) GetFile(fileId string) ([]byte, *model.AppError) {
|
|||||||
return data, nil
|
return data, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) CopyFileInfos(userId string, fileIds []string) ([]string, *model.AppError) {
|
func (a *App) CopyFileInfos(userID string, fileIds []string) ([]string, *model.AppError) {
|
||||||
var newFileIds []string
|
var newFileIds []string
|
||||||
|
|
||||||
now := model.GetMillis()
|
now := model.GetMillis()
|
||||||
@@ -1241,7 +1241,7 @@ func (a *App) CopyFileInfos(userId string, fileIds []string) ([]string, *model.A
|
|||||||
}
|
}
|
||||||
|
|
||||||
fileInfo.Id = model.NewId()
|
fileInfo.Id = model.NewId()
|
||||||
fileInfo.CreatorId = userId
|
fileInfo.CreatorId = userID
|
||||||
fileInfo.CreateAt = now
|
fileInfo.CreateAt = now
|
||||||
fileInfo.UpdateAt = now
|
fileInfo.UpdateAt = now
|
||||||
fileInfo.PostId = ""
|
fileInfo.PostId = ""
|
||||||
|
|||||||
@@ -61,9 +61,9 @@ func BenchmarkUploadFile(b *testing.B) {
|
|||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
// disable logging in the benchmark, as best we can
|
// disable logging in the benchmark, as best we can
|
||||||
th.App.Log().SetConsoleLevel(mlog.LevelError)
|
th.App.Log().SetConsoleLevel(mlog.LevelError)
|
||||||
teamId := model.NewId()
|
teamID := model.NewId()
|
||||||
channelId := model.NewId()
|
channelId := model.NewId()
|
||||||
userId := model.NewId()
|
userID := model.NewId()
|
||||||
|
|
||||||
mb := func(i int) int {
|
mb := func(i int) int {
|
||||||
return (i + 512*1024) / (1024 * 1024)
|
return (i + 512*1024) / (1024 * 1024)
|
||||||
@@ -86,8 +86,8 @@ func BenchmarkUploadFile(b *testing.B) {
|
|||||||
{
|
{
|
||||||
title: "raw-ish DoUploadFile",
|
title: "raw-ish DoUploadFile",
|
||||||
f: func(b *testing.B, n int, data []byte, ext string) {
|
f: func(b *testing.B, n int, data []byte, ext string) {
|
||||||
info1, err := th.App.DoUploadFile(time.Now(), teamId, channelId,
|
info1, err := th.App.DoUploadFile(time.Now(), teamID, channelId,
|
||||||
userId, fmt.Sprintf("BenchmarkDoUploadFile-%d%s", n, ext), data)
|
userID, fmt.Sprintf("BenchmarkDoUploadFile-%d%s", n, ext), data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
b.Fatal(err)
|
b.Fatal(err)
|
||||||
}
|
}
|
||||||
@@ -102,8 +102,8 @@ func BenchmarkUploadFile(b *testing.B) {
|
|||||||
info, aerr := th.App.UploadFileX(channelId,
|
info, aerr := th.App.UploadFileX(channelId,
|
||||||
fmt.Sprintf("BenchmarkUploadFileTask-%d%s", n, ext),
|
fmt.Sprintf("BenchmarkUploadFileTask-%d%s", n, ext),
|
||||||
bytes.NewReader(data),
|
bytes.NewReader(data),
|
||||||
UploadFileSetTeamId(teamId),
|
UploadFileSetTeamId(teamID),
|
||||||
UploadFileSetUserId(userId),
|
UploadFileSetUserId(userID),
|
||||||
UploadFileSetTimestamp(time.Now()),
|
UploadFileSetTimestamp(time.Now()),
|
||||||
UploadFileSetContentLength(int64(len(data))),
|
UploadFileSetContentLength(int64(len(data))),
|
||||||
UploadFileSetRaw())
|
UploadFileSetRaw())
|
||||||
@@ -120,8 +120,8 @@ func BenchmarkUploadFile(b *testing.B) {
|
|||||||
info, aerr := th.App.UploadFileX(channelId,
|
info, aerr := th.App.UploadFileX(channelId,
|
||||||
fmt.Sprintf("BenchmarkUploadFileTask-%d%s", n, ext),
|
fmt.Sprintf("BenchmarkUploadFileTask-%d%s", n, ext),
|
||||||
bytes.NewReader(data),
|
bytes.NewReader(data),
|
||||||
UploadFileSetTeamId(teamId),
|
UploadFileSetTeamId(teamID),
|
||||||
UploadFileSetUserId(userId),
|
UploadFileSetUserId(userID),
|
||||||
UploadFileSetTimestamp(time.Now()),
|
UploadFileSetTimestamp(time.Now()),
|
||||||
UploadFileSetContentLength(-1),
|
UploadFileSetContentLength(-1),
|
||||||
UploadFileSetRaw())
|
UploadFileSetRaw())
|
||||||
@@ -135,7 +135,7 @@ func BenchmarkUploadFile(b *testing.B) {
|
|||||||
{
|
{
|
||||||
title: "image UploadFiles",
|
title: "image UploadFiles",
|
||||||
f: func(b *testing.B, n int, data []byte, ext string) {
|
f: func(b *testing.B, n int, data []byte, ext string) {
|
||||||
resp, err := th.App.UploadFiles(teamId, channelId, userId,
|
resp, err := th.App.UploadFiles(teamID, channelId, userID,
|
||||||
[]io.ReadCloser{ioutil.NopCloser(bytes.NewReader(data))},
|
[]io.ReadCloser{ioutil.NopCloser(bytes.NewReader(data))},
|
||||||
[]string{fmt.Sprintf("BenchmarkDoUploadFiles-%d%s", n, ext)},
|
[]string{fmt.Sprintf("BenchmarkDoUploadFiles-%d%s", n, ext)},
|
||||||
[]string{},
|
[]string{},
|
||||||
@@ -153,8 +153,8 @@ func BenchmarkUploadFile(b *testing.B) {
|
|||||||
info, aerr := th.App.UploadFileX(channelId,
|
info, aerr := th.App.UploadFileX(channelId,
|
||||||
fmt.Sprintf("BenchmarkUploadFileTask-%d%s", n, ext),
|
fmt.Sprintf("BenchmarkUploadFileTask-%d%s", n, ext),
|
||||||
bytes.NewReader(data),
|
bytes.NewReader(data),
|
||||||
UploadFileSetTeamId(teamId),
|
UploadFileSetTeamId(teamID),
|
||||||
UploadFileSetUserId(userId),
|
UploadFileSetUserId(userID),
|
||||||
UploadFileSetTimestamp(time.Now()),
|
UploadFileSetTimestamp(time.Now()),
|
||||||
UploadFileSetContentLength(int64(len(data))))
|
UploadFileSetContentLength(int64(len(data))))
|
||||||
if aerr != nil {
|
if aerr != nil {
|
||||||
@@ -170,8 +170,8 @@ func BenchmarkUploadFile(b *testing.B) {
|
|||||||
info, aerr := th.App.UploadFileX(channelId,
|
info, aerr := th.App.UploadFileX(channelId,
|
||||||
fmt.Sprintf("BenchmarkUploadFileTask-%d%s", n, ext),
|
fmt.Sprintf("BenchmarkUploadFileTask-%d%s", n, ext),
|
||||||
bytes.NewReader(data),
|
bytes.NewReader(data),
|
||||||
UploadFileSetTeamId(teamId),
|
UploadFileSetTeamId(teamID),
|
||||||
UploadFileSetUserId(userId),
|
UploadFileSetUserId(userID),
|
||||||
UploadFileSetTimestamp(time.Now()),
|
UploadFileSetTimestamp(time.Now()),
|
||||||
UploadFileSetContentLength(int64(len(data))))
|
UploadFileSetContentLength(int64(len(data))))
|
||||||
if aerr != nil {
|
if aerr != nil {
|
||||||
|
|||||||
@@ -43,50 +43,50 @@ func TestDoUploadFile(t *testing.T) {
|
|||||||
th := Setup(t)
|
th := Setup(t)
|
||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
|
|
||||||
teamId := model.NewId()
|
teamID := model.NewId()
|
||||||
channelId := model.NewId()
|
channelId := model.NewId()
|
||||||
userId := model.NewId()
|
userID := model.NewId()
|
||||||
filename := "test"
|
filename := "test"
|
||||||
data := []byte("abcd")
|
data := []byte("abcd")
|
||||||
|
|
||||||
info1, err := th.App.DoUploadFile(time.Date(2007, 2, 4, 1, 2, 3, 4, time.Local), teamId, channelId, userId, filename, data)
|
info1, err := th.App.DoUploadFile(time.Date(2007, 2, 4, 1, 2, 3, 4, time.Local), teamID, channelId, userID, filename, data)
|
||||||
require.Nil(t, err, "DoUploadFile should succeed with valid data")
|
require.Nil(t, err, "DoUploadFile should succeed with valid data")
|
||||||
defer func() {
|
defer func() {
|
||||||
th.App.Srv().Store.FileInfo().PermanentDelete(info1.Id)
|
th.App.Srv().Store.FileInfo().PermanentDelete(info1.Id)
|
||||||
th.App.RemoveFile(info1.Path)
|
th.App.RemoveFile(info1.Path)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
value := fmt.Sprintf("20070204/teams/%v/channels/%v/users/%v/%v/%v", teamId, channelId, userId, info1.Id, filename)
|
value := fmt.Sprintf("20070204/teams/%v/channels/%v/users/%v/%v/%v", teamID, channelId, userID, info1.Id, filename)
|
||||||
assert.Equal(t, value, info1.Path, "stored file at incorrect path")
|
assert.Equal(t, value, info1.Path, "stored file at incorrect path")
|
||||||
|
|
||||||
info2, err := th.App.DoUploadFile(time.Date(2007, 2, 4, 1, 2, 3, 4, time.Local), teamId, channelId, userId, filename, data)
|
info2, err := th.App.DoUploadFile(time.Date(2007, 2, 4, 1, 2, 3, 4, time.Local), teamID, channelId, userID, filename, data)
|
||||||
require.Nil(t, err, "DoUploadFile should succeed with valid data")
|
require.Nil(t, err, "DoUploadFile should succeed with valid data")
|
||||||
defer func() {
|
defer func() {
|
||||||
th.App.Srv().Store.FileInfo().PermanentDelete(info2.Id)
|
th.App.Srv().Store.FileInfo().PermanentDelete(info2.Id)
|
||||||
th.App.RemoveFile(info2.Path)
|
th.App.RemoveFile(info2.Path)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
value = fmt.Sprintf("20070204/teams/%v/channels/%v/users/%v/%v/%v", teamId, channelId, userId, info2.Id, filename)
|
value = fmt.Sprintf("20070204/teams/%v/channels/%v/users/%v/%v/%v", teamID, channelId, userID, info2.Id, filename)
|
||||||
assert.Equal(t, value, info2.Path, "stored file at incorrect path")
|
assert.Equal(t, value, info2.Path, "stored file at incorrect path")
|
||||||
|
|
||||||
info3, err := th.App.DoUploadFile(time.Date(2008, 3, 5, 1, 2, 3, 4, time.Local), teamId, channelId, userId, filename, data)
|
info3, err := th.App.DoUploadFile(time.Date(2008, 3, 5, 1, 2, 3, 4, time.Local), teamID, channelId, userID, filename, data)
|
||||||
require.Nil(t, err, "DoUploadFile should succeed with valid data")
|
require.Nil(t, err, "DoUploadFile should succeed with valid data")
|
||||||
defer func() {
|
defer func() {
|
||||||
th.App.Srv().Store.FileInfo().PermanentDelete(info3.Id)
|
th.App.Srv().Store.FileInfo().PermanentDelete(info3.Id)
|
||||||
th.App.RemoveFile(info3.Path)
|
th.App.RemoveFile(info3.Path)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
value = fmt.Sprintf("20080305/teams/%v/channels/%v/users/%v/%v/%v", teamId, channelId, userId, info3.Id, filename)
|
value = fmt.Sprintf("20080305/teams/%v/channels/%v/users/%v/%v/%v", teamID, channelId, userID, info3.Id, filename)
|
||||||
assert.Equal(t, value, info3.Path, "stored file at incorrect path")
|
assert.Equal(t, value, info3.Path, "stored file at incorrect path")
|
||||||
|
|
||||||
info4, err := th.App.DoUploadFile(time.Date(2009, 3, 5, 1, 2, 3, 4, time.Local), "../../"+teamId, "../../"+channelId, "../../"+userId, "../../"+filename, data)
|
info4, err := th.App.DoUploadFile(time.Date(2009, 3, 5, 1, 2, 3, 4, time.Local), "../../"+teamID, "../../"+channelId, "../../"+userID, "../../"+filename, data)
|
||||||
require.Nil(t, err, "DoUploadFile should succeed with valid data")
|
require.Nil(t, err, "DoUploadFile should succeed with valid data")
|
||||||
defer func() {
|
defer func() {
|
||||||
th.App.Srv().Store.FileInfo().PermanentDelete(info4.Id)
|
th.App.Srv().Store.FileInfo().PermanentDelete(info4.Id)
|
||||||
th.App.RemoveFile(info4.Path)
|
th.App.RemoveFile(info4.Path)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
value = fmt.Sprintf("20090305/teams/%v/channels/%v/users/%v/%v/%v", teamId, channelId, userId, info4.Id, filename)
|
value = fmt.Sprintf("20090305/teams/%v/channels/%v/users/%v/%v/%v", teamID, channelId, userID, info4.Id, filename)
|
||||||
assert.Equal(t, value, info4.Path, "stored file at incorrect path")
|
assert.Equal(t, value, info4.Path, "stored file at incorrect path")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -127,21 +127,21 @@ func TestParseOldFilenames(t *testing.T) {
|
|||||||
description string
|
description string
|
||||||
filenames []string
|
filenames []string
|
||||||
channelId string
|
channelId string
|
||||||
userId string
|
userID string
|
||||||
expected [][]string
|
expected [][]string
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
description: "Empty input should result in empty output",
|
description: "Empty input should result in empty output",
|
||||||
filenames: []string{},
|
filenames: []string{},
|
||||||
channelId: th.BasicChannel.Id,
|
channelId: th.BasicChannel.Id,
|
||||||
userId: th.BasicUser.Id,
|
userID: th.BasicUser.Id,
|
||||||
expected: [][]string{},
|
expected: [][]string{},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
description: "Filename with invalid format should not parse",
|
description: "Filename with invalid format should not parse",
|
||||||
filenames: []string{"/path/to/some/file.png"},
|
filenames: []string{"/path/to/some/file.png"},
|
||||||
channelId: th.BasicChannel.Id,
|
channelId: th.BasicChannel.Id,
|
||||||
userId: th.BasicUser.Id,
|
userID: th.BasicUser.Id,
|
||||||
expected: [][]string{},
|
expected: [][]string{},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -150,7 +150,7 @@ func TestParseOldFilenames(t *testing.T) {
|
|||||||
fmt.Sprintf("/%v/%v/%v/file.png", model.NewId(), th.BasicUser.Id, fileId),
|
fmt.Sprintf("/%v/%v/%v/file.png", model.NewId(), th.BasicUser.Id, fileId),
|
||||||
},
|
},
|
||||||
channelId: th.BasicChannel.Id,
|
channelId: th.BasicChannel.Id,
|
||||||
userId: th.BasicUser.Id,
|
userID: th.BasicUser.Id,
|
||||||
expected: [][]string{},
|
expected: [][]string{},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -159,7 +159,7 @@ func TestParseOldFilenames(t *testing.T) {
|
|||||||
fmt.Sprintf("/%v/%v/%v/file.png", th.BasicChannel.Id, model.NewId(), fileId),
|
fmt.Sprintf("/%v/%v/%v/file.png", th.BasicChannel.Id, model.NewId(), fileId),
|
||||||
},
|
},
|
||||||
channelId: th.BasicChannel.Id,
|
channelId: th.BasicChannel.Id,
|
||||||
userId: th.BasicUser.Id,
|
userID: th.BasicUser.Id,
|
||||||
expected: [][]string{},
|
expected: [][]string{},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -168,7 +168,7 @@ func TestParseOldFilenames(t *testing.T) {
|
|||||||
fmt.Sprintf("/%v/%v/%v/../../../file.png", th.BasicChannel.Id, th.BasicUser.Id, fileId),
|
fmt.Sprintf("/%v/%v/%v/../../../file.png", th.BasicChannel.Id, th.BasicUser.Id, fileId),
|
||||||
},
|
},
|
||||||
channelId: th.BasicChannel.Id,
|
channelId: th.BasicChannel.Id,
|
||||||
userId: th.BasicUser.Id,
|
userID: th.BasicUser.Id,
|
||||||
expected: [][]string{},
|
expected: [][]string{},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -178,7 +178,7 @@ func TestParseOldFilenames(t *testing.T) {
|
|||||||
fmt.Sprintf("/%v/%v/%v/file.png", th.BasicChannel.Id, th.BasicUser.Id, fileId),
|
fmt.Sprintf("/%v/%v/%v/file.png", th.BasicChannel.Id, th.BasicUser.Id, fileId),
|
||||||
},
|
},
|
||||||
channelId: th.BasicChannel.Id,
|
channelId: th.BasicChannel.Id,
|
||||||
userId: th.BasicUser.Id,
|
userID: th.BasicUser.Id,
|
||||||
expected: [][]string{
|
expected: [][]string{
|
||||||
{
|
{
|
||||||
th.BasicChannel.Id,
|
th.BasicChannel.Id,
|
||||||
@@ -194,7 +194,7 @@ func TestParseOldFilenames(t *testing.T) {
|
|||||||
fmt.Sprintf("/%v/%v/%v/file.png", th.BasicChannel.Id, th.BasicUser.Id, fileId),
|
fmt.Sprintf("/%v/%v/%v/file.png", th.BasicChannel.Id, th.BasicUser.Id, fileId),
|
||||||
},
|
},
|
||||||
channelId: th.BasicChannel.Id,
|
channelId: th.BasicChannel.Id,
|
||||||
userId: th.BasicUser.Id,
|
userID: th.BasicUser.Id,
|
||||||
expected: [][]string{
|
expected: [][]string{
|
||||||
{
|
{
|
||||||
th.BasicChannel.Id,
|
th.BasicChannel.Id,
|
||||||
@@ -208,7 +208,7 @@ func TestParseOldFilenames(t *testing.T) {
|
|||||||
|
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.description, func(tt *testing.T) {
|
t.Run(test.description, func(tt *testing.T) {
|
||||||
result := parseOldFilenames(test.filenames, test.channelId, test.userId)
|
result := parseOldFilenames(test.filenames, test.channelId, test.userID)
|
||||||
require.Equal(tt, result, test.expected)
|
require.Equal(tt, result, test.expected)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -219,9 +219,9 @@ func TestGetInfoForFilename(t *testing.T) {
|
|||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
|
|
||||||
post := th.BasicPost
|
post := th.BasicPost
|
||||||
teamId := th.BasicTeam.Id
|
teamID := th.BasicTeam.Id
|
||||||
|
|
||||||
info := th.App.getInfoForFilename(post, teamId, post.ChannelId, post.UserId, "someid", "somefile.png")
|
info := th.App.getInfoForFilename(post, teamID, post.ChannelId, post.UserId, "someid", "somefile.png")
|
||||||
assert.Nil(t, info, "Test non-existent file")
|
assert.Nil(t, info, "Test non-existent file")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -229,14 +229,14 @@ func TestFindTeamIdForFilename(t *testing.T) {
|
|||||||
th := Setup(t).InitBasic()
|
th := Setup(t).InitBasic()
|
||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
|
|
||||||
teamId := th.App.findTeamIdForFilename(th.BasicPost, "someid", "somefile.png")
|
teamID := th.App.findTeamIdForFilename(th.BasicPost, "someid", "somefile.png")
|
||||||
assert.Equal(t, th.BasicTeam.Id, teamId)
|
assert.Equal(t, th.BasicTeam.Id, teamID)
|
||||||
|
|
||||||
_, err := th.App.CreateTeamWithUser(&model.Team{Email: th.BasicUser.Email, Name: "zz" + model.NewId(), DisplayName: "Joram's Test Team", Type: model.TEAM_OPEN}, th.BasicUser.Id)
|
_, err := th.App.CreateTeamWithUser(&model.Team{Email: th.BasicUser.Email, Name: "zz" + model.NewId(), DisplayName: "Joram's Test Team", Type: model.TEAM_OPEN}, th.BasicUser.Id)
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
|
|
||||||
teamId = th.App.findTeamIdForFilename(th.BasicPost, "someid", "somefile.png")
|
teamID = th.App.findTeamIdForFilename(th.BasicPost, "someid", "somefile.png")
|
||||||
assert.Equal(t, "", teamId)
|
assert.Equal(t, "", teamID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestMigrateFilenamesToFileInfos(t *testing.T) {
|
func TestMigrateFilenamesToFileInfos(t *testing.T) {
|
||||||
@@ -294,20 +294,20 @@ func TestCopyFileInfos(t *testing.T) {
|
|||||||
th := Setup(t)
|
th := Setup(t)
|
||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
|
|
||||||
teamId := model.NewId()
|
teamID := model.NewId()
|
||||||
channelId := model.NewId()
|
channelId := model.NewId()
|
||||||
userId := model.NewId()
|
userID := model.NewId()
|
||||||
filename := "test"
|
filename := "test"
|
||||||
data := []byte("abcd")
|
data := []byte("abcd")
|
||||||
|
|
||||||
info1, err := th.App.DoUploadFile(time.Date(2007, 2, 4, 1, 2, 3, 4, time.Local), teamId, channelId, userId, filename, data)
|
info1, err := th.App.DoUploadFile(time.Date(2007, 2, 4, 1, 2, 3, 4, time.Local), teamID, channelId, userID, filename, data)
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
defer func() {
|
defer func() {
|
||||||
th.App.Srv().Store.FileInfo().PermanentDelete(info1.Id)
|
th.App.Srv().Store.FileInfo().PermanentDelete(info1.Id)
|
||||||
th.App.RemoveFile(info1.Path)
|
th.App.RemoveFile(info1.Path)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
infoIds, err := th.App.CopyFileInfos(userId, []string{info1.Id})
|
infoIds, err := th.App.CopyFileInfos(userID, []string{info1.Id})
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
|
|
||||||
info2, err := th.App.GetFileInfo(infoIds[0])
|
info2, err := th.App.GetFileInfo(infoIds[0])
|
||||||
|
|||||||
14
app/group.go
14
app/group.go
@@ -65,8 +65,8 @@ func (a *App) GetGroupsBySource(groupSource model.GroupSource) ([]*model.Group,
|
|||||||
return groups, nil
|
return groups, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetGroupsByUserId(userId string) ([]*model.Group, *model.AppError) {
|
func (a *App) GetGroupsByUserId(userID string) ([]*model.Group, *model.AppError) {
|
||||||
groups, err := a.Srv().Store.Group().GetByUser(userId)
|
groups, err := a.Srv().Store.Group().GetByUser(userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("GetGroupsByUserId", "app.select_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("GetGroupsByUserId", "app.select_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -450,13 +450,13 @@ func (a *App) GetGroupsByChannel(channelId string, opts model.GroupSearchOpts) (
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetGroupsByTeam returns the paged list and the total count of group associated to the given team.
|
// GetGroupsByTeam returns the paged list and the total count of group associated to the given team.
|
||||||
func (a *App) GetGroupsByTeam(teamId string, opts model.GroupSearchOpts) ([]*model.GroupWithSchemeAdmin, int, *model.AppError) {
|
func (a *App) GetGroupsByTeam(teamID string, opts model.GroupSearchOpts) ([]*model.GroupWithSchemeAdmin, int, *model.AppError) {
|
||||||
groups, err := a.Srv().Store.Group().GetGroupsByTeam(teamId, opts)
|
groups, err := a.Srv().Store.Group().GetGroupsByTeam(teamID, opts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, 0, model.NewAppError("GetGroupsByTeam", "app.select_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, 0, model.NewAppError("GetGroupsByTeam", "app.select_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
|
|
||||||
count, err := a.Srv().Store.Group().CountGroupsByTeam(teamId, opts)
|
count, err := a.Srv().Store.Group().CountGroupsByTeam(teamID, opts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, 0, model.NewAppError("GetGroupsByTeam", "app.select_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, 0, model.NewAppError("GetGroupsByTeam", "app.select_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -464,8 +464,8 @@ func (a *App) GetGroupsByTeam(teamId string, opts model.GroupSearchOpts) ([]*mod
|
|||||||
return groups, int(count), nil
|
return groups, int(count), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetGroupsAssociatedToChannelsByTeam(teamId string, opts model.GroupSearchOpts) (map[string][]*model.GroupWithSchemeAdmin, *model.AppError) {
|
func (a *App) GetGroupsAssociatedToChannelsByTeam(teamID string, opts model.GroupSearchOpts) (map[string][]*model.GroupWithSchemeAdmin, *model.AppError) {
|
||||||
groupsAssociatedByChannelId, err := a.Srv().Store.Group().GetGroupsAssociatedToChannelsByTeam(teamId, opts)
|
groupsAssociatedByChannelId, err := a.Srv().Store.Group().GetGroupsAssociatedToChannelsByTeam(teamID, opts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("GetGroupsAssociatedToChannelsByTeam", "app.select_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("GetGroupsAssociatedToChannelsByTeam", "app.select_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1016,7 +1016,7 @@ func (a *App) importReaction(data *ReactionImportData, post *model.Post) *model.
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) importReplies(data []ReplyImportData, post *model.Post, teamId string) *model.AppError {
|
func (a *App) importReplies(data []ReplyImportData, post *model.Post, teamID string) *model.AppError {
|
||||||
var err *model.AppError
|
var err *model.AppError
|
||||||
usernames := []string{}
|
usernames := []string{}
|
||||||
for _, replyData := range data {
|
for _, replyData := range data {
|
||||||
@@ -1064,7 +1064,7 @@ func (a *App) importReplies(data []ReplyImportData, post *model.Post, teamId str
|
|||||||
reply.Message = *replyData.Message
|
reply.Message = *replyData.Message
|
||||||
reply.CreateAt = *replyData.CreateAt
|
reply.CreateAt = *replyData.CreateAt
|
||||||
|
|
||||||
fileIds, err := a.uploadAttachments(replyData.Attachments, reply, teamId)
|
fileIds, err := a.uploadAttachments(replyData.Attachments, reply, teamID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -1112,7 +1112,7 @@ func (a *App) importReplies(data []ReplyImportData, post *model.Post, teamId str
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) importAttachment(data *AttachmentImportData, post *model.Post, teamId string) (*model.FileInfo, *model.AppError) {
|
func (a *App) importAttachment(data *AttachmentImportData, post *model.Post, teamID string) (*model.FileInfo, *model.AppError) {
|
||||||
file, err := os.Open(*data.Path)
|
file, err := os.Open(*data.Path)
|
||||||
if file == nil || err != nil {
|
if file == nil || err != nil {
|
||||||
return nil, model.NewAppError("BulkImport", "app.import.attachment.bad_file.error", map[string]interface{}{"FilePath": *data.Path}, "", http.StatusBadRequest)
|
return nil, model.NewAppError("BulkImport", "app.import.attachment.bad_file.error", map[string]interface{}{"FilePath": *data.Path}, "", http.StatusBadRequest)
|
||||||
@@ -1145,7 +1145,7 @@ func (a *App) importAttachment(data *AttachmentImportData, post *model.Post, tea
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fileInfo, appErr := a.DoUploadFile(timestamp, teamId, post.ChannelId, post.UserId, file.Name(), buf.Bytes())
|
fileInfo, appErr := a.DoUploadFile(timestamp, teamID, post.ChannelId, post.UserId, file.Name(), buf.Bytes())
|
||||||
if appErr != nil {
|
if appErr != nil {
|
||||||
mlog.Error("Failed to upload file:", mlog.Err(appErr))
|
mlog.Error("Failed to upload file:", mlog.Err(appErr))
|
||||||
return nil, appErr
|
return nil, appErr
|
||||||
@@ -1197,8 +1197,8 @@ func (a *App) getTeamsByNames(names []string) (map[string]*model.Team, *model.Ap
|
|||||||
return teams, nil
|
return teams, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) getChannelsByNames(names []string, teamId string) (map[string]*model.Channel, *model.AppError) {
|
func (a *App) getChannelsByNames(names []string, teamID string) (map[string]*model.Channel, *model.AppError) {
|
||||||
allChannels, err := a.Srv().Store.Channel().GetByNames(teamId, names, true)
|
allChannels, err := a.Srv().Store.Channel().GetByNames(teamID, names, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("BulkImport", "app.import.get_teams_by_names.some_teams_not_found.error", nil, err.Error(), http.StatusBadRequest)
|
return nil, model.NewAppError("BulkImport", "app.import.get_teams_by_names.some_teams_not_found.error", nil, err.Error(), http.StatusBadRequest)
|
||||||
}
|
}
|
||||||
@@ -1421,14 +1421,14 @@ func (a *App) importMultiplePostLines(lines []LineImportWorkerData, dryRun bool)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// uploadAttachments imports new attachments and returns current attachments of the post as a map
|
// uploadAttachments imports new attachments and returns current attachments of the post as a map
|
||||||
func (a *App) uploadAttachments(attachments *[]AttachmentImportData, post *model.Post, teamId string) (map[string]bool, *model.AppError) {
|
func (a *App) uploadAttachments(attachments *[]AttachmentImportData, post *model.Post, teamID string) (map[string]bool, *model.AppError) {
|
||||||
if attachments == nil {
|
if attachments == nil {
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
fileIds := make(map[string]bool)
|
fileIds := make(map[string]bool)
|
||||||
for _, attachment := range *attachments {
|
for _, attachment := range *attachments {
|
||||||
attachment := attachment
|
attachment := attachment
|
||||||
fileInfo, err := a.importAttachment(&attachment, post, teamId)
|
fileInfo, err := a.importAttachment(&attachment, post, teamID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -1455,25 +1455,25 @@ func (a *App) importDirectChannel(data *DirectChannelImportData, dryRun bool) *m
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
var userIds []string
|
var userIDs []string
|
||||||
userMap, err := a.getUsersByUsernames(*data.Members)
|
userMap, err := a.getUsersByUsernames(*data.Members)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
for _, user := range *data.Members {
|
for _, user := range *data.Members {
|
||||||
userIds = append(userIds, userMap[user].Id)
|
userIDs = append(userIDs, userMap[user].Id)
|
||||||
}
|
}
|
||||||
|
|
||||||
var channel *model.Channel
|
var channel *model.Channel
|
||||||
|
|
||||||
if len(userIds) == 2 {
|
if len(userIDs) == 2 {
|
||||||
ch, err := a.createDirectChannel(userIds[0], userIds[1])
|
ch, err := a.createDirectChannel(userIDs[0], userIDs[1])
|
||||||
if err != nil && err.Id != store.ChannelExistsError {
|
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)
|
return model.NewAppError("BulkImport", "app.import.import_direct_channel.create_direct_channel.error", nil, err.Error(), http.StatusBadRequest)
|
||||||
}
|
}
|
||||||
channel = ch
|
channel = ch
|
||||||
} else {
|
} else {
|
||||||
ch, err := a.createGroupChannel(userIds)
|
ch, err := a.createGroupChannel(userIDs)
|
||||||
if err != nil && err.Id != store.ChannelExistsError {
|
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)
|
return model.NewAppError("BulkImport", "app.import.import_direct_channel.create_group_channel.error", nil, err.Error(), http.StatusBadRequest)
|
||||||
}
|
}
|
||||||
@@ -1482,9 +1482,9 @@ func (a *App) importDirectChannel(data *DirectChannelImportData, dryRun bool) *m
|
|||||||
|
|
||||||
var preferences model.Preferences
|
var preferences model.Preferences
|
||||||
|
|
||||||
for _, userId := range userIds {
|
for _, userID := range userIDs {
|
||||||
preferences = append(preferences, model.Preference{
|
preferences = append(preferences, model.Preference{
|
||||||
UserId: userId,
|
UserId: userID,
|
||||||
Category: model.PREFERENCE_CATEGORY_DIRECT_CHANNEL_SHOW,
|
Category: model.PREFERENCE_CATEGORY_DIRECT_CHANNEL_SHOW,
|
||||||
Name: channel.Id,
|
Name: channel.Id,
|
||||||
Value: "true",
|
Value: "true",
|
||||||
@@ -1562,23 +1562,23 @@ func (a *App) importMultipleDirectPostLines(lines []LineImportWorkerData, dryRun
|
|||||||
postsForOverwriteMap := map[string]int{}
|
postsForOverwriteMap := map[string]int{}
|
||||||
|
|
||||||
for _, line := range lines {
|
for _, line := range lines {
|
||||||
var userIds []string
|
var userIDs []string
|
||||||
var err *model.AppError
|
var err *model.AppError
|
||||||
for _, username := range *line.DirectPost.ChannelMembers {
|
for _, username := range *line.DirectPost.ChannelMembers {
|
||||||
user := users[username]
|
user := users[username]
|
||||||
userIds = append(userIds, user.Id)
|
userIDs = append(userIDs, user.Id)
|
||||||
}
|
}
|
||||||
|
|
||||||
var channel *model.Channel
|
var channel *model.Channel
|
||||||
var ch *model.Channel
|
var ch *model.Channel
|
||||||
if len(userIds) == 2 {
|
if len(userIDs) == 2 {
|
||||||
ch, err = a.GetOrCreateDirectChannel(userIds[0], userIds[1])
|
ch, err = a.GetOrCreateDirectChannel(userIDs[0], userIDs[1])
|
||||||
if err != nil && err.Id != store.ChannelExistsError {
|
if err != nil && err.Id != store.ChannelExistsError {
|
||||||
return line.LineNumber, model.NewAppError("BulkImport", "app.import.import_direct_post.create_direct_channel.error", nil, err.Error(), http.StatusBadRequest)
|
return line.LineNumber, model.NewAppError("BulkImport", "app.import.import_direct_post.create_direct_channel.error", nil, err.Error(), http.StatusBadRequest)
|
||||||
}
|
}
|
||||||
channel = ch
|
channel = ch
|
||||||
} else {
|
} else {
|
||||||
ch, err = a.createGroupChannel(userIds)
|
ch, err = a.createGroupChannel(userIDs)
|
||||||
if err != nil && err.Id != store.ChannelExistsError {
|
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)
|
return line.LineNumber, model.NewAppError("BulkImport", "app.import.import_direct_post.create_group_channel.error", nil, err.Error(), http.StatusBadRequest)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3094,12 +3094,12 @@ func TestImportImportDirectChannel(t *testing.T) {
|
|||||||
AssertChannelCount(t, th.App, model.CHANNEL_GROUP, groupChannelCount+1)
|
AssertChannelCount(t, th.App, model.CHANNEL_GROUP, groupChannelCount+1)
|
||||||
|
|
||||||
// Get the channel to check that the header was updated.
|
// Get the channel to check that the header was updated.
|
||||||
userIds := []string{
|
userIDs := []string{
|
||||||
th.BasicUser.Id,
|
th.BasicUser.Id,
|
||||||
th.BasicUser2.Id,
|
th.BasicUser2.Id,
|
||||||
user3.Id,
|
user3.Id,
|
||||||
}
|
}
|
||||||
channel, appErr := th.App.createGroupChannel(userIds)
|
channel, appErr := th.App.createGroupChannel(userIDs)
|
||||||
require.Equal(t, appErr.Id, store.ChannelExistsError)
|
require.Equal(t, appErr.Id, store.ChannelExistsError)
|
||||||
require.Equal(t, channel.Header, *data.Header)
|
require.Equal(t, channel.Header, *data.Header)
|
||||||
|
|
||||||
@@ -3395,12 +3395,12 @@ func TestImportImportDirectPost(t *testing.T) {
|
|||||||
|
|
||||||
// Get the channel.
|
// Get the channel.
|
||||||
var groupChannel *model.Channel
|
var groupChannel *model.Channel
|
||||||
userIds := []string{
|
userIDs := []string{
|
||||||
th.BasicUser.Id,
|
th.BasicUser.Id,
|
||||||
th.BasicUser2.Id,
|
th.BasicUser2.Id,
|
||||||
user3.Id,
|
user3.Id,
|
||||||
}
|
}
|
||||||
channel, appErr = th.App.createGroupChannel(userIds)
|
channel, appErr = th.App.createGroupChannel(userIDs)
|
||||||
require.Equal(t, appErr.Id, store.ChannelExistsError)
|
require.Equal(t, appErr.Id, store.ChannelExistsError)
|
||||||
groupChannel = channel
|
groupChannel = channel
|
||||||
|
|
||||||
@@ -3889,12 +3889,12 @@ func TestImportAttachment(t *testing.T) {
|
|||||||
testImage := filepath.Join(testsDir, "test.png")
|
testImage := filepath.Join(testsDir, "test.png")
|
||||||
invalidPath := "some-invalid-path"
|
invalidPath := "some-invalid-path"
|
||||||
|
|
||||||
userId := model.NewId()
|
userID := model.NewId()
|
||||||
data := AttachmentImportData{Path: &testImage}
|
data := AttachmentImportData{Path: &testImage}
|
||||||
_, err := th.App.importAttachment(&data, &model.Post{UserId: userId, ChannelId: "some-channel"}, "some-team")
|
_, err := th.App.importAttachment(&data, &model.Post{UserId: userID, ChannelId: "some-channel"}, "some-team")
|
||||||
assert.Nil(t, err, "sample run without errors")
|
assert.Nil(t, err, "sample run without errors")
|
||||||
|
|
||||||
attachments := GetAttachments(userId, th, t)
|
attachments := GetAttachments(userID, th, t)
|
||||||
assert.Len(t, attachments, 1)
|
assert.Len(t, attachments, 1)
|
||||||
|
|
||||||
data = AttachmentImportData{Path: &invalidPath}
|
data = AttachmentImportData{Path: &invalidPath}
|
||||||
|
|||||||
@@ -36,18 +36,18 @@ func ptrBool(b bool) *bool {
|
|||||||
return &b
|
return &b
|
||||||
}
|
}
|
||||||
|
|
||||||
func checkPreference(t *testing.T, a *App, userId string, category string, name string, value string) {
|
func checkPreference(t *testing.T, a *App, userID string, category string, name string, value string) {
|
||||||
preferences, err := a.Srv().Store.Preference().GetCategory(userId, category)
|
preferences, err := a.Srv().Store.Preference().GetCategory(userID, category)
|
||||||
require.Nilf(t, err, "Failed to get preferences for user %v with category %v", userId, category)
|
require.Nilf(t, err, "Failed to get preferences for user %v with category %v", userID, category)
|
||||||
found := false
|
found := false
|
||||||
for _, preference := range preferences {
|
for _, preference := range preferences {
|
||||||
if preference.Name == name {
|
if preference.Name == name {
|
||||||
found = true
|
found = true
|
||||||
require.Equal(t, preference.Value, value, "Preference for user %v in category %v with name %v has value %v, expected %v", userId, category, name, preference.Value, value)
|
require.Equal(t, preference.Value, value, "Preference for user %v in category %v with name %v has value %v, expected %v", userID, category, name, preference.Value, value)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
require.Truef(t, found, "Did not find preference for user %v in category %v with name %v", userId, category, name)
|
require.Truef(t, found, "Did not find preference for user %v in category %v with name %v", userID, category, name)
|
||||||
}
|
}
|
||||||
|
|
||||||
func checkNotifyProp(t *testing.T, user *model.User, key string, value string) {
|
func checkNotifyProp(t *testing.T, user *model.User, key string, value string) {
|
||||||
@@ -249,8 +249,8 @@ func TestImportProcessImportDataFileVersionLine(t *testing.T) {
|
|||||||
require.NotNil(t, err, "Expected error on invalid version line.")
|
require.NotNil(t, err, "Expected error on invalid version line.")
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetAttachments(userId string, th *TestHelper, t *testing.T) []*model.FileInfo {
|
func GetAttachments(userID string, th *TestHelper, t *testing.T) []*model.FileInfo {
|
||||||
fileInfos, err := th.App.Srv().Store.FileInfo().GetForUser(userId)
|
fileInfos, err := th.App.Srv().Store.FileInfo().GetForUser(userID)
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
return fileInfos
|
return fileInfos
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,11 +37,11 @@ import (
|
|||||||
"github.com/mattermost/mattermost-server/v5/utils"
|
"github.com/mattermost/mattermost-server/v5/utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (a *App) DoPostAction(postId, actionId, userId, selectedOption string) (string, *model.AppError) {
|
func (a *App) DoPostAction(postId, actionId, userID, selectedOption string) (string, *model.AppError) {
|
||||||
return a.DoPostActionWithCookie(postId, actionId, userId, selectedOption, nil)
|
return a.DoPostActionWithCookie(postId, actionId, userID, selectedOption, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) DoPostActionWithCookie(postId, actionId, userId, selectedOption string, cookie *model.PostActionCookie) (string, *model.AppError) {
|
func (a *App) DoPostActionWithCookie(postId, actionId, userID, selectedOption string, cookie *model.PostActionCookie) (string, *model.AppError) {
|
||||||
|
|
||||||
// PostAction may result in the original post being updated. For the
|
// PostAction may result in the original post being updated. For the
|
||||||
// updated post, we need to unconditionally preserve the original
|
// updated post, we need to unconditionally preserve the original
|
||||||
@@ -62,7 +62,7 @@ func (a *App) DoPostActionWithCookie(postId, actionId, userId, selectedOption st
|
|||||||
upstreamURL := ""
|
upstreamURL := ""
|
||||||
rootPostId := ""
|
rootPostId := ""
|
||||||
upstreamRequest := &model.PostActionIntegrationRequest{
|
upstreamRequest := &model.PostActionIntegrationRequest{
|
||||||
UserId: userId,
|
UserId: userID,
|
||||||
PostId: postId,
|
PostId: postId,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -277,7 +277,7 @@ func (a *App) DoPostActionWithCookie(postId, actionId, userId, selectedOption st
|
|||||||
Message: response.EphemeralText,
|
Message: response.EphemeralText,
|
||||||
ChannelId: upstreamRequest.ChannelId,
|
ChannelId: upstreamRequest.ChannelId,
|
||||||
RootId: rootPostId,
|
RootId: rootPostId,
|
||||||
UserId: userId,
|
UserId: userID,
|
||||||
}
|
}
|
||||||
|
|
||||||
if !response.SkipSlackParsing {
|
if !response.SkipSlackParsing {
|
||||||
@@ -287,7 +287,7 @@ func (a *App) DoPostActionWithCookie(postId, actionId, userId, selectedOption st
|
|||||||
for key, value := range retain {
|
for key, value := range retain {
|
||||||
ephemeralPost.AddProp(key, value)
|
ephemeralPost.AddProp(key, value)
|
||||||
}
|
}
|
||||||
a.SendEphemeralPost(userId, ephemeralPost)
|
a.SendEphemeralPost(userID, ephemeralPost)
|
||||||
}
|
}
|
||||||
|
|
||||||
return clientTriggerId, nil
|
return clientTriggerId, nil
|
||||||
@@ -567,7 +567,7 @@ func (a *App) DoLocalRequest(rawURL string, body []byte) (*http.Response, *model
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) OpenInteractiveDialog(request model.OpenDialogRequest) *model.AppError {
|
func (a *App) OpenInteractiveDialog(request model.OpenDialogRequest) *model.AppError {
|
||||||
clientTriggerId, userId, err := request.DecodeAndVerifyTriggerId(a.AsymmetricSigningKey())
|
clientTriggerId, userID, err := request.DecodeAndVerifyTriggerId(a.AsymmetricSigningKey())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -576,7 +576,7 @@ func (a *App) OpenInteractiveDialog(request model.OpenDialogRequest) *model.AppE
|
|||||||
|
|
||||||
jsonRequest, _ := json.Marshal(request)
|
jsonRequest, _ := json.Marshal(request)
|
||||||
|
|
||||||
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_OPEN_DIALOG, "", "", userId, nil)
|
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_OPEN_DIALOG, "", "", userID, nil)
|
||||||
message.Add("dialog", string(jsonRequest))
|
message.Add("dialog", string(jsonRequest))
|
||||||
a.Publish(message)
|
a.Publish(message)
|
||||||
|
|
||||||
|
|||||||
@@ -181,16 +181,16 @@ func (a *App) SendNotifications(post *model.Post, team *model.Team, channel *mod
|
|||||||
// for each mention, make sure to update thread autofollow (if enabled) and update increment mention count
|
// for each mention, make sure to update thread autofollow (if enabled) and update increment mention count
|
||||||
for id := range threadParticipants {
|
for id := range threadParticipants {
|
||||||
mac := make(chan *model.AppError, 1)
|
mac := make(chan *model.AppError, 1)
|
||||||
go func(userId string) {
|
go func(userID string) {
|
||||||
defer close(mac)
|
defer close(mac)
|
||||||
incrementMentions := false
|
incrementMentions := false
|
||||||
for mid := range mentions.Mentions {
|
for mid := range mentions.Mentions {
|
||||||
if userId == mid {
|
if userID == mid {
|
||||||
incrementMentions = true
|
incrementMentions = true
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
nErr := a.Srv().Store.Thread().CreateMembershipIfNeeded(userId, post.RootId, true, incrementMentions, *a.Config().ServiceSettings.ThreadAutoFollow)
|
nErr := a.Srv().Store.Thread().CreateMembershipIfNeeded(userID, post.RootId, true, incrementMentions, *a.Config().ServiceSettings.ThreadAutoFollow)
|
||||||
if nErr != nil {
|
if nErr != nil {
|
||||||
mac <- model.NewAppError("SendNotifications", "app.channel.autofollow.app_error", nil, nErr.Error(), http.StatusInternalServerError)
|
mac <- model.NewAppError("SendNotifications", "app.channel.autofollow.app_error", nil, nErr.Error(), http.StatusInternalServerError)
|
||||||
return
|
return
|
||||||
@@ -205,9 +205,9 @@ func (a *App) SendNotifications(post *model.Post, team *model.Team, channel *mod
|
|||||||
mentionedUsersList = append(mentionedUsersList, id)
|
mentionedUsersList = append(mentionedUsersList, id)
|
||||||
|
|
||||||
umc := make(chan *model.AppError, 1)
|
umc := make(chan *model.AppError, 1)
|
||||||
go func(userId string) {
|
go func(userID string) {
|
||||||
defer close(umc)
|
defer close(umc)
|
||||||
nErr := a.Srv().Store.Channel().IncrementMentionCount(post.ChannelId, userId, *a.Config().ServiceSettings.ThreadAutoFollow)
|
nErr := a.Srv().Store.Channel().IncrementMentionCount(post.ChannelId, userID, *a.Config().ServiceSettings.ThreadAutoFollow)
|
||||||
if nErr != nil {
|
if nErr != nil {
|
||||||
umc <- model.NewAppError("SendNotifications", "app.channel.increment_mention_count.app_error", nil, nErr.Error(), http.StatusInternalServerError)
|
umc <- model.NewAppError("SendNotifications", "app.channel.increment_mention_count.app_error", nil, nErr.Error(), http.StatusInternalServerError)
|
||||||
return
|
return
|
||||||
@@ -705,16 +705,16 @@ const (
|
|||||||
GroupMention
|
GroupMention
|
||||||
)
|
)
|
||||||
|
|
||||||
func (m *ExplicitMentions) addMention(userId string, mentionType MentionType) {
|
func (m *ExplicitMentions) addMention(userID string, mentionType MentionType) {
|
||||||
if m.Mentions == nil {
|
if m.Mentions == nil {
|
||||||
m.Mentions = make(map[string]MentionType)
|
m.Mentions = make(map[string]MentionType)
|
||||||
}
|
}
|
||||||
|
|
||||||
if currentType, ok := m.Mentions[userId]; ok && currentType >= mentionType {
|
if currentType, ok := m.Mentions[userID]; ok && currentType >= mentionType {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
m.Mentions[userId] = mentionType
|
m.Mentions[userID] = mentionType
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *ExplicitMentions) addGroupMention(word string, groups map[string]*model.Group) bool {
|
func (m *ExplicitMentions) addGroupMention(word string, groups map[string]*model.Group) bool {
|
||||||
@@ -745,14 +745,14 @@ func (m *ExplicitMentions) addGroupMention(word string, groups map[string]*model
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *ExplicitMentions) addMentions(userIds []string, mentionType MentionType) {
|
func (m *ExplicitMentions) addMentions(userIDs []string, mentionType MentionType) {
|
||||||
for _, userId := range userIds {
|
for _, userID := range userIDs {
|
||||||
m.addMention(userId, mentionType)
|
m.addMention(userID, mentionType)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *ExplicitMentions) removeMention(userId string) {
|
func (m *ExplicitMentions) removeMention(userID string) {
|
||||||
delete(m.Mentions, userId)
|
delete(m.Mentions, userID)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Given a message and a map mapping mention keywords to the users who use them, returns a map of mentioned
|
// Given a message and a map mapping mention keywords to the users who use them, returns a map of mentioned
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ type PushNotificationsHub struct {
|
|||||||
type PushNotification struct {
|
type PushNotification struct {
|
||||||
notificationType notificationType
|
notificationType notificationType
|
||||||
currentSessionId string
|
currentSessionId string
|
||||||
userId string
|
userID string
|
||||||
channelId string
|
channelId string
|
||||||
post *model.Post
|
post *model.Post
|
||||||
user *model.User
|
user *model.User
|
||||||
@@ -74,8 +74,8 @@ func (a *App) sendPushNotificationSync(post *model.Post, user *model.User, chann
|
|||||||
return a.sendPushNotificationToAllSessions(msg, user.Id, "")
|
return a.sendPushNotificationToAllSessions(msg, user.Id, "")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) sendPushNotificationToAllSessions(msg *model.PushNotification, userId string, skipSessionId string) *model.AppError {
|
func (a *App) sendPushNotificationToAllSessions(msg *model.PushNotification, userID string, skipSessionId string) *model.AppError {
|
||||||
sessions, err := a.getMobileAppSessions(userId)
|
sessions, err := a.getMobileAppSessions(userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -201,7 +201,7 @@ func (a *App) getPushNotificationMessage(contentsConfig, postMessage string, exp
|
|||||||
return senderName + userLocale("api.post.send_notifications_and_forget.push_general_message")
|
return senderName + userLocale("api.post.send_notifications_and_forget.push_general_message")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) clearPushNotificationSync(currentSessionId, userId, channelId string) *model.AppError {
|
func (a *App) clearPushNotificationSync(currentSessionId, userID, channelId string) *model.AppError {
|
||||||
msg := &model.PushNotification{
|
msg := &model.PushNotification{
|
||||||
Type: model.PUSH_TYPE_CLEAR,
|
Type: model.PUSH_TYPE_CLEAR,
|
||||||
Version: model.PUSH_MESSAGE_V2,
|
Version: model.PUSH_MESSAGE_V2,
|
||||||
@@ -209,22 +209,22 @@ func (a *App) clearPushNotificationSync(currentSessionId, userId, channelId stri
|
|||||||
ContentAvailable: 1,
|
ContentAvailable: 1,
|
||||||
}
|
}
|
||||||
|
|
||||||
unreadCount, err := a.Srv().Store.User().GetUnreadCount(userId)
|
unreadCount, err := a.Srv().Store.User().GetUnreadCount(userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return model.NewAppError("clearPushNotificationSync", "app.user.get_unread_count.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return model.NewAppError("clearPushNotificationSync", "app.user.get_unread_count.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
|
|
||||||
msg.Badge = int(unreadCount)
|
msg.Badge = int(unreadCount)
|
||||||
|
|
||||||
return a.sendPushNotificationToAllSessions(msg, userId, currentSessionId)
|
return a.sendPushNotificationToAllSessions(msg, userID, currentSessionId)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) clearPushNotification(currentSessionId, userId, channelId string) {
|
func (a *App) clearPushNotification(currentSessionId, userID, channelId string) {
|
||||||
select {
|
select {
|
||||||
case a.Srv().PushNotificationsHub.notificationsChan <- PushNotification{
|
case a.Srv().PushNotificationsHub.notificationsChan <- PushNotification{
|
||||||
notificationType: notificationTypeClear,
|
notificationType: notificationTypeClear,
|
||||||
currentSessionId: currentSessionId,
|
currentSessionId: currentSessionId,
|
||||||
userId: userId,
|
userID: userID,
|
||||||
channelId: channelId,
|
channelId: channelId,
|
||||||
}:
|
}:
|
||||||
case <-a.Srv().PushNotificationsHub.stopChan:
|
case <-a.Srv().PushNotificationsHub.stopChan:
|
||||||
@@ -232,7 +232,7 @@ func (a *App) clearPushNotification(currentSessionId, userId, channelId string)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) updateMobileAppBadgeSync(userId string) *model.AppError {
|
func (a *App) updateMobileAppBadgeSync(userID string) *model.AppError {
|
||||||
msg := &model.PushNotification{
|
msg := &model.PushNotification{
|
||||||
Type: model.PUSH_TYPE_UPDATE_BADGE,
|
Type: model.PUSH_TYPE_UPDATE_BADGE,
|
||||||
Version: model.PUSH_MESSAGE_V2,
|
Version: model.PUSH_MESSAGE_V2,
|
||||||
@@ -240,21 +240,21 @@ func (a *App) updateMobileAppBadgeSync(userId string) *model.AppError {
|
|||||||
ContentAvailable: 1,
|
ContentAvailable: 1,
|
||||||
}
|
}
|
||||||
|
|
||||||
unreadCount, err := a.Srv().Store.User().GetUnreadCount(userId)
|
unreadCount, err := a.Srv().Store.User().GetUnreadCount(userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return model.NewAppError("updateMobileAppBadgeSync", "app.user.get_unread_count.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return model.NewAppError("updateMobileAppBadgeSync", "app.user.get_unread_count.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
|
|
||||||
msg.Badge = int(unreadCount)
|
msg.Badge = int(unreadCount)
|
||||||
|
|
||||||
return a.sendPushNotificationToAllSessions(msg, userId, "")
|
return a.sendPushNotificationToAllSessions(msg, userID, "")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) UpdateMobileAppBadge(userId string) {
|
func (a *App) UpdateMobileAppBadge(userID string) {
|
||||||
select {
|
select {
|
||||||
case a.Srv().PushNotificationsHub.notificationsChan <- PushNotification{
|
case a.Srv().PushNotificationsHub.notificationsChan <- PushNotification{
|
||||||
notificationType: notificationTypeUpdateBadge,
|
notificationType: notificationTypeUpdateBadge,
|
||||||
userId: userId,
|
userID: userID,
|
||||||
}:
|
}:
|
||||||
case <-a.Srv().PushNotificationsHub.stopChan:
|
case <-a.Srv().PushNotificationsHub.stopChan:
|
||||||
return
|
return
|
||||||
@@ -307,7 +307,7 @@ func (hub *PushNotificationsHub) start() {
|
|||||||
var err *model.AppError
|
var err *model.AppError
|
||||||
switch notification.notificationType {
|
switch notification.notificationType {
|
||||||
case notificationTypeClear:
|
case notificationTypeClear:
|
||||||
err = hub.app.clearPushNotificationSync(notification.currentSessionId, notification.userId, notification.channelId)
|
err = hub.app.clearPushNotificationSync(notification.currentSessionId, notification.userID, notification.channelId)
|
||||||
case notificationTypeMessage:
|
case notificationTypeMessage:
|
||||||
err = hub.app.sendPushNotificationSync(
|
err = hub.app.sendPushNotificationSync(
|
||||||
notification.post,
|
notification.post,
|
||||||
@@ -320,7 +320,7 @@ func (hub *PushNotificationsHub) start() {
|
|||||||
notification.replyToThreadType,
|
notification.replyToThreadType,
|
||||||
)
|
)
|
||||||
case notificationTypeUpdateBadge:
|
case notificationTypeUpdateBadge:
|
||||||
err = hub.app.updateMobileAppBadgeSync(notification.userId)
|
err = hub.app.updateMobileAppBadgeSync(notification.userID)
|
||||||
default:
|
default:
|
||||||
mlog.Debug("Invalid notification type", mlog.String("notification_type", string(notification.notificationType)))
|
mlog.Debug("Invalid notification type", mlog.String("notification_type", string(notification.notificationType)))
|
||||||
}
|
}
|
||||||
@@ -429,8 +429,8 @@ func (a *App) SendAckToPushProxy(ack *model.PushNotificationAck) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) getMobileAppSessions(userId string) ([]*model.Session, *model.AppError) {
|
func (a *App) getMobileAppSessions(userID string) ([]*model.Session, *model.AppError) {
|
||||||
sessions, err := a.Srv().Store.Session().GetSessionsWithActiveDeviceIds(userId)
|
sessions, err := a.Srv().Store.Session().GetSessionsWithActiveDeviceIds(userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("getMobileAppSessions", "app.session.get_sessions.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("getMobileAppSessions", "app.session.get_sessions.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -353,13 +353,13 @@ func TestDoesNotifyPropsAllowPushNotification(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestDoesStatusAllowPushNotification(t *testing.T) {
|
func TestDoesStatusAllowPushNotification(t *testing.T) {
|
||||||
userId := model.NewId()
|
userID := model.NewId()
|
||||||
channelId := model.NewId()
|
channelId := model.NewId()
|
||||||
|
|
||||||
offline := &model.Status{UserId: userId, Status: model.STATUS_OFFLINE, Manual: false, LastActivityAt: 0, ActiveChannel: ""}
|
offline := &model.Status{UserId: userID, Status: model.STATUS_OFFLINE, Manual: false, LastActivityAt: 0, ActiveChannel: ""}
|
||||||
away := &model.Status{UserId: userId, Status: model.STATUS_AWAY, Manual: false, LastActivityAt: 0, ActiveChannel: ""}
|
away := &model.Status{UserId: userID, Status: model.STATUS_AWAY, Manual: false, LastActivityAt: 0, ActiveChannel: ""}
|
||||||
online := &model.Status{UserId: userId, Status: model.STATUS_ONLINE, Manual: false, LastActivityAt: model.GetMillis(), ActiveChannel: ""}
|
online := &model.Status{UserId: userID, Status: model.STATUS_ONLINE, Manual: false, LastActivityAt: model.GetMillis(), ActiveChannel: ""}
|
||||||
dnd := &model.Status{UserId: userId, Status: model.STATUS_DND, Manual: true, LastActivityAt: model.GetMillis(), ActiveChannel: ""}
|
dnd := &model.Status{UserId: userID, Status: model.STATUS_DND, Manual: true, LastActivityAt: model.GetMillis(), ActiveChannel: ""}
|
||||||
|
|
||||||
tt := []struct {
|
tt := []struct {
|
||||||
name string
|
name string
|
||||||
|
|||||||
@@ -1971,51 +1971,51 @@ func TestAddMention(t *testing.T) {
|
|||||||
t.Run("should initialize Mentions and store new mentions", func(t *testing.T) {
|
t.Run("should initialize Mentions and store new mentions", func(t *testing.T) {
|
||||||
m := &ExplicitMentions{}
|
m := &ExplicitMentions{}
|
||||||
|
|
||||||
userId1 := model.NewId()
|
userID1 := model.NewId()
|
||||||
userId2 := model.NewId()
|
userID2 := model.NewId()
|
||||||
|
|
||||||
m.addMention(userId1, KeywordMention)
|
m.addMention(userID1, KeywordMention)
|
||||||
m.addMention(userId2, CommentMention)
|
m.addMention(userID2, CommentMention)
|
||||||
|
|
||||||
assert.Equal(t, map[string]MentionType{
|
assert.Equal(t, map[string]MentionType{
|
||||||
userId1: KeywordMention,
|
userID1: KeywordMention,
|
||||||
userId2: CommentMention,
|
userID2: CommentMention,
|
||||||
}, m.Mentions)
|
}, m.Mentions)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("should replace existing mentions with higher priority ones", func(t *testing.T) {
|
t.Run("should replace existing mentions with higher priority ones", func(t *testing.T) {
|
||||||
m := &ExplicitMentions{}
|
m := &ExplicitMentions{}
|
||||||
|
|
||||||
userId1 := model.NewId()
|
userID1 := model.NewId()
|
||||||
userId2 := model.NewId()
|
userID2 := model.NewId()
|
||||||
|
|
||||||
m.addMention(userId1, ThreadMention)
|
m.addMention(userID1, ThreadMention)
|
||||||
m.addMention(userId2, DMMention)
|
m.addMention(userID2, DMMention)
|
||||||
|
|
||||||
m.addMention(userId1, ChannelMention)
|
m.addMention(userID1, ChannelMention)
|
||||||
m.addMention(userId2, KeywordMention)
|
m.addMention(userID2, KeywordMention)
|
||||||
|
|
||||||
assert.Equal(t, map[string]MentionType{
|
assert.Equal(t, map[string]MentionType{
|
||||||
userId1: ChannelMention,
|
userID1: ChannelMention,
|
||||||
userId2: KeywordMention,
|
userID2: KeywordMention,
|
||||||
}, m.Mentions)
|
}, m.Mentions)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("should not replace high priority mentions with low priority ones", func(t *testing.T) {
|
t.Run("should not replace high priority mentions with low priority ones", func(t *testing.T) {
|
||||||
m := &ExplicitMentions{}
|
m := &ExplicitMentions{}
|
||||||
|
|
||||||
userId1 := model.NewId()
|
userID1 := model.NewId()
|
||||||
userId2 := model.NewId()
|
userID2 := model.NewId()
|
||||||
|
|
||||||
m.addMention(userId1, KeywordMention)
|
m.addMention(userID1, KeywordMention)
|
||||||
m.addMention(userId2, CommentMention)
|
m.addMention(userID2, CommentMention)
|
||||||
|
|
||||||
m.addMention(userId1, DMMention)
|
m.addMention(userID1, DMMention)
|
||||||
m.addMention(userId2, ThreadMention)
|
m.addMention(userID2, ThreadMention)
|
||||||
|
|
||||||
assert.Equal(t, map[string]MentionType{
|
assert.Equal(t, map[string]MentionType{
|
||||||
userId1: KeywordMention,
|
userID1: KeywordMention,
|
||||||
userId2: CommentMention,
|
userID2: CommentMention,
|
||||||
}, m.Mentions)
|
}, m.Mentions)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
68
app/oauth.go
68
app/oauth.go
@@ -128,12 +128,12 @@ func (a *App) GetOAuthApps(page, perPage int) ([]*model.OAuthApp, *model.AppErro
|
|||||||
return oauthApps, nil
|
return oauthApps, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetOAuthAppsByCreator(userId string, page, perPage int) ([]*model.OAuthApp, *model.AppError) {
|
func (a *App) GetOAuthAppsByCreator(userID string, page, perPage int) ([]*model.OAuthApp, *model.AppError) {
|
||||||
if !*a.Config().ServiceSettings.EnableOAuthServiceProvider {
|
if !*a.Config().ServiceSettings.EnableOAuthServiceProvider {
|
||||||
return nil, model.NewAppError("GetOAuthAppsByUser", "api.oauth.allow_oauth.turn_off.app_error", nil, "", http.StatusNotImplemented)
|
return nil, model.NewAppError("GetOAuthAppsByUser", "api.oauth.allow_oauth.turn_off.app_error", nil, "", http.StatusNotImplemented)
|
||||||
}
|
}
|
||||||
|
|
||||||
oauthApps, err := a.Srv().Store.OAuth().GetAppByUser(userId, page*perPage, perPage)
|
oauthApps, err := a.Srv().Store.OAuth().GetAppByUser(userID, page*perPage, perPage)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("GetOAuthAppsByCreator", "app.oauth.get_app_by_user.find.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("GetOAuthAppsByCreator", "app.oauth.get_app_by_user.find.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -141,8 +141,8 @@ func (a *App) GetOAuthAppsByCreator(userId string, page, perPage int) ([]*model.
|
|||||||
return oauthApps, nil
|
return oauthApps, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetOAuthImplicitRedirect(userId string, authRequest *model.AuthorizeRequest) (string, *model.AppError) {
|
func (a *App) GetOAuthImplicitRedirect(userID string, authRequest *model.AuthorizeRequest) (string, *model.AppError) {
|
||||||
session, err := a.GetOAuthAccessTokenForImplicitFlow(userId, authRequest)
|
session, err := a.GetOAuthAccessTokenForImplicitFlow(userID, authRequest)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
@@ -157,8 +157,8 @@ func (a *App) GetOAuthImplicitRedirect(userId string, authRequest *model.Authori
|
|||||||
return fmt.Sprintf("%s#%s", authRequest.RedirectUri, values.Encode()), nil
|
return fmt.Sprintf("%s#%s", authRequest.RedirectUri, values.Encode()), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetOAuthCodeRedirect(userId string, authRequest *model.AuthorizeRequest) (string, *model.AppError) {
|
func (a *App) GetOAuthCodeRedirect(userID string, authRequest *model.AuthorizeRequest) (string, *model.AppError) {
|
||||||
authData := &model.AuthData{UserId: userId, ClientId: authRequest.ClientId, CreateAt: model.GetMillis(), RedirectUri: authRequest.RedirectUri, State: authRequest.State, Scope: authRequest.Scope}
|
authData := &model.AuthData{UserId: userID, ClientId: authRequest.ClientId, CreateAt: model.GetMillis(), RedirectUri: authRequest.RedirectUri, State: authRequest.State, Scope: authRequest.Scope}
|
||||||
authData.Code = model.NewId() + model.NewId()
|
authData.Code = model.NewId() + model.NewId()
|
||||||
|
|
||||||
if _, err := a.Srv().Store.OAuth().SaveAuthData(authData); err != nil {
|
if _, err := a.Srv().Store.OAuth().SaveAuthData(authData); err != nil {
|
||||||
@@ -168,7 +168,7 @@ func (a *App) GetOAuthCodeRedirect(userId string, authRequest *model.AuthorizeRe
|
|||||||
return authRequest.RedirectUri + "?code=" + url.QueryEscape(authData.Code) + "&state=" + url.QueryEscape(authData.State), nil
|
return authRequest.RedirectUri + "?code=" + url.QueryEscape(authData.Code) + "&state=" + url.QueryEscape(authData.State), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) AllowOAuthAppAccessToUser(userId string, authRequest *model.AuthorizeRequest) (string, *model.AppError) {
|
func (a *App) AllowOAuthAppAccessToUser(userID string, authRequest *model.AuthorizeRequest) (string, *model.AppError) {
|
||||||
if !*a.Config().ServiceSettings.EnableOAuthServiceProvider {
|
if !*a.Config().ServiceSettings.EnableOAuthServiceProvider {
|
||||||
return "", model.NewAppError("AllowOAuthAppAccessToUser", "api.oauth.allow_oauth.turn_off.app_error", nil, "", http.StatusNotImplemented)
|
return "", model.NewAppError("AllowOAuthAppAccessToUser", "api.oauth.allow_oauth.turn_off.app_error", nil, "", http.StatusNotImplemented)
|
||||||
}
|
}
|
||||||
@@ -196,9 +196,9 @@ func (a *App) AllowOAuthAppAccessToUser(userId string, authRequest *model.Author
|
|||||||
var err *model.AppError
|
var err *model.AppError
|
||||||
switch authRequest.ResponseType {
|
switch authRequest.ResponseType {
|
||||||
case model.AUTHCODE_RESPONSE_TYPE:
|
case model.AUTHCODE_RESPONSE_TYPE:
|
||||||
redirectURI, err = a.GetOAuthCodeRedirect(userId, authRequest)
|
redirectURI, err = a.GetOAuthCodeRedirect(userID, authRequest)
|
||||||
case model.IMPLICIT_RESPONSE_TYPE:
|
case model.IMPLICIT_RESPONSE_TYPE:
|
||||||
redirectURI, err = a.GetOAuthImplicitRedirect(userId, authRequest)
|
redirectURI, err = a.GetOAuthImplicitRedirect(userID, authRequest)
|
||||||
default:
|
default:
|
||||||
return authRequest.RedirectUri + "?error=unsupported_response_type&state=" + authRequest.State, nil
|
return authRequest.RedirectUri + "?error=unsupported_response_type&state=" + authRequest.State, nil
|
||||||
}
|
}
|
||||||
@@ -210,7 +210,7 @@ func (a *App) AllowOAuthAppAccessToUser(userId string, authRequest *model.Author
|
|||||||
|
|
||||||
// This saves the OAuth2 app as authorized
|
// This saves the OAuth2 app as authorized
|
||||||
authorizedApp := model.Preference{
|
authorizedApp := model.Preference{
|
||||||
UserId: userId,
|
UserId: userID,
|
||||||
Category: model.PREFERENCE_CATEGORY_AUTHORIZED_OAUTH_APP,
|
Category: model.PREFERENCE_CATEGORY_AUTHORIZED_OAUTH_APP,
|
||||||
Name: authRequest.ClientId,
|
Name: authRequest.ClientId,
|
||||||
Value: authRequest.Scope,
|
Value: authRequest.Scope,
|
||||||
@@ -224,7 +224,7 @@ func (a *App) AllowOAuthAppAccessToUser(userId string, authRequest *model.Author
|
|||||||
return redirectURI, nil
|
return redirectURI, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetOAuthAccessTokenForImplicitFlow(userId string, authRequest *model.AuthorizeRequest) (*model.Session, *model.AppError) {
|
func (a *App) GetOAuthAccessTokenForImplicitFlow(userID string, authRequest *model.AuthorizeRequest) (*model.Session, *model.AppError) {
|
||||||
if !*a.Config().ServiceSettings.EnableOAuthServiceProvider {
|
if !*a.Config().ServiceSettings.EnableOAuthServiceProvider {
|
||||||
return nil, model.NewAppError("GetOAuthAccessToken", "api.oauth.get_access_token.disabled.app_error", nil, "", http.StatusNotImplemented)
|
return nil, model.NewAppError("GetOAuthAccessToken", "api.oauth.get_access_token.disabled.app_error", nil, "", http.StatusNotImplemented)
|
||||||
}
|
}
|
||||||
@@ -234,7 +234,7 @@ func (a *App) GetOAuthAccessTokenForImplicitFlow(userId string, authRequest *mod
|
|||||||
return nil, model.NewAppError("GetOAuthAccessToken", "api.oauth.get_access_token.credentials.app_error", nil, "", http.StatusNotFound)
|
return nil, model.NewAppError("GetOAuthAccessToken", "api.oauth.get_access_token.credentials.app_error", nil, "", http.StatusNotFound)
|
||||||
}
|
}
|
||||||
|
|
||||||
user, err := a.GetUser(userId)
|
user, err := a.GetUser(userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -409,11 +409,11 @@ func (a *App) newSessionUpdateToken(appName string, accessData *model.AccessData
|
|||||||
return accessRsp, nil
|
return accessRsp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetOAuthLoginEndpoint(w http.ResponseWriter, r *http.Request, service, teamId, action, redirectTo, loginHint string, isMobile bool) (string, *model.AppError) {
|
func (a *App) GetOAuthLoginEndpoint(w http.ResponseWriter, r *http.Request, service, teamID, action, redirectTo, loginHint string, isMobile bool) (string, *model.AppError) {
|
||||||
stateProps := map[string]string{}
|
stateProps := map[string]string{}
|
||||||
stateProps["action"] = action
|
stateProps["action"] = action
|
||||||
if teamId != "" {
|
if teamID != "" {
|
||||||
stateProps["team_id"] = teamId
|
stateProps["team_id"] = teamID
|
||||||
}
|
}
|
||||||
|
|
||||||
if redirectTo != "" {
|
if redirectTo != "" {
|
||||||
@@ -430,11 +430,11 @@ func (a *App) GetOAuthLoginEndpoint(w http.ResponseWriter, r *http.Request, serv
|
|||||||
return authUrl, nil
|
return authUrl, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetOAuthSignupEndpoint(w http.ResponseWriter, r *http.Request, service, teamId string) (string, *model.AppError) {
|
func (a *App) GetOAuthSignupEndpoint(w http.ResponseWriter, r *http.Request, service, teamID string) (string, *model.AppError) {
|
||||||
stateProps := map[string]string{}
|
stateProps := map[string]string{}
|
||||||
stateProps["action"] = model.OAUTH_ACTION_SIGNUP
|
stateProps["action"] = model.OAUTH_ACTION_SIGNUP
|
||||||
if teamId != "" {
|
if teamID != "" {
|
||||||
stateProps["team_id"] = teamId
|
stateProps["team_id"] = teamID
|
||||||
}
|
}
|
||||||
|
|
||||||
authUrl, err := a.GetAuthorizationCode(w, r, service, stateProps, "")
|
authUrl, err := a.GetAuthorizationCode(w, r, service, stateProps, "")
|
||||||
@@ -445,12 +445,12 @@ func (a *App) GetOAuthSignupEndpoint(w http.ResponseWriter, r *http.Request, ser
|
|||||||
return authUrl, nil
|
return authUrl, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetAuthorizedAppsForUser(userId string, page, perPage int) ([]*model.OAuthApp, *model.AppError) {
|
func (a *App) GetAuthorizedAppsForUser(userID string, page, perPage int) ([]*model.OAuthApp, *model.AppError) {
|
||||||
if !*a.Config().ServiceSettings.EnableOAuthServiceProvider {
|
if !*a.Config().ServiceSettings.EnableOAuthServiceProvider {
|
||||||
return nil, model.NewAppError("GetAuthorizedAppsForUser", "api.oauth.allow_oauth.turn_off.app_error", nil, "", http.StatusNotImplemented)
|
return nil, model.NewAppError("GetAuthorizedAppsForUser", "api.oauth.allow_oauth.turn_off.app_error", nil, "", http.StatusNotImplemented)
|
||||||
}
|
}
|
||||||
|
|
||||||
apps, err := a.Srv().Store.OAuth().GetAuthorizedApps(userId, page*perPage, perPage)
|
apps, err := a.Srv().Store.OAuth().GetAuthorizedApps(userID, page*perPage, perPage)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("GetAuthorizedAppsForUser", "app.oauth.get_apps.find.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("GetAuthorizedAppsForUser", "app.oauth.get_apps.find.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -463,13 +463,13 @@ func (a *App) GetAuthorizedAppsForUser(userId string, page, perPage int) ([]*mod
|
|||||||
return apps, nil
|
return apps, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) DeauthorizeOAuthAppForUser(userId, appId string) *model.AppError {
|
func (a *App) DeauthorizeOAuthAppForUser(userID, appId string) *model.AppError {
|
||||||
if !*a.Config().ServiceSettings.EnableOAuthServiceProvider {
|
if !*a.Config().ServiceSettings.EnableOAuthServiceProvider {
|
||||||
return model.NewAppError("DeauthorizeOAuthAppForUser", "api.oauth.allow_oauth.turn_off.app_error", nil, "", http.StatusNotImplemented)
|
return model.NewAppError("DeauthorizeOAuthAppForUser", "api.oauth.allow_oauth.turn_off.app_error", nil, "", http.StatusNotImplemented)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Revoke app sessions
|
// Revoke app sessions
|
||||||
accessData, err := a.Srv().Store.OAuth().GetAccessDataByUserForApp(userId, appId)
|
accessData, err := a.Srv().Store.OAuth().GetAccessDataByUserForApp(userID, appId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return model.NewAppError("DeauthorizeOAuthAppForUser", "app.oauth.get_access_data_by_user_for_app.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return model.NewAppError("DeauthorizeOAuthAppForUser", "app.oauth.get_access_data_by_user_for_app.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -485,7 +485,7 @@ func (a *App) DeauthorizeOAuthAppForUser(userId, appId string) *model.AppError {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Deauthorize the app
|
// Deauthorize the app
|
||||||
if err := a.Srv().Store.Preference().Delete(userId, model.PREFERENCE_CATEGORY_AUTHORIZED_OAUTH_APP, appId); err != nil {
|
if err := a.Srv().Store.Preference().Delete(userID, model.PREFERENCE_CATEGORY_AUTHORIZED_OAUTH_APP, appId); err != nil {
|
||||||
return model.NewAppError("DeauthorizeOAuthAppForUser", "app.preference.delete.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return model.NewAppError("DeauthorizeOAuthAppForUser", "app.preference.delete.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -544,22 +544,22 @@ func (a *App) RevokeAccessToken(token string) *model.AppError {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) CompleteOAuth(service string, body io.ReadCloser, teamId string, props map[string]string, tokenUser *model.User) (*model.User, *model.AppError) {
|
func (a *App) CompleteOAuth(service string, body io.ReadCloser, teamID string, props map[string]string, tokenUser *model.User) (*model.User, *model.AppError) {
|
||||||
defer body.Close()
|
defer body.Close()
|
||||||
|
|
||||||
action := props["action"]
|
action := props["action"]
|
||||||
|
|
||||||
switch action {
|
switch action {
|
||||||
case model.OAUTH_ACTION_SIGNUP:
|
case model.OAUTH_ACTION_SIGNUP:
|
||||||
return a.CreateOAuthUser(service, body, teamId, tokenUser)
|
return a.CreateOAuthUser(service, body, teamID, tokenUser)
|
||||||
case model.OAUTH_ACTION_LOGIN:
|
case model.OAUTH_ACTION_LOGIN:
|
||||||
return a.LoginByOAuth(service, body, teamId, tokenUser)
|
return a.LoginByOAuth(service, body, teamID, tokenUser)
|
||||||
case model.OAUTH_ACTION_EMAIL_TO_SSO:
|
case model.OAUTH_ACTION_EMAIL_TO_SSO:
|
||||||
return a.CompleteSwitchWithOAuth(service, body, props["email"], tokenUser)
|
return a.CompleteSwitchWithOAuth(service, body, props["email"], tokenUser)
|
||||||
case model.OAUTH_ACTION_SSO_TO_EMAIL:
|
case model.OAUTH_ACTION_SSO_TO_EMAIL:
|
||||||
return a.LoginByOAuth(service, body, teamId, tokenUser)
|
return a.LoginByOAuth(service, body, teamID, tokenUser)
|
||||||
default:
|
default:
|
||||||
return a.LoginByOAuth(service, body, teamId, tokenUser)
|
return a.LoginByOAuth(service, body, teamID, tokenUser)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -580,7 +580,7 @@ func (a *App) getSSOProvider(service string) (einterfaces.OauthProvider, *model.
|
|||||||
return provider, nil
|
return provider, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) LoginByOAuth(service string, userData io.Reader, teamId string, tokenUser *model.User) (*model.User, *model.AppError) {
|
func (a *App) LoginByOAuth(service string, userData io.Reader, teamID string, tokenUser *model.User) (*model.User, *model.AppError) {
|
||||||
provider, e := a.getSSOProvider(service)
|
provider, e := a.getSSOProvider(service)
|
||||||
if e != nil {
|
if e != nil {
|
||||||
return nil, e
|
return nil, e
|
||||||
@@ -606,7 +606,7 @@ func (a *App) LoginByOAuth(service string, userData io.Reader, teamId string, to
|
|||||||
user, err := a.GetUserByAuth(model.NewString(*authUser.AuthData), service)
|
user, err := a.GetUserByAuth(model.NewString(*authUser.AuthData), service)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if err.Id == MissingAuthAccountError {
|
if err.Id == MissingAuthAccountError {
|
||||||
user, err = a.CreateOAuthUser(service, bytes.NewReader(buf.Bytes()), teamId, tokenUser)
|
user, err = a.CreateOAuthUser(service, bytes.NewReader(buf.Bytes()), teamID, tokenUser)
|
||||||
} else {
|
} else {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -621,8 +621,8 @@ func (a *App) LoginByOAuth(service string, userData io.Reader, teamId string, to
|
|||||||
if err = a.UpdateOAuthUserAttrs(bytes.NewReader(buf.Bytes()), user, provider, service, tokenUser); err != nil {
|
if err = a.UpdateOAuthUserAttrs(bytes.NewReader(buf.Bytes()), user, provider, service, tokenUser); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if teamId != "" {
|
if teamID != "" {
|
||||||
err = a.AddUserToTeamByTeamId(teamId, user)
|
err = a.AddUserToTeamByTeamId(teamID, user)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -833,7 +833,7 @@ func (a *App) AuthorizeOAuthUser(w http.ResponseWriter, r *http.Request, service
|
|||||||
|
|
||||||
http.SetCookie(w, httpCookie)
|
http.SetCookie(w, httpCookie)
|
||||||
|
|
||||||
teamId := stateProps["team_id"]
|
teamID := stateProps["team_id"]
|
||||||
|
|
||||||
p := url.Values{}
|
p := url.Values{}
|
||||||
p.Set("client_id", *sso.Id)
|
p.Set("client_id", *sso.Id)
|
||||||
@@ -912,7 +912,7 @@ func (a *App) AuthorizeOAuthUser(w http.ResponseWriter, r *http.Request, service
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Note that resp.Body is not closed here, so it must be closed by the caller
|
// Note that resp.Body is not closed here, so it must be closed by the caller
|
||||||
return resp.Body, teamId, stateProps, userFromToken, nil
|
return resp.Body, teamID, stateProps, userFromToken, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) SwitchEmailToOAuth(w http.ResponseWriter, r *http.Request, email, password, code, service string) (string, *model.AppError) {
|
func (a *App) SwitchEmailToOAuth(w http.ResponseWriter, r *http.Request, email, password, code, service string) (string, *model.AppError) {
|
||||||
|
|||||||
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
@@ -66,8 +66,8 @@ func (api *PluginAPI) RegisterCommand(command *model.Command) error {
|
|||||||
return api.app.RegisterPluginCommand(api.id, command)
|
return api.app.RegisterPluginCommand(api.id, command)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) UnregisterCommand(teamId, trigger string) error {
|
func (api *PluginAPI) UnregisterCommand(teamID, trigger string) error {
|
||||||
api.app.UnregisterPluginCommand(api.id, teamId, trigger)
|
api.app.UnregisterPluginCommand(api.id, teamID, trigger)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -155,16 +155,16 @@ func (api *PluginAPI) CreateTeam(team *model.Team) (*model.Team, *model.AppError
|
|||||||
return api.app.CreateTeam(team)
|
return api.app.CreateTeam(team)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) DeleteTeam(teamId string) *model.AppError {
|
func (api *PluginAPI) DeleteTeam(teamID string) *model.AppError {
|
||||||
return api.app.SoftDeleteTeam(teamId)
|
return api.app.SoftDeleteTeam(teamID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) GetTeams() ([]*model.Team, *model.AppError) {
|
func (api *PluginAPI) GetTeams() ([]*model.Team, *model.AppError) {
|
||||||
return api.app.GetAllTeams()
|
return api.app.GetAllTeams()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) GetTeam(teamId string) (*model.Team, *model.AppError) {
|
func (api *PluginAPI) GetTeam(teamID string) (*model.Team, *model.AppError) {
|
||||||
return api.app.GetTeam(teamId)
|
return api.app.GetTeam(teamID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) SearchTeams(term string) ([]*model.Team, *model.AppError) {
|
func (api *PluginAPI) SearchTeams(term string) ([]*model.Team, *model.AppError) {
|
||||||
@@ -176,64 +176,64 @@ func (api *PluginAPI) GetTeamByName(name string) (*model.Team, *model.AppError)
|
|||||||
return api.app.GetTeamByName(name)
|
return api.app.GetTeamByName(name)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) GetTeamsUnreadForUser(userId string) ([]*model.TeamUnread, *model.AppError) {
|
func (api *PluginAPI) GetTeamsUnreadForUser(userID string) ([]*model.TeamUnread, *model.AppError) {
|
||||||
return api.app.GetTeamsUnreadForUser("", userId)
|
return api.app.GetTeamsUnreadForUser("", userID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) UpdateTeam(team *model.Team) (*model.Team, *model.AppError) {
|
func (api *PluginAPI) UpdateTeam(team *model.Team) (*model.Team, *model.AppError) {
|
||||||
return api.app.UpdateTeam(team)
|
return api.app.UpdateTeam(team)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) GetTeamsForUser(userId string) ([]*model.Team, *model.AppError) {
|
func (api *PluginAPI) GetTeamsForUser(userID string) ([]*model.Team, *model.AppError) {
|
||||||
return api.app.GetTeamsForUser(userId)
|
return api.app.GetTeamsForUser(userID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) CreateTeamMember(teamId, userId string) (*model.TeamMember, *model.AppError) {
|
func (api *PluginAPI) CreateTeamMember(teamID, userID string) (*model.TeamMember, *model.AppError) {
|
||||||
return api.app.AddTeamMember(teamId, userId)
|
return api.app.AddTeamMember(teamID, userID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) CreateTeamMembers(teamId string, userIds []string, requestorId string) ([]*model.TeamMember, *model.AppError) {
|
func (api *PluginAPI) CreateTeamMembers(teamID string, userIDs []string, requestorId string) ([]*model.TeamMember, *model.AppError) {
|
||||||
members, err := api.app.AddTeamMembers(teamId, userIds, requestorId, false)
|
members, err := api.app.AddTeamMembers(teamID, userIDs, requestorId, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return model.TeamMembersWithErrorToTeamMembers(members), nil
|
return model.TeamMembersWithErrorToTeamMembers(members), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) CreateTeamMembersGracefully(teamId string, userIds []string, requestorId string) ([]*model.TeamMemberWithError, *model.AppError) {
|
func (api *PluginAPI) CreateTeamMembersGracefully(teamID string, userIDs []string, requestorId string) ([]*model.TeamMemberWithError, *model.AppError) {
|
||||||
return api.app.AddTeamMembers(teamId, userIds, requestorId, true)
|
return api.app.AddTeamMembers(teamID, userIDs, requestorId, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) DeleteTeamMember(teamId, userId, requestorId string) *model.AppError {
|
func (api *PluginAPI) DeleteTeamMember(teamID, userID, requestorId string) *model.AppError {
|
||||||
return api.app.RemoveUserFromTeam(teamId, userId, requestorId)
|
return api.app.RemoveUserFromTeam(teamID, userID, requestorId)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) GetTeamMembers(teamId string, page, perPage int) ([]*model.TeamMember, *model.AppError) {
|
func (api *PluginAPI) GetTeamMembers(teamID string, page, perPage int) ([]*model.TeamMember, *model.AppError) {
|
||||||
return api.app.GetTeamMembers(teamId, page*perPage, perPage, nil)
|
return api.app.GetTeamMembers(teamID, page*perPage, perPage, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) GetTeamMember(teamId, userId string) (*model.TeamMember, *model.AppError) {
|
func (api *PluginAPI) GetTeamMember(teamID, userID string) (*model.TeamMember, *model.AppError) {
|
||||||
return api.app.GetTeamMember(teamId, userId)
|
return api.app.GetTeamMember(teamID, userID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) GetTeamMembersForUser(userId string, page int, perPage int) ([]*model.TeamMember, *model.AppError) {
|
func (api *PluginAPI) GetTeamMembersForUser(userID string, page int, perPage int) ([]*model.TeamMember, *model.AppError) {
|
||||||
return api.app.GetTeamMembersForUserWithPagination(userId, page, perPage)
|
return api.app.GetTeamMembersForUserWithPagination(userID, page, perPage)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) UpdateTeamMemberRoles(teamId, userId, newRoles string) (*model.TeamMember, *model.AppError) {
|
func (api *PluginAPI) UpdateTeamMemberRoles(teamID, userID, newRoles string) (*model.TeamMember, *model.AppError) {
|
||||||
return api.app.UpdateTeamMemberRoles(teamId, userId, newRoles)
|
return api.app.UpdateTeamMemberRoles(teamID, userID, newRoles)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) GetTeamStats(teamId string) (*model.TeamStats, *model.AppError) {
|
func (api *PluginAPI) GetTeamStats(teamID string) (*model.TeamStats, *model.AppError) {
|
||||||
return api.app.GetTeamStats(teamId, nil)
|
return api.app.GetTeamStats(teamID, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) CreateUser(user *model.User) (*model.User, *model.AppError) {
|
func (api *PluginAPI) CreateUser(user *model.User) (*model.User, *model.AppError) {
|
||||||
return api.app.CreateUser(user)
|
return api.app.CreateUser(user)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) DeleteUser(userId string) *model.AppError {
|
func (api *PluginAPI) DeleteUser(userID string) *model.AppError {
|
||||||
user, err := api.app.GetUser(userId)
|
user, err := api.app.GetUser(userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -245,8 +245,8 @@ func (api *PluginAPI) GetUsers(options *model.UserGetOptions) ([]*model.User, *m
|
|||||||
return api.app.GetUsers(options)
|
return api.app.GetUsers(options)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) GetUser(userId string) (*model.User, *model.AppError) {
|
func (api *PluginAPI) GetUser(userID string) (*model.User, *model.AppError) {
|
||||||
return api.app.GetUser(userId)
|
return api.app.GetUser(userID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) GetUserByEmail(email string) (*model.User, *model.AppError) {
|
func (api *PluginAPI) GetUserByEmail(email string) (*model.User, *model.AppError) {
|
||||||
@@ -261,54 +261,54 @@ func (api *PluginAPI) GetUsersByUsernames(usernames []string) ([]*model.User, *m
|
|||||||
return api.app.GetUsersByUsernames(usernames, true, nil)
|
return api.app.GetUsersByUsernames(usernames, true, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) GetUsersInTeam(teamId string, page int, perPage int) ([]*model.User, *model.AppError) {
|
func (api *PluginAPI) GetUsersInTeam(teamID string, page int, perPage int) ([]*model.User, *model.AppError) {
|
||||||
options := &model.UserGetOptions{InTeamId: teamId, Page: page, PerPage: perPage}
|
options := &model.UserGetOptions{InTeamId: teamID, Page: page, PerPage: perPage}
|
||||||
return api.app.GetUsersInTeam(options)
|
return api.app.GetUsersInTeam(options)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) GetPreferencesForUser(userId string) ([]model.Preference, *model.AppError) {
|
func (api *PluginAPI) GetPreferencesForUser(userID string) ([]model.Preference, *model.AppError) {
|
||||||
return api.app.GetPreferencesForUser(userId)
|
return api.app.GetPreferencesForUser(userID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) UpdatePreferencesForUser(userId string, preferences []model.Preference) *model.AppError {
|
func (api *PluginAPI) UpdatePreferencesForUser(userID string, preferences []model.Preference) *model.AppError {
|
||||||
return api.app.UpdatePreferences(userId, preferences)
|
return api.app.UpdatePreferences(userID, preferences)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) DeletePreferencesForUser(userId string, preferences []model.Preference) *model.AppError {
|
func (api *PluginAPI) DeletePreferencesForUser(userID string, preferences []model.Preference) *model.AppError {
|
||||||
return api.app.DeletePreferences(userId, preferences)
|
return api.app.DeletePreferences(userID, preferences)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) UpdateUser(user *model.User) (*model.User, *model.AppError) {
|
func (api *PluginAPI) UpdateUser(user *model.User) (*model.User, *model.AppError) {
|
||||||
return api.app.UpdateUser(user, true)
|
return api.app.UpdateUser(user, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) UpdateUserActive(userId string, active bool) *model.AppError {
|
func (api *PluginAPI) UpdateUserActive(userID string, active bool) *model.AppError {
|
||||||
return api.app.UpdateUserActive(userId, active)
|
return api.app.UpdateUserActive(userID, active)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) GetUserStatus(userId string) (*model.Status, *model.AppError) {
|
func (api *PluginAPI) GetUserStatus(userID string) (*model.Status, *model.AppError) {
|
||||||
return api.app.GetStatus(userId)
|
return api.app.GetStatus(userID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) GetUserStatusesByIds(userIds []string) ([]*model.Status, *model.AppError) {
|
func (api *PluginAPI) GetUserStatusesByIds(userIDs []string) ([]*model.Status, *model.AppError) {
|
||||||
return api.app.GetUserStatusesByIds(userIds)
|
return api.app.GetUserStatusesByIds(userIDs)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) UpdateUserStatus(userId, status string) (*model.Status, *model.AppError) {
|
func (api *PluginAPI) UpdateUserStatus(userID, status string) (*model.Status, *model.AppError) {
|
||||||
switch status {
|
switch status {
|
||||||
case model.STATUS_ONLINE:
|
case model.STATUS_ONLINE:
|
||||||
api.app.SetStatusOnline(userId, true)
|
api.app.SetStatusOnline(userID, true)
|
||||||
case model.STATUS_OFFLINE:
|
case model.STATUS_OFFLINE:
|
||||||
api.app.SetStatusOffline(userId, true)
|
api.app.SetStatusOffline(userID, true)
|
||||||
case model.STATUS_AWAY:
|
case model.STATUS_AWAY:
|
||||||
api.app.SetStatusAwayIfNeeded(userId, true)
|
api.app.SetStatusAwayIfNeeded(userID, true)
|
||||||
case model.STATUS_DND:
|
case model.STATUS_DND:
|
||||||
api.app.SetStatusDoNotDisturb(userId)
|
api.app.SetStatusDoNotDisturb(userID)
|
||||||
default:
|
default:
|
||||||
return nil, model.NewAppError("UpdateUserStatus", "plugin.api.update_user_status.bad_status", nil, "unrecognized status", http.StatusBadRequest)
|
return nil, model.NewAppError("UpdateUserStatus", "plugin.api.update_user_status.bad_status", nil, "unrecognized status", http.StatusBadRequest)
|
||||||
}
|
}
|
||||||
|
|
||||||
return api.app.GetStatus(userId)
|
return api.app.GetStatus(userID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) GetUsersInChannel(channelId, sortBy string, page, perPage int) ([]*model.User, *model.AppError) {
|
func (api *PluginAPI) GetUsersInChannel(channelId, sortBy string, page, perPage int) ([]*model.User, *model.AppError) {
|
||||||
@@ -330,12 +330,12 @@ func (api *PluginAPI) GetUsersInChannel(channelId, sortBy string, page, perPage
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) GetLDAPUserAttributes(userId string, attributes []string) (map[string]string, *model.AppError) {
|
func (api *PluginAPI) GetLDAPUserAttributes(userID string, attributes []string) (map[string]string, *model.AppError) {
|
||||||
if api.app.Ldap() == nil {
|
if api.app.Ldap() == nil {
|
||||||
return nil, model.NewAppError("GetLdapUserAttributes", "ent.ldap.disabled.app_error", nil, "", http.StatusNotImplemented)
|
return nil, model.NewAppError("GetLdapUserAttributes", "ent.ldap.disabled.app_error", nil, "", http.StatusNotImplemented)
|
||||||
}
|
}
|
||||||
|
|
||||||
user, err := api.app.GetUser(userId)
|
user, err := api.app.GetUser(userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -365,8 +365,8 @@ func (api *PluginAPI) DeleteChannel(channelId string) *model.AppError {
|
|||||||
return api.app.DeleteChannel(channel, "")
|
return api.app.DeleteChannel(channel, "")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) GetPublicChannelsForTeam(teamId string, page, perPage int) ([]*model.Channel, *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(teamID, page*perPage, perPage)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -377,16 +377,16 @@ func (api *PluginAPI) GetChannel(channelId string) (*model.Channel, *model.AppEr
|
|||||||
return api.app.GetChannel(channelId)
|
return api.app.GetChannel(channelId)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) GetChannelByName(teamId, name string, includeDeleted bool) (*model.Channel, *model.AppError) {
|
func (api *PluginAPI) GetChannelByName(teamID, name string, includeDeleted bool) (*model.Channel, *model.AppError) {
|
||||||
return api.app.GetChannelByName(name, teamId, includeDeleted)
|
return api.app.GetChannelByName(name, teamID, includeDeleted)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) GetChannelByNameForTeamName(teamName, channelName string, includeDeleted bool) (*model.Channel, *model.AppError) {
|
func (api *PluginAPI) GetChannelByNameForTeamName(teamName, channelName string, includeDeleted bool) (*model.Channel, *model.AppError) {
|
||||||
return api.app.GetChannelByNameForTeamName(channelName, teamName, includeDeleted)
|
return api.app.GetChannelByNameForTeamName(channelName, teamName, includeDeleted)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) GetChannelsForTeamForUser(teamId, userId string, includeDeleted bool) ([]*model.Channel, *model.AppError) {
|
func (api *PluginAPI) GetChannelsForTeamForUser(teamID, userID string, includeDeleted bool) ([]*model.Channel, *model.AppError) {
|
||||||
channels, err := api.app.GetChannelsForUser(teamId, userId, includeDeleted, 0)
|
channels, err := api.app.GetChannelsForUser(teamID, userID, includeDeleted, 0)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -405,20 +405,20 @@ func (api *PluginAPI) GetChannelStats(channelId string) (*model.ChannelStats, *m
|
|||||||
return &model.ChannelStats{ChannelId: channelId, MemberCount: memberCount, GuestCount: guestCount}, nil
|
return &model.ChannelStats{ChannelId: channelId, MemberCount: memberCount, GuestCount: guestCount}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) GetDirectChannel(userId1, userId2 string) (*model.Channel, *model.AppError) {
|
func (api *PluginAPI) GetDirectChannel(userID1, userID2 string) (*model.Channel, *model.AppError) {
|
||||||
return api.app.GetOrCreateDirectChannel(userId1, userId2)
|
return api.app.GetOrCreateDirectChannel(userID1, userID2)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) GetGroupChannel(userIds []string) (*model.Channel, *model.AppError) {
|
func (api *PluginAPI) GetGroupChannel(userIDs []string) (*model.Channel, *model.AppError) {
|
||||||
return api.app.CreateGroupChannel(userIds, "")
|
return api.app.CreateGroupChannel(userIDs, "")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) UpdateChannel(channel *model.Channel) (*model.Channel, *model.AppError) {
|
func (api *PluginAPI) UpdateChannel(channel *model.Channel) (*model.Channel, *model.AppError) {
|
||||||
return api.app.UpdateChannel(channel)
|
return api.app.UpdateChannel(channel)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) SearchChannels(teamId string, term string) ([]*model.Channel, *model.AppError) {
|
func (api *PluginAPI) SearchChannels(teamID string, term string) ([]*model.Channel, *model.AppError) {
|
||||||
channels, err := api.app.SearchChannels(teamId, term)
|
channels, err := api.app.SearchChannels(teamID, term)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -434,15 +434,15 @@ func (api *PluginAPI) SearchUsers(search *model.UserSearch) ([]*model.User, *mod
|
|||||||
return api.app.SearchUsers(search, pluginSearchUsersOptions)
|
return api.app.SearchUsers(search, pluginSearchUsersOptions)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) SearchPostsInTeam(teamId string, paramsList []*model.SearchParams) ([]*model.Post, *model.AppError) {
|
func (api *PluginAPI) SearchPostsInTeam(teamID string, paramsList []*model.SearchParams) ([]*model.Post, *model.AppError) {
|
||||||
postList, err := api.app.SearchPostsInTeam(teamId, paramsList)
|
postList, err := api.app.SearchPostsInTeam(teamID, paramsList)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return postList.ToSlice(), nil
|
return postList.ToSlice(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) SearchPostsInTeamForUser(teamId string, userId string, searchParams model.SearchParameter) (*model.PostSearchResults, *model.AppError) {
|
func (api *PluginAPI) SearchPostsInTeamForUser(teamID string, userID string, searchParams model.SearchParameter) (*model.PostSearchResults, *model.AppError) {
|
||||||
var terms string
|
var terms string
|
||||||
if searchParams.Terms != nil {
|
if searchParams.Terms != nil {
|
||||||
terms = *searchParams.Terms
|
terms = *searchParams.Terms
|
||||||
@@ -473,10 +473,10 @@ func (api *PluginAPI) SearchPostsInTeamForUser(teamId string, userId string, sea
|
|||||||
includeDeletedChannels = *searchParams.IncludeDeletedChannels
|
includeDeletedChannels = *searchParams.IncludeDeletedChannels
|
||||||
}
|
}
|
||||||
|
|
||||||
return api.app.SearchPostsInTeamForUser(terms, userId, teamId, isOrSearch, includeDeletedChannels, timeZoneOffset, page, perPage)
|
return api.app.SearchPostsInTeamForUser(terms, userID, teamID, isOrSearch, includeDeletedChannels, timeZoneOffset, page, perPage)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) AddChannelMember(channelId, userId string) (*model.ChannelMember, *model.AppError) {
|
func (api *PluginAPI) AddChannelMember(channelId, userID string) (*model.ChannelMember, *model.AppError) {
|
||||||
// For now, don't allow overriding these via the plugin API.
|
// For now, don't allow overriding these via the plugin API.
|
||||||
userRequestorId := ""
|
userRequestorId := ""
|
||||||
postRootId := ""
|
postRootId := ""
|
||||||
@@ -486,10 +486,10 @@ func (api *PluginAPI) AddChannelMember(channelId, userId string) (*model.Channel
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return api.app.AddChannelMember(userId, channel, userRequestorId, postRootId)
|
return api.app.AddChannelMember(userID, channel, userRequestorId, postRootId)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) AddUserToChannel(channelId, userId, asUserId string) (*model.ChannelMember, *model.AppError) {
|
func (api *PluginAPI) AddUserToChannel(channelId, userID, asUserId string) (*model.ChannelMember, *model.AppError) {
|
||||||
postRootId := ""
|
postRootId := ""
|
||||||
|
|
||||||
channel, err := api.GetChannel(channelId)
|
channel, err := api.GetChannel(channelId)
|
||||||
@@ -497,35 +497,35 @@ func (api *PluginAPI) AddUserToChannel(channelId, userId, asUserId string) (*mod
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return api.app.AddChannelMember(userId, channel, asUserId, postRootId)
|
return api.app.AddChannelMember(userID, channel, asUserId, postRootId)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) GetChannelMember(channelId, userId string) (*model.ChannelMember, *model.AppError) {
|
func (api *PluginAPI) GetChannelMember(channelId, userID string) (*model.ChannelMember, *model.AppError) {
|
||||||
return api.app.GetChannelMember(channelId, userId)
|
return api.app.GetChannelMember(channelId, userID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) GetChannelMembers(channelId string, page, perPage int) (*model.ChannelMembers, *model.AppError) {
|
func (api *PluginAPI) GetChannelMembers(channelId string, page, perPage int) (*model.ChannelMembers, *model.AppError) {
|
||||||
return api.app.GetChannelMembersPage(channelId, page, perPage)
|
return api.app.GetChannelMembersPage(channelId, page, perPage)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) GetChannelMembersByIds(channelId string, userIds []string) (*model.ChannelMembers, *model.AppError) {
|
func (api *PluginAPI) GetChannelMembersByIds(channelId string, userIDs []string) (*model.ChannelMembers, *model.AppError) {
|
||||||
return api.app.GetChannelMembersByIds(channelId, userIds)
|
return api.app.GetChannelMembersByIds(channelId, userIDs)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) GetChannelMembersForUser(teamId, userId string, page, perPage int) ([]*model.ChannelMember, *model.AppError) {
|
func (api *PluginAPI) GetChannelMembersForUser(teamID, userID string, page, perPage int) ([]*model.ChannelMember, *model.AppError) {
|
||||||
return api.app.GetChannelMembersForUserWithPagination(teamId, userId, page, perPage)
|
return api.app.GetChannelMembersForUserWithPagination(teamID, userID, page, perPage)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) UpdateChannelMemberRoles(channelId, userId, newRoles string) (*model.ChannelMember, *model.AppError) {
|
func (api *PluginAPI) UpdateChannelMemberRoles(channelId, userID, newRoles string) (*model.ChannelMember, *model.AppError) {
|
||||||
return api.app.UpdateChannelMemberRoles(channelId, userId, newRoles)
|
return api.app.UpdateChannelMemberRoles(channelId, userID, newRoles)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) UpdateChannelMemberNotifications(channelId, userId string, notifications map[string]string) (*model.ChannelMember, *model.AppError) {
|
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(notifications, channelId, userID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) DeleteChannelMember(channelId, userId string) *model.AppError {
|
func (api *PluginAPI) DeleteChannelMember(channelId, userID string) *model.AppError {
|
||||||
return api.app.LeaveChannel(channelId, userId)
|
return api.app.LeaveChannel(channelId, userID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) GetGroup(groupId string) (*model.Group, *model.AppError) {
|
func (api *PluginAPI) GetGroup(groupId string) (*model.Group, *model.AppError) {
|
||||||
@@ -536,8 +536,8 @@ func (api *PluginAPI) GetGroupByName(name string) (*model.Group, *model.AppError
|
|||||||
return api.app.GetGroupByName(name, model.GroupSearchOpts{})
|
return api.app.GetGroupByName(name, model.GroupSearchOpts{})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) GetGroupsForUser(userId string) ([]*model.Group, *model.AppError) {
|
func (api *PluginAPI) GetGroupsForUser(userID string) ([]*model.Group, *model.AppError) {
|
||||||
return api.app.GetGroupsByUserId(userId)
|
return api.app.GetGroupsByUserId(userID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) CreatePost(post *model.Post) (*model.Post, *model.AppError) {
|
func (api *PluginAPI) CreatePost(post *model.Post) (*model.Post, *model.AppError) {
|
||||||
@@ -556,16 +556,16 @@ func (api *PluginAPI) GetReactions(postId string) ([]*model.Reaction, *model.App
|
|||||||
return api.app.GetReactionsForPost(postId)
|
return api.app.GetReactionsForPost(postId)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) SendEphemeralPost(userId string, post *model.Post) *model.Post {
|
func (api *PluginAPI) SendEphemeralPost(userID string, post *model.Post) *model.Post {
|
||||||
return api.app.SendEphemeralPost(userId, post)
|
return api.app.SendEphemeralPost(userID, post)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) UpdateEphemeralPost(userId string, post *model.Post) *model.Post {
|
func (api *PluginAPI) UpdateEphemeralPost(userID string, post *model.Post) *model.Post {
|
||||||
return api.app.UpdateEphemeralPost(userId, post)
|
return api.app.UpdateEphemeralPost(userID, post)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) DeleteEphemeralPost(userId, postId string) {
|
func (api *PluginAPI) DeleteEphemeralPost(userID, postId string) {
|
||||||
api.app.DeleteEphemeralPost(userId, postId)
|
api.app.DeleteEphemeralPost(userID, postId)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) DeletePost(postId string) *model.AppError {
|
func (api *PluginAPI) DeletePost(postId string) *model.AppError {
|
||||||
@@ -601,8 +601,8 @@ func (api *PluginAPI) UpdatePost(post *model.Post) (*model.Post, *model.AppError
|
|||||||
return api.app.UpdatePost(post, false)
|
return api.app.UpdatePost(post, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) GetProfileImage(userId string) ([]byte, *model.AppError) {
|
func (api *PluginAPI) GetProfileImage(userID string) ([]byte, *model.AppError) {
|
||||||
user, err := api.app.GetUser(userId)
|
user, err := api.app.GetUser(userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -611,13 +611,13 @@ func (api *PluginAPI) GetProfileImage(userId string) ([]byte, *model.AppError) {
|
|||||||
return data, err
|
return data, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) SetProfileImage(userId string, data []byte) *model.AppError {
|
func (api *PluginAPI) SetProfileImage(userID string, data []byte) *model.AppError {
|
||||||
_, err := api.app.GetUser(userId)
|
_, err := api.app.GetUser(userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
return api.app.SetProfileImageFromFile(userId, bytes.NewReader(data))
|
return api.app.SetProfileImageFromFile(userID, bytes.NewReader(data))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) GetEmojiList(sortBy string, page, perPage int) ([]*model.Emoji, *model.AppError) {
|
func (api *PluginAPI) GetEmojiList(sortBy string, page, perPage int) ([]*model.Emoji, *model.AppError) {
|
||||||
@@ -632,8 +632,8 @@ func (api *PluginAPI) GetEmoji(emojiId string) (*model.Emoji, *model.AppError) {
|
|||||||
return api.app.GetEmoji(emojiId)
|
return api.app.GetEmoji(emojiId)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) CopyFileInfos(userId string, fileIds []string) ([]string, *model.AppError) {
|
func (api *PluginAPI) CopyFileInfos(userID string, fileIds []string) ([]string, *model.AppError) {
|
||||||
return api.app.CopyFileInfos(userId, fileIds)
|
return api.app.CopyFileInfos(userID, fileIds)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) GetFileInfo(fileId string) (*model.FileInfo, *model.AppError) {
|
func (api *PluginAPI) GetFileInfo(fileId string) (*model.FileInfo, *model.AppError) {
|
||||||
@@ -677,8 +677,8 @@ func (api *PluginAPI) GetEmojiImage(emojiId string) ([]byte, string, *model.AppE
|
|||||||
return api.app.GetEmojiImage(emojiId)
|
return api.app.GetEmojiImage(emojiId)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) GetTeamIcon(teamId string) ([]byte, *model.AppError) {
|
func (api *PluginAPI) GetTeamIcon(teamID string) ([]byte, *model.AppError) {
|
||||||
team, err := api.app.GetTeam(teamId)
|
team, err := api.app.GetTeam(teamID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -690,8 +690,8 @@ func (api *PluginAPI) GetTeamIcon(teamId string) ([]byte, *model.AppError) {
|
|||||||
return data, nil
|
return data, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) SetTeamIcon(teamId string, data []byte) *model.AppError {
|
func (api *PluginAPI) SetTeamIcon(teamID string, data []byte) *model.AppError {
|
||||||
team, err := api.app.GetTeam(teamId)
|
team, err := api.app.GetTeam(teamID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -703,13 +703,13 @@ func (api *PluginAPI) OpenInteractiveDialog(dialog model.OpenDialogRequest) *mod
|
|||||||
return api.app.OpenInteractiveDialog(dialog)
|
return api.app.OpenInteractiveDialog(dialog)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) RemoveTeamIcon(teamId string) *model.AppError {
|
func (api *PluginAPI) RemoveTeamIcon(teamID string) *model.AppError {
|
||||||
_, err := api.app.GetTeam(teamId)
|
_, err := api.app.GetTeam(teamID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
err = api.app.RemoveTeamIcon(teamId)
|
err = api.app.RemoveTeamIcon(teamID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -824,16 +824,16 @@ func (api *PluginAPI) PublishWebSocketEvent(event string, payload map[string]int
|
|||||||
api.app.Publish(ev)
|
api.app.Publish(ev)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) HasPermissionTo(userId string, permission *model.Permission) bool {
|
func (api *PluginAPI) HasPermissionTo(userID string, permission *model.Permission) bool {
|
||||||
return api.app.HasPermissionTo(userId, permission)
|
return api.app.HasPermissionTo(userID, permission)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) HasPermissionToTeam(userId, teamId string, permission *model.Permission) bool {
|
func (api *PluginAPI) HasPermissionToTeam(userID, teamID string, permission *model.Permission) bool {
|
||||||
return api.app.HasPermissionToTeam(userId, teamId, permission)
|
return api.app.HasPermissionToTeam(userID, teamID, permission)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) HasPermissionToChannel(userId, channelId string, permission *model.Permission) bool {
|
func (api *PluginAPI) HasPermissionToChannel(userID, channelId string, permission *model.Permission) bool {
|
||||||
return api.app.HasPermissionToChannel(userId, channelId, permission)
|
return api.app.HasPermissionToChannel(userID, channelId, permission)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) LogDebug(msg string, keyValuePairs ...interface{}) {
|
func (api *PluginAPI) LogDebug(msg string, keyValuePairs ...interface{}) {
|
||||||
@@ -865,12 +865,12 @@ func (api *PluginAPI) CreateBot(bot *model.Bot) (*model.Bot, *model.AppError) {
|
|||||||
return api.app.CreateBot(bot)
|
return api.app.CreateBot(bot)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) PatchBot(userId string, botPatch *model.BotPatch) (*model.Bot, *model.AppError) {
|
func (api *PluginAPI) PatchBot(userID string, botPatch *model.BotPatch) (*model.Bot, *model.AppError) {
|
||||||
return api.app.PatchBot(userId, botPatch)
|
return api.app.PatchBot(userID, botPatch)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) GetBot(userId string, includeDeleted bool) (*model.Bot, *model.AppError) {
|
func (api *PluginAPI) GetBot(userID string, includeDeleted bool) (*model.Bot, *model.AppError) {
|
||||||
return api.app.GetBot(userId, includeDeleted)
|
return api.app.GetBot(userID, includeDeleted)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) GetBots(options *model.BotGetOptions) ([]*model.Bot, *model.AppError) {
|
func (api *PluginAPI) GetBots(options *model.BotGetOptions) ([]*model.Bot, *model.AppError) {
|
||||||
@@ -879,40 +879,40 @@ func (api *PluginAPI) GetBots(options *model.BotGetOptions) ([]*model.Bot, *mode
|
|||||||
return []*model.Bot(bots), err
|
return []*model.Bot(bots), err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) UpdateBotActive(userId string, active bool) (*model.Bot, *model.AppError) {
|
func (api *PluginAPI) UpdateBotActive(userID string, active bool) (*model.Bot, *model.AppError) {
|
||||||
return api.app.UpdateBotActive(userId, active)
|
return api.app.UpdateBotActive(userID, active)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) PermanentDeleteBot(userId string) *model.AppError {
|
func (api *PluginAPI) PermanentDeleteBot(userID string) *model.AppError {
|
||||||
return api.app.PermanentDeleteBot(userId)
|
return api.app.PermanentDeleteBot(userID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) GetBotIconImage(userId string) ([]byte, *model.AppError) {
|
func (api *PluginAPI) GetBotIconImage(userID string) ([]byte, *model.AppError) {
|
||||||
if _, err := api.app.GetBot(userId, true); err != nil {
|
if _, err := api.app.GetBot(userID, true); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return api.app.GetBotIconImage(userId)
|
return api.app.GetBotIconImage(userID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) SetBotIconImage(userId string, data []byte) *model.AppError {
|
func (api *PluginAPI) SetBotIconImage(userID string, data []byte) *model.AppError {
|
||||||
if _, err := api.app.GetBot(userId, true); err != nil {
|
if _, err := api.app.GetBot(userID, true); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
return api.app.SetBotIconImage(userId, bytes.NewReader(data))
|
return api.app.SetBotIconImage(userID, bytes.NewReader(data))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) DeleteBotIconImage(userId string) *model.AppError {
|
func (api *PluginAPI) DeleteBotIconImage(userID string) *model.AppError {
|
||||||
if _, err := api.app.GetBot(userId, true); err != nil {
|
if _, err := api.app.GetBot(userID, true); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
return api.app.DeleteBotIconImage(userId)
|
return api.app.DeleteBotIconImage(userID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) PublishUserTyping(userId, channelId, parentId string) *model.AppError {
|
func (api *PluginAPI) PublishUserTyping(userID, channelId, parentId string) *model.AppError {
|
||||||
return api.app.PublishUserTyping(userId, channelId, parentId)
|
return api.app.PublishUserTyping(userID, channelId, parentId)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) PluginHTTP(request *http.Request) *http.Response {
|
func (api *PluginAPI) PluginHTTP(request *http.Request) *http.Response {
|
||||||
|
|||||||
@@ -1275,10 +1275,10 @@ func TestPluginCreatePostWithUploadedFile(t *testing.T) {
|
|||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
assert.Equal(t, data, actualData)
|
assert.Equal(t, data, actualData)
|
||||||
|
|
||||||
userId := th.BasicUser.Id
|
userID := th.BasicUser.Id
|
||||||
post, err := api.CreatePost(&model.Post{
|
post, err := api.CreatePost(&model.Post{
|
||||||
Message: "test",
|
Message: "test",
|
||||||
UserId: userId,
|
UserId: userID,
|
||||||
ChannelId: channelId,
|
ChannelId: channelId,
|
||||||
FileIds: model.StringArray{fileInfo.Id},
|
FileIds: model.StringArray{fileInfo.Id},
|
||||||
})
|
})
|
||||||
@@ -1711,8 +1711,8 @@ func TestPluginAPISearchPostsInTeamByUser(t *testing.T) {
|
|||||||
|
|
||||||
testCases := []struct {
|
testCases := []struct {
|
||||||
description string
|
description string
|
||||||
teamId string
|
teamID string
|
||||||
userId string
|
userID string
|
||||||
params model.SearchParameter
|
params model.SearchParameter
|
||||||
expectedPostsLen int
|
expectedPostsLen int
|
||||||
}{
|
}{
|
||||||
@@ -1741,7 +1741,7 @@ func TestPluginAPISearchPostsInTeamByUser(t *testing.T) {
|
|||||||
|
|
||||||
for _, testCase := range testCases {
|
for _, testCase := range testCases {
|
||||||
t.Run(testCase.description, func(t *testing.T) {
|
t.Run(testCase.description, func(t *testing.T) {
|
||||||
searchResults, err := api.SearchPostsInTeamForUser(testCase.teamId, testCase.userId, testCase.params)
|
searchResults, err := api.SearchPostsInTeamForUser(testCase.teamID, testCase.userID, testCase.params)
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
assert.Equal(t, testCase.expectedPostsLen, len(searchResults.Posts))
|
assert.Equal(t, testCase.expectedPostsLen, len(searchResults.Posts))
|
||||||
})
|
})
|
||||||
@@ -1753,7 +1753,7 @@ func TestPluginAPICreateCommandAndListCommands(t *testing.T) {
|
|||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
api := th.SetupPluginAPI()
|
api := th.SetupPluginAPI()
|
||||||
|
|
||||||
foundCommand := func(listXCommand func(teamId string) ([]*model.Command, error)) bool {
|
foundCommand := func(listXCommand func(teamID string) ([]*model.Command, error)) bool {
|
||||||
cmds, appErr := listXCommand(th.BasicTeam.Id)
|
cmds, appErr := listXCommand(th.BasicTeam.Id)
|
||||||
require.Nil(t, appErr)
|
require.Nil(t, appErr)
|
||||||
|
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ func (a *App) RegisterPluginCommand(pluginId string, command *model.Command) err
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) UnregisterPluginCommand(pluginId, teamId, trigger string) {
|
func (a *App) UnregisterPluginCommand(pluginId, teamID, trigger string) {
|
||||||
trigger = strings.ToLower(trigger)
|
trigger = strings.ToLower(trigger)
|
||||||
|
|
||||||
a.Srv().pluginCommandsLock.Lock()
|
a.Srv().pluginCommandsLock.Lock()
|
||||||
@@ -80,7 +80,7 @@ func (a *App) UnregisterPluginCommand(pluginId, teamId, trigger string) {
|
|||||||
|
|
||||||
var remaining []*PluginCommand
|
var remaining []*PluginCommand
|
||||||
for _, pc := range a.Srv().pluginCommands {
|
for _, pc := range a.Srv().pluginCommands {
|
||||||
if pc.Command.TeamId != teamId || pc.Command.Trigger != trigger {
|
if pc.Command.TeamId != teamID || pc.Command.Trigger != trigger {
|
||||||
remaining = append(remaining, pc)
|
remaining = append(remaining, pc)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -100,13 +100,13 @@ func (a *App) UnregisterPluginCommands(pluginId string) {
|
|||||||
a.Srv().pluginCommands = remaining
|
a.Srv().pluginCommands = remaining
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) PluginCommandsForTeam(teamId string) []*model.Command {
|
func (a *App) PluginCommandsForTeam(teamID string) []*model.Command {
|
||||||
a.Srv().pluginCommandsLock.RLock()
|
a.Srv().pluginCommandsLock.RLock()
|
||||||
defer a.Srv().pluginCommandsLock.RUnlock()
|
defer a.Srv().pluginCommandsLock.RUnlock()
|
||||||
|
|
||||||
var commands []*model.Command
|
var commands []*model.Command
|
||||||
for _, pc := range a.Srv().pluginCommands {
|
for _, pc := range a.Srv().pluginCommands {
|
||||||
if pc.Command.TeamId == "" || pc.Command.TeamId == teamId {
|
if pc.Command.TeamId == "" || pc.Command.TeamId == teamID {
|
||||||
commands = append(commands, pc.Command)
|
commands = append(commands, pc.Command)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -148,8 +148,8 @@ func (a *App) tryExecutePluginCommand(args *model.CommandArgs) (*model.Command,
|
|||||||
return matched.Command, nil, model.NewAppError("ExecutePluginCommand", "model.plugin_command.error.app_error", nil, "err="+err.Error(), http.StatusInternalServerError)
|
return matched.Command, nil, model.NewAppError("ExecutePluginCommand", "model.plugin_command.error.app_error", nil, "err="+err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
|
|
||||||
for username, userId := range a.MentionsToTeamMembers(args.Command, args.TeamId) {
|
for username, userID := range a.MentionsToTeamMembers(args.Command, args.TeamId) {
|
||||||
args.AddUserMention(username, userId)
|
args.AddUserMention(username, userID)
|
||||||
}
|
}
|
||||||
|
|
||||||
for channelName, channelId := range a.MentionsToPublicChannels(args.Command, args.TeamId) {
|
for channelName, channelId := range a.MentionsToPublicChannels(args.Command, args.TeamId) {
|
||||||
|
|||||||
@@ -157,18 +157,18 @@ func (a *App) servePluginRequest(w http.ResponseWriter, r *http.Request, handler
|
|||||||
if r.Header.Get(model.HEADER_REQUESTED_WITH) == model.HEADER_REQUESTED_WITH_XML && !csrfCheckPassed {
|
if r.Header.Get(model.HEADER_REQUESTED_WITH) == model.HEADER_REQUESTED_WITH_XML && !csrfCheckPassed {
|
||||||
csrfErrorMessage := "CSRF Check failed for request - Please migrate your plugin to either send a CSRF Header or Form Field, XMLHttpRequest is deprecated"
|
csrfErrorMessage := "CSRF Check failed for request - Please migrate your plugin to either send a CSRF Header or Form Field, XMLHttpRequest is deprecated"
|
||||||
sid := ""
|
sid := ""
|
||||||
userId := ""
|
userID := ""
|
||||||
|
|
||||||
if session != nil {
|
if session != nil {
|
||||||
sid = session.Id
|
sid = session.Id
|
||||||
userId = session.UserId
|
userID = session.UserId
|
||||||
}
|
}
|
||||||
|
|
||||||
fields := []mlog.Field{
|
fields := []mlog.Field{
|
||||||
mlog.String("path", r.URL.Path),
|
mlog.String("path", r.URL.Path),
|
||||||
mlog.String("ip", r.RemoteAddr),
|
mlog.String("ip", r.RemoteAddr),
|
||||||
mlog.String("session_id", sid),
|
mlog.String("session_id", sid),
|
||||||
mlog.String("user_id", userId),
|
mlog.String("user_id", userID),
|
||||||
}
|
}
|
||||||
|
|
||||||
if *a.Config().ServiceSettings.ExperimentalStrictCSRFEnforcement {
|
if *a.Config().ServiceSettings.ExperimentalStrictCSRFEnforcement {
|
||||||
|
|||||||
80
app/post.go
80
app/post.go
@@ -483,7 +483,7 @@ func (a *App) handlePostEvents(post *model.Post, user *model.User, channel *mode
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) SendEphemeralPost(userId string, post *model.Post) *model.Post {
|
func (a *App) SendEphemeralPost(userID string, post *model.Post) *model.Post {
|
||||||
post.Type = model.POST_EPHEMERAL
|
post.Type = model.POST_EPHEMERAL
|
||||||
|
|
||||||
// fill in fields which haven't been specified which have sensible defaults
|
// fill in fields which haven't been specified which have sensible defaults
|
||||||
@@ -498,7 +498,7 @@ func (a *App) SendEphemeralPost(userId string, post *model.Post) *model.Post {
|
|||||||
}
|
}
|
||||||
|
|
||||||
post.GenerateActionIds()
|
post.GenerateActionIds()
|
||||||
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_EPHEMERAL_MESSAGE, "", post.ChannelId, userId, nil)
|
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_EPHEMERAL_MESSAGE, "", post.ChannelId, userID, nil)
|
||||||
post = a.PreparePostForClient(post, true, false)
|
post = a.PreparePostForClient(post, true, false)
|
||||||
post = model.AddPostActionCookies(post, a.PostActionCookieSecret())
|
post = model.AddPostActionCookies(post, a.PostActionCookieSecret())
|
||||||
message.Add("post", post.ToJson())
|
message.Add("post", post.ToJson())
|
||||||
@@ -507,7 +507,7 @@ func (a *App) SendEphemeralPost(userId string, post *model.Post) *model.Post {
|
|||||||
return post
|
return post
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) UpdateEphemeralPost(userId string, post *model.Post) *model.Post {
|
func (a *App) UpdateEphemeralPost(userID string, post *model.Post) *model.Post {
|
||||||
post.Type = model.POST_EPHEMERAL
|
post.Type = model.POST_EPHEMERAL
|
||||||
|
|
||||||
post.UpdateAt = model.GetMillis()
|
post.UpdateAt = model.GetMillis()
|
||||||
@@ -516,7 +516,7 @@ func (a *App) UpdateEphemeralPost(userId string, post *model.Post) *model.Post {
|
|||||||
}
|
}
|
||||||
|
|
||||||
post.GenerateActionIds()
|
post.GenerateActionIds()
|
||||||
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_POST_EDITED, "", post.ChannelId, userId, nil)
|
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_POST_EDITED, "", post.ChannelId, userID, nil)
|
||||||
post = a.PreparePostForClient(post, true, false)
|
post = a.PreparePostForClient(post, true, false)
|
||||||
post = model.AddPostActionCookies(post, a.PostActionCookieSecret())
|
post = model.AddPostActionCookies(post, a.PostActionCookieSecret())
|
||||||
message.Add("post", post.ToJson())
|
message.Add("post", post.ToJson())
|
||||||
@@ -525,16 +525,16 @@ func (a *App) UpdateEphemeralPost(userId string, post *model.Post) *model.Post {
|
|||||||
return post
|
return post
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) DeleteEphemeralPost(userId, postId string) {
|
func (a *App) DeleteEphemeralPost(userID, postId string) {
|
||||||
post := &model.Post{
|
post := &model.Post{
|
||||||
Id: postId,
|
Id: postId,
|
||||||
UserId: userId,
|
UserId: userID,
|
||||||
Type: model.POST_EPHEMERAL,
|
Type: model.POST_EPHEMERAL,
|
||||||
DeleteAt: model.GetMillis(),
|
DeleteAt: model.GetMillis(),
|
||||||
UpdateAt: model.GetMillis(),
|
UpdateAt: model.GetMillis(),
|
||||||
}
|
}
|
||||||
|
|
||||||
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_POST_DELETED, "", "", userId, nil)
|
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_POST_DELETED, "", "", userID, nil)
|
||||||
message.Add("post", post.ToJson())
|
message.Add("post", post.ToJson())
|
||||||
a.Publish(message)
|
a.Publish(message)
|
||||||
}
|
}
|
||||||
@@ -764,8 +764,8 @@ func (a *App) GetPostThread(postId string, skipFetchThreads, collapsedThreads, c
|
|||||||
return posts, nil
|
return posts, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetFlaggedPosts(userId string, offset int, limit int) (*model.PostList, *model.AppError) {
|
func (a *App) GetFlaggedPosts(userID string, offset int, limit int) (*model.PostList, *model.AppError) {
|
||||||
postList, err := a.Srv().Store.Post().GetFlaggedPosts(userId, offset, limit)
|
postList, err := a.Srv().Store.Post().GetFlaggedPosts(userID, offset, limit)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("GetFlaggedPosts", "app.post.get_flagged_posts.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("GetFlaggedPosts", "app.post.get_flagged_posts.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -773,8 +773,8 @@ func (a *App) GetFlaggedPosts(userId string, offset int, limit int) (*model.Post
|
|||||||
return postList, nil
|
return postList, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetFlaggedPostsForTeam(userId, teamId string, offset int, limit int) (*model.PostList, *model.AppError) {
|
func (a *App) GetFlaggedPostsForTeam(userID, teamID string, offset int, limit int) (*model.PostList, *model.AppError) {
|
||||||
postList, err := a.Srv().Store.Post().GetFlaggedPostsForTeam(userId, teamId, offset, limit)
|
postList, err := a.Srv().Store.Post().GetFlaggedPostsForTeam(userID, teamID, offset, limit)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("GetFlaggedPostsForTeam", "app.post.get_flagged_posts.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("GetFlaggedPostsForTeam", "app.post.get_flagged_posts.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -782,8 +782,8 @@ func (a *App) GetFlaggedPostsForTeam(userId, teamId string, offset int, limit in
|
|||||||
return postList, nil
|
return postList, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetFlaggedPostsForChannel(userId, channelId string, offset int, limit int) (*model.PostList, *model.AppError) {
|
func (a *App) GetFlaggedPostsForChannel(userID, channelId string, offset int, limit int) (*model.PostList, *model.AppError) {
|
||||||
postList, err := a.Srv().Store.Post().GetFlaggedPostsForChannel(userId, channelId, offset, limit)
|
postList, err := a.Srv().Store.Post().GetFlaggedPostsForChannel(userID, channelId, offset, limit)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("GetFlaggedPostsForChannel", "app.post.get_flagged_posts.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("GetFlaggedPostsForChannel", "app.post.get_flagged_posts.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -791,7 +791,7 @@ func (a *App) GetFlaggedPostsForChannel(userId, channelId string, offset int, li
|
|||||||
return postList, nil
|
return postList, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetPermalinkPost(postId string, userId string) (*model.PostList, *model.AppError) {
|
func (a *App) GetPermalinkPost(postId string, userID string) (*model.PostList, *model.AppError) {
|
||||||
list, nErr := a.Srv().Store.Post().Get(postId, false, false, false)
|
list, nErr := a.Srv().Store.Post().Get(postId, false, false, false)
|
||||||
if nErr != nil {
|
if nErr != nil {
|
||||||
var nfErr *store.ErrNotFound
|
var nfErr *store.ErrNotFound
|
||||||
@@ -816,7 +816,7 @@ func (a *App) GetPermalinkPost(postId string, userId string) (*model.PostList, *
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = a.JoinChannel(channel, userId); err != nil {
|
if err = a.JoinChannel(channel, userID); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -975,10 +975,10 @@ func (a *App) AddCursorIdsForPostList(originalList *model.PostList, afterPost, b
|
|||||||
originalList.NextPostId = nextPostId
|
originalList.NextPostId = nextPostId
|
||||||
originalList.PrevPostId = prevPostId
|
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(channelId, userID string, limitBefore, limitAfter int, skipFetchThreads bool, collapsedThreads, collapsedThreadsExtended bool) (*model.PostList, *model.AppError) {
|
||||||
var member *model.ChannelMember
|
var member *model.ChannelMember
|
||||||
var err *model.AppError
|
var err *model.AppError
|
||||||
if member, err = a.GetChannelMember(channelId, userId); err != nil {
|
if member, err = a.GetChannelMember(channelId, userID); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
} else if member.LastViewedAt == 0 {
|
} else if member.LastViewedAt == 0 {
|
||||||
return model.NewPostList(), nil
|
return model.NewPostList(), nil
|
||||||
@@ -1083,18 +1083,18 @@ func (a *App) DeletePostFiles(post *model.Post) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) parseAndFetchChannelIdByNameFromInFilter(channelName, userId, teamId string, includeDeleted bool) (*model.Channel, error) {
|
func (a *App) parseAndFetchChannelIdByNameFromInFilter(channelName, userID, teamID string, includeDeleted bool) (*model.Channel, error) {
|
||||||
if strings.HasPrefix(channelName, "@") && strings.Contains(channelName, ",") {
|
if strings.HasPrefix(channelName, "@") && strings.Contains(channelName, ",") {
|
||||||
var userIds []string
|
var userIDs []string
|
||||||
users, err := a.GetUsersByUsernames(strings.Split(channelName[1:], ","), false, nil)
|
users, err := a.GetUsersByUsernames(strings.Split(channelName[1:], ","), false, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
for _, user := range users {
|
for _, user := range users {
|
||||||
userIds = append(userIds, user.Id)
|
userIDs = append(userIDs, user.Id)
|
||||||
}
|
}
|
||||||
|
|
||||||
channel, err := a.GetGroupChannel(userIds)
|
channel, err := a.GetGroupChannel(userIDs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -1106,21 +1106,21 @@ func (a *App) parseAndFetchChannelIdByNameFromInFilter(channelName, userId, team
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
channel, err := a.GetOrCreateDirectChannel(userId, user.Id)
|
channel, err := a.GetOrCreateDirectChannel(userID, user.Id)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return channel, nil
|
return channel, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
channel, err := a.GetChannelByName(channelName, teamId, includeDeleted)
|
channel, err := a.GetChannelByName(channelName, teamID, includeDeleted)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return channel, nil
|
return channel, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) searchPostsInTeam(teamId string, userId string, paramsList []*model.SearchParams, modifierFun func(*model.SearchParams)) (*model.PostList, *model.AppError) {
|
func (a *App) searchPostsInTeam(teamID string, userID string, paramsList []*model.SearchParams, modifierFun func(*model.SearchParams)) (*model.PostList, *model.AppError) {
|
||||||
var wg sync.WaitGroup
|
var wg sync.WaitGroup
|
||||||
|
|
||||||
pchan := make(chan store.StoreResult, len(paramsList))
|
pchan := make(chan store.StoreResult, len(paramsList))
|
||||||
@@ -1135,7 +1135,7 @@ func (a *App) searchPostsInTeam(teamId string, userId string, paramsList []*mode
|
|||||||
|
|
||||||
go func(params *model.SearchParams) {
|
go func(params *model.SearchParams) {
|
||||||
defer wg.Done()
|
defer wg.Done()
|
||||||
postList, err := a.Srv().Store.Post().Search(teamId, userId, params)
|
postList, err := a.Srv().Store.Post().Search(teamID, userID, params)
|
||||||
pchan <- store.StoreResult{Data: postList, NErr: err}
|
pchan <- store.StoreResult{Data: postList, NErr: err}
|
||||||
}(params)
|
}(params)
|
||||||
}
|
}
|
||||||
@@ -1157,9 +1157,9 @@ func (a *App) searchPostsInTeam(teamId string, userId string, paramsList []*mode
|
|||||||
return posts, nil
|
return posts, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) convertChannelNamesToChannelIds(channels []string, userId string, teamId string, includeDeletedChannels bool) []string {
|
func (a *App) convertChannelNamesToChannelIds(channels []string, userID string, teamID string, includeDeletedChannels bool) []string {
|
||||||
for idx, channelName := range channels {
|
for idx, channelName := range channels {
|
||||||
channel, err := a.parseAndFetchChannelIdByNameFromInFilter(channelName, userId, teamId, includeDeletedChannels)
|
channel, err := a.parseAndFetchChannelIdByNameFromInFilter(channelName, userID, teamID, includeDeletedChannels)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mlog.Warn("error getting channel id by name from in filter", mlog.Err(err))
|
mlog.Warn("error getting channel id by name from in filter", mlog.Err(err))
|
||||||
continue
|
continue
|
||||||
@@ -1181,22 +1181,22 @@ func (a *App) convertUserNameToUserIds(usernames []string) []string {
|
|||||||
return usernames
|
return usernames
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) SearchPostsInTeam(teamId string, paramsList []*model.SearchParams) (*model.PostList, *model.AppError) {
|
func (a *App) SearchPostsInTeam(teamID string, paramsList []*model.SearchParams) (*model.PostList, *model.AppError) {
|
||||||
if !*a.Config().ServiceSettings.EnablePostSearch {
|
if !*a.Config().ServiceSettings.EnablePostSearch {
|
||||||
return nil, model.NewAppError("SearchPostsInTeam", "store.sql_post.search.disabled", nil, fmt.Sprintf("teamId=%v", teamId), http.StatusNotImplemented)
|
return nil, model.NewAppError("SearchPostsInTeam", "store.sql_post.search.disabled", nil, fmt.Sprintf("teamId=%v", teamID), http.StatusNotImplemented)
|
||||||
}
|
}
|
||||||
return a.searchPostsInTeam(teamId, "", paramsList, func(params *model.SearchParams) {
|
return a.searchPostsInTeam(teamID, "", paramsList, func(params *model.SearchParams) {
|
||||||
params.SearchWithoutUserId = true
|
params.SearchWithoutUserId = true
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) SearchPostsInTeamForUser(terms string, userId string, teamId string, isOrSearch bool, includeDeletedChannels bool, timeZoneOffset int, page, perPage int) (*model.PostSearchResults, *model.AppError) {
|
func (a *App) SearchPostsInTeamForUser(terms string, userID string, teamID string, isOrSearch bool, includeDeletedChannels bool, timeZoneOffset int, page, perPage int) (*model.PostSearchResults, *model.AppError) {
|
||||||
var postSearchResults *model.PostSearchResults
|
var postSearchResults *model.PostSearchResults
|
||||||
paramsList := model.ParseSearchParams(strings.TrimSpace(terms), timeZoneOffset)
|
paramsList := model.ParseSearchParams(strings.TrimSpace(terms), timeZoneOffset)
|
||||||
includeDeleted := includeDeletedChannels && *a.Config().TeamSettings.ExperimentalViewArchivedChannels
|
includeDeleted := includeDeletedChannels && *a.Config().TeamSettings.ExperimentalViewArchivedChannels
|
||||||
|
|
||||||
if !*a.Config().ServiceSettings.EnablePostSearch {
|
if !*a.Config().ServiceSettings.EnablePostSearch {
|
||||||
return nil, model.NewAppError("SearchPostsInTeamForUser", "store.sql_post.search.disabled", nil, fmt.Sprintf("teamId=%v userId=%v", teamId, userId), http.StatusNotImplemented)
|
return nil, model.NewAppError("SearchPostsInTeamForUser", "store.sql_post.search.disabled", nil, fmt.Sprintf("teamId=%v userId=%v", teamID, userID), http.StatusNotImplemented)
|
||||||
}
|
}
|
||||||
|
|
||||||
finalParamsList := []*model.SearchParams{}
|
finalParamsList := []*model.SearchParams{}
|
||||||
@@ -1207,8 +1207,8 @@ func (a *App) SearchPostsInTeamForUser(terms string, userId string, teamId strin
|
|||||||
// Don't allow users to search for "*"
|
// Don't allow users to search for "*"
|
||||||
if params.Terms != "*" {
|
if params.Terms != "*" {
|
||||||
// Convert channel names to channel IDs
|
// Convert channel names to channel IDs
|
||||||
params.InChannels = a.convertChannelNamesToChannelIds(params.InChannels, userId, teamId, includeDeletedChannels)
|
params.InChannels = a.convertChannelNamesToChannelIds(params.InChannels, userID, teamID, includeDeletedChannels)
|
||||||
params.ExcludedChannels = a.convertChannelNamesToChannelIds(params.ExcludedChannels, userId, teamId, includeDeletedChannels)
|
params.ExcludedChannels = a.convertChannelNamesToChannelIds(params.ExcludedChannels, userID, teamID, includeDeletedChannels)
|
||||||
|
|
||||||
// Convert usernames to user IDs
|
// Convert usernames to user IDs
|
||||||
params.FromUsers = a.convertUserNameToUserIds(params.FromUsers)
|
params.FromUsers = a.convertUserNameToUserIds(params.FromUsers)
|
||||||
@@ -1223,7 +1223,7 @@ func (a *App) SearchPostsInTeamForUser(terms string, userId string, teamId strin
|
|||||||
return model.MakePostSearchResults(model.NewPostList(), nil), nil
|
return model.MakePostSearchResults(model.NewPostList(), nil), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
postSearchResults, nErr := a.Srv().Store.Post().SearchPostsInTeamForUser(finalParamsList, userId, teamId, page, perPage)
|
postSearchResults, nErr := a.Srv().Store.Post().SearchPostsInTeamForUser(finalParamsList, userID, teamID, page, perPage)
|
||||||
if nErr != nil {
|
if nErr != nil {
|
||||||
var appErr *model.AppError
|
var appErr *model.AppError
|
||||||
switch {
|
switch {
|
||||||
@@ -1342,7 +1342,7 @@ func (a *App) MaxPostSize() int {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// countThreadMentions returns the number of times the user is mentioned in a specified thread after the timestamp.
|
// 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) {
|
func (a *App) countThreadMentions(user *model.User, post *model.Post, teamID string, timestamp int64) (int64, *model.AppError) {
|
||||||
channel, err := a.GetChannel(post.ChannelId)
|
channel, err := a.GetChannel(post.ChannelId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
@@ -1376,8 +1376,8 @@ func (a *App) countThreadMentions(user *model.User, post *model.Post, teamId str
|
|||||||
}
|
}
|
||||||
|
|
||||||
var team *model.Team
|
var team *model.Team
|
||||||
if teamId != "" {
|
if teamID != "" {
|
||||||
team, err = a.GetTeam(teamId)
|
team, err = a.GetTeam(teamID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
@@ -1543,6 +1543,6 @@ func isPostMention(user *model.User, post *model.Post, keywords map[string][]str
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetThreadMembershipsForUser(userId, teamId string) ([]*model.ThreadMembership, error) {
|
func (a *App) GetThreadMembershipsForUser(userID, teamID string) ([]*model.ThreadMembership, error) {
|
||||||
return a.Srv().Store.Thread().GetMembershipsForUser(userId, teamId)
|
return a.Srv().Store.Thread().GetMembershipsForUser(userID, teamID)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -624,13 +624,13 @@ func TestDeletePostWithFileAttachments(t *testing.T) {
|
|||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
|
|
||||||
// Create a post with a file attachment.
|
// Create a post with a file attachment.
|
||||||
teamId := th.BasicTeam.Id
|
teamID := th.BasicTeam.Id
|
||||||
channelId := th.BasicChannel.Id
|
channelId := th.BasicChannel.Id
|
||||||
userId := th.BasicUser.Id
|
userID := th.BasicUser.Id
|
||||||
filename := "test"
|
filename := "test"
|
||||||
data := []byte("abcd")
|
data := []byte("abcd")
|
||||||
|
|
||||||
info1, err := th.App.DoUploadFile(time.Date(2007, 2, 4, 1, 2, 3, 4, time.Local), teamId, channelId, userId, filename, data)
|
info1, err := th.App.DoUploadFile(time.Date(2007, 2, 4, 1, 2, 3, 4, time.Local), teamID, channelId, userID, filename, data)
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
defer func() {
|
defer func() {
|
||||||
th.App.Srv().Store.FileInfo().PermanentDelete(info1.Id)
|
th.App.Srv().Store.FileInfo().PermanentDelete(info1.Id)
|
||||||
@@ -641,7 +641,7 @@ func TestDeletePostWithFileAttachments(t *testing.T) {
|
|||||||
Message: "asd",
|
Message: "asd",
|
||||||
ChannelId: channelId,
|
ChannelId: channelId,
|
||||||
PendingPostId: model.NewId() + ":" + fmt.Sprint(model.GetMillis()),
|
PendingPostId: model.NewId() + ":" + fmt.Sprint(model.GetMillis()),
|
||||||
UserId: userId,
|
UserId: userID,
|
||||||
CreateAt: 0,
|
CreateAt: 0,
|
||||||
FileIds: []string{info1.Id},
|
FileIds: []string{info1.Id},
|
||||||
}
|
}
|
||||||
@@ -650,7 +650,7 @@ func TestDeletePostWithFileAttachments(t *testing.T) {
|
|||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
||||||
// Delete the post.
|
// Delete the post.
|
||||||
post, err = th.App.DeletePost(post.Id, userId)
|
post, err = th.App.DeletePost(post.Id, userID)
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
||||||
// Wait for the cleanup routine to finish.
|
// Wait for the cleanup routine to finish.
|
||||||
|
|||||||
@@ -10,16 +10,16 @@ import (
|
|||||||
"github.com/mattermost/mattermost-server/v5/model"
|
"github.com/mattermost/mattermost-server/v5/model"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (a *App) GetPreferencesForUser(userId string) (model.Preferences, *model.AppError) {
|
func (a *App) GetPreferencesForUser(userID string) (model.Preferences, *model.AppError) {
|
||||||
preferences, err := a.Srv().Store.Preference().GetAll(userId)
|
preferences, err := a.Srv().Store.Preference().GetAll(userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("GetPreferencesForUser", "app.preference.get_all.app_error", nil, err.Error(), http.StatusBadRequest)
|
return nil, model.NewAppError("GetPreferencesForUser", "app.preference.get_all.app_error", nil, err.Error(), http.StatusBadRequest)
|
||||||
}
|
}
|
||||||
return preferences, nil
|
return preferences, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetPreferenceByCategoryForUser(userId string, category string) (model.Preferences, *model.AppError) {
|
func (a *App) GetPreferenceByCategoryForUser(userID string, category string) (model.Preferences, *model.AppError) {
|
||||||
preferences, err := a.Srv().Store.Preference().GetCategory(userId, category)
|
preferences, err := a.Srv().Store.Preference().GetCategory(userID, category)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("GetPreferenceByCategoryForUser", "app.preference.get_category.app_error", nil, err.Error(), http.StatusBadRequest)
|
return nil, model.NewAppError("GetPreferenceByCategoryForUser", "app.preference.get_category.app_error", nil, err.Error(), http.StatusBadRequest)
|
||||||
}
|
}
|
||||||
@@ -30,19 +30,19 @@ func (a *App) GetPreferenceByCategoryForUser(userId string, category string) (mo
|
|||||||
return preferences, nil
|
return preferences, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetPreferenceByCategoryAndNameForUser(userId string, category string, preferenceName string) (*model.Preference, *model.AppError) {
|
func (a *App) GetPreferenceByCategoryAndNameForUser(userID string, category string, preferenceName string) (*model.Preference, *model.AppError) {
|
||||||
res, err := a.Srv().Store.Preference().Get(userId, category, preferenceName)
|
res, err := a.Srv().Store.Preference().Get(userID, category, preferenceName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("GetPreferenceByCategoryAndNameForUser", "app.preference.get.app_error", nil, err.Error(), http.StatusBadRequest)
|
return nil, model.NewAppError("GetPreferenceByCategoryAndNameForUser", "app.preference.get.app_error", nil, err.Error(), http.StatusBadRequest)
|
||||||
}
|
}
|
||||||
return res, nil
|
return res, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) UpdatePreferences(userId string, preferences model.Preferences) *model.AppError {
|
func (a *App) UpdatePreferences(userID string, preferences model.Preferences) *model.AppError {
|
||||||
for _, preference := range preferences {
|
for _, preference := range preferences {
|
||||||
if userId != preference.UserId {
|
if userID != preference.UserId {
|
||||||
return model.NewAppError("savePreferences", "api.preference.update_preferences.set.app_error", nil,
|
return model.NewAppError("savePreferences", "api.preference.update_preferences.set.app_error", nil,
|
||||||
"userId="+userId+", preference.UserId="+preference.UserId, http.StatusForbidden)
|
"userId="+userID+", preference.UserId="+preference.UserId, http.StatusForbidden)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -60,28 +60,28 @@ func (a *App) UpdatePreferences(userId string, preferences model.Preferences) *m
|
|||||||
return model.NewAppError("UpdatePreferences", "api.preference.update_preferences.update_sidebar.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return model.NewAppError("UpdatePreferences", "api.preference.update_preferences.update_sidebar.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
|
|
||||||
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_SIDEBAR_CATEGORY_UPDATED, "", "", userId, nil)
|
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_SIDEBAR_CATEGORY_UPDATED, "", "", userID, nil)
|
||||||
// TODO this needs to be updated to include information on which categories changed
|
// TODO this needs to be updated to include information on which categories changed
|
||||||
a.Publish(message)
|
a.Publish(message)
|
||||||
|
|
||||||
message = model.NewWebSocketEvent(model.WEBSOCKET_EVENT_PREFERENCES_CHANGED, "", "", userId, nil)
|
message = model.NewWebSocketEvent(model.WEBSOCKET_EVENT_PREFERENCES_CHANGED, "", "", userID, nil)
|
||||||
message.Add("preferences", preferences.ToJson())
|
message.Add("preferences", preferences.ToJson())
|
||||||
a.Publish(message)
|
a.Publish(message)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) DeletePreferences(userId string, preferences model.Preferences) *model.AppError {
|
func (a *App) DeletePreferences(userID string, preferences model.Preferences) *model.AppError {
|
||||||
for _, preference := range preferences {
|
for _, preference := range preferences {
|
||||||
if userId != preference.UserId {
|
if userID != preference.UserId {
|
||||||
err := model.NewAppError("DeletePreferences", "api.preference.delete_preferences.delete.app_error", nil,
|
err := model.NewAppError("DeletePreferences", "api.preference.delete_preferences.delete.app_error", nil,
|
||||||
"userId="+userId+", preference.UserId="+preference.UserId, http.StatusForbidden)
|
"userId="+userID+", preference.UserId="+preference.UserId, http.StatusForbidden)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, preference := range preferences {
|
for _, preference := range preferences {
|
||||||
if err := a.Srv().Store.Preference().Delete(userId, preference.Category, preference.Name); err != nil {
|
if err := a.Srv().Store.Preference().Delete(userID, preference.Category, preference.Name); err != nil {
|
||||||
return model.NewAppError("DeletePreferences", "app.preference.delete.app_error", nil, err.Error(), http.StatusBadRequest)
|
return model.NewAppError("DeletePreferences", "app.preference.delete.app_error", nil, err.Error(), http.StatusBadRequest)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -90,11 +90,11 @@ func (a *App) DeletePreferences(userId string, preferences model.Preferences) *m
|
|||||||
return model.NewAppError("DeletePreferences", "api.preference.delete_preferences.update_sidebar.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return model.NewAppError("DeletePreferences", "api.preference.delete_preferences.update_sidebar.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
|
|
||||||
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_SIDEBAR_CATEGORY_UPDATED, "", "", userId, nil)
|
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_SIDEBAR_CATEGORY_UPDATED, "", "", userID, nil)
|
||||||
// TODO this needs to be updated to include information on which categories changed
|
// TODO this needs to be updated to include information on which categories changed
|
||||||
a.Publish(message)
|
a.Publish(message)
|
||||||
|
|
||||||
message = model.NewWebSocketEvent(model.WEBSOCKET_EVENT_PREFERENCES_DELETED, "", "", userId, nil)
|
message = model.NewWebSocketEvent(model.WEBSOCKET_EVENT_PREFERENCES_DELETED, "", "", userID, nil)
|
||||||
message.Add("preferences", preferences.ToJson())
|
message.Add("preferences", preferences.ToJson())
|
||||||
a.Publish(message)
|
a.Publish(message)
|
||||||
|
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ func cleanupVersion(originalVersion string) string {
|
|||||||
return strings.Join(versionPartsOut, ".")
|
return strings.Join(versionPartsOut, ".")
|
||||||
}
|
}
|
||||||
|
|
||||||
func noticeMatchesConditions(config *model.Config, preferences store.PreferenceStore, userId string,
|
func noticeMatchesConditions(config *model.Config, preferences store.PreferenceStore, userID string,
|
||||||
client model.NoticeClientType, clientVersion string, postCount int64, userCount int64, isSystemAdmin bool,
|
client model.NoticeClientType, clientVersion string, postCount int64, userCount int64, isSystemAdmin bool,
|
||||||
isTeamAdmin bool, isCloud bool, sku string, notice *model.ProductNotice) (bool, error) {
|
isTeamAdmin bool, isCloud bool, sku string, notice *model.ProductNotice) (bool, error) {
|
||||||
cnd := notice.Conditions
|
cnd := notice.Conditions
|
||||||
@@ -153,7 +153,7 @@ func noticeMatchesConditions(config *model.Config, preferences store.PreferenceS
|
|||||||
|
|
||||||
// check if user's config matches the notice
|
// check if user's config matches the notice
|
||||||
for k, v := range cnd.UserConfig {
|
for k, v := range cnd.UserConfig {
|
||||||
res, err := validateUserConfigEntry(preferences, userId, k, v)
|
res, err := validateUserConfigEntry(preferences, userID, k, v)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
@@ -172,7 +172,7 @@ func noticeMatchesConditions(config *model.Config, preferences store.PreferenceS
|
|||||||
return true, nil
|
return true, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func validateUserConfigEntry(preferences store.PreferenceStore, userId string, key string, expectedValue interface{}) (bool, error) {
|
func validateUserConfigEntry(preferences store.PreferenceStore, userID string, key string, expectedValue interface{}) (bool, error) {
|
||||||
parts := strings.Split(key, ".")
|
parts := strings.Split(key, ".")
|
||||||
if len(parts) != 2 {
|
if len(parts) != 2 {
|
||||||
return false, errors.New("Invalid format of user config. Must be in form of Category.SettingName")
|
return false, errors.New("Invalid format of user config. Must be in form of Category.SettingName")
|
||||||
@@ -180,7 +180,7 @@ func validateUserConfigEntry(preferences store.PreferenceStore, userId string, k
|
|||||||
if _, ok := expectedValue.(string); !ok {
|
if _, ok := expectedValue.(string); !ok {
|
||||||
return false, errors.New("Invalid format of user config. Value should be string")
|
return false, errors.New("Invalid format of user config. Value should be string")
|
||||||
}
|
}
|
||||||
pref, err := preferences.Get(userId, parts[0], parts[1])
|
pref, err := preferences.Get(userID, parts[0], parts[1])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
@@ -204,9 +204,9 @@ func validateConfigEntry(conf *model.Config, path string, expectedValue interfac
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetProductNotices is called from the frontend to fetch the product notices that are relevant to the caller
|
// GetProductNotices is called from the frontend to fetch the product notices that are relevant to the caller
|
||||||
func (a *App) GetProductNotices(userId, teamId string, client model.NoticeClientType, clientVersion string, locale string) (model.NoticeMessages, *model.AppError) {
|
func (a *App) GetProductNotices(userID, teamID string, client model.NoticeClientType, clientVersion string, locale string) (model.NoticeMessages, *model.AppError) {
|
||||||
isSystemAdmin := a.SessionHasPermissionTo(*a.Session(), model.PERMISSION_MANAGE_SYSTEM)
|
isSystemAdmin := a.SessionHasPermissionTo(*a.Session(), model.PERMISSION_MANAGE_SYSTEM)
|
||||||
isTeamAdmin := a.SessionHasPermissionToTeam(*a.Session(), teamId, model.PERMISSION_MANAGE_TEAM)
|
isTeamAdmin := a.SessionHasPermissionToTeam(*a.Session(), teamID, model.PERMISSION_MANAGE_TEAM)
|
||||||
|
|
||||||
// check if notices for regular users are disabled
|
// check if notices for regular users are disabled
|
||||||
if !*a.Srv().Config().AnnouncementSettings.UserNoticesEnabled && !isSystemAdmin {
|
if !*a.Srv().Config().AnnouncementSettings.UserNoticesEnabled && !isSystemAdmin {
|
||||||
@@ -218,7 +218,7 @@ func (a *App) GetProductNotices(userId, teamId string, client model.NoticeClient
|
|||||||
return []model.NoticeMessage{}, nil
|
return []model.NoticeMessage{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
views, err := a.Srv().Store.ProductNotices().GetViews(userId)
|
views, err := a.Srv().Store.ProductNotices().GetViews(userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("GetProductNotices", "api.system.update_viewed_notices.failed", nil, err.Error(), http.StatusBadRequest)
|
return nil, model.NewAppError("GetProductNotices", "api.system.update_viewed_notices.failed", nil, err.Error(), http.StatusBadRequest)
|
||||||
}
|
}
|
||||||
@@ -253,7 +253,7 @@ func (a *App) GetProductNotices(userId, teamId string, client model.NoticeClient
|
|||||||
result, err := noticeMatchesConditions(
|
result, err := noticeMatchesConditions(
|
||||||
a.Config(),
|
a.Config(),
|
||||||
a.Srv().Store.Preference(),
|
a.Srv().Store.Preference(),
|
||||||
userId,
|
userID,
|
||||||
client,
|
client,
|
||||||
clientVersion,
|
clientVersion,
|
||||||
cachedPostCount,
|
cachedPostCount,
|
||||||
@@ -281,8 +281,8 @@ func (a *App) GetProductNotices(userId, teamId string, client model.NoticeClient
|
|||||||
}
|
}
|
||||||
|
|
||||||
// UpdateViewedProductNotices is called from the frontend to mark a set of notices as 'viewed' by user
|
// UpdateViewedProductNotices is called from the frontend to mark a set of notices as 'viewed' by user
|
||||||
func (a *App) UpdateViewedProductNotices(userId string, noticeIds []string) *model.AppError {
|
func (a *App) UpdateViewedProductNotices(userID string, noticeIds []string) *model.AppError {
|
||||||
if err := a.Srv().Store.ProductNotices().View(userId, noticeIds); err != nil {
|
if err := a.Srv().Store.ProductNotices().View(userID, noticeIds); err != nil {
|
||||||
return model.NewAppError("UpdateViewedProductNotices", "api.system.update_viewed_notices.failed", nil, err.Error(), http.StatusBadRequest)
|
return model.NewAppError("UpdateViewedProductNotices", "api.system.update_viewed_notices.failed", nil, err.Error(), http.StatusBadRequest)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@@ -290,13 +290,13 @@ func (a *App) UpdateViewedProductNotices(userId string, noticeIds []string) *mod
|
|||||||
|
|
||||||
// UpdateViewedProductNoticesForNewUser is called when new user is created to mark all current notices for this
|
// UpdateViewedProductNoticesForNewUser is called when new user is created to mark all current notices for this
|
||||||
// user as viewed in order to avoid showing them imminently on first login
|
// user as viewed in order to avoid showing them imminently on first login
|
||||||
func (a *App) UpdateViewedProductNoticesForNewUser(userId string) {
|
func (a *App) UpdateViewedProductNoticesForNewUser(userID string) {
|
||||||
var noticeIds []string
|
var noticeIds []string
|
||||||
for _, notice := range cachedNotices {
|
for _, notice := range cachedNotices {
|
||||||
noticeIds = append(noticeIds, notice.ID)
|
noticeIds = append(noticeIds, notice.ID)
|
||||||
}
|
}
|
||||||
if err := a.Srv().Store.ProductNotices().View(userId, noticeIds); err != nil {
|
if err := a.Srv().Store.ProductNotices().View(userID, noticeIds); err != nil {
|
||||||
mlog.Error("Cannot update product notices viewed state for user", mlog.String("userId", userId))
|
mlog.Error("Cannot update product notices viewed state for user", mlog.String("userId", userID))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -91,9 +91,9 @@ func (rl *RateLimiter) RateLimitWriter(key string, w http.ResponseWriter) bool {
|
|||||||
return limited
|
return limited
|
||||||
}
|
}
|
||||||
|
|
||||||
func (rl *RateLimiter) UserIdRateLimit(userId string, w http.ResponseWriter) bool {
|
func (rl *RateLimiter) UserIdRateLimit(userID string, w http.ResponseWriter) bool {
|
||||||
if rl.useAuth {
|
if rl.useAuth {
|
||||||
return rl.RateLimitWriter(userId, w)
|
return rl.RateLimitWriter(userID, w)
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -144,9 +144,9 @@ func (a *App) GetSession(token string) (*model.Session, *model.AppError) {
|
|||||||
return session, nil
|
return session, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetSessions(userId string) ([]*model.Session, *model.AppError) {
|
func (a *App) GetSessions(userID string) ([]*model.Session, *model.AppError) {
|
||||||
|
|
||||||
sessions, err := a.Srv().Store.Session().GetSessions(userId)
|
sessions, err := a.Srv().Store.Session().GetSessions(userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("GetSessions", "app.session.get_sessions.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("GetSessions", "app.session.get_sessions.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -154,10 +154,10 @@ func (a *App) GetSessions(userId string) ([]*model.Session, *model.AppError) {
|
|||||||
return sessions, nil
|
return sessions, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) UpdateSessionsIsGuest(userId string, isGuest bool) {
|
func (a *App) UpdateSessionsIsGuest(userID string, isGuest bool) {
|
||||||
sessions, err := a.Srv().Store.Session().GetSessions(userId)
|
sessions, err := a.Srv().Store.Session().GetSessions(userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mlog.Error("Unable to get user sessions", mlog.String("user_id", userId), mlog.Err(err))
|
mlog.Error("Unable to get user sessions", mlog.String("user_id", userID), mlog.Err(err))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -172,8 +172,8 @@ func (a *App) UpdateSessionsIsGuest(userId string, isGuest bool) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) RevokeAllSessions(userId string) *model.AppError {
|
func (a *App) RevokeAllSessions(userID string) *model.AppError {
|
||||||
sessions, err := a.Srv().Store.Session().GetSessions(userId)
|
sessions, err := a.Srv().Store.Session().GetSessions(userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return model.NewAppError("RevokeAllSessions", "app.session.get_sessions.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return model.NewAppError("RevokeAllSessions", "app.session.get_sessions.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -187,7 +187,7 @@ func (a *App) RevokeAllSessions(userId string) *model.AppError {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
a.ClearSessionCacheForUser(userId)
|
a.ClearSessionCacheForUser(userID)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@@ -209,14 +209,14 @@ func (a *App) RevokeSessionsFromAllUsers() *model.AppError {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) ClearSessionCacheForUser(userId string) {
|
func (a *App) ClearSessionCacheForUser(userID string) {
|
||||||
a.ClearSessionCacheForUserSkipClusterSend(userId)
|
a.ClearSessionCacheForUserSkipClusterSend(userID)
|
||||||
|
|
||||||
if a.Cluster() != nil {
|
if a.Cluster() != nil {
|
||||||
msg := &model.ClusterMessage{
|
msg := &model.ClusterMessage{
|
||||||
Event: model.CLUSTER_EVENT_CLEAR_SESSION_CACHE_FOR_USER,
|
Event: model.CLUSTER_EVENT_CLEAR_SESSION_CACHE_FOR_USER,
|
||||||
SendType: model.CLUSTER_SEND_RELIABLE,
|
SendType: model.CLUSTER_SEND_RELIABLE,
|
||||||
Data: userId,
|
Data: userID,
|
||||||
}
|
}
|
||||||
a.Cluster().SendClusterMessage(msg)
|
a.Cluster().SendClusterMessage(msg)
|
||||||
}
|
}
|
||||||
@@ -234,12 +234,12 @@ func (a *App) ClearSessionCacheForAllUsers() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) ClearSessionCacheForUserSkipClusterSend(userId string) {
|
func (a *App) ClearSessionCacheForUserSkipClusterSend(userID string) {
|
||||||
if keys, err := a.Srv().sessionCache.Keys(); err == nil {
|
if keys, err := a.Srv().sessionCache.Keys(); err == nil {
|
||||||
var session *model.Session
|
var session *model.Session
|
||||||
for _, key := range keys {
|
for _, key := range keys {
|
||||||
if err := a.Srv().sessionCache.Get(key, &session); err == nil {
|
if err := a.Srv().sessionCache.Get(key, &session); err == nil {
|
||||||
if session.UserId == userId {
|
if session.UserId == userID {
|
||||||
a.Srv().sessionCache.Remove(key)
|
a.Srv().sessionCache.Remove(key)
|
||||||
if a.Metrics() != nil {
|
if a.Metrics() != nil {
|
||||||
a.Metrics().IncrementMemCacheInvalidationCounterSession()
|
a.Metrics().IncrementMemCacheInvalidationCounterSession()
|
||||||
@@ -249,7 +249,7 @@ func (a *App) ClearSessionCacheForUserSkipClusterSend(userId string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
a.InvalidateWebConnSessionCacheForUser(userId)
|
a.InvalidateWebConnSessionCacheForUser(userID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) ClearSessionCacheForAllUsersSkipClusterSend() {
|
func (a *App) ClearSessionCacheForAllUsersSkipClusterSend() {
|
||||||
@@ -268,14 +268,14 @@ func (a *App) SessionCacheLength() int {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) RevokeSessionsForDeviceId(userId string, deviceId string, currentSessionId string) *model.AppError {
|
func (a *App) RevokeSessionsForDeviceId(userID string, deviceId string, currentSessionId string) *model.AppError {
|
||||||
sessions, err := a.Srv().Store.Session().GetSessions(userId)
|
sessions, err := a.Srv().Store.Session().GetSessions(userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return model.NewAppError("RevokeSessionsForDeviceId", "app.session.get_sessions.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return model.NewAppError("RevokeSessionsForDeviceId", "app.session.get_sessions.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
for _, session := range sessions {
|
for _, session := range sessions {
|
||||||
if session.DeviceId == deviceId && session.Id != currentSessionId {
|
if session.DeviceId == deviceId && session.Id != currentSessionId {
|
||||||
mlog.Debug("Revoking sessionId for userId. Re-login with the same device Id", mlog.String("session_id", session.Id), mlog.String("user_id", userId))
|
mlog.Debug("Revoking sessionId for userId. Re-login with the same device Id", mlog.String("session_id", session.Id), mlog.String("user_id", userID))
|
||||||
if err := a.RevokeSession(session); err != nil {
|
if err := a.RevokeSession(session); err != nil {
|
||||||
mlog.Warn("Could not revoke session for device", mlog.String("device_id", deviceId), mlog.Err(err))
|
mlog.Warn("Could not revoke session for device", mlog.String("device_id", deviceId), mlog.Err(err))
|
||||||
}
|
}
|
||||||
@@ -590,8 +590,8 @@ func (a *App) GetUserAccessTokens(page, perPage int) ([]*model.UserAccessToken,
|
|||||||
return tokens, nil
|
return tokens, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetUserAccessTokensForUser(userId string, page, perPage int) ([]*model.UserAccessToken, *model.AppError) {
|
func (a *App) GetUserAccessTokensForUser(userID string, page, perPage int) ([]*model.UserAccessToken, *model.AppError) {
|
||||||
tokens, err := a.Srv().Store.UserAccessToken().GetByUser(userId, page*perPage, perPage)
|
tokens, err := a.Srv().Store.UserAccessToken().GetByUser(userID, page*perPage, perPage)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("GetUserAccessTokensForUser", "app.user_access_token.get_by_user.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("GetUserAccessTokensForUser", "app.user_access_token.get_by_user.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -603,8 +603,8 @@ func (a *App) GetUserAccessTokensForUser(userId string, page, perPage int) ([]*m
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetUserAccessToken(tokenId string, sanitize bool) (*model.UserAccessToken, *model.AppError) {
|
func (a *App) GetUserAccessToken(tokenID string, sanitize bool) (*model.UserAccessToken, *model.AppError) {
|
||||||
token, err := a.Srv().Store.UserAccessToken().Get(tokenId)
|
token, err := a.Srv().Store.UserAccessToken().Get(tokenID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
var nfErr *store.ErrNotFound
|
var nfErr *store.ErrNotFound
|
||||||
switch {
|
switch {
|
||||||
|
|||||||
@@ -82,13 +82,13 @@ func expandAnnouncement(text string) string {
|
|||||||
func replaceUserIds(userStore store.UserStore, text string) string {
|
func replaceUserIds(userStore store.UserStore, text string) string {
|
||||||
rgx, err := regexp.Compile("<@([a-zA-Z0-9]+)>")
|
rgx, err := regexp.Compile("<@([a-zA-Z0-9]+)>")
|
||||||
if err == nil {
|
if err == nil {
|
||||||
userIds := make([]string, 0)
|
userIDs := make([]string, 0)
|
||||||
matches := rgx.FindAllStringSubmatch(text, -1)
|
matches := rgx.FindAllStringSubmatch(text, -1)
|
||||||
for _, match := range matches {
|
for _, match := range matches {
|
||||||
userIds = append(userIds, match[1])
|
userIDs = append(userIDs, match[1])
|
||||||
}
|
}
|
||||||
|
|
||||||
if users, err := userStore.GetProfileByIds(userIds, nil, true); err == nil {
|
if users, err := userStore.GetProfileByIds(userIDs, nil, true); err == nil {
|
||||||
for _, user := range users {
|
for _, user := range users {
|
||||||
text = strings.Replace(text, "<@"+user.Id+">", "@"+user.Username, -1)
|
text = strings.Replace(text, "<@"+user.Id+">", "@"+user.Username, -1)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,9 +25,9 @@ func TestProcessSlackText(t *testing.T) {
|
|||||||
t.Fail()
|
t.Fail()
|
||||||
}
|
}
|
||||||
|
|
||||||
userId := th.BasicUser.Id
|
userID := th.BasicUser.Id
|
||||||
username := th.BasicUser.Username
|
username := th.BasicUser.Username
|
||||||
if th.App.ProcessSlackText("<@"+userId+"> hello") != "@"+username+" hello" {
|
if th.App.ProcessSlackText("<@"+userID+"> hello") != "@"+username+" hello" {
|
||||||
t.Fail()
|
t.Fail()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -36,7 +36,7 @@ func TestProcessSlackAnnouncement(t *testing.T) {
|
|||||||
th := Setup(t).InitBasic()
|
th := Setup(t).InitBasic()
|
||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
|
|
||||||
userId := th.BasicUser.Id
|
userID := th.BasicUser.Id
|
||||||
username := th.BasicUser.Username
|
username := th.BasicUser.Username
|
||||||
|
|
||||||
attachments := []*model.SlackAttachment{
|
attachments := []*model.SlackAttachment{
|
||||||
@@ -53,13 +53,13 @@ func TestProcessSlackAnnouncement(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Pretext: "<@" + userId + "> pretext",
|
Pretext: "<@" + userID + "> pretext",
|
||||||
Text: "<@" + userId + "> text",
|
Text: "<@" + userID + "> text",
|
||||||
Title: "<@" + userId + "> title",
|
Title: "<@" + userID + "> title",
|
||||||
Fields: []*model.SlackAttachmentField{
|
Fields: []*model.SlackAttachmentField{
|
||||||
{
|
{
|
||||||
Title: "foo",
|
Title: "foo",
|
||||||
Value: "<@" + userId + "> bar",
|
Value: "<@" + userID + "> bar",
|
||||||
Short: true,
|
Short: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import (
|
|||||||
|
|
||||||
type AutoChannelCreator struct {
|
type AutoChannelCreator struct {
|
||||||
a *app.App
|
a *app.App
|
||||||
userId string
|
userID string
|
||||||
team *model.Team
|
team *model.Team
|
||||||
Fuzzy bool
|
Fuzzy bool
|
||||||
DisplayNameLen utils.Range
|
DisplayNameLen utils.Range
|
||||||
@@ -21,11 +21,11 @@ type AutoChannelCreator struct {
|
|||||||
ChannelType string
|
ChannelType string
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewAutoChannelCreator(a *app.App, team *model.Team, userId string) *AutoChannelCreator {
|
func NewAutoChannelCreator(a *app.App, team *model.Team, userID string) *AutoChannelCreator {
|
||||||
return &AutoChannelCreator{
|
return &AutoChannelCreator{
|
||||||
a: a,
|
a: a,
|
||||||
team: team,
|
team: team,
|
||||||
userId: userId,
|
userID: userID,
|
||||||
Fuzzy: false,
|
Fuzzy: false,
|
||||||
DisplayNameLen: ChannelDisplayNameLen,
|
DisplayNameLen: ChannelDisplayNameLen,
|
||||||
DisplayNameCharset: utils.ALPHANUMERIC,
|
DisplayNameCharset: utils.ALPHANUMERIC,
|
||||||
@@ -49,7 +49,7 @@ func (cfg *AutoChannelCreator) createRandomChannel() (*model.Channel, error) {
|
|||||||
DisplayName: displayName,
|
DisplayName: displayName,
|
||||||
Name: name,
|
Name: name,
|
||||||
Type: cfg.ChannelType,
|
Type: cfg.ChannelType,
|
||||||
CreatorId: cfg.userId,
|
CreatorId: cfg.userID,
|
||||||
}
|
}
|
||||||
|
|
||||||
channel, err := cfg.a.CreateChannel(channel, true)
|
channel, err := cfg.a.CreateChannel(channel, true)
|
||||||
|
|||||||
@@ -254,7 +254,7 @@ func (th *TestHelper) createChannel(team *model.Team, channelType string) *model
|
|||||||
return channel
|
return channel
|
||||||
}
|
}
|
||||||
|
|
||||||
func (th *TestHelper) createChannelWithAnotherUser(team *model.Team, channelType, userId string) *model.Channel {
|
func (th *TestHelper) createChannelWithAnotherUser(team *model.Team, channelType, userID string) *model.Channel {
|
||||||
id := model.NewId()
|
id := model.NewId()
|
||||||
|
|
||||||
channel := &model.Channel{
|
channel := &model.Channel{
|
||||||
@@ -262,7 +262,7 @@ func (th *TestHelper) createChannelWithAnotherUser(team *model.Team, channelType
|
|||||||
Name: "name_" + id,
|
Name: "name_" + id,
|
||||||
Type: channelType,
|
Type: channelType,
|
||||||
TeamId: team.Id,
|
TeamId: team.Id,
|
||||||
CreatorId: userId,
|
CreatorId: userID,
|
||||||
}
|
}
|
||||||
|
|
||||||
utils.DisableDebugLogForTest()
|
utils.DisableDebugLogForTest()
|
||||||
|
|||||||
@@ -35,18 +35,18 @@ func (a *App) GetAllStatuses() map[string]*model.Status {
|
|||||||
}
|
}
|
||||||
|
|
||||||
statusMap := map[string]*model.Status{}
|
statusMap := map[string]*model.Status{}
|
||||||
if userIds, err := a.Srv().statusCache.Keys(); err == nil {
|
if userIDs, err := a.Srv().statusCache.Keys(); err == nil {
|
||||||
for _, userId := range userIds {
|
for _, userID := range userIDs {
|
||||||
status := a.GetStatusFromCache(userId)
|
status := a.GetStatusFromCache(userID)
|
||||||
if status != nil {
|
if status != nil {
|
||||||
statusMap[userId] = status
|
statusMap[userID] = status
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return statusMap
|
return statusMap
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetStatusesByIds(userIds []string) (map[string]interface{}, *model.AppError) {
|
func (a *App) GetStatusesByIds(userIDs []string) (map[string]interface{}, *model.AppError) {
|
||||||
if !*a.Config().ServiceSettings.EnableUserStatuses {
|
if !*a.Config().ServiceSettings.EnableUserStatuses {
|
||||||
return map[string]interface{}{}, nil
|
return map[string]interface{}{}, nil
|
||||||
}
|
}
|
||||||
@@ -55,15 +55,15 @@ func (a *App) GetStatusesByIds(userIds []string) (map[string]interface{}, *model
|
|||||||
metrics := a.Metrics()
|
metrics := a.Metrics()
|
||||||
|
|
||||||
missingUserIds := []string{}
|
missingUserIds := []string{}
|
||||||
for _, userId := range userIds {
|
for _, userID := range userIDs {
|
||||||
var status *model.Status
|
var status *model.Status
|
||||||
if err := a.Srv().statusCache.Get(userId, &status); err == nil {
|
if err := a.Srv().statusCache.Get(userID, &status); err == nil {
|
||||||
statusMap[userId] = status.Status
|
statusMap[userID] = status.Status
|
||||||
if metrics != nil {
|
if metrics != nil {
|
||||||
metrics.IncrementMemCacheHitCounter("Status")
|
metrics.IncrementMemCacheHitCounter("Status")
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
missingUserIds = append(missingUserIds, userId)
|
missingUserIds = append(missingUserIds, userID)
|
||||||
if metrics != nil {
|
if metrics != nil {
|
||||||
metrics.IncrementMemCacheMissCounter("Status")
|
metrics.IncrementMemCacheMissCounter("Status")
|
||||||
}
|
}
|
||||||
@@ -84,9 +84,9 @@ func (a *App) GetStatusesByIds(userIds []string) (map[string]interface{}, *model
|
|||||||
}
|
}
|
||||||
|
|
||||||
// For the case where the user does not have a row in the Status table and cache
|
// For the case where the user does not have a row in the Status table and cache
|
||||||
for _, userId := range missingUserIds {
|
for _, userID := range missingUserIds {
|
||||||
if _, ok := statusMap[userId]; !ok {
|
if _, ok := statusMap[userID]; !ok {
|
||||||
statusMap[userId] = model.STATUS_OFFLINE
|
statusMap[userID] = model.STATUS_OFFLINE
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -94,7 +94,7 @@ func (a *App) GetStatusesByIds(userIds []string) (map[string]interface{}, *model
|
|||||||
}
|
}
|
||||||
|
|
||||||
//GetUserStatusesByIds used by apiV4
|
//GetUserStatusesByIds used by apiV4
|
||||||
func (a *App) GetUserStatusesByIds(userIds []string) ([]*model.Status, *model.AppError) {
|
func (a *App) GetUserStatusesByIds(userIDs []string) ([]*model.Status, *model.AppError) {
|
||||||
if !*a.Config().ServiceSettings.EnableUserStatuses {
|
if !*a.Config().ServiceSettings.EnableUserStatuses {
|
||||||
return []*model.Status{}, nil
|
return []*model.Status{}, nil
|
||||||
}
|
}
|
||||||
@@ -103,15 +103,15 @@ func (a *App) GetUserStatusesByIds(userIds []string) ([]*model.Status, *model.Ap
|
|||||||
metrics := a.Metrics()
|
metrics := a.Metrics()
|
||||||
|
|
||||||
missingUserIds := []string{}
|
missingUserIds := []string{}
|
||||||
for _, userId := range userIds {
|
for _, userID := range userIDs {
|
||||||
var status *model.Status
|
var status *model.Status
|
||||||
if err := a.Srv().statusCache.Get(userId, &status); err == nil {
|
if err := a.Srv().statusCache.Get(userID, &status); err == nil {
|
||||||
statusMap = append(statusMap, status)
|
statusMap = append(statusMap, status)
|
||||||
if metrics != nil {
|
if metrics != nil {
|
||||||
metrics.IncrementMemCacheHitCounter("Status")
|
metrics.IncrementMemCacheHitCounter("Status")
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
missingUserIds = append(missingUserIds, userId)
|
missingUserIds = append(missingUserIds, userID)
|
||||||
if metrics != nil {
|
if metrics != nil {
|
||||||
metrics.IncrementMemCacheMissCounter("Status")
|
metrics.IncrementMemCacheMissCounter("Status")
|
||||||
}
|
}
|
||||||
@@ -145,8 +145,8 @@ func (a *App) GetUserStatusesByIds(userIds []string) ([]*model.Status, *model.Ap
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for _, userId := range missingUserIds {
|
for _, userID := range missingUserIds {
|
||||||
statusMap = append(statusMap, &model.Status{UserId: userId, Status: "offline"})
|
statusMap = append(statusMap, &model.Status{UserId: userID, Status: "offline"})
|
||||||
}
|
}
|
||||||
|
|
||||||
return statusMap, nil
|
return statusMap, nil
|
||||||
@@ -155,20 +155,20 @@ func (a *App) GetUserStatusesByIds(userIds []string) ([]*model.Status, *model.Ap
|
|||||||
// SetStatusLastActivityAt sets the last activity at for a user on the local app server and updates
|
// SetStatusLastActivityAt sets the last activity at for a user on the local app server and updates
|
||||||
// status to away if needed. Used by the WS to set status to away if an 'online' device disconnects
|
// status to away if needed. Used by the WS to set status to away if an 'online' device disconnects
|
||||||
// while an 'away' device is still connected
|
// while an 'away' device is still connected
|
||||||
func (a *App) SetStatusLastActivityAt(userId string, activityAt int64) {
|
func (a *App) SetStatusLastActivityAt(userID string, activityAt int64) {
|
||||||
var status *model.Status
|
var status *model.Status
|
||||||
var err *model.AppError
|
var err *model.AppError
|
||||||
if status, err = a.GetStatus(userId); err != nil {
|
if status, err = a.GetStatus(userID); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
status.LastActivityAt = activityAt
|
status.LastActivityAt = activityAt
|
||||||
|
|
||||||
a.AddStatusCacheSkipClusterSend(status)
|
a.AddStatusCacheSkipClusterSend(status)
|
||||||
a.SetStatusAwayIfNeeded(userId, false)
|
a.SetStatusAwayIfNeeded(userID, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) SetStatusOnline(userId string, manual bool) {
|
func (a *App) SetStatusOnline(userID string, manual bool) {
|
||||||
if !*a.Config().ServiceSettings.EnableUserStatuses {
|
if !*a.Config().ServiceSettings.EnableUserStatuses {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -181,8 +181,8 @@ func (a *App) SetStatusOnline(userId string, manual bool) {
|
|||||||
var status *model.Status
|
var status *model.Status
|
||||||
var err *model.AppError
|
var err *model.AppError
|
||||||
|
|
||||||
if status, err = a.GetStatus(userId); err != nil {
|
if status, err = a.GetStatus(userID); err != nil {
|
||||||
status = &model.Status{UserId: userId, Status: model.STATUS_ONLINE, Manual: false, LastActivityAt: model.GetMillis(), ActiveChannel: ""}
|
status = &model.Status{UserId: userID, Status: model.STATUS_ONLINE, Manual: false, LastActivityAt: model.GetMillis(), ActiveChannel: ""}
|
||||||
broadcast = true
|
broadcast = true
|
||||||
} else {
|
} else {
|
||||||
if status.Manual && !manual {
|
if status.Manual && !manual {
|
||||||
@@ -209,11 +209,11 @@ func (a *App) SetStatusOnline(userId string, manual bool) {
|
|||||||
if status.Status != oldStatus || status.Manual != oldManual || status.LastActivityAt-oldTime > model.STATUS_MIN_UPDATE_TIME {
|
if status.Status != oldStatus || status.Manual != oldManual || status.LastActivityAt-oldTime > model.STATUS_MIN_UPDATE_TIME {
|
||||||
if broadcast {
|
if broadcast {
|
||||||
if err := a.Srv().Store.Status().SaveOrUpdate(status); err != nil {
|
if err := a.Srv().Store.Status().SaveOrUpdate(status); err != nil {
|
||||||
mlog.Warn("Failed to save status", mlog.String("user_id", userId), mlog.Err(err), mlog.String("user_id", userId))
|
mlog.Warn("Failed to save status", mlog.String("user_id", userID), mlog.Err(err), mlog.String("user_id", userID))
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if err := a.Srv().Store.Status().UpdateLastActivityAt(status.UserId, status.LastActivityAt); err != nil {
|
if err := a.Srv().Store.Status().UpdateLastActivityAt(status.UserId, status.LastActivityAt); err != nil {
|
||||||
mlog.Error("Failed to save status", mlog.String("user_id", userId), mlog.Err(err), mlog.String("user_id", userId))
|
mlog.Error("Failed to save status", mlog.String("user_id", userID), mlog.Err(err), mlog.String("user_id", userID))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -234,30 +234,30 @@ func (a *App) BroadcastStatus(status *model.Status) {
|
|||||||
a.Publish(event)
|
a.Publish(event)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) SetStatusOffline(userId string, manual bool) {
|
func (a *App) SetStatusOffline(userID string, manual bool) {
|
||||||
if !*a.Config().ServiceSettings.EnableUserStatuses {
|
if !*a.Config().ServiceSettings.EnableUserStatuses {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
status, err := a.GetStatus(userId)
|
status, err := a.GetStatus(userID)
|
||||||
if err == nil && status.Manual && !manual {
|
if err == nil && status.Manual && !manual {
|
||||||
return // manually set status always overrides non-manual one
|
return // manually set status always overrides non-manual one
|
||||||
}
|
}
|
||||||
|
|
||||||
status = &model.Status{UserId: userId, Status: model.STATUS_OFFLINE, Manual: manual, LastActivityAt: model.GetMillis(), ActiveChannel: ""}
|
status = &model.Status{UserId: userID, Status: model.STATUS_OFFLINE, Manual: manual, LastActivityAt: model.GetMillis(), ActiveChannel: ""}
|
||||||
|
|
||||||
a.SaveAndBroadcastStatus(status)
|
a.SaveAndBroadcastStatus(status)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) SetStatusAwayIfNeeded(userId string, manual bool) {
|
func (a *App) SetStatusAwayIfNeeded(userID string, manual bool) {
|
||||||
if !*a.Config().ServiceSettings.EnableUserStatuses {
|
if !*a.Config().ServiceSettings.EnableUserStatuses {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
status, err := a.GetStatus(userId)
|
status, err := a.GetStatus(userID)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
status = &model.Status{UserId: userId, Status: model.STATUS_OFFLINE, Manual: manual, LastActivityAt: 0, ActiveChannel: ""}
|
status = &model.Status{UserId: userID, Status: model.STATUS_OFFLINE, Manual: manual, LastActivityAt: 0, ActiveChannel: ""}
|
||||||
}
|
}
|
||||||
|
|
||||||
if !manual && status.Manual {
|
if !manual && status.Manual {
|
||||||
@@ -281,15 +281,15 @@ func (a *App) SetStatusAwayIfNeeded(userId string, manual bool) {
|
|||||||
a.SaveAndBroadcastStatus(status)
|
a.SaveAndBroadcastStatus(status)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) SetStatusDoNotDisturb(userId string) {
|
func (a *App) SetStatusDoNotDisturb(userID string) {
|
||||||
if !*a.Config().ServiceSettings.EnableUserStatuses {
|
if !*a.Config().ServiceSettings.EnableUserStatuses {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
status, err := a.GetStatus(userId)
|
status, err := a.GetStatus(userID)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
status = &model.Status{UserId: userId, Status: model.STATUS_OFFLINE, Manual: false, LastActivityAt: 0, ActiveChannel: ""}
|
status = &model.Status{UserId: userID, Status: model.STATUS_OFFLINE, Manual: false, LastActivityAt: 0, ActiveChannel: ""}
|
||||||
}
|
}
|
||||||
|
|
||||||
status.Status = model.STATUS_DND
|
status.Status = model.STATUS_DND
|
||||||
@@ -308,15 +308,15 @@ func (a *App) SaveAndBroadcastStatus(status *model.Status) {
|
|||||||
a.BroadcastStatus(status)
|
a.BroadcastStatus(status)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) SetStatusOutOfOffice(userId string) {
|
func (a *App) SetStatusOutOfOffice(userID string) {
|
||||||
if !*a.Config().ServiceSettings.EnableUserStatuses {
|
if !*a.Config().ServiceSettings.EnableUserStatuses {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
status, err := a.GetStatus(userId)
|
status, err := a.GetStatus(userID)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
status = &model.Status{UserId: userId, Status: model.STATUS_OUT_OF_OFFICE, Manual: false, LastActivityAt: 0, ActiveChannel: ""}
|
status = &model.Status{UserId: userID, Status: model.STATUS_OUT_OF_OFFICE, Manual: false, LastActivityAt: 0, ActiveChannel: ""}
|
||||||
}
|
}
|
||||||
|
|
||||||
status.Status = model.STATUS_OUT_OF_OFFICE
|
status.Status = model.STATUS_OUT_OF_OFFICE
|
||||||
@@ -325,9 +325,9 @@ func (a *App) SetStatusOutOfOffice(userId string) {
|
|||||||
a.SaveAndBroadcastStatus(status)
|
a.SaveAndBroadcastStatus(status)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetStatusFromCache(userId string) *model.Status {
|
func (a *App) GetStatusFromCache(userID string) *model.Status {
|
||||||
var status *model.Status
|
var status *model.Status
|
||||||
if err := a.Srv().statusCache.Get(userId, &status); err == nil {
|
if err := a.Srv().statusCache.Get(userID, &status); err == nil {
|
||||||
statusCopy := &model.Status{}
|
statusCopy := &model.Status{}
|
||||||
*statusCopy = *status
|
*statusCopy = *status
|
||||||
return statusCopy
|
return statusCopy
|
||||||
@@ -336,17 +336,17 @@ func (a *App) GetStatusFromCache(userId string) *model.Status {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetStatus(userId string) (*model.Status, *model.AppError) {
|
func (a *App) GetStatus(userID string) (*model.Status, *model.AppError) {
|
||||||
if !*a.Config().ServiceSettings.EnableUserStatuses {
|
if !*a.Config().ServiceSettings.EnableUserStatuses {
|
||||||
return &model.Status{}, nil
|
return &model.Status{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
status := a.GetStatusFromCache(userId)
|
status := a.GetStatusFromCache(userID)
|
||||||
if status != nil {
|
if status != nil {
|
||||||
return status, nil
|
return status, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
status, err := a.Srv().Store.Status().Get(userId)
|
status, err := a.Srv().Store.Status().Get(userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
var nfErr *store.ErrNotFound
|
var nfErr *store.ErrNotFound
|
||||||
switch {
|
switch {
|
||||||
|
|||||||
222
app/team.go
222
app/team.go
@@ -48,8 +48,8 @@ func (a *App) CreateTeam(team *model.Team) (*model.Team, *model.AppError) {
|
|||||||
return rteam, nil
|
return rteam, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) CreateTeamWithUser(team *model.Team, userId string) (*model.Team, *model.AppError) {
|
func (a *App) CreateTeamWithUser(team *model.Team, userID string) (*model.Team, *model.AppError) {
|
||||||
user, err := a.GetUser(userId)
|
user, err := a.GetUser(userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -237,8 +237,8 @@ func (a *App) UpdateTeamScheme(team *model.Team) (*model.Team, *model.AppError)
|
|||||||
return oldTeam, nil
|
return oldTeam, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) UpdateTeamPrivacy(teamId string, teamType string, allowOpenInvite bool) *model.AppError {
|
func (a *App) UpdateTeamPrivacy(teamID string, teamType string, allowOpenInvite bool) *model.AppError {
|
||||||
oldTeam, err := a.GetTeam(teamId)
|
oldTeam, err := a.GetTeam(teamID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -270,8 +270,8 @@ func (a *App) UpdateTeamPrivacy(teamId string, teamType string, allowOpenInvite
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) PatchTeam(teamId string, patch *model.TeamPatch) (*model.Team, *model.AppError) {
|
func (a *App) PatchTeam(teamID string, patch *model.TeamPatch) (*model.Team, *model.AppError) {
|
||||||
team, err := a.GetTeam(teamId)
|
team, err := a.GetTeam(teamID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -295,8 +295,8 @@ func (a *App) PatchTeam(teamId string, patch *model.TeamPatch) (*model.Team, *mo
|
|||||||
return team, nil
|
return team, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) RegenerateTeamInviteId(teamId string) (*model.Team, *model.AppError) {
|
func (a *App) RegenerateTeamInviteId(teamID string) (*model.Team, *model.AppError) {
|
||||||
team, err := a.GetTeam(teamId)
|
team, err := a.GetTeam(teamID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -327,18 +327,18 @@ func (a *App) sendTeamEvent(team *model.Team, event string) {
|
|||||||
*sanitizedTeam = *team
|
*sanitizedTeam = *team
|
||||||
sanitizedTeam.Sanitize()
|
sanitizedTeam.Sanitize()
|
||||||
|
|
||||||
teamId := "" // no filtering by teamId by default
|
teamID := "" // no filtering by teamID by default
|
||||||
if event == model.WEBSOCKET_EVENT_UPDATE_TEAM {
|
if event == model.WEBSOCKET_EVENT_UPDATE_TEAM {
|
||||||
// in case of update_team event - we send the message only to members of that team
|
// in case of update_team event - we send the message only to members of that team
|
||||||
teamId = team.Id
|
teamID = team.Id
|
||||||
}
|
}
|
||||||
message := model.NewWebSocketEvent(event, teamId, "", "", nil)
|
message := model.NewWebSocketEvent(event, teamID, "", "", nil)
|
||||||
message.Add("team", sanitizedTeam.ToJson())
|
message.Add("team", sanitizedTeam.ToJson())
|
||||||
a.Publish(message)
|
a.Publish(message)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetSchemeRolesForTeam(teamId string) (string, string, string, *model.AppError) {
|
func (a *App) GetSchemeRolesForTeam(teamID string) (string, string, string, *model.AppError) {
|
||||||
team, err := a.GetTeam(teamId)
|
team, err := a.GetTeam(teamID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", "", "", err
|
return "", "", "", err
|
||||||
}
|
}
|
||||||
@@ -354,8 +354,8 @@ func (a *App) GetSchemeRolesForTeam(teamId string) (string, string, string, *mod
|
|||||||
return model.TEAM_GUEST_ROLE_ID, model.TEAM_USER_ROLE_ID, model.TEAM_ADMIN_ROLE_ID, nil
|
return model.TEAM_GUEST_ROLE_ID, model.TEAM_USER_ROLE_ID, model.TEAM_ADMIN_ROLE_ID, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) UpdateTeamMemberRoles(teamId string, userId string, newRoles string) (*model.TeamMember, *model.AppError) {
|
func (a *App) UpdateTeamMemberRoles(teamID string, userID string, newRoles string) (*model.TeamMember, *model.AppError) {
|
||||||
member, nErr := a.Srv().Store.Team().GetMember(teamId, userId)
|
member, nErr := a.Srv().Store.Team().GetMember(teamID, userID)
|
||||||
if nErr != nil {
|
if nErr != nil {
|
||||||
var nfErr *store.ErrNotFound
|
var nfErr *store.ErrNotFound
|
||||||
switch {
|
switch {
|
||||||
@@ -367,10 +367,10 @@ func (a *App) UpdateTeamMemberRoles(teamId string, userId string, newRoles strin
|
|||||||
}
|
}
|
||||||
|
|
||||||
if member == nil {
|
if member == nil {
|
||||||
return nil, model.NewAppError("UpdateTeamMemberRoles", "api.team.update_member_roles.not_a_member", nil, "userId="+userId+" teamId="+teamId, http.StatusBadRequest)
|
return nil, model.NewAppError("UpdateTeamMemberRoles", "api.team.update_member_roles.not_a_member", nil, "userId="+userID+" teamId="+teamID, http.StatusBadRequest)
|
||||||
}
|
}
|
||||||
|
|
||||||
schemeGuestRole, schemeUserRole, schemeAdminRole, err := a.GetSchemeRolesForTeam(teamId)
|
schemeGuestRole, schemeUserRole, schemeAdminRole, err := a.GetSchemeRolesForTeam(teamID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -429,15 +429,15 @@ func (a *App) UpdateTeamMemberRoles(teamId string, userId string, newRoles strin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
a.ClearSessionCacheForUser(userId)
|
a.ClearSessionCacheForUser(userID)
|
||||||
|
|
||||||
a.sendUpdatedMemberRoleEvent(userId, member)
|
a.sendUpdatedMemberRoleEvent(userID, member)
|
||||||
|
|
||||||
return member, nil
|
return member, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) UpdateTeamMemberSchemeRoles(teamId string, userId string, isSchemeGuest bool, isSchemeUser bool, isSchemeAdmin bool) (*model.TeamMember, *model.AppError) {
|
func (a *App) UpdateTeamMemberSchemeRoles(teamID string, userID string, isSchemeGuest bool, isSchemeUser bool, isSchemeAdmin bool) (*model.TeamMember, *model.AppError) {
|
||||||
member, err := a.GetTeamMember(teamId, userId)
|
member, err := a.GetTeamMember(teamID, userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -466,30 +466,30 @@ func (a *App) UpdateTeamMemberSchemeRoles(teamId string, userId string, isScheme
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
a.ClearSessionCacheForUser(userId)
|
a.ClearSessionCacheForUser(userID)
|
||||||
|
|
||||||
a.sendUpdatedMemberRoleEvent(userId, member)
|
a.sendUpdatedMemberRoleEvent(userID, member)
|
||||||
|
|
||||||
return member, nil
|
return member, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) sendUpdatedMemberRoleEvent(userId string, member *model.TeamMember) {
|
func (a *App) sendUpdatedMemberRoleEvent(userID string, member *model.TeamMember) {
|
||||||
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_MEMBERROLE_UPDATED, "", "", userId, nil)
|
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_MEMBERROLE_UPDATED, "", "", userID, nil)
|
||||||
message.Add("member", member.ToJson())
|
message.Add("member", member.ToJson())
|
||||||
a.Publish(message)
|
a.Publish(message)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) AddUserToTeam(teamId string, userId string, userRequestorId string) (*model.Team, *model.AppError) {
|
func (a *App) AddUserToTeam(teamID string, userID string, userRequestorId string) (*model.Team, *model.AppError) {
|
||||||
tchan := make(chan store.StoreResult, 1)
|
tchan := make(chan store.StoreResult, 1)
|
||||||
go func() {
|
go func() {
|
||||||
team, err := a.Srv().Store.Team().Get(teamId)
|
team, err := a.Srv().Store.Team().Get(teamID)
|
||||||
tchan <- store.StoreResult{Data: team, NErr: err}
|
tchan <- store.StoreResult{Data: team, NErr: err}
|
||||||
close(tchan)
|
close(tchan)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
uchan := make(chan store.StoreResult, 1)
|
uchan := make(chan store.StoreResult, 1)
|
||||||
go func() {
|
go func() {
|
||||||
user, err := a.Srv().Store.User().Get(userId)
|
user, err := a.Srv().Store.User().Get(userID)
|
||||||
uchan <- store.StoreResult{Data: user, NErr: err}
|
uchan <- store.StoreResult{Data: user, NErr: err}
|
||||||
close(uchan)
|
close(uchan)
|
||||||
}()
|
}()
|
||||||
@@ -525,8 +525,8 @@ func (a *App) AddUserToTeam(teamId string, userId string, userRequestorId string
|
|||||||
return team, nil
|
return team, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) AddUserToTeamByTeamId(teamId string, user *model.User) *model.AppError {
|
func (a *App) AddUserToTeamByTeamId(teamID string, user *model.User) *model.AppError {
|
||||||
team, err := a.Srv().Store.Team().Get(teamId)
|
team, err := a.Srv().Store.Team().Get(teamID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
var nfErr *store.ErrNotFound
|
var nfErr *store.ErrNotFound
|
||||||
switch {
|
switch {
|
||||||
@@ -540,8 +540,8 @@ func (a *App) AddUserToTeamByTeamId(teamId string, user *model.User) *model.AppE
|
|||||||
return a.JoinUserToTeam(team, user, "")
|
return a.JoinUserToTeam(team, user, "")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) AddUserToTeamByToken(userId string, tokenId string) (*model.Team, *model.AppError) {
|
func (a *App) AddUserToTeamByToken(userID string, tokenID string) (*model.Team, *model.AppError) {
|
||||||
token, err := a.Srv().Store.Token().GetByToken(tokenId)
|
token, err := a.Srv().Store.Token().GetByToken(tokenID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("AddUserToTeamByToken", "api.user.create_user.signup_link_invalid.app_error", nil, err.Error(), http.StatusBadRequest)
|
return nil, model.NewAppError("AddUserToTeamByToken", "api.user.create_user.signup_link_invalid.app_error", nil, err.Error(), http.StatusBadRequest)
|
||||||
}
|
}
|
||||||
@@ -566,7 +566,7 @@ func (a *App) AddUserToTeamByToken(userId string, tokenId string) (*model.Team,
|
|||||||
|
|
||||||
uchan := make(chan store.StoreResult, 1)
|
uchan := make(chan store.StoreResult, 1)
|
||||||
go func() {
|
go func() {
|
||||||
user, err := a.Srv().Store.User().Get(userId)
|
user, err := a.Srv().Store.User().Get(userID)
|
||||||
uchan <- store.StoreResult{Data: user, NErr: err}
|
uchan <- store.StoreResult{Data: user, NErr: err}
|
||||||
close(uchan)
|
close(uchan)
|
||||||
}()
|
}()
|
||||||
@@ -631,7 +631,7 @@ func (a *App) AddUserToTeamByToken(userId string, tokenId string) (*model.Team,
|
|||||||
return team, nil
|
return team, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) AddUserToTeamByInviteId(inviteId string, userId string) (*model.Team, *model.AppError) {
|
func (a *App) AddUserToTeamByInviteId(inviteId string, userID string) (*model.Team, *model.AppError) {
|
||||||
tchan := make(chan store.StoreResult, 1)
|
tchan := make(chan store.StoreResult, 1)
|
||||||
go func() {
|
go func() {
|
||||||
team, err := a.Srv().Store.Team().GetByInviteId(inviteId)
|
team, err := a.Srv().Store.Team().GetByInviteId(inviteId)
|
||||||
@@ -641,7 +641,7 @@ func (a *App) AddUserToTeamByInviteId(inviteId string, userId string) (*model.Te
|
|||||||
|
|
||||||
uchan := make(chan store.StoreResult, 1)
|
uchan := make(chan store.StoreResult, 1)
|
||||||
go func() {
|
go func() {
|
||||||
user, err := a.Srv().Store.User().Get(userId)
|
user, err := a.Srv().Store.User().Get(userID)
|
||||||
uchan <- store.StoreResult{Data: user, NErr: err}
|
uchan <- store.StoreResult{Data: user, NErr: err}
|
||||||
close(uchan)
|
close(uchan)
|
||||||
}()
|
}()
|
||||||
@@ -818,8 +818,8 @@ func (a *App) JoinUserToTeam(team *model.Team, user *model.User, userRequestorId
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetTeam(teamId string) (*model.Team, *model.AppError) {
|
func (a *App) GetTeam(teamID string) (*model.Team, *model.AppError) {
|
||||||
team, err := a.Srv().Store.Team().Get(teamId)
|
team, err := a.Srv().Store.Team().Get(teamID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
var nfErr *store.ErrNotFound
|
var nfErr *store.ErrNotFound
|
||||||
switch {
|
switch {
|
||||||
@@ -988,8 +988,8 @@ func (a *App) SearchPrivateTeams(term string) ([]*model.Team, *model.AppError) {
|
|||||||
return teams, nil
|
return teams, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetTeamsForUser(userId string) ([]*model.Team, *model.AppError) {
|
func (a *App) GetTeamsForUser(userID string) ([]*model.Team, *model.AppError) {
|
||||||
teams, err := a.Srv().Store.Team().GetTeamsByUserId(userId)
|
teams, err := a.Srv().Store.Team().GetTeamsByUserId(userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("GetTeamsForUser", "app.team.get_all.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("GetTeamsForUser", "app.team.get_all.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -997,8 +997,8 @@ func (a *App) GetTeamsForUser(userId string) ([]*model.Team, *model.AppError) {
|
|||||||
return teams, nil
|
return teams, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetTeamMember(teamId, userId string) (*model.TeamMember, *model.AppError) {
|
func (a *App) GetTeamMember(teamID, userID string) (*model.TeamMember, *model.AppError) {
|
||||||
teamMember, err := a.Srv().Store.Team().GetMember(teamId, userId)
|
teamMember, err := a.Srv().Store.Team().GetMember(teamID, userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
var nfErr *store.ErrNotFound
|
var nfErr *store.ErrNotFound
|
||||||
switch {
|
switch {
|
||||||
@@ -1012,8 +1012,8 @@ func (a *App) GetTeamMember(teamId, userId string) (*model.TeamMember, *model.Ap
|
|||||||
return teamMember, nil
|
return teamMember, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetTeamMembersForUser(userId string) ([]*model.TeamMember, *model.AppError) {
|
func (a *App) GetTeamMembersForUser(userID string) ([]*model.TeamMember, *model.AppError) {
|
||||||
teamMembers, err := a.Srv().Store.Team().GetTeamsForUser(context.Background(), userId)
|
teamMembers, err := a.Srv().Store.Team().GetTeamsForUser(context.Background(), userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("GetTeamMembersForUser", "app.team.get_members.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("GetTeamMembersForUser", "app.team.get_members.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -1021,8 +1021,8 @@ func (a *App) GetTeamMembersForUser(userId string) ([]*model.TeamMember, *model.
|
|||||||
return teamMembers, nil
|
return teamMembers, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetTeamMembersForUserWithPagination(userId string, page, perPage int) ([]*model.TeamMember, *model.AppError) {
|
func (a *App) GetTeamMembersForUserWithPagination(userID string, page, perPage int) ([]*model.TeamMember, *model.AppError) {
|
||||||
teamMembers, err := a.Srv().Store.Team().GetTeamsForUserWithPagination(userId, page, perPage)
|
teamMembers, err := a.Srv().Store.Team().GetTeamsForUserWithPagination(userID, page, perPage)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("GetTeamMembersForUserWithPagination", "app.team.get_members.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("GetTeamMembersForUserWithPagination", "app.team.get_members.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -1030,8 +1030,8 @@ func (a *App) GetTeamMembersForUserWithPagination(userId string, page, perPage i
|
|||||||
return teamMembers, nil
|
return teamMembers, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetTeamMembers(teamId string, offset int, limit int, teamMembersGetOptions *model.TeamMembersGetOptions) ([]*model.TeamMember, *model.AppError) {
|
func (a *App) GetTeamMembers(teamID string, offset int, limit int, teamMembersGetOptions *model.TeamMembersGetOptions) ([]*model.TeamMember, *model.AppError) {
|
||||||
teamMembers, err := a.Srv().Store.Team().GetMembers(teamId, offset, limit, teamMembersGetOptions)
|
teamMembers, err := a.Srv().Store.Team().GetMembers(teamID, offset, limit, teamMembersGetOptions)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("GetTeamMembers", "app.team.get_members.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("GetTeamMembers", "app.team.get_members.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -1039,8 +1039,8 @@ func (a *App) GetTeamMembers(teamId string, offset int, limit int, teamMembersGe
|
|||||||
return teamMembers, nil
|
return teamMembers, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetTeamMembersByIds(teamId string, userIds []string, restrictions *model.ViewUsersRestrictions) ([]*model.TeamMember, *model.AppError) {
|
func (a *App) GetTeamMembersByIds(teamID string, userIDs []string, restrictions *model.ViewUsersRestrictions) ([]*model.TeamMember, *model.AppError) {
|
||||||
teamMembers, err := a.Srv().Store.Team().GetMembersByIds(teamId, userIds, restrictions)
|
teamMembers, err := a.Srv().Store.Team().GetMembersByIds(teamID, userIDs, restrictions)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("GetTeamMembersByIds", "app.team.get_members_by_ids.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("GetTeamMembersByIds", "app.team.get_members_by_ids.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -1048,32 +1048,32 @@ func (a *App) GetTeamMembersByIds(teamId string, userIds []string, restrictions
|
|||||||
return teamMembers, nil
|
return teamMembers, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) AddTeamMember(teamId, userId string) (*model.TeamMember, *model.AppError) {
|
func (a *App) AddTeamMember(teamID, userID string) (*model.TeamMember, *model.AppError) {
|
||||||
if _, err := a.AddUserToTeam(teamId, userId, ""); err != nil {
|
if _, err := a.AddUserToTeam(teamID, userID, ""); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
teamMember, err := a.GetTeamMember(teamId, userId)
|
teamMember, err := a.GetTeamMember(teamID, userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_ADDED_TO_TEAM, "", "", userId, nil)
|
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_ADDED_TO_TEAM, "", "", userID, nil)
|
||||||
message.Add("team_id", teamId)
|
message.Add("team_id", teamID)
|
||||||
message.Add("user_id", userId)
|
message.Add("user_id", userID)
|
||||||
a.Publish(message)
|
a.Publish(message)
|
||||||
|
|
||||||
return teamMember, nil
|
return teamMember, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) AddTeamMembers(teamId string, userIds []string, userRequestorId string, graceful bool) ([]*model.TeamMemberWithError, *model.AppError) {
|
func (a *App) AddTeamMembers(teamID string, userIDs []string, userRequestorId string, graceful bool) ([]*model.TeamMemberWithError, *model.AppError) {
|
||||||
var membersWithErrors []*model.TeamMemberWithError
|
var membersWithErrors []*model.TeamMemberWithError
|
||||||
|
|
||||||
for _, userId := range userIds {
|
for _, userID := range userIDs {
|
||||||
if _, err := a.AddUserToTeam(teamId, userId, userRequestorId); err != nil {
|
if _, err := a.AddUserToTeam(teamID, userID, userRequestorId); err != nil {
|
||||||
if graceful {
|
if graceful {
|
||||||
membersWithErrors = append(membersWithErrors, &model.TeamMemberWithError{
|
membersWithErrors = append(membersWithErrors, &model.TeamMemberWithError{
|
||||||
UserId: userId,
|
UserId: userID,
|
||||||
Error: err,
|
Error: err,
|
||||||
})
|
})
|
||||||
continue
|
continue
|
||||||
@@ -1081,31 +1081,31 @@ func (a *App) AddTeamMembers(teamId string, userIds []string, userRequestorId st
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
teamMember, err := a.GetTeamMember(teamId, userId)
|
teamMember, err := a.GetTeamMember(teamID, userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
membersWithErrors = append(membersWithErrors, &model.TeamMemberWithError{
|
membersWithErrors = append(membersWithErrors, &model.TeamMemberWithError{
|
||||||
UserId: userId,
|
UserId: userID,
|
||||||
Member: teamMember,
|
Member: teamMember,
|
||||||
})
|
})
|
||||||
|
|
||||||
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_ADDED_TO_TEAM, "", "", userId, nil)
|
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_ADDED_TO_TEAM, "", "", userID, nil)
|
||||||
message.Add("team_id", teamId)
|
message.Add("team_id", teamID)
|
||||||
message.Add("user_id", userId)
|
message.Add("user_id", userID)
|
||||||
a.Publish(message)
|
a.Publish(message)
|
||||||
}
|
}
|
||||||
|
|
||||||
return membersWithErrors, nil
|
return membersWithErrors, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) AddTeamMemberByToken(userId, tokenId string) (*model.TeamMember, *model.AppError) {
|
func (a *App) AddTeamMemberByToken(userID, tokenID string) (*model.TeamMember, *model.AppError) {
|
||||||
team, err := a.AddUserToTeamByToken(userId, tokenId)
|
team, err := a.AddUserToTeamByToken(userID, tokenID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
teamMember, err := a.GetTeamMember(team.Id, userId)
|
teamMember, err := a.GetTeamMember(team.Id, userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -1113,8 +1113,8 @@ func (a *App) AddTeamMemberByToken(userId, tokenId string) (*model.TeamMember, *
|
|||||||
return teamMember, nil
|
return teamMember, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) AddTeamMemberByInviteId(inviteId, userId string) (*model.TeamMember, *model.AppError) {
|
func (a *App) AddTeamMemberByInviteId(inviteId, userID string) (*model.TeamMember, *model.AppError) {
|
||||||
team, err := a.AddUserToTeamByInviteId(inviteId, userId)
|
team, err := a.AddUserToTeamByInviteId(inviteId, userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -1123,15 +1123,15 @@ func (a *App) AddTeamMemberByInviteId(inviteId, userId string) (*model.TeamMembe
|
|||||||
return nil, model.NewAppError("AddTeamMemberByInviteId", "app.team.invite_id.group_constrained.error", nil, "", http.StatusForbidden)
|
return nil, model.NewAppError("AddTeamMemberByInviteId", "app.team.invite_id.group_constrained.error", nil, "", http.StatusForbidden)
|
||||||
}
|
}
|
||||||
|
|
||||||
teamMember, err := a.GetTeamMember(team.Id, userId)
|
teamMember, err := a.GetTeamMember(team.Id, userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return teamMember, nil
|
return teamMember, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetTeamUnread(teamId, userId string) (*model.TeamUnread, *model.AppError) {
|
func (a *App) GetTeamUnread(teamID, userID string) (*model.TeamUnread, *model.AppError) {
|
||||||
channelUnreads, err := a.Srv().Store.Team().GetChannelUnreadsForTeam(teamId, userId)
|
channelUnreads, err := a.Srv().Store.Team().GetChannelUnreadsForTeam(teamID, userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("GetTeamUnread", "app.team.get_unread.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("GetTeamUnread", "app.team.get_unread.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -1139,7 +1139,7 @@ func (a *App) GetTeamUnread(teamId, userId string) (*model.TeamUnread, *model.Ap
|
|||||||
var teamUnread = &model.TeamUnread{
|
var teamUnread = &model.TeamUnread{
|
||||||
MsgCount: 0,
|
MsgCount: 0,
|
||||||
MentionCount: 0,
|
MentionCount: 0,
|
||||||
TeamId: teamId,
|
TeamId: teamID,
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, cu := range channelUnreads {
|
for _, cu := range channelUnreads {
|
||||||
@@ -1153,17 +1153,17 @@ func (a *App) GetTeamUnread(teamId, userId string) (*model.TeamUnread, *model.Ap
|
|||||||
return teamUnread, nil
|
return teamUnread, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) RemoveUserFromTeam(teamId string, userId string, requestorId string) *model.AppError {
|
func (a *App) RemoveUserFromTeam(teamID string, userID string, requestorId string) *model.AppError {
|
||||||
tchan := make(chan store.StoreResult, 1)
|
tchan := make(chan store.StoreResult, 1)
|
||||||
go func() {
|
go func() {
|
||||||
team, err := a.Srv().Store.Team().Get(teamId)
|
team, err := a.Srv().Store.Team().Get(teamID)
|
||||||
tchan <- store.StoreResult{Data: team, NErr: err}
|
tchan <- store.StoreResult{Data: team, NErr: err}
|
||||||
close(tchan)
|
close(tchan)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
uchan := make(chan store.StoreResult, 1)
|
uchan := make(chan store.StoreResult, 1)
|
||||||
go func() {
|
go func() {
|
||||||
user, err := a.Srv().Store.User().Get(userId)
|
user, err := a.Srv().Store.User().Get(userID)
|
||||||
uchan <- store.StoreResult{Data: user, NErr: err}
|
uchan <- store.StoreResult{Data: user, NErr: err}
|
||||||
close(uchan)
|
close(uchan)
|
||||||
}()
|
}()
|
||||||
@@ -1358,10 +1358,10 @@ func (a *App) postRemoveFromTeamMessage(user *model.User, channel *model.Channel
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) prepareInviteNewUsersToTeam(teamId, senderId string) (*model.User, *model.Team, *model.AppError) {
|
func (a *App) prepareInviteNewUsersToTeam(teamID, senderId string) (*model.User, *model.Team, *model.AppError) {
|
||||||
tchan := make(chan store.StoreResult, 1)
|
tchan := make(chan store.StoreResult, 1)
|
||||||
go func() {
|
go func() {
|
||||||
team, err := a.Srv().Store.Team().Get(teamId)
|
team, err := a.Srv().Store.Team().Get(teamID)
|
||||||
tchan <- store.StoreResult{Data: team, NErr: err}
|
tchan <- store.StoreResult{Data: team, NErr: err}
|
||||||
close(tchan)
|
close(tchan)
|
||||||
}()
|
}()
|
||||||
@@ -1440,7 +1440,7 @@ func (a *App) GetErrorListForEmailsOverLimit(emailList []string, cloudUserLimit
|
|||||||
return emailList, invitesNotSent, nil
|
return emailList, invitesNotSent, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) InviteNewUsersToTeamGracefully(emailList []string, teamId, senderId string) ([]*model.EmailInviteWithError, *model.AppError) {
|
func (a *App) InviteNewUsersToTeamGracefully(emailList []string, teamID, senderId string) ([]*model.EmailInviteWithError, *model.AppError) {
|
||||||
if !*a.Config().ServiceSettings.EnableEmailInvitations {
|
if !*a.Config().ServiceSettings.EnableEmailInvitations {
|
||||||
return nil, model.NewAppError("InviteNewUsersToTeam", "api.team.invite_members.disabled.app_error", nil, "", http.StatusNotImplemented)
|
return nil, model.NewAppError("InviteNewUsersToTeam", "api.team.invite_members.disabled.app_error", nil, "", http.StatusNotImplemented)
|
||||||
}
|
}
|
||||||
@@ -1449,7 +1449,7 @@ func (a *App) InviteNewUsersToTeamGracefully(emailList []string, teamId, senderI
|
|||||||
err := model.NewAppError("InviteNewUsersToTeam", "api.team.invite_members.no_one.app_error", nil, "", http.StatusBadRequest)
|
err := model.NewAppError("InviteNewUsersToTeam", "api.team.invite_members.no_one.app_error", nil, "", http.StatusBadRequest)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
user, team, err := a.prepareInviteNewUsersToTeam(teamId, senderId)
|
user, team, err := a.prepareInviteNewUsersToTeam(teamID, senderId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -1480,14 +1480,14 @@ func (a *App) InviteNewUsersToTeamGracefully(emailList []string, teamId, senderI
|
|||||||
return inviteListWithErrors, nil
|
return inviteListWithErrors, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) prepareInviteGuestsToChannels(teamId string, guestsInvite *model.GuestsInvite, senderId string) (*model.User, *model.Team, []*model.Channel, *model.AppError) {
|
func (a *App) prepareInviteGuestsToChannels(teamID string, guestsInvite *model.GuestsInvite, senderId string) (*model.User, *model.Team, []*model.Channel, *model.AppError) {
|
||||||
if err := guestsInvite.IsValid(); err != nil {
|
if err := guestsInvite.IsValid(); err != nil {
|
||||||
return nil, nil, nil, err
|
return nil, nil, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
tchan := make(chan store.StoreResult, 1)
|
tchan := make(chan store.StoreResult, 1)
|
||||||
go func() {
|
go func() {
|
||||||
team, err := a.Srv().Store.Team().Get(teamId)
|
team, err := a.Srv().Store.Team().Get(teamID)
|
||||||
tchan <- store.StoreResult{Data: team, NErr: err}
|
tchan <- store.StoreResult{Data: team, NErr: err}
|
||||||
close(tchan)
|
close(tchan)
|
||||||
}()
|
}()
|
||||||
@@ -1535,19 +1535,19 @@ func (a *App) prepareInviteGuestsToChannels(teamId string, guestsInvite *model.G
|
|||||||
team := result.Data.(*model.Team)
|
team := result.Data.(*model.Team)
|
||||||
|
|
||||||
for _, channel := range channels {
|
for _, channel := range channels {
|
||||||
if channel.TeamId != teamId {
|
if channel.TeamId != teamID {
|
||||||
return nil, nil, nil, model.NewAppError("prepareInviteGuestsToChannels", "api.team.invite_guests.channel_in_invalid_team.app_error", nil, "", http.StatusBadRequest)
|
return nil, nil, nil, model.NewAppError("prepareInviteGuestsToChannels", "api.team.invite_guests.channel_in_invalid_team.app_error", nil, "", http.StatusBadRequest)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return user, team, channels, nil
|
return user, team, channels, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) InviteGuestsToChannelsGracefully(teamId string, guestsInvite *model.GuestsInvite, senderId string) ([]*model.EmailInviteWithError, *model.AppError) {
|
func (a *App) InviteGuestsToChannelsGracefully(teamID string, guestsInvite *model.GuestsInvite, senderId string) ([]*model.EmailInviteWithError, *model.AppError) {
|
||||||
if !*a.Config().ServiceSettings.EnableEmailInvitations {
|
if !*a.Config().ServiceSettings.EnableEmailInvitations {
|
||||||
return nil, model.NewAppError("InviteGuestsToChannelsGracefully", "api.team.invite_members.disabled.app_error", nil, "", http.StatusNotImplemented)
|
return nil, model.NewAppError("InviteGuestsToChannelsGracefully", "api.team.invite_members.disabled.app_error", nil, "", http.StatusNotImplemented)
|
||||||
}
|
}
|
||||||
|
|
||||||
user, team, channels, err := a.prepareInviteGuestsToChannels(teamId, guestsInvite, senderId)
|
user, team, channels, err := a.prepareInviteGuestsToChannels(teamID, guestsInvite, senderId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -1582,7 +1582,7 @@ func (a *App) InviteGuestsToChannelsGracefully(teamId string, guestsInvite *mode
|
|||||||
return inviteListWithErrors, nil
|
return inviteListWithErrors, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) InviteNewUsersToTeam(emailList []string, teamId, senderId string) *model.AppError {
|
func (a *App) InviteNewUsersToTeam(emailList []string, teamID, senderId string) *model.AppError {
|
||||||
if !*a.Config().ServiceSettings.EnableEmailInvitations {
|
if !*a.Config().ServiceSettings.EnableEmailInvitations {
|
||||||
return model.NewAppError("InviteNewUsersToTeam", "api.team.invite_members.disabled.app_error", nil, "", http.StatusNotImplemented)
|
return model.NewAppError("InviteNewUsersToTeam", "api.team.invite_members.disabled.app_error", nil, "", http.StatusNotImplemented)
|
||||||
}
|
}
|
||||||
@@ -1592,7 +1592,7 @@ func (a *App) InviteNewUsersToTeam(emailList []string, teamId, senderId string)
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
user, team, err := a.prepareInviteNewUsersToTeam(teamId, senderId)
|
user, team, err := a.prepareInviteNewUsersToTeam(teamID, senderId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -1620,12 +1620,12 @@ func (a *App) InviteNewUsersToTeam(emailList []string, teamId, senderId string)
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) InviteGuestsToChannels(teamId string, guestsInvite *model.GuestsInvite, senderId string) *model.AppError {
|
func (a *App) InviteGuestsToChannels(teamID string, guestsInvite *model.GuestsInvite, senderId string) *model.AppError {
|
||||||
if !*a.Config().ServiceSettings.EnableEmailInvitations {
|
if !*a.Config().ServiceSettings.EnableEmailInvitations {
|
||||||
return model.NewAppError("InviteNewUsersToTeam", "api.team.invite_members.disabled.app_error", nil, "", http.StatusNotImplemented)
|
return model.NewAppError("InviteNewUsersToTeam", "api.team.invite_members.disabled.app_error", nil, "", http.StatusNotImplemented)
|
||||||
}
|
}
|
||||||
|
|
||||||
user, team, channels, err := a.prepareInviteGuestsToChannels(teamId, guestsInvite, senderId)
|
user, team, channels, err := a.prepareInviteGuestsToChannels(teamID, guestsInvite, senderId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -1662,8 +1662,8 @@ func (a *App) FindTeamByName(name string) bool {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetTeamsUnreadForUser(excludeTeamId string, userId string) ([]*model.TeamUnread, *model.AppError) {
|
func (a *App) GetTeamsUnreadForUser(excludeTeamId string, userID string) ([]*model.TeamUnread, *model.AppError) {
|
||||||
data, err := a.Srv().Store.Team().GetChannelUnreadsForAllTeams(excludeTeamId, userId)
|
data, err := a.Srv().Store.Team().GetChannelUnreadsForAllTeams(excludeTeamId, userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("GetTeamsUnreadForUser", "app.team.get_unread.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("GetTeamsUnreadForUser", "app.team.get_unread.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -1701,8 +1701,8 @@ func (a *App) GetTeamsUnreadForUser(excludeTeamId string, userId string) ([]*mod
|
|||||||
return members, nil
|
return members, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) PermanentDeleteTeamId(teamId string) *model.AppError {
|
func (a *App) PermanentDeleteTeamId(teamID string) *model.AppError {
|
||||||
team, err := a.GetTeam(teamId)
|
team, err := a.GetTeam(teamID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -1753,8 +1753,8 @@ func (a *App) PermanentDeleteTeam(team *model.Team) *model.AppError {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) SoftDeleteTeam(teamId string) *model.AppError {
|
func (a *App) SoftDeleteTeam(teamID string) *model.AppError {
|
||||||
team, err := a.GetTeam(teamId)
|
team, err := a.GetTeam(teamID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -1779,8 +1779,8 @@ func (a *App) SoftDeleteTeam(teamId string) *model.AppError {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) RestoreTeam(teamId string) *model.AppError {
|
func (a *App) RestoreTeam(teamID string) *model.AppError {
|
||||||
team, err := a.GetTeam(teamId)
|
team, err := a.GetTeam(teamID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -1804,22 +1804,22 @@ func (a *App) RestoreTeam(teamId string) *model.AppError {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetTeamStats(teamId string, restrictions *model.ViewUsersRestrictions) (*model.TeamStats, *model.AppError) {
|
func (a *App) GetTeamStats(teamID string, restrictions *model.ViewUsersRestrictions) (*model.TeamStats, *model.AppError) {
|
||||||
tchan := make(chan store.StoreResult, 1)
|
tchan := make(chan store.StoreResult, 1)
|
||||||
go func() {
|
go func() {
|
||||||
totalMemberCount, err := a.Srv().Store.Team().GetTotalMemberCount(teamId, restrictions)
|
totalMemberCount, err := a.Srv().Store.Team().GetTotalMemberCount(teamID, restrictions)
|
||||||
tchan <- store.StoreResult{Data: totalMemberCount, NErr: err}
|
tchan <- store.StoreResult{Data: totalMemberCount, NErr: err}
|
||||||
close(tchan)
|
close(tchan)
|
||||||
}()
|
}()
|
||||||
achan := make(chan store.StoreResult, 1)
|
achan := make(chan store.StoreResult, 1)
|
||||||
go func() {
|
go func() {
|
||||||
memberCount, err := a.Srv().Store.Team().GetActiveMemberCount(teamId, restrictions)
|
memberCount, err := a.Srv().Store.Team().GetActiveMemberCount(teamID, restrictions)
|
||||||
achan <- store.StoreResult{Data: memberCount, NErr: err}
|
achan <- store.StoreResult{Data: memberCount, NErr: err}
|
||||||
close(achan)
|
close(achan)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
stats := &model.TeamStats{}
|
stats := &model.TeamStats{}
|
||||||
stats.TeamId = teamId
|
stats.TeamId = teamID
|
||||||
|
|
||||||
result := <-tchan
|
result := <-tchan
|
||||||
if result.NErr != nil {
|
if result.NErr != nil {
|
||||||
@@ -1837,11 +1837,11 @@ func (a *App) GetTeamStats(teamId string, restrictions *model.ViewUsersRestricti
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetTeamIdFromQuery(query url.Values) (string, *model.AppError) {
|
func (a *App) GetTeamIdFromQuery(query url.Values) (string, *model.AppError) {
|
||||||
tokenId := query.Get("t")
|
tokenID := query.Get("t")
|
||||||
inviteId := query.Get("id")
|
inviteId := query.Get("id")
|
||||||
|
|
||||||
if tokenId != "" {
|
if tokenID != "" {
|
||||||
token, err := a.Srv().Store.Token().GetByToken(tokenId)
|
token, err := a.Srv().Store.Token().GetByToken(tokenID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", model.NewAppError("GetTeamIdFromQuery", "api.oauth.singup_with_oauth.invalid_link.app_error", nil, "", http.StatusBadRequest)
|
return "", model.NewAppError("GetTeamIdFromQuery", "api.oauth.singup_with_oauth.invalid_link.app_error", nil, "", http.StatusBadRequest)
|
||||||
}
|
}
|
||||||
@@ -1910,17 +1910,17 @@ func (a *App) GetTeamIcon(team *model.Team) ([]byte, *model.AppError) {
|
|||||||
return data, nil
|
return data, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) SetTeamIcon(teamId string, imageData *multipart.FileHeader) *model.AppError {
|
func (a *App) SetTeamIcon(teamID string, imageData *multipart.FileHeader) *model.AppError {
|
||||||
file, err := imageData.Open()
|
file, err := imageData.Open()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return model.NewAppError("SetTeamIcon", "api.team.set_team_icon.open.app_error", nil, err.Error(), http.StatusBadRequest)
|
return model.NewAppError("SetTeamIcon", "api.team.set_team_icon.open.app_error", nil, err.Error(), http.StatusBadRequest)
|
||||||
}
|
}
|
||||||
defer file.Close()
|
defer file.Close()
|
||||||
return a.SetTeamIconFromMultiPartFile(teamId, file)
|
return a.SetTeamIconFromMultiPartFile(teamID, file)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) SetTeamIconFromMultiPartFile(teamId string, file multipart.File) *model.AppError {
|
func (a *App) SetTeamIconFromMultiPartFile(teamID string, file multipart.File) *model.AppError {
|
||||||
team, getTeamErr := a.GetTeam(teamId)
|
team, getTeamErr := a.GetTeam(teamID)
|
||||||
|
|
||||||
if getTeamErr != nil {
|
if getTeamErr != nil {
|
||||||
return model.NewAppError("SetTeamIcon", "api.team.set_team_icon.get_team.app_error", nil, getTeamErr.Error(), http.StatusBadRequest)
|
return model.NewAppError("SetTeamIcon", "api.team.set_team_icon.get_team.app_error", nil, getTeamErr.Error(), http.StatusBadRequest)
|
||||||
@@ -1988,13 +1988,13 @@ func (a *App) SetTeamIconFromFile(team *model.Team, file io.Reader) *model.AppEr
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) RemoveTeamIcon(teamId string) *model.AppError {
|
func (a *App) RemoveTeamIcon(teamID string) *model.AppError {
|
||||||
team, err := a.GetTeam(teamId)
|
team, err := a.GetTeam(teamID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return model.NewAppError("RemoveTeamIcon", "api.team.remove_team_icon.get_team.app_error", nil, err.Error(), http.StatusBadRequest)
|
return model.NewAppError("RemoveTeamIcon", "api.team.remove_team_icon.get_team.app_error", nil, err.Error(), http.StatusBadRequest)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := a.Srv().Store.Team().UpdateLastTeamIconUpdate(teamId, 0); err != nil {
|
if err := a.Srv().Store.Team().UpdateLastTeamIconUpdate(teamID, 0); err != nil {
|
||||||
return model.NewAppError("RemoveTeamIcon", "api.team.team_icon.update.app_error", nil, err.Error(), http.StatusBadRequest)
|
return model.NewAppError("RemoveTeamIcon", "api.team.team_icon.update.app_error", nil, err.Error(), http.StatusBadRequest)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -531,12 +531,12 @@ func TestSanitizeTeam(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
t.Run("not a user of the team", func(t *testing.T) {
|
t.Run("not a user of the team", func(t *testing.T) {
|
||||||
userId := model.NewId()
|
userID := model.NewId()
|
||||||
session := model.Session{
|
session := model.Session{
|
||||||
Roles: model.SYSTEM_USER_ROLE_ID,
|
Roles: model.SYSTEM_USER_ROLE_ID,
|
||||||
TeamMembers: []*model.TeamMember{
|
TeamMembers: []*model.TeamMember{
|
||||||
{
|
{
|
||||||
UserId: userId,
|
UserId: userID,
|
||||||
TeamId: model.NewId(),
|
TeamId: model.NewId(),
|
||||||
Roles: model.TEAM_USER_ROLE_ID,
|
Roles: model.TEAM_USER_ROLE_ID,
|
||||||
},
|
},
|
||||||
@@ -549,12 +549,12 @@ func TestSanitizeTeam(t *testing.T) {
|
|||||||
})
|
})
|
||||||
|
|
||||||
t.Run("user of the team", func(t *testing.T) {
|
t.Run("user of the team", func(t *testing.T) {
|
||||||
userId := model.NewId()
|
userID := model.NewId()
|
||||||
session := model.Session{
|
session := model.Session{
|
||||||
Roles: model.SYSTEM_USER_ROLE_ID,
|
Roles: model.SYSTEM_USER_ROLE_ID,
|
||||||
TeamMembers: []*model.TeamMember{
|
TeamMembers: []*model.TeamMember{
|
||||||
{
|
{
|
||||||
UserId: userId,
|
UserId: userID,
|
||||||
TeamId: team.Id,
|
TeamId: team.Id,
|
||||||
Roles: model.TEAM_USER_ROLE_ID,
|
Roles: model.TEAM_USER_ROLE_ID,
|
||||||
},
|
},
|
||||||
@@ -567,12 +567,12 @@ func TestSanitizeTeam(t *testing.T) {
|
|||||||
})
|
})
|
||||||
|
|
||||||
t.Run("team admin", func(t *testing.T) {
|
t.Run("team admin", func(t *testing.T) {
|
||||||
userId := model.NewId()
|
userID := model.NewId()
|
||||||
session := model.Session{
|
session := model.Session{
|
||||||
Roles: model.SYSTEM_USER_ROLE_ID,
|
Roles: model.SYSTEM_USER_ROLE_ID,
|
||||||
TeamMembers: []*model.TeamMember{
|
TeamMembers: []*model.TeamMember{
|
||||||
{
|
{
|
||||||
UserId: userId,
|
UserId: userID,
|
||||||
TeamId: team.Id,
|
TeamId: team.Id,
|
||||||
Roles: model.TEAM_USER_ROLE_ID + " " + model.TEAM_ADMIN_ROLE_ID,
|
Roles: model.TEAM_USER_ROLE_ID + " " + model.TEAM_ADMIN_ROLE_ID,
|
||||||
},
|
},
|
||||||
@@ -585,12 +585,12 @@ func TestSanitizeTeam(t *testing.T) {
|
|||||||
})
|
})
|
||||||
|
|
||||||
t.Run("team admin of another team", func(t *testing.T) {
|
t.Run("team admin of another team", func(t *testing.T) {
|
||||||
userId := model.NewId()
|
userID := model.NewId()
|
||||||
session := model.Session{
|
session := model.Session{
|
||||||
Roles: model.SYSTEM_USER_ROLE_ID,
|
Roles: model.SYSTEM_USER_ROLE_ID,
|
||||||
TeamMembers: []*model.TeamMember{
|
TeamMembers: []*model.TeamMember{
|
||||||
{
|
{
|
||||||
UserId: userId,
|
UserId: userID,
|
||||||
TeamId: model.NewId(),
|
TeamId: model.NewId(),
|
||||||
Roles: model.TEAM_USER_ROLE_ID + " " + model.TEAM_ADMIN_ROLE_ID,
|
Roles: model.TEAM_USER_ROLE_ID + " " + model.TEAM_ADMIN_ROLE_ID,
|
||||||
},
|
},
|
||||||
@@ -603,12 +603,12 @@ func TestSanitizeTeam(t *testing.T) {
|
|||||||
})
|
})
|
||||||
|
|
||||||
t.Run("system admin, not a user of team", func(t *testing.T) {
|
t.Run("system admin, not a user of team", func(t *testing.T) {
|
||||||
userId := model.NewId()
|
userID := model.NewId()
|
||||||
session := model.Session{
|
session := model.Session{
|
||||||
Roles: model.SYSTEM_USER_ROLE_ID + " " + model.SYSTEM_ADMIN_ROLE_ID,
|
Roles: model.SYSTEM_USER_ROLE_ID + " " + model.SYSTEM_ADMIN_ROLE_ID,
|
||||||
TeamMembers: []*model.TeamMember{
|
TeamMembers: []*model.TeamMember{
|
||||||
{
|
{
|
||||||
UserId: userId,
|
UserId: userID,
|
||||||
TeamId: model.NewId(),
|
TeamId: model.NewId(),
|
||||||
Roles: model.TEAM_USER_ROLE_ID,
|
Roles: model.TEAM_USER_ROLE_ID,
|
||||||
},
|
},
|
||||||
@@ -621,12 +621,12 @@ func TestSanitizeTeam(t *testing.T) {
|
|||||||
})
|
})
|
||||||
|
|
||||||
t.Run("system admin, user of team", func(t *testing.T) {
|
t.Run("system admin, user of team", func(t *testing.T) {
|
||||||
userId := model.NewId()
|
userID := model.NewId()
|
||||||
session := model.Session{
|
session := model.Session{
|
||||||
Roles: model.SYSTEM_USER_ROLE_ID + " " + model.SYSTEM_ADMIN_ROLE_ID,
|
Roles: model.SYSTEM_USER_ROLE_ID + " " + model.SYSTEM_ADMIN_ROLE_ID,
|
||||||
TeamMembers: []*model.TeamMember{
|
TeamMembers: []*model.TeamMember{
|
||||||
{
|
{
|
||||||
UserId: userId,
|
UserId: userID,
|
||||||
TeamId: team.Id,
|
TeamId: team.Id,
|
||||||
Roles: model.TEAM_USER_ROLE_ID,
|
Roles: model.TEAM_USER_ROLE_ID,
|
||||||
},
|
},
|
||||||
@@ -657,17 +657,17 @@ func TestSanitizeTeams(t *testing.T) {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
userId := model.NewId()
|
userID := model.NewId()
|
||||||
session := model.Session{
|
session := model.Session{
|
||||||
Roles: model.SYSTEM_USER_ROLE_ID,
|
Roles: model.SYSTEM_USER_ROLE_ID,
|
||||||
TeamMembers: []*model.TeamMember{
|
TeamMembers: []*model.TeamMember{
|
||||||
{
|
{
|
||||||
UserId: userId,
|
UserId: userID,
|
||||||
TeamId: teams[0].Id,
|
TeamId: teams[0].Id,
|
||||||
Roles: model.TEAM_USER_ROLE_ID,
|
Roles: model.TEAM_USER_ROLE_ID,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
UserId: userId,
|
UserId: userID,
|
||||||
TeamId: teams[1].Id,
|
TeamId: teams[1].Id,
|
||||||
Roles: model.TEAM_USER_ROLE_ID + " " + model.TEAM_ADMIN_ROLE_ID,
|
Roles: model.TEAM_USER_ROLE_ID + " " + model.TEAM_ADMIN_ROLE_ID,
|
||||||
},
|
},
|
||||||
@@ -694,12 +694,12 @@ func TestSanitizeTeams(t *testing.T) {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
userId := model.NewId()
|
userID := model.NewId()
|
||||||
session := model.Session{
|
session := model.Session{
|
||||||
Roles: model.SYSTEM_USER_ROLE_ID + " " + model.SYSTEM_ADMIN_ROLE_ID,
|
Roles: model.SYSTEM_USER_ROLE_ID + " " + model.SYSTEM_ADMIN_ROLE_ID,
|
||||||
TeamMembers: []*model.TeamMember{
|
TeamMembers: []*model.TeamMember{
|
||||||
{
|
{
|
||||||
UserId: userId,
|
UserId: userID,
|
||||||
TeamId: teams[0].Id,
|
TeamId: teams[0].Id,
|
||||||
Roles: model.TEAM_USER_ROLE_ID,
|
Roles: model.TEAM_USER_ROLE_ID,
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -11,13 +11,13 @@ import (
|
|||||||
"github.com/mattermost/mattermost-server/v5/store"
|
"github.com/mattermost/mattermost-server/v5/store"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (a *App) CreateTermsOfService(text, userId string) (*model.TermsOfService, *model.AppError) {
|
func (a *App) CreateTermsOfService(text, userID string) (*model.TermsOfService, *model.AppError) {
|
||||||
termsOfService := &model.TermsOfService{
|
termsOfService := &model.TermsOfService{
|
||||||
Text: text,
|
Text: text,
|
||||||
UserId: userId,
|
UserId: userID,
|
||||||
}
|
}
|
||||||
|
|
||||||
if _, appErr := a.GetUser(userId); appErr != nil {
|
if _, appErr := a.GetUser(userID); appErr != nil {
|
||||||
return nil, appErr
|
return nil, appErr
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -153,8 +153,8 @@ func (a *App) GetUploadSession(uploadId string) (*model.UploadSession, *model.Ap
|
|||||||
return us, nil
|
return us, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetUploadSessionsForUser(userId string) ([]*model.UploadSession, *model.AppError) {
|
func (a *App) GetUploadSessionsForUser(userID string) ([]*model.UploadSession, *model.AppError) {
|
||||||
uss, err := a.Srv().Store.UploadSession().GetForUser(userId)
|
uss, err := a.Srv().Store.UploadSession().GetForUser(userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("GetUploadsForUser", "app.upload.get_for_user.app_error",
|
return nil, model.NewAppError("GetUploadsForUser", "app.upload.get_for_user.app_error",
|
||||||
nil, err.Error(), http.StatusInternalServerError)
|
nil, err.Error(), http.StatusInternalServerError)
|
||||||
|
|||||||
272
app/user.go
272
app/user.go
@@ -273,7 +273,7 @@ func (a *App) createUserOrGuest(user *model.User, guest bool) (*model.User, *mod
|
|||||||
if appErr != nil {
|
if appErr != nil {
|
||||||
return nil, appErr
|
return nil, appErr
|
||||||
}
|
}
|
||||||
// This message goes to everyone, so the teamId, channelId and userId are irrelevant
|
// This message goes to everyone, so the teamID, channelId and userID are irrelevant
|
||||||
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_NEW_USER, "", "", "", nil)
|
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_NEW_USER, "", "", "", nil)
|
||||||
message.Add("user_id", ruser.Id)
|
message.Add("user_id", ruser.Id)
|
||||||
a.Publish(message)
|
a.Publish(message)
|
||||||
@@ -335,7 +335,7 @@ func (a *App) createUser(user *model.User) (*model.User, *model.AppError) {
|
|||||||
return ruser, nil
|
return ruser, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) CreateOAuthUser(service string, userData io.Reader, teamId string, tokenUser *model.User) (*model.User, *model.AppError) {
|
func (a *App) CreateOAuthUser(service string, userData io.Reader, teamID string, tokenUser *model.User) (*model.User, *model.AppError) {
|
||||||
if !*a.Config().TeamSettings.EnableUserCreation {
|
if !*a.Config().TeamSettings.EnableUserCreation {
|
||||||
return nil, model.NewAppError("CreateOAuthUser", "api.user.create_user.disabled.app_error", nil, "", http.StatusNotImplemented)
|
return nil, model.NewAppError("CreateOAuthUser", "api.user.create_user.disabled.app_error", nil, "", http.StatusNotImplemented)
|
||||||
}
|
}
|
||||||
@@ -393,13 +393,13 @@ func (a *App) CreateOAuthUser(service string, userData io.Reader, teamId string,
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if teamId != "" {
|
if teamID != "" {
|
||||||
err = a.AddUserToTeamByTeamId(teamId, user)
|
err = a.AddUserToTeamByTeamId(teamID, user)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
err = a.AddDirectChannels(teamId, user)
|
err = a.AddDirectChannels(teamID, user)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mlog.Warn("Failed to add direct channels", mlog.Err(err))
|
mlog.Warn("Failed to add direct channels", mlog.Err(err))
|
||||||
}
|
}
|
||||||
@@ -443,8 +443,8 @@ func (a *App) IsUsernameTaken(name string) bool {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetUser(userId string) (*model.User, *model.AppError) {
|
func (a *App) GetUser(userID string) (*model.User, *model.AppError) {
|
||||||
user, err := a.Srv().Store.User().Get(userId)
|
user, err := a.Srv().Store.User().Get(userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
var nfErr *store.ErrNotFound
|
var nfErr *store.ErrNotFound
|
||||||
switch {
|
switch {
|
||||||
@@ -535,8 +535,8 @@ func (a *App) GetUsersInTeam(options *model.UserGetOptions) ([]*model.User, *mod
|
|||||||
return users, nil
|
return users, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetUsersNotInTeam(teamId string, groupConstrained bool, offset int, limit int, viewRestrictions *model.ViewUsersRestrictions) ([]*model.User, *model.AppError) {
|
func (a *App) GetUsersNotInTeam(teamID string, groupConstrained bool, offset int, limit int, viewRestrictions *model.ViewUsersRestrictions) ([]*model.User, *model.AppError) {
|
||||||
users, err := a.Srv().Store.User().GetProfilesNotInTeam(teamId, groupConstrained, offset, limit, viewRestrictions)
|
users, err := a.Srv().Store.User().GetProfilesNotInTeam(teamID, groupConstrained, offset, limit, viewRestrictions)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("GetUsersNotInTeam", "app.user.get_profiles.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("GetUsersNotInTeam", "app.user.get_profiles.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -553,8 +553,8 @@ func (a *App) GetUsersInTeamPage(options *model.UserGetOptions, asAdmin bool) ([
|
|||||||
return a.sanitizeProfiles(users, asAdmin), nil
|
return a.sanitizeProfiles(users, asAdmin), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetUsersNotInTeamPage(teamId string, groupConstrained bool, page int, perPage int, asAdmin bool, viewRestrictions *model.ViewUsersRestrictions) ([]*model.User, *model.AppError) {
|
func (a *App) GetUsersNotInTeamPage(teamID string, groupConstrained bool, page int, perPage int, asAdmin bool, viewRestrictions *model.ViewUsersRestrictions) ([]*model.User, *model.AppError) {
|
||||||
users, err := a.GetUsersNotInTeam(teamId, groupConstrained, page*perPage, perPage, viewRestrictions)
|
users, err := a.GetUsersNotInTeam(teamID, groupConstrained, page*perPage, perPage, viewRestrictions)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -562,12 +562,12 @@ func (a *App) GetUsersNotInTeamPage(teamId string, groupConstrained bool, page i
|
|||||||
return a.sanitizeProfiles(users, asAdmin), nil
|
return a.sanitizeProfiles(users, asAdmin), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetUsersInTeamEtag(teamId string, restrictionsHash string) string {
|
func (a *App) GetUsersInTeamEtag(teamID string, restrictionsHash string) string {
|
||||||
return fmt.Sprintf("%v.%v.%v.%v", a.Srv().Store.User().GetEtagForProfiles(teamId), a.Config().PrivacySettings.ShowFullName, a.Config().PrivacySettings.ShowEmailAddress, restrictionsHash)
|
return fmt.Sprintf("%v.%v.%v.%v", a.Srv().Store.User().GetEtagForProfiles(teamID), a.Config().PrivacySettings.ShowFullName, a.Config().PrivacySettings.ShowEmailAddress, restrictionsHash)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetUsersNotInTeamEtag(teamId string, restrictionsHash string) string {
|
func (a *App) GetUsersNotInTeamEtag(teamID string, restrictionsHash string) string {
|
||||||
return fmt.Sprintf("%v.%v.%v.%v", a.Srv().Store.User().GetEtagForProfilesNotInTeam(teamId), a.Config().PrivacySettings.ShowFullName, a.Config().PrivacySettings.ShowEmailAddress, restrictionsHash)
|
return fmt.Sprintf("%v.%v.%v.%v", a.Srv().Store.User().GetEtagForProfilesNotInTeam(teamID), a.Config().PrivacySettings.ShowFullName, a.Config().PrivacySettings.ShowEmailAddress, restrictionsHash)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetUsersInChannel(options *model.UserGetOptions) ([]*model.User, *model.AppError) {
|
func (a *App) GetUsersInChannel(options *model.UserGetOptions) ([]*model.User, *model.AppError) {
|
||||||
@@ -620,8 +620,8 @@ func (a *App) GetUsersInChannelPageByStatus(options *model.UserGetOptions, asAdm
|
|||||||
return a.sanitizeProfiles(users, asAdmin), nil
|
return a.sanitizeProfiles(users, asAdmin), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetUsersNotInChannel(teamId string, channelId string, groupConstrained bool, offset int, limit int, viewRestrictions *model.ViewUsersRestrictions) ([]*model.User, *model.AppError) {
|
func (a *App) GetUsersNotInChannel(teamID string, channelId string, groupConstrained bool, offset int, limit int, viewRestrictions *model.ViewUsersRestrictions) ([]*model.User, *model.AppError) {
|
||||||
users, err := a.Srv().Store.User().GetProfilesNotInChannel(teamId, channelId, groupConstrained, offset, limit, viewRestrictions)
|
users, err := a.Srv().Store.User().GetProfilesNotInChannel(teamID, channelId, groupConstrained, offset, limit, viewRestrictions)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("GetUsersNotInChannel", "app.user.get_profiles.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("GetUsersNotInChannel", "app.user.get_profiles.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -629,8 +629,8 @@ func (a *App) GetUsersNotInChannel(teamId string, channelId string, groupConstra
|
|||||||
return users, nil
|
return users, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetUsersNotInChannelMap(teamId string, channelId string, groupConstrained bool, offset int, limit int, asAdmin bool, viewRestrictions *model.ViewUsersRestrictions) (map[string]*model.User, *model.AppError) {
|
func (a *App) GetUsersNotInChannelMap(teamID string, channelId string, groupConstrained bool, offset int, limit int, asAdmin bool, viewRestrictions *model.ViewUsersRestrictions) (map[string]*model.User, *model.AppError) {
|
||||||
users, err := a.GetUsersNotInChannel(teamId, channelId, groupConstrained, offset, limit, viewRestrictions)
|
users, err := a.GetUsersNotInChannel(teamID, channelId, groupConstrained, offset, limit, viewRestrictions)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -645,8 +645,8 @@ func (a *App) GetUsersNotInChannelMap(teamId string, channelId string, groupCons
|
|||||||
return userMap, nil
|
return userMap, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetUsersNotInChannelPage(teamId string, channelId string, groupConstrained bool, page int, perPage int, asAdmin bool, viewRestrictions *model.ViewUsersRestrictions) ([]*model.User, *model.AppError) {
|
func (a *App) GetUsersNotInChannelPage(teamID string, channelId string, groupConstrained bool, page int, perPage int, asAdmin bool, viewRestrictions *model.ViewUsersRestrictions) ([]*model.User, *model.AppError) {
|
||||||
users, err := a.GetUsersNotInChannel(teamId, channelId, groupConstrained, page*perPage, perPage, viewRestrictions)
|
users, err := a.GetUsersNotInChannel(teamID, channelId, groupConstrained, page*perPage, perPage, viewRestrictions)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -692,10 +692,10 @@ func (a *App) GetChannelGroupUsers(channelID string) ([]*model.User, *model.AppE
|
|||||||
return users, nil
|
return users, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetUsersByIds(userIds []string, options *store.UserGetByIdsOpts) ([]*model.User, *model.AppError) {
|
func (a *App) GetUsersByIds(userIDs []string, options *store.UserGetByIdsOpts) ([]*model.User, *model.AppError) {
|
||||||
allowFromCache := options.ViewRestrictions == nil
|
allowFromCache := options.ViewRestrictions == nil
|
||||||
|
|
||||||
users, err := a.Srv().Store.User().GetProfileByIds(userIds, options, allowFromCache)
|
users, err := a.Srv().Store.User().GetProfileByIds(userIDs, options, allowFromCache)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("GetUsersByIds", "app.user.get_profiles.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("GetUsersByIds", "app.user.get_profiles.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -731,8 +731,8 @@ func (a *App) sanitizeProfiles(users []*model.User, asAdmin bool) []*model.User
|
|||||||
return users
|
return users
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GenerateMfaSecret(userId string) (*model.MfaSecret, *model.AppError) {
|
func (a *App) GenerateMfaSecret(userID string) (*model.MfaSecret, *model.AppError) {
|
||||||
user, err := a.GetUser(userId)
|
user, err := a.GetUser(userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -750,8 +750,8 @@ func (a *App) GenerateMfaSecret(userId string) (*model.MfaSecret, *model.AppErro
|
|||||||
return mfaSecret, nil
|
return mfaSecret, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) ActivateMfa(userId, token string) *model.AppError {
|
func (a *App) ActivateMfa(userID, token string) *model.AppError {
|
||||||
user, err := a.Srv().Store.User().Get(userId)
|
user, err := a.Srv().Store.User().Get(userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
var nfErr *store.ErrNotFound
|
var nfErr *store.ErrNotFound
|
||||||
switch {
|
switch {
|
||||||
@@ -772,24 +772,24 @@ func (a *App) ActivateMfa(userId, token string) *model.AppError {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Make sure old MFA status is not cached locally or in cluster nodes.
|
// Make sure old MFA status is not cached locally or in cluster nodes.
|
||||||
a.InvalidateCacheForUser(userId)
|
a.InvalidateCacheForUser(userID)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) DeactivateMfa(userId string) *model.AppError {
|
func (a *App) DeactivateMfa(userID string) *model.AppError {
|
||||||
mfaService := mfa.New(a, a.Srv().Store)
|
mfaService := mfa.New(a, a.Srv().Store)
|
||||||
if err := mfaService.Deactivate(userId); err != nil {
|
if err := mfaService.Deactivate(userID); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Make sure old MFA status is not cached locally or in cluster nodes.
|
// Make sure old MFA status is not cached locally or in cluster nodes.
|
||||||
a.InvalidateCacheForUser(userId)
|
a.InvalidateCacheForUser(userID)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func CreateProfileImage(username string, userId string, initialFont string) ([]byte, *model.AppError) {
|
func CreateProfileImage(username string, userID string, initialFont string) ([]byte, *model.AppError) {
|
||||||
colors := []color.NRGBA{
|
colors := []color.NRGBA{
|
||||||
{197, 8, 126, 255},
|
{197, 8, 126, 255},
|
||||||
{227, 207, 18, 255},
|
{227, 207, 18, 255},
|
||||||
@@ -820,7 +820,7 @@ func CreateProfileImage(username string, userId string, initialFont string) ([]b
|
|||||||
}
|
}
|
||||||
|
|
||||||
h := fnv.New32a()
|
h := fnv.New32a()
|
||||||
h.Write([]byte(userId))
|
h.Write([]byte(userID))
|
||||||
seed := h.Sum32()
|
seed := h.Sum32()
|
||||||
|
|
||||||
initial := string(strings.ToUpper(username)[0])
|
initial := string(strings.ToUpper(username)[0])
|
||||||
@@ -951,16 +951,16 @@ func (a *App) SetDefaultProfileImage(user *model.User) *model.AppError {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) SetProfileImage(userId string, imageData *multipart.FileHeader) *model.AppError {
|
func (a *App) SetProfileImage(userID string, imageData *multipart.FileHeader) *model.AppError {
|
||||||
file, err := imageData.Open()
|
file, err := imageData.Open()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return model.NewAppError("SetProfileImage", "api.user.upload_profile_user.open.app_error", nil, err.Error(), http.StatusBadRequest)
|
return model.NewAppError("SetProfileImage", "api.user.upload_profile_user.open.app_error", nil, err.Error(), http.StatusBadRequest)
|
||||||
}
|
}
|
||||||
defer file.Close()
|
defer file.Close()
|
||||||
return a.SetProfileImageFromMultiPartFile(userId, file)
|
return a.SetProfileImageFromMultiPartFile(userID, file)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) SetProfileImageFromMultiPartFile(userId string, file multipart.File) *model.AppError {
|
func (a *App) SetProfileImageFromMultiPartFile(userID string, file multipart.File) *model.AppError {
|
||||||
// Decode image config first to check dimensions before loading the whole thing into memory later on
|
// Decode image config first to check dimensions before loading the whole thing into memory later on
|
||||||
config, _, err := image.DecodeConfig(file)
|
config, _, err := image.DecodeConfig(file)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -975,7 +975,7 @@ func (a *App) SetProfileImageFromMultiPartFile(userId string, file multipart.Fil
|
|||||||
|
|
||||||
file.Seek(0, 0)
|
file.Seek(0, 0)
|
||||||
|
|
||||||
return a.SetProfileImageFromFile(userId, file)
|
return a.SetProfileImageFromFile(userID, file)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) AdjustImage(file io.Reader) (*bytes.Buffer, *model.AppError) {
|
func (a *App) AdjustImage(file io.Reader) (*bytes.Buffer, *model.AppError) {
|
||||||
@@ -1000,28 +1000,28 @@ func (a *App) AdjustImage(file io.Reader) (*bytes.Buffer, *model.AppError) {
|
|||||||
return buf, nil
|
return buf, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) SetProfileImageFromFile(userId string, file io.Reader) *model.AppError {
|
func (a *App) SetProfileImageFromFile(userID string, file io.Reader) *model.AppError {
|
||||||
|
|
||||||
buf, err := a.AdjustImage(file)
|
buf, err := a.AdjustImage(file)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
path := "users/" + userId + "/profile.png"
|
path := "users/" + userID + "/profile.png"
|
||||||
|
|
||||||
if _, err := a.WriteFile(buf, path); err != nil {
|
if _, err := a.WriteFile(buf, path); err != nil {
|
||||||
return model.NewAppError("SetProfileImage", "api.user.upload_profile_user.upload_profile.app_error", nil, "", http.StatusInternalServerError)
|
return model.NewAppError("SetProfileImage", "api.user.upload_profile_user.upload_profile.app_error", nil, "", http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := a.Srv().Store.User().UpdateLastPictureUpdate(userId); err != nil {
|
if err := a.Srv().Store.User().UpdateLastPictureUpdate(userID); err != nil {
|
||||||
mlog.Warn("Error with updating last picture update", mlog.Err(err))
|
mlog.Warn("Error with updating last picture update", mlog.Err(err))
|
||||||
}
|
}
|
||||||
a.invalidateUserCacheAndPublish(userId)
|
a.invalidateUserCacheAndPublish(userID)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) UpdatePasswordAsUser(userId, currentPassword, newPassword string) *model.AppError {
|
func (a *App) UpdatePasswordAsUser(userID, currentPassword, newPassword string) *model.AppError {
|
||||||
user, err := a.GetUser(userId)
|
user, err := a.GetUser(userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -1048,14 +1048,14 @@ func (a *App) UpdatePasswordAsUser(userId, currentPassword, newPassword string)
|
|||||||
return a.UpdatePasswordSendEmail(user, newPassword, T("api.user.update_password.menu"))
|
return a.UpdatePasswordSendEmail(user, newPassword, T("api.user.update_password.menu"))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) userDeactivated(userId string) *model.AppError {
|
func (a *App) userDeactivated(userID string) *model.AppError {
|
||||||
if err := a.RevokeAllSessions(userId); err != nil {
|
if err := a.RevokeAllSessions(userID); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
a.SetStatusOffline(userId, false)
|
a.SetStatusOffline(userID, false)
|
||||||
|
|
||||||
user, err := a.GetUser(userId)
|
user, err := a.GetUser(userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -1064,24 +1064,24 @@ func (a *App) userDeactivated(userId string) *model.AppError {
|
|||||||
// bots the user owns. Only notify once, when the user is the owner, not the
|
// bots the user owns. Only notify once, when the user is the owner, not the
|
||||||
// owners bots
|
// owners bots
|
||||||
if !user.IsBot {
|
if !user.IsBot {
|
||||||
a.notifySysadminsBotOwnerDeactivated(userId)
|
a.notifySysadminsBotOwnerDeactivated(userID)
|
||||||
}
|
}
|
||||||
|
|
||||||
if *a.Config().ServiceSettings.DisableBotsWhenOwnerIsDeactivated {
|
if *a.Config().ServiceSettings.DisableBotsWhenOwnerIsDeactivated {
|
||||||
a.disableUserBots(userId)
|
a.disableUserBots(userID)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) invalidateUserChannelMembersCaches(userId string) *model.AppError {
|
func (a *App) invalidateUserChannelMembersCaches(userID string) *model.AppError {
|
||||||
teamsForUser, err := a.GetTeamsForUser(userId)
|
teamsForUser, err := a.GetTeamsForUser(userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, team := range teamsForUser {
|
for _, team := range teamsForUser {
|
||||||
channelsForUser, err := a.GetChannelsForUser(team.Id, userId, false, 0)
|
channelsForUser, err := a.GetChannelsForUser(team.Id, userID, false, 0)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -1132,13 +1132,13 @@ func (a *App) UpdateActive(user *model.User, active bool) (*model.User, *model.A
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) DeactivateGuests() *model.AppError {
|
func (a *App) DeactivateGuests() *model.AppError {
|
||||||
userIds, err := a.Srv().Store.User().DeactivateGuests()
|
userIDs, err := a.Srv().Store.User().DeactivateGuests()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return model.NewAppError("DeactivateGuests", "app.user.update_active_for_multiple_users.updating.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return model.NewAppError("DeactivateGuests", "app.user.update_active_for_multiple_users.updating.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, userId := range userIds {
|
for _, userID := range userIDs {
|
||||||
if err := a.userDeactivated(userId); err != nil {
|
if err := a.userDeactivated(userID); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1177,8 +1177,8 @@ func (a *App) UpdateUserAsUser(user *model.User, asAdmin bool) (*model.User, *mo
|
|||||||
return updatedUser, nil
|
return updatedUser, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) PatchUser(userId string, patch *model.UserPatch, asAdmin bool) (*model.User, *model.AppError) {
|
func (a *App) PatchUser(userID string, patch *model.UserPatch, asAdmin bool) (*model.User, *model.AppError) {
|
||||||
user, err := a.GetUser(userId)
|
user, err := a.GetUser(userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -1193,9 +1193,9 @@ func (a *App) PatchUser(userId string, patch *model.UserPatch, asAdmin bool) (*m
|
|||||||
return updatedUser, nil
|
return updatedUser, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) UpdateUserAuth(userId string, userAuth *model.UserAuth) (*model.UserAuth, *model.AppError) {
|
func (a *App) UpdateUserAuth(userID string, userAuth *model.UserAuth) (*model.UserAuth, *model.AppError) {
|
||||||
userAuth.Password = ""
|
userAuth.Password = ""
|
||||||
if _, err := a.Srv().Store.User().UpdateAuthData(userId, userAuth.AuthService, userAuth.AuthData, "", false); err != nil {
|
if _, err := a.Srv().Store.User().UpdateAuthData(userID, userAuth.AuthService, userAuth.AuthData, "", false); err != nil {
|
||||||
var invErr *store.ErrInvalidInput
|
var invErr *store.ErrInvalidInput
|
||||||
switch {
|
switch {
|
||||||
case errors.As(err, &invErr):
|
case errors.As(err, &invErr):
|
||||||
@@ -1315,8 +1315,8 @@ func (a *App) UpdateUser(user *model.User, sendNotifications bool) (*model.User,
|
|||||||
return userUpdate.New, nil
|
return userUpdate.New, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) UpdateUserActive(userId string, active bool) *model.AppError {
|
func (a *App) UpdateUserActive(userID string, active bool) *model.AppError {
|
||||||
user, err := a.GetUser(userId)
|
user, err := a.GetUser(userID)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -1328,8 +1328,8 @@ func (a *App) UpdateUserActive(userId string, active bool) *model.AppError {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) UpdateUserNotifyProps(userId string, props map[string]string, sendNotifications bool) (*model.User, *model.AppError) {
|
func (a *App) UpdateUserNotifyProps(userID string, props map[string]string, sendNotifications bool) (*model.User, *model.AppError) {
|
||||||
user, err := a.GetUser(userId)
|
user, err := a.GetUser(userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -1344,19 +1344,19 @@ func (a *App) UpdateUserNotifyProps(userId string, props map[string]string, send
|
|||||||
return ruser, nil
|
return ruser, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) UpdateMfa(activate bool, userId, token string) *model.AppError {
|
func (a *App) UpdateMfa(activate bool, userID, token string) *model.AppError {
|
||||||
if activate {
|
if activate {
|
||||||
if err := a.ActivateMfa(userId, token); err != nil {
|
if err := a.ActivateMfa(userID, token); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if err := a.DeactivateMfa(userId); err != nil {
|
if err := a.DeactivateMfa(userID); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
a.Srv().Go(func() {
|
a.Srv().Go(func() {
|
||||||
user, err := a.GetUser(userId)
|
user, err := a.GetUser(userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mlog.Error("Failed to get user", mlog.Err(err))
|
mlog.Error("Failed to get user", mlog.Err(err))
|
||||||
return
|
return
|
||||||
@@ -1370,8 +1370,8 @@ func (a *App) UpdateMfa(activate bool, userId, token string) *model.AppError {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) UpdatePasswordByUserIdSendEmail(userId, newPassword, method string) *model.AppError {
|
func (a *App) UpdatePasswordByUserIdSendEmail(userID, newPassword, method string) *model.AppError {
|
||||||
user, err := a.GetUser(userId)
|
user, err := a.GetUser(userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -1409,8 +1409,8 @@ func (a *App) UpdatePasswordSendEmail(user *model.User, newPassword, method stri
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) UpdateHashedPasswordByUserId(userId, newHashedPassword string) *model.AppError {
|
func (a *App) UpdateHashedPasswordByUserId(userID, newHashedPassword string) *model.AppError {
|
||||||
user, err := a.GetUser(userId)
|
user, err := a.GetUser(userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -1491,13 +1491,13 @@ func (a *App) SendPasswordReset(email string, siteURL string) (bool, *model.AppE
|
|||||||
return a.Srv().EmailService.SendPasswordResetEmail(user.Email, token, user.Locale, siteURL)
|
return a.Srv().EmailService.SendPasswordResetEmail(user.Email, token, user.Locale, siteURL)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) CreatePasswordRecoveryToken(userId, email string) (*model.Token, *model.AppError) {
|
func (a *App) CreatePasswordRecoveryToken(userID, email string) (*model.Token, *model.AppError) {
|
||||||
|
|
||||||
tokenExtra := struct {
|
tokenExtra := struct {
|
||||||
UserId string
|
UserId string
|
||||||
Email string
|
Email string
|
||||||
}{
|
}{
|
||||||
userId,
|
userID,
|
||||||
email,
|
email,
|
||||||
}
|
}
|
||||||
jsonData, err := json.Marshal(tokenExtra)
|
jsonData, err := json.Marshal(tokenExtra)
|
||||||
@@ -1540,8 +1540,8 @@ func (a *App) DeleteToken(token *model.Token) *model.AppError {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) UpdateUserRoles(userId string, newRoles string, sendWebSocketEvent bool) (*model.User, *model.AppError) {
|
func (a *App) UpdateUserRoles(userID string, newRoles string, sendWebSocketEvent bool) (*model.User, *model.AppError) {
|
||||||
user, err := a.GetUser(userId)
|
user, err := a.GetUser(userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err.StatusCode = http.StatusBadRequest
|
err.StatusCode = http.StatusBadRequest
|
||||||
return nil, err
|
return nil, err
|
||||||
@@ -1586,7 +1586,7 @@ func (a *App) UpdateUserRoles(userId string, newRoles string, sendWebSocketEvent
|
|||||||
mlog.Warn("Failed during updating user roles", mlog.Err(result.NErr))
|
mlog.Warn("Failed during updating user roles", mlog.Err(result.NErr))
|
||||||
}
|
}
|
||||||
|
|
||||||
a.InvalidateCacheForUser(userId)
|
a.InvalidateCacheForUser(userID)
|
||||||
a.ClearSessionCacheForUser(user.Id)
|
a.ClearSessionCacheForUser(user.Id)
|
||||||
|
|
||||||
if sendWebSocketEvent {
|
if sendWebSocketEvent {
|
||||||
@@ -1818,14 +1818,14 @@ func (a *App) GetFilteredUsersStats(options *model.UserCountOptions) (*model.Use
|
|||||||
return stats, nil
|
return stats, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) VerifyUserEmail(userId, email string) *model.AppError {
|
func (a *App) VerifyUserEmail(userID, email string) *model.AppError {
|
||||||
if _, err := a.Srv().Store.User().VerifyEmail(userId, email); err != nil {
|
if _, err := a.Srv().Store.User().VerifyEmail(userID, email); err != nil {
|
||||||
return model.NewAppError("VerifyUserEmail", "app.user.verify_email.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return model.NewAppError("VerifyUserEmail", "app.user.verify_email.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
|
|
||||||
a.InvalidateCacheForUser(userId)
|
a.InvalidateCacheForUser(userID)
|
||||||
|
|
||||||
user, err := a.GetUser(userId)
|
user, err := a.GetUser(userID)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -1868,9 +1868,9 @@ func (a *App) SearchUsersInChannel(channelId string, term string, options *model
|
|||||||
return users, nil
|
return users, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) SearchUsersNotInChannel(teamId string, channelId string, term string, options *model.UserSearchOptions) ([]*model.User, *model.AppError) {
|
func (a *App) SearchUsersNotInChannel(teamID string, channelId string, term string, options *model.UserSearchOptions) ([]*model.User, *model.AppError) {
|
||||||
term = strings.TrimSpace(term)
|
term = strings.TrimSpace(term)
|
||||||
users, err := a.Srv().Store.User().SearchNotInChannel(teamId, channelId, term, options)
|
users, err := a.Srv().Store.User().SearchNotInChannel(teamID, channelId, term, options)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("SearchUsersNotInChannel", "app.user.search.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("SearchUsersNotInChannel", "app.user.search.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -1882,10 +1882,10 @@ func (a *App) SearchUsersNotInChannel(teamId string, channelId string, term stri
|
|||||||
return users, nil
|
return users, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) SearchUsersInTeam(teamId, term string, options *model.UserSearchOptions) ([]*model.User, *model.AppError) {
|
func (a *App) SearchUsersInTeam(teamID, term string, options *model.UserSearchOptions) ([]*model.User, *model.AppError) {
|
||||||
term = strings.TrimSpace(term)
|
term = strings.TrimSpace(term)
|
||||||
|
|
||||||
users, err := a.Srv().Store.User().Search(teamId, term, options)
|
users, err := a.Srv().Store.User().Search(teamID, term, options)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("SearchUsersInTeam", "app.user.search.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("SearchUsersInTeam", "app.user.search.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -1939,10 +1939,10 @@ func (a *App) SearchUsersInGroup(groupID string, term string, options *model.Use
|
|||||||
return users, nil
|
return users, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) AutocompleteUsersInChannel(teamId string, channelId string, term string, options *model.UserSearchOptions) (*model.UserAutocompleteInChannel, *model.AppError) {
|
func (a *App) AutocompleteUsersInChannel(teamID string, channelId string, term string, options *model.UserSearchOptions) (*model.UserAutocompleteInChannel, *model.AppError) {
|
||||||
term = strings.TrimSpace(term)
|
term = strings.TrimSpace(term)
|
||||||
|
|
||||||
autocomplete, err := a.Srv().Store.User().AutocompleteUsersInChannel(teamId, channelId, term, options)
|
autocomplete, err := a.Srv().Store.User().AutocompleteUsersInChannel(teamID, channelId, term, options)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("AutocompleteUsersInChannel", "app.user.search.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("AutocompleteUsersInChannel", "app.user.search.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -1958,10 +1958,10 @@ func (a *App) AutocompleteUsersInChannel(teamId string, channelId string, term s
|
|||||||
return autocomplete, nil
|
return autocomplete, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) AutocompleteUsersInTeam(teamId string, term string, options *model.UserSearchOptions) (*model.UserAutocompleteInTeam, *model.AppError) {
|
func (a *App) AutocompleteUsersInTeam(teamID string, term string, options *model.UserSearchOptions) (*model.UserAutocompleteInTeam, *model.AppError) {
|
||||||
term = strings.TrimSpace(term)
|
term = strings.TrimSpace(term)
|
||||||
|
|
||||||
users, err := a.Srv().Store.User().Search(teamId, term, options)
|
users, err := a.Srv().Store.User().Search(teamID, term, options)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("AutocompleteUsersInTeam", "app.user.search.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("AutocompleteUsersInTeam", "app.user.search.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -2031,8 +2031,8 @@ func (a *App) UpdateOAuthUserAttrs(userData io.Reader, user *model.User, provide
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) RestrictUsersGetByPermissions(userId string, options *model.UserGetOptions) (*model.UserGetOptions, *model.AppError) {
|
func (a *App) RestrictUsersGetByPermissions(userID string, options *model.UserGetOptions) (*model.UserGetOptions, *model.AppError) {
|
||||||
restrictions, err := a.GetViewUsersRestrictions(userId)
|
restrictions, err := a.GetViewUsersRestrictions(userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -2043,29 +2043,29 @@ func (a *App) RestrictUsersGetByPermissions(userId string, options *model.UserGe
|
|||||||
|
|
||||||
// FilterNonGroupTeamMembers returns the subset of the given user IDs of the users who are not members of groups
|
// FilterNonGroupTeamMembers returns the subset of the given user IDs of the users who are not members of groups
|
||||||
// associated to the team excluding bots.
|
// associated to the team excluding bots.
|
||||||
func (a *App) FilterNonGroupTeamMembers(userIds []string, team *model.Team) ([]string, error) {
|
func (a *App) FilterNonGroupTeamMembers(userIDs []string, team *model.Team) ([]string, error) {
|
||||||
teamGroupUsers, err := a.GetTeamGroupUsers(team.Id)
|
teamGroupUsers, err := a.GetTeamGroupUsers(team.Id)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return a.filterNonGroupUsers(userIds, teamGroupUsers)
|
return a.filterNonGroupUsers(userIDs, teamGroupUsers)
|
||||||
}
|
}
|
||||||
|
|
||||||
// FilterNonGroupChannelMembers returns the subset of the given user IDs of the users who are not members of groups
|
// FilterNonGroupChannelMembers returns the subset of the given user IDs of the users who are not members of groups
|
||||||
// associated to the channel excluding bots
|
// associated to the channel excluding bots
|
||||||
func (a *App) FilterNonGroupChannelMembers(userIds []string, channel *model.Channel) ([]string, error) {
|
func (a *App) FilterNonGroupChannelMembers(userIDs []string, channel *model.Channel) ([]string, error) {
|
||||||
channelGroupUsers, err := a.GetChannelGroupUsers(channel.Id)
|
channelGroupUsers, err := a.GetChannelGroupUsers(channel.Id)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return a.filterNonGroupUsers(userIds, channelGroupUsers)
|
return a.filterNonGroupUsers(userIDs, channelGroupUsers)
|
||||||
}
|
}
|
||||||
|
|
||||||
// filterNonGroupUsers is a helper function that takes a list of user ids and a list of users
|
// filterNonGroupUsers is a helper function that takes a list of user ids and a list of users
|
||||||
// and returns the list of normal users present in userIds but not in groupUsers.
|
// and returns the list of normal users present in userIDs but not in groupUsers.
|
||||||
func (a *App) filterNonGroupUsers(userIds []string, groupUsers []*model.User) ([]string, error) {
|
func (a *App) filterNonGroupUsers(userIDs []string, groupUsers []*model.User) ([]string, error) {
|
||||||
nonMemberIds := []string{}
|
nonMemberIds := []string{}
|
||||||
users, err := a.Srv().Store.User().GetProfileByIds(userIds, nil, false)
|
users, err := a.Srv().Store.User().GetProfileByIds(userIDs, nil, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -2087,8 +2087,8 @@ func (a *App) filterNonGroupUsers(userIds []string, groupUsers []*model.User) ([
|
|||||||
return nonMemberIds, nil
|
return nonMemberIds, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) RestrictUsersSearchByPermissions(userId string, options *model.UserSearchOptions) (*model.UserSearchOptions, *model.AppError) {
|
func (a *App) RestrictUsersSearchByPermissions(userID string, options *model.UserSearchOptions) (*model.UserSearchOptions, *model.AppError) {
|
||||||
restrictions, err := a.GetViewUsersRestrictions(userId)
|
restrictions, err := a.GetViewUsersRestrictions(userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -2097,12 +2097,12 @@ func (a *App) RestrictUsersSearchByPermissions(userId string, options *model.Use
|
|||||||
return options, nil
|
return options, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) UserCanSeeOtherUser(userId string, otherUserId string) (bool, *model.AppError) {
|
func (a *App) UserCanSeeOtherUser(userID string, otherUserId string) (bool, *model.AppError) {
|
||||||
if userId == otherUserId {
|
if userID == otherUserId {
|
||||||
return true, nil
|
return true, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
restrictions, err := a.GetViewUsersRestrictions(userId)
|
restrictions, err := a.GetViewUsersRestrictions(userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
@@ -2134,8 +2134,8 @@ func (a *App) UserCanSeeOtherUser(userId string, otherUserId string) (bool, *mod
|
|||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) userBelongsToChannels(userId string, channelIds []string) (bool, *model.AppError) {
|
func (a *App) userBelongsToChannels(userID string, channelIds []string) (bool, *model.AppError) {
|
||||||
belongs, err := a.Srv().Store.Channel().UserBelongsToChannels(userId, channelIds)
|
belongs, err := a.Srv().Store.Channel().UserBelongsToChannels(userID, channelIds)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, model.NewAppError("userBelongsToChannels", "app.channel.user_belongs_to_channels.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return false, model.NewAppError("userBelongsToChannels", "app.channel.user_belongs_to_channels.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -2143,24 +2143,24 @@ func (a *App) userBelongsToChannels(userId string, channelIds []string) (bool, *
|
|||||||
return belongs, nil
|
return belongs, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetViewUsersRestrictions(userId string) (*model.ViewUsersRestrictions, *model.AppError) {
|
func (a *App) GetViewUsersRestrictions(userID string) (*model.ViewUsersRestrictions, *model.AppError) {
|
||||||
if a.HasPermissionTo(userId, model.PERMISSION_VIEW_MEMBERS) {
|
if a.HasPermissionTo(userID, model.PERMISSION_VIEW_MEMBERS) {
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
teamIds, nErr := a.Srv().Store.Team().GetUserTeamIds(userId, true)
|
teamIDs, nErr := a.Srv().Store.Team().GetUserTeamIds(userID, true)
|
||||||
if nErr != nil {
|
if nErr != nil {
|
||||||
return nil, model.NewAppError("GetViewUsersRestrictions", "app.team.get_user_team_ids.app_error", nil, nErr.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("GetViewUsersRestrictions", "app.team.get_user_team_ids.app_error", nil, nErr.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
|
|
||||||
teamIdsWithPermission := []string{}
|
teamIDsWithPermission := []string{}
|
||||||
for _, teamId := range teamIds {
|
for _, teamID := range teamIDs {
|
||||||
if a.HasPermissionToTeam(userId, teamId, model.PERMISSION_VIEW_MEMBERS) {
|
if a.HasPermissionToTeam(userID, teamID, model.PERMISSION_VIEW_MEMBERS) {
|
||||||
teamIdsWithPermission = append(teamIdsWithPermission, teamId)
|
teamIDsWithPermission = append(teamIDsWithPermission, teamID)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
userChannelMembers, err := a.Srv().Store.Channel().GetAllChannelMembersForUser(userId, true, true)
|
userChannelMembers, err := a.Srv().Store.Channel().GetAllChannelMembersForUser(userID, true, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("GetViewUsersRestrictions", "app.channel.get_channels.get.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("GetViewUsersRestrictions", "app.channel.get_channels.get.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -2170,7 +2170,7 @@ func (a *App) GetViewUsersRestrictions(userId string) (*model.ViewUsersRestricti
|
|||||||
channelIds = append(channelIds, channelId)
|
channelIds = append(channelIds, channelId)
|
||||||
}
|
}
|
||||||
|
|
||||||
return &model.ViewUsersRestrictions{Teams: teamIdsWithPermission, Channels: channelIds}, nil
|
return &model.ViewUsersRestrictions{Teams: teamIDsWithPermission, Channels: channelIds}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// PromoteGuestToUser Convert user's roles and all his mermbership's roles from
|
// PromoteGuestToUser Convert user's roles and all his mermbership's roles from
|
||||||
@@ -2271,25 +2271,25 @@ func (a *App) DemoteUserToGuest(user *model.User) *model.AppError {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) PublishUserTyping(userId, channelId, parentId string) *model.AppError {
|
func (a *App) PublishUserTyping(userID, channelId, parentId string) *model.AppError {
|
||||||
omitUsers := make(map[string]bool, 1)
|
omitUsers := make(map[string]bool, 1)
|
||||||
omitUsers[userId] = true
|
omitUsers[userID] = true
|
||||||
|
|
||||||
event := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_TYPING, "", channelId, "", omitUsers)
|
event := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_TYPING, "", channelId, "", omitUsers)
|
||||||
event.Add("parent_id", parentId)
|
event.Add("parent_id", parentId)
|
||||||
event.Add("user_id", userId)
|
event.Add("user_id", userID)
|
||||||
a.Publish(event)
|
a.Publish(event)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// invalidateUserCacheAndPublish Invalidates cache for a user and publishes user updated event
|
// invalidateUserCacheAndPublish Invalidates cache for a user and publishes user updated event
|
||||||
func (a *App) invalidateUserCacheAndPublish(userId string) {
|
func (a *App) invalidateUserCacheAndPublish(userID string) {
|
||||||
a.InvalidateCacheForUser(userId)
|
a.InvalidateCacheForUser(userID)
|
||||||
|
|
||||||
user, userErr := a.GetUser(userId)
|
user, userErr := a.GetUser(userID)
|
||||||
if userErr != nil {
|
if userErr != nil {
|
||||||
mlog.Error("Error in getting users profile", mlog.String("user_id", userId), mlog.Err(userErr))
|
mlog.Error("Error in getting users profile", mlog.String("user_id", userID), mlog.Err(userErr))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2356,8 +2356,8 @@ func (a *App) ConvertBotToUser(bot *model.Bot, userPatch *model.UserPatch, sysad
|
|||||||
return user, nil
|
return user, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetThreadsForUser(userId, teamId string, options model.GetUserThreadsOpts) (*model.Threads, *model.AppError) {
|
func (a *App) GetThreadsForUser(userID, teamID string, options model.GetUserThreadsOpts) (*model.Threads, *model.AppError) {
|
||||||
threads, err := a.Srv().Store.Thread().GetThreadsForUser(userId, teamId, options)
|
threads, err := a.Srv().Store.Thread().GetThreadsForUser(userID, teamID, options)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("GetThreadsForUser", "app.user.get_threads_for_user.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("GetThreadsForUser", "app.user.get_threads_for_user.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -2368,8 +2368,8 @@ func (a *App) GetThreadsForUser(userId, teamId string, options model.GetUserThre
|
|||||||
return threads, nil
|
return threads, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetThreadForUser(userId, teamId, threadId string, extended bool) (*model.ThreadResponse, *model.AppError) {
|
func (a *App) GetThreadForUser(userID, teamID, threadId string, extended bool) (*model.ThreadResponse, *model.AppError) {
|
||||||
thread, err := a.Srv().Store.Thread().GetThreadForUser(userId, teamId, threadId, extended)
|
thread, err := a.Srv().Store.Thread().GetThreadForUser(userID, teamID, threadId, extended)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("GetThreadForUser", "app.user.get_threads_for_user.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("GetThreadForUser", "app.user.get_threads_for_user.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -2381,34 +2381,34 @@ func (a *App) GetThreadForUser(userId, teamId, threadId string, extended bool) (
|
|||||||
return thread, nil
|
return thread, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) UpdateThreadsReadForUser(userId, teamId string) *model.AppError {
|
func (a *App) UpdateThreadsReadForUser(userID, teamID string) *model.AppError {
|
||||||
nErr := a.Srv().Store.Thread().MarkAllAsRead(userId, teamId)
|
nErr := a.Srv().Store.Thread().MarkAllAsRead(userID, teamID)
|
||||||
if nErr != nil {
|
if nErr != nil {
|
||||||
return model.NewAppError("UpdateThreadsReadForUser", "app.user.update_threads_read_for_user.app_error", nil, nErr.Error(), http.StatusInternalServerError)
|
return model.NewAppError("UpdateThreadsReadForUser", "app.user.update_threads_read_for_user.app_error", nil, nErr.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_THREAD_READ_CHANGED, "", "", userId, nil)
|
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_THREAD_READ_CHANGED, "", "", userID, nil)
|
||||||
a.Publish(message)
|
a.Publish(message)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) UpdateThreadFollowForUser(userId, threadId string, state bool) *model.AppError {
|
func (a *App) UpdateThreadFollowForUser(userID, threadId string, state bool) *model.AppError {
|
||||||
err := a.Srv().Store.Thread().CreateMembershipIfNeeded(userId, threadId, state, false, true)
|
err := a.Srv().Store.Thread().CreateMembershipIfNeeded(userID, threadId, state, false, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return model.NewAppError("UpdateThreadFollowForUser", "app.user.update_thread_follow_for_user.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return model.NewAppError("UpdateThreadFollowForUser", "app.user.update_thread_follow_for_user.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_THREAD_FOLLOW_CHANGED, "", "", userId, nil)
|
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_THREAD_FOLLOW_CHANGED, "", "", userID, nil)
|
||||||
message.Add("thread_id", threadId)
|
message.Add("thread_id", threadId)
|
||||||
message.Add("state", state)
|
message.Add("state", state)
|
||||||
a.Publish(message)
|
a.Publish(message)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) UpdateThreadReadForUser(userId, teamId, threadId string, timestamp int64) *model.AppError {
|
func (a *App) UpdateThreadReadForUser(userID, teamID, threadId string, timestamp int64) *model.AppError {
|
||||||
user, err := a.GetUser(userId)
|
user, err := a.GetUser(userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
membership, nErr := a.Srv().Store.Thread().GetMembershipForUser(userId, threadId)
|
membership, nErr := a.Srv().Store.Thread().GetMembershipForUser(userID, threadId)
|
||||||
if nErr != nil {
|
if nErr != nil {
|
||||||
return model.NewAppError("UpdateThreadsReadForUser", "app.user.update_threads_read_for_user.app_error", nil, nErr.Error(), http.StatusInternalServerError)
|
return model.NewAppError("UpdateThreadsReadForUser", "app.user.update_threads_read_for_user.app_error", nil, nErr.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -2417,7 +2417,7 @@ func (a *App) UpdateThreadReadForUser(userId, teamId, threadId string, timestamp
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
membership.UnreadMentions, err = a.countThreadMentions(user, post, teamId, timestamp)
|
membership.UnreadMentions, err = a.countThreadMentions(user, post, teamID, timestamp)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -2427,11 +2427,11 @@ func (a *App) UpdateThreadReadForUser(userId, teamId, threadId string, timestamp
|
|||||||
return model.NewAppError("UpdateThreadsReadForUser", "app.user.update_threads_read_for_user.app_error", nil, nErr.Error(), http.StatusInternalServerError)
|
return model.NewAppError("UpdateThreadsReadForUser", "app.user.update_threads_read_for_user.app_error", nil, nErr.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
|
|
||||||
nErr = a.Srv().Store.Thread().MarkAsRead(userId, threadId, timestamp)
|
nErr = a.Srv().Store.Thread().MarkAsRead(userID, threadId, timestamp)
|
||||||
if nErr != nil {
|
if nErr != nil {
|
||||||
return model.NewAppError("UpdateThreadReadForUser", "app.user.update_thread_read_for_user.app_error", nil, nErr.Error(), http.StatusInternalServerError)
|
return model.NewAppError("UpdateThreadReadForUser", "app.user.update_thread_read_for_user.app_error", nil, nErr.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_THREAD_READ_CHANGED, "", "", userId, nil)
|
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_THREAD_READ_CHANGED, "", "", userID, nil)
|
||||||
message.Add("thread_id", threadId)
|
message.Add("thread_id", threadId)
|
||||||
message.Add("timestamp", timestamp)
|
message.Add("timestamp", timestamp)
|
||||||
a.Publish(message)
|
a.Publish(message)
|
||||||
|
|||||||
@@ -11,8 +11,8 @@ import (
|
|||||||
"github.com/mattermost/mattermost-server/v5/store"
|
"github.com/mattermost/mattermost-server/v5/store"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (a *App) GetUserTermsOfService(userId string) (*model.UserTermsOfService, *model.AppError) {
|
func (a *App) GetUserTermsOfService(userID string) (*model.UserTermsOfService, *model.AppError) {
|
||||||
u, err := a.Srv().Store.UserTermsOfService().GetByUser(userId)
|
u, err := a.Srv().Store.UserTermsOfService().GetByUser(userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
var nfErr *store.ErrNotFound
|
var nfErr *store.ErrNotFound
|
||||||
switch {
|
switch {
|
||||||
@@ -26,10 +26,10 @@ func (a *App) GetUserTermsOfService(userId string) (*model.UserTermsOfService, *
|
|||||||
return u, nil
|
return u, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) SaveUserTermsOfService(userId, termsOfServiceId string, accepted bool) *model.AppError {
|
func (a *App) SaveUserTermsOfService(userID, termsOfServiceId string, accepted bool) *model.AppError {
|
||||||
if accepted {
|
if accepted {
|
||||||
userTermsOfService := &model.UserTermsOfService{
|
userTermsOfService := &model.UserTermsOfService{
|
||||||
UserId: userId,
|
UserId: userID,
|
||||||
TermsOfServiceId: termsOfServiceId,
|
TermsOfServiceId: termsOfServiceId,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -43,7 +43,7 @@ func (a *App) SaveUserTermsOfService(userId, termsOfServiceId string, accepted b
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if err := a.Srv().Store.UserTermsOfService().Delete(userId, termsOfServiceId); err != nil {
|
if err := a.Srv().Store.UserTermsOfService().Delete(userID, termsOfServiceId); err != nil {
|
||||||
return model.NewAppError("SaveUserTermsOfService", "app.user_terms_of_service.delete.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return model.NewAppError("SaveUserTermsOfService", "app.user_terms_of_service.delete.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -717,7 +717,7 @@ func TestCreateUserWithToken(t *testing.T) {
|
|||||||
t.Run("invalid token type", func(t *testing.T) {
|
t.Run("invalid token type", func(t *testing.T) {
|
||||||
token := model.NewToken(
|
token := model.NewToken(
|
||||||
TokenTypeVerifyEmail,
|
TokenTypeVerifyEmail,
|
||||||
model.MapToJson(map[string]string{"teamId": th.BasicTeam.Id, "email": user.Email}),
|
model.MapToJson(map[string]string{"teamID": th.BasicTeam.Id, "email": user.Email}),
|
||||||
)
|
)
|
||||||
require.Nil(t, th.App.Srv().Store.Token().Save(token))
|
require.Nil(t, th.App.Srv().Store.Token().Save(token))
|
||||||
defer th.App.DeleteToken(token)
|
defer th.App.DeleteToken(token)
|
||||||
|
|||||||
@@ -311,7 +311,7 @@ func (wc *WebConn) createHelloMessage() *model.WebSocketEvent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (wc *WebConn) shouldSendEventToGuest(msg *model.WebSocketEvent) bool {
|
func (wc *WebConn) shouldSendEventToGuest(msg *model.WebSocketEvent) bool {
|
||||||
var userId string
|
var userID string
|
||||||
var canSee bool
|
var canSee bool
|
||||||
|
|
||||||
switch msg.EventType() {
|
switch msg.EventType() {
|
||||||
@@ -321,14 +321,14 @@ func (wc *WebConn) shouldSendEventToGuest(msg *model.WebSocketEvent) bool {
|
|||||||
mlog.Debug("webhub.shouldSendEvent: user not found in message", mlog.Any("user", msg.GetData()["user"]))
|
mlog.Debug("webhub.shouldSendEvent: user not found in message", mlog.Any("user", msg.GetData()["user"]))
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
userId = user.Id
|
userID = user.Id
|
||||||
case model.WEBSOCKET_EVENT_NEW_USER:
|
case model.WEBSOCKET_EVENT_NEW_USER:
|
||||||
userId = msg.GetData()["user_id"].(string)
|
userID = msg.GetData()["user_id"].(string)
|
||||||
default:
|
default:
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
canSee, err := wc.App.UserCanSeeOtherUser(wc.UserId, userId)
|
canSee, err := wc.App.UserCanSeeOtherUser(wc.UserId, userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mlog.Error("webhub.shouldSendEvent.", mlog.Err(err))
|
mlog.Error("webhub.shouldSendEvent.", mlog.Err(err))
|
||||||
return false
|
return false
|
||||||
@@ -414,8 +414,8 @@ func (wc *WebConn) shouldSendEvent(msg *model.WebSocketEvent) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// IsMemberOfTeam returns whether the user of the WebConn
|
// IsMemberOfTeam returns whether the user of the WebConn
|
||||||
// is a member of the given teamId or not.
|
// is a member of the given teamID or not.
|
||||||
func (wc *WebConn) isMemberOfTeam(teamId string) bool {
|
func (wc *WebConn) isMemberOfTeam(teamID string) bool {
|
||||||
currentSession := wc.GetSession()
|
currentSession := wc.GetSession()
|
||||||
|
|
||||||
if currentSession == nil || currentSession.Token == "" {
|
if currentSession == nil || currentSession.Token == "" {
|
||||||
@@ -432,7 +432,7 @@ func (wc *WebConn) isMemberOfTeam(teamId string) bool {
|
|||||||
currentSession = session
|
currentSession = session
|
||||||
}
|
}
|
||||||
|
|
||||||
return currentSession.GetTeamByTeamId(teamId) != nil
|
return currentSession.GetTeamByTeamId(teamID) != nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (wc *WebConn) logSocketErr(source string, err error) {
|
func (wc *WebConn) logSocketErr(source string, err error) {
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type webConnActivityMessage struct {
|
type webConnActivityMessage struct {
|
||||||
userId string
|
userID string
|
||||||
sessionToken string
|
sessionToken string
|
||||||
activityAt int64
|
activityAt int64
|
||||||
}
|
}
|
||||||
@@ -30,7 +30,7 @@ type webConnDirectMessage struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type webConnSessionMessage struct {
|
type webConnSessionMessage struct {
|
||||||
userId string
|
userID string
|
||||||
sessionToken string
|
sessionToken string
|
||||||
isRegistered chan bool
|
isRegistered chan bool
|
||||||
}
|
}
|
||||||
@@ -94,19 +94,19 @@ func (a *App) HubStart() {
|
|||||||
a.srv.hubs = hubs
|
a.srv.hubs = hubs
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) invalidateCacheForUserSkipClusterSend(userId string) {
|
func (a *App) invalidateCacheForUserSkipClusterSend(userID string) {
|
||||||
a.Srv().Store.Channel().InvalidateAllChannelMembersForUser(userId)
|
a.Srv().Store.Channel().InvalidateAllChannelMembersForUser(userID)
|
||||||
a.InvalidateWebConnSessionCacheForUser(userId)
|
a.InvalidateWebConnSessionCacheForUser(userID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) invalidateCacheForWebhook(webhookId string) {
|
func (a *App) invalidateCacheForWebhook(webhookID string) {
|
||||||
a.Srv().Store.Webhook().InvalidateWebhookCache(webhookId)
|
a.Srv().Store.Webhook().InvalidateWebhookCache(webhookID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) InvalidateWebConnSessionCacheForUser(userId string) {
|
func (a *App) InvalidateWebConnSessionCacheForUser(userID string) {
|
||||||
hub := a.GetHubForUserId(userId)
|
hub := a.GetHubForUserId(userID)
|
||||||
if hub != nil {
|
if hub != nil {
|
||||||
hub.InvalidateUser(userId)
|
hub.InvalidateUser(userID)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -124,20 +124,20 @@ func (a *App) HubStop() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetHubForUserId returns the hub for a given user id.
|
// GetHubForUserId returns the hub for a given user id.
|
||||||
func (s *Server) GetHubForUserId(userId string) *Hub {
|
func (s *Server) GetHubForUserId(userID string) *Hub {
|
||||||
// TODO: check if caching the userId -> hub mapping
|
// TODO: check if caching the userID -> hub mapping
|
||||||
// is worth the memory tradeoff.
|
// is worth the memory tradeoff.
|
||||||
// https://mattermost.atlassian.net/browse/MM-26629.
|
// https://mattermost.atlassian.net/browse/MM-26629.
|
||||||
var hash maphash.Hash
|
var hash maphash.Hash
|
||||||
hash.SetSeed(s.hashSeed)
|
hash.SetSeed(s.hashSeed)
|
||||||
hash.Write([]byte(userId))
|
hash.Write([]byte(userID))
|
||||||
index := hash.Sum64() % uint64(len(s.hubs))
|
index := hash.Sum64() % uint64(len(s.hubs))
|
||||||
|
|
||||||
return s.hubs[int(index)]
|
return s.hubs[int(index)]
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetHubForUserId(userId string) *Hub {
|
func (a *App) GetHubForUserId(userID string) *Hub {
|
||||||
return a.Srv().GetHubForUserId(userId)
|
return a.Srv().GetHubForUserId(userID)
|
||||||
}
|
}
|
||||||
|
|
||||||
// HubRegister registers a connection to a hub.
|
// HubRegister registers a connection to a hub.
|
||||||
@@ -254,12 +254,12 @@ func (a *App) invalidateCacheForChannelMembersNotifyPropsSkipClusterSend(channel
|
|||||||
a.Srv().Store.Channel().InvalidateCacheForChannelMembersNotifyProps(channelId)
|
a.Srv().Store.Channel().InvalidateCacheForChannelMembersNotifyProps(channelId)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) invalidateCacheForChannelByNameSkipClusterSend(teamId, name string) {
|
func (a *App) invalidateCacheForChannelByNameSkipClusterSend(teamID, name string) {
|
||||||
if teamId == "" {
|
if teamID == "" {
|
||||||
teamId = "dm"
|
teamID = "dm"
|
||||||
}
|
}
|
||||||
|
|
||||||
a.Srv().Store.Channel().InvalidateChannelByName(teamId, name)
|
a.Srv().Store.Channel().InvalidateChannelByName(teamID, name)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) invalidateCacheForChannelPosts(channelId string) {
|
func (a *App) invalidateCacheForChannelPosts(channelId string) {
|
||||||
@@ -267,31 +267,31 @@ func (a *App) invalidateCacheForChannelPosts(channelId string) {
|
|||||||
a.Srv().Store.Post().InvalidateLastPostTimeCache(channelId)
|
a.Srv().Store.Post().InvalidateLastPostTimeCache(channelId)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) InvalidateCacheForUser(userId string) {
|
func (a *App) InvalidateCacheForUser(userID string) {
|
||||||
a.invalidateCacheForUserSkipClusterSend(userId)
|
a.invalidateCacheForUserSkipClusterSend(userID)
|
||||||
|
|
||||||
a.Srv().Store.User().InvalidateProfilesInChannelCacheByUser(userId)
|
a.Srv().Store.User().InvalidateProfilesInChannelCacheByUser(userID)
|
||||||
a.Srv().Store.User().InvalidateProfileCacheForUser(userId)
|
a.Srv().Store.User().InvalidateProfileCacheForUser(userID)
|
||||||
|
|
||||||
if a.Cluster() != nil {
|
if a.Cluster() != nil {
|
||||||
msg := &model.ClusterMessage{
|
msg := &model.ClusterMessage{
|
||||||
Event: model.CLUSTER_EVENT_INVALIDATE_CACHE_FOR_USER,
|
Event: model.CLUSTER_EVENT_INVALIDATE_CACHE_FOR_USER,
|
||||||
SendType: model.CLUSTER_SEND_BEST_EFFORT,
|
SendType: model.CLUSTER_SEND_BEST_EFFORT,
|
||||||
Data: userId,
|
Data: userID,
|
||||||
}
|
}
|
||||||
a.Cluster().SendClusterMessage(msg)
|
a.Cluster().SendClusterMessage(msg)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) invalidateCacheForUserTeams(userId string) {
|
func (a *App) invalidateCacheForUserTeams(userID string) {
|
||||||
a.InvalidateWebConnSessionCacheForUser(userId)
|
a.InvalidateWebConnSessionCacheForUser(userID)
|
||||||
a.Srv().Store.Team().InvalidateAllTeamIdsForUser(userId)
|
a.Srv().Store.Team().InvalidateAllTeamIdsForUser(userID)
|
||||||
|
|
||||||
if a.Cluster() != nil {
|
if a.Cluster() != nil {
|
||||||
msg := &model.ClusterMessage{
|
msg := &model.ClusterMessage{
|
||||||
Event: model.CLUSTER_EVENT_INVALIDATE_CACHE_FOR_USER_TEAMS,
|
Event: model.CLUSTER_EVENT_INVALIDATE_CACHE_FOR_USER_TEAMS,
|
||||||
SendType: model.CLUSTER_SEND_BEST_EFFORT,
|
SendType: model.CLUSTER_SEND_BEST_EFFORT,
|
||||||
Data: userId,
|
Data: userID,
|
||||||
}
|
}
|
||||||
a.Cluster().SendClusterMessage(msg)
|
a.Cluster().SendClusterMessage(msg)
|
||||||
}
|
}
|
||||||
@@ -331,9 +331,9 @@ func (h *Hub) Unregister(webConn *WebConn) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Determines if a user's session is registered a connection from the hub.
|
// Determines if a user's session is registered a connection from the hub.
|
||||||
func (h *Hub) IsRegistered(userId, sessionToken string) bool {
|
func (h *Hub) IsRegistered(userID, sessionToken string) bool {
|
||||||
ws := &webConnSessionMessage{
|
ws := &webConnSessionMessage{
|
||||||
userId: userId,
|
userID: userID,
|
||||||
sessionToken: sessionToken,
|
sessionToken: sessionToken,
|
||||||
isRegistered: make(chan bool),
|
isRegistered: make(chan bool),
|
||||||
}
|
}
|
||||||
@@ -366,19 +366,19 @@ func (h *Hub) Broadcast(message *model.WebSocketEvent) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// InvalidateUser invalidates the cache for the given user.
|
// InvalidateUser invalidates the cache for the given user.
|
||||||
func (h *Hub) InvalidateUser(userId string) {
|
func (h *Hub) InvalidateUser(userID string) {
|
||||||
select {
|
select {
|
||||||
case h.invalidateUser <- userId:
|
case h.invalidateUser <- userID:
|
||||||
case <-h.stop:
|
case <-h.stop:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// UpdateActivity sets the LastUserActivityAt field for the connection
|
// UpdateActivity sets the LastUserActivityAt field for the connection
|
||||||
// of the user.
|
// of the user.
|
||||||
func (h *Hub) UpdateActivity(userId, sessionToken string, activityAt int64) {
|
func (h *Hub) UpdateActivity(userID, sessionToken string, activityAt int64) {
|
||||||
select {
|
select {
|
||||||
case h.activity <- &webConnActivityMessage{
|
case h.activity <- &webConnActivityMessage{
|
||||||
userId: userId,
|
userID: userID,
|
||||||
sessionToken: sessionToken,
|
sessionToken: sessionToken,
|
||||||
activityAt: activityAt,
|
activityAt: activityAt,
|
||||||
}:
|
}:
|
||||||
@@ -417,7 +417,7 @@ func (h *Hub) Start() {
|
|||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case webSessionMessage := <-h.checkRegistered:
|
case webSessionMessage := <-h.checkRegistered:
|
||||||
conns := connIndex.ForUser(webSessionMessage.userId)
|
conns := connIndex.ForUser(webSessionMessage.userID)
|
||||||
var isRegistered bool
|
var isRegistered bool
|
||||||
for _, conn := range conns {
|
for _, conn := range conns {
|
||||||
if conn.GetSessionToken() == webSessionMessage.sessionToken {
|
if conn.GetSessionToken() == webSessionMessage.sessionToken {
|
||||||
@@ -458,12 +458,12 @@ func (h *Hub) Start() {
|
|||||||
h.app.SetStatusLastActivityAt(webConn.UserId, latestActivity)
|
h.app.SetStatusLastActivityAt(webConn.UserId, latestActivity)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
case userId := <-h.invalidateUser:
|
case userID := <-h.invalidateUser:
|
||||||
for _, webConn := range connIndex.ForUser(userId) {
|
for _, webConn := range connIndex.ForUser(userID) {
|
||||||
webConn.InvalidateCache()
|
webConn.InvalidateCache()
|
||||||
}
|
}
|
||||||
case activity := <-h.activity:
|
case activity := <-h.activity:
|
||||||
for _, webConn := range connIndex.ForUser(activity.userId) {
|
for _, webConn := range connIndex.ForUser(activity.userID) {
|
||||||
if webConn.GetSessionToken() == activity.sessionToken {
|
if webConn.GetSessionToken() == activity.sessionToken {
|
||||||
webConn.lastUserActivityAt = activity.activityAt
|
webConn.lastUserActivityAt = activity.activityAt
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,9 +36,9 @@ func dummyWebsocketHandler(t *testing.T) http.HandlerFunc {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func registerDummyWebConn(t *testing.T, a *App, addr net.Addr, userId string) *WebConn {
|
func registerDummyWebConn(t *testing.T, a *App, addr net.Addr, userID string) *WebConn {
|
||||||
session, appErr := a.CreateSession(&model.Session{
|
session, appErr := a.CreateSession(&model.Session{
|
||||||
UserId: userId,
|
UserId: userID,
|
||||||
})
|
})
|
||||||
require.Nil(t, appErr)
|
require.Nil(t, appErr)
|
||||||
|
|
||||||
@@ -173,7 +173,7 @@ func TestHubSessionRevokeRace(t *testing.T) {
|
|||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
for i := 0; i <= broadcastQueueSize; i++ {
|
for i := 0; i <= broadcastQueueSize; i++ {
|
||||||
hub.Broadcast(model.NewWebSocketEvent("", "teamId", "", "", nil))
|
hub.Broadcast(model.NewWebSocketEvent("", "teamID", "", "", nil))
|
||||||
}
|
}
|
||||||
close(done)
|
close(done)
|
||||||
}()
|
}()
|
||||||
|
|||||||
@@ -246,12 +246,12 @@ func SplitWebhookPost(post *model.Post, maxPostSize int) ([]*model.Post, *model.
|
|||||||
return splits, nil
|
return splits, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) CreateWebhookPost(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(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
|
// parse links into Markdown format
|
||||||
linkWithTextRegex := regexp.MustCompile(`<([^\n<\|>]+)\|([^\n>]+)>`)
|
linkWithTextRegex := regexp.MustCompile(`<([^\n<\|>]+)\|([^\n>]+)>`)
|
||||||
text = linkWithTextRegex.ReplaceAllString(text, "[${2}](${1})")
|
text = linkWithTextRegex.ReplaceAllString(text, "[${2}](${1})")
|
||||||
|
|
||||||
post := &model.Post{UserId: userId, ChannelId: channel.Id, Message: text, Type: postType, RootId: postRootId}
|
post := &model.Post{UserId: userID, ChannelId: channel.Id, Message: text, Type: postType, RootId: postRootId}
|
||||||
post.AddProp("from_webhook", "true")
|
post.AddProp("from_webhook", "true")
|
||||||
|
|
||||||
if strings.HasPrefix(post.Type, model.POST_SYSTEM_MESSAGE_PREFIX) {
|
if strings.HasPrefix(post.Type, model.POST_SYSTEM_MESSAGE_PREFIX) {
|
||||||
@@ -272,8 +272,8 @@ func (a *App) CreateWebhookPost(userId string, channel *model.Channel, text, ove
|
|||||||
}
|
}
|
||||||
|
|
||||||
if *a.Config().ServiceSettings.EnablePostIconOverride {
|
if *a.Config().ServiceSettings.EnablePostIconOverride {
|
||||||
if overrideIconUrl != "" {
|
if overrideIconURL != "" {
|
||||||
post.AddProp("override_icon_url", overrideIconUrl)
|
post.AddProp("override_icon_url", overrideIconURL)
|
||||||
}
|
}
|
||||||
if overrideIconEmoji != "" {
|
if overrideIconEmoji != "" {
|
||||||
post.AddProp("override_icon_emoji", overrideIconEmoji)
|
post.AddProp("override_icon_emoji", overrideIconEmoji)
|
||||||
@@ -373,26 +373,26 @@ func (a *App) UpdateIncomingWebhook(oldHook, updatedHook *model.IncomingWebhook)
|
|||||||
return newWebhook, nil
|
return newWebhook, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) DeleteIncomingWebhook(hookId string) *model.AppError {
|
func (a *App) DeleteIncomingWebhook(hookID string) *model.AppError {
|
||||||
if !*a.Config().ServiceSettings.EnableIncomingWebhooks {
|
if !*a.Config().ServiceSettings.EnableIncomingWebhooks {
|
||||||
return model.NewAppError("DeleteIncomingWebhook", "api.incoming_webhook.disabled.app_error", nil, "", http.StatusNotImplemented)
|
return model.NewAppError("DeleteIncomingWebhook", "api.incoming_webhook.disabled.app_error", nil, "", http.StatusNotImplemented)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := a.Srv().Store.Webhook().DeleteIncoming(hookId, model.GetMillis()); err != nil {
|
if err := a.Srv().Store.Webhook().DeleteIncoming(hookID, model.GetMillis()); err != nil {
|
||||||
return model.NewAppError("DeleteIncomingWebhook", "app.webhooks.delete_incoming.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return model.NewAppError("DeleteIncomingWebhook", "app.webhooks.delete_incoming.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
|
|
||||||
a.invalidateCacheForWebhook(hookId)
|
a.invalidateCacheForWebhook(hookID)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetIncomingWebhook(hookId string) (*model.IncomingWebhook, *model.AppError) {
|
func (a *App) GetIncomingWebhook(hookID string) (*model.IncomingWebhook, *model.AppError) {
|
||||||
if !*a.Config().ServiceSettings.EnableIncomingWebhooks {
|
if !*a.Config().ServiceSettings.EnableIncomingWebhooks {
|
||||||
return nil, model.NewAppError("GetIncomingWebhook", "api.incoming_webhook.disabled.app_error", nil, "", http.StatusNotImplemented)
|
return nil, model.NewAppError("GetIncomingWebhook", "api.incoming_webhook.disabled.app_error", nil, "", http.StatusNotImplemented)
|
||||||
}
|
}
|
||||||
|
|
||||||
webhook, err := a.Srv().Store.Webhook().GetIncoming(hookId, true)
|
webhook, err := a.Srv().Store.Webhook().GetIncoming(hookID, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
var nfErr *store.ErrNotFound
|
var nfErr *store.ErrNotFound
|
||||||
switch {
|
switch {
|
||||||
@@ -406,16 +406,16 @@ func (a *App) GetIncomingWebhook(hookId string) (*model.IncomingWebhook, *model.
|
|||||||
return webhook, nil
|
return webhook, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetIncomingWebhooksForTeamPage(teamId string, page, perPage int) ([]*model.IncomingWebhook, *model.AppError) {
|
func (a *App) GetIncomingWebhooksForTeamPage(teamID string, page, perPage int) ([]*model.IncomingWebhook, *model.AppError) {
|
||||||
return a.GetIncomingWebhooksForTeamPageByUser(teamId, "", page, perPage)
|
return a.GetIncomingWebhooksForTeamPageByUser(teamID, "", page, perPage)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetIncomingWebhooksForTeamPageByUser(teamId string, userId string, page, perPage int) ([]*model.IncomingWebhook, *model.AppError) {
|
func (a *App) GetIncomingWebhooksForTeamPageByUser(teamID string, userID string, page, perPage int) ([]*model.IncomingWebhook, *model.AppError) {
|
||||||
if !*a.Config().ServiceSettings.EnableIncomingWebhooks {
|
if !*a.Config().ServiceSettings.EnableIncomingWebhooks {
|
||||||
return nil, model.NewAppError("GetIncomingWebhooksForTeamPage", "api.incoming_webhook.disabled.app_error", nil, "", http.StatusNotImplemented)
|
return nil, model.NewAppError("GetIncomingWebhooksForTeamPage", "api.incoming_webhook.disabled.app_error", nil, "", http.StatusNotImplemented)
|
||||||
}
|
}
|
||||||
|
|
||||||
webhooks, err := a.Srv().Store.Webhook().GetIncomingByTeamByUser(teamId, userId, page*perPage, perPage)
|
webhooks, err := a.Srv().Store.Webhook().GetIncomingByTeamByUser(teamID, userID, page*perPage, perPage)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("GetIncomingWebhooksForTeamPage", "app.webhooks.get_incoming_by_user.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("GetIncomingWebhooksForTeamPage", "app.webhooks.get_incoming_by_user.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -423,12 +423,12 @@ func (a *App) GetIncomingWebhooksForTeamPageByUser(teamId string, userId string,
|
|||||||
return webhooks, nil
|
return webhooks, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetIncomingWebhooksPageByUser(userId string, page, perPage int) ([]*model.IncomingWebhook, *model.AppError) {
|
func (a *App) GetIncomingWebhooksPageByUser(userID string, page, perPage int) ([]*model.IncomingWebhook, *model.AppError) {
|
||||||
if !*a.Config().ServiceSettings.EnableIncomingWebhooks {
|
if !*a.Config().ServiceSettings.EnableIncomingWebhooks {
|
||||||
return nil, model.NewAppError("GetIncomingWebhooksPageByUser", "api.incoming_webhook.disabled.app_error", nil, "", http.StatusNotImplemented)
|
return nil, model.NewAppError("GetIncomingWebhooksPageByUser", "api.incoming_webhook.disabled.app_error", nil, "", http.StatusNotImplemented)
|
||||||
}
|
}
|
||||||
|
|
||||||
webhooks, err := a.Srv().Store.Webhook().GetIncomingListByUser(userId, page*perPage, perPage)
|
webhooks, err := a.Srv().Store.Webhook().GetIncomingListByUser(userID, page*perPage, perPage)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("GetIncomingWebhooksPageByUser", "app.webhooks.get_incoming_by_user.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("GetIncomingWebhooksPageByUser", "app.webhooks.get_incoming_by_user.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -548,12 +548,12 @@ func (a *App) UpdateOutgoingWebhook(oldHook, updatedHook *model.OutgoingWebhook)
|
|||||||
return webhook, nil
|
return webhook, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetOutgoingWebhook(hookId string) (*model.OutgoingWebhook, *model.AppError) {
|
func (a *App) GetOutgoingWebhook(hookID string) (*model.OutgoingWebhook, *model.AppError) {
|
||||||
if !*a.Config().ServiceSettings.EnableOutgoingWebhooks {
|
if !*a.Config().ServiceSettings.EnableOutgoingWebhooks {
|
||||||
return nil, model.NewAppError("GetOutgoingWebhook", "api.outgoing_webhook.disabled.app_error", nil, "", http.StatusNotImplemented)
|
return nil, model.NewAppError("GetOutgoingWebhook", "api.outgoing_webhook.disabled.app_error", nil, "", http.StatusNotImplemented)
|
||||||
}
|
}
|
||||||
|
|
||||||
webhook, err := a.Srv().Store.Webhook().GetOutgoing(hookId)
|
webhook, err := a.Srv().Store.Webhook().GetOutgoing(hookID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
var nfErr *store.ErrNotFound
|
var nfErr *store.ErrNotFound
|
||||||
switch {
|
switch {
|
||||||
@@ -571,12 +571,12 @@ func (a *App) GetOutgoingWebhooksPage(page, perPage int) ([]*model.OutgoingWebho
|
|||||||
return a.GetOutgoingWebhooksPageByUser("", page, perPage)
|
return a.GetOutgoingWebhooksPageByUser("", page, perPage)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetOutgoingWebhooksPageByUser(userId string, page, perPage int) ([]*model.OutgoingWebhook, *model.AppError) {
|
func (a *App) GetOutgoingWebhooksPageByUser(userID string, page, perPage int) ([]*model.OutgoingWebhook, *model.AppError) {
|
||||||
if !*a.Config().ServiceSettings.EnableOutgoingWebhooks {
|
if !*a.Config().ServiceSettings.EnableOutgoingWebhooks {
|
||||||
return nil, model.NewAppError("GetOutgoingWebhooksPageByUser", "api.outgoing_webhook.disabled.app_error", nil, "", http.StatusNotImplemented)
|
return nil, model.NewAppError("GetOutgoingWebhooksPageByUser", "api.outgoing_webhook.disabled.app_error", nil, "", http.StatusNotImplemented)
|
||||||
}
|
}
|
||||||
|
|
||||||
webhooks, err := a.Srv().Store.Webhook().GetOutgoingListByUser(userId, page*perPage, perPage)
|
webhooks, err := a.Srv().Store.Webhook().GetOutgoingListByUser(userID, page*perPage, perPage)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("GetOutgoingWebhooksPageByUser", "app.webhooks.get_outgoing_by_channel.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("GetOutgoingWebhooksPageByUser", "app.webhooks.get_outgoing_by_channel.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -584,12 +584,12 @@ func (a *App) GetOutgoingWebhooksPageByUser(userId string, page, perPage int) ([
|
|||||||
return webhooks, nil
|
return webhooks, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetOutgoingWebhooksForChannelPageByUser(channelId string, userId string, page, perPage int) ([]*model.OutgoingWebhook, *model.AppError) {
|
func (a *App) GetOutgoingWebhooksForChannelPageByUser(channelId string, userID string, page, perPage int) ([]*model.OutgoingWebhook, *model.AppError) {
|
||||||
if !*a.Config().ServiceSettings.EnableOutgoingWebhooks {
|
if !*a.Config().ServiceSettings.EnableOutgoingWebhooks {
|
||||||
return nil, model.NewAppError("GetOutgoingWebhooksForChannelPage", "api.outgoing_webhook.disabled.app_error", nil, "", http.StatusNotImplemented)
|
return nil, model.NewAppError("GetOutgoingWebhooksForChannelPage", "api.outgoing_webhook.disabled.app_error", nil, "", http.StatusNotImplemented)
|
||||||
}
|
}
|
||||||
|
|
||||||
webhooks, err := a.Srv().Store.Webhook().GetOutgoingByChannelByUser(channelId, userId, page*perPage, perPage)
|
webhooks, err := a.Srv().Store.Webhook().GetOutgoingByChannelByUser(channelId, userID, page*perPage, perPage)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("GetOutgoingWebhooksForChannelPage", "app.webhooks.get_outgoing_by_channel.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("GetOutgoingWebhooksForChannelPage", "app.webhooks.get_outgoing_by_channel.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -597,16 +597,16 @@ func (a *App) GetOutgoingWebhooksForChannelPageByUser(channelId string, userId s
|
|||||||
return webhooks, nil
|
return webhooks, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetOutgoingWebhooksForTeamPage(teamId string, page, perPage int) ([]*model.OutgoingWebhook, *model.AppError) {
|
func (a *App) GetOutgoingWebhooksForTeamPage(teamID string, page, perPage int) ([]*model.OutgoingWebhook, *model.AppError) {
|
||||||
return a.GetOutgoingWebhooksForTeamPageByUser(teamId, "", page, perPage)
|
return a.GetOutgoingWebhooksForTeamPageByUser(teamID, "", page, perPage)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetOutgoingWebhooksForTeamPageByUser(teamId string, userId string, page, perPage int) ([]*model.OutgoingWebhook, *model.AppError) {
|
func (a *App) GetOutgoingWebhooksForTeamPageByUser(teamID string, userID string, page, perPage int) ([]*model.OutgoingWebhook, *model.AppError) {
|
||||||
if !*a.Config().ServiceSettings.EnableOutgoingWebhooks {
|
if !*a.Config().ServiceSettings.EnableOutgoingWebhooks {
|
||||||
return nil, model.NewAppError("GetOutgoingWebhooksForTeamPageByUser", "api.outgoing_webhook.disabled.app_error", nil, "", http.StatusNotImplemented)
|
return nil, model.NewAppError("GetOutgoingWebhooksForTeamPageByUser", "api.outgoing_webhook.disabled.app_error", nil, "", http.StatusNotImplemented)
|
||||||
}
|
}
|
||||||
|
|
||||||
webhooks, err := a.Srv().Store.Webhook().GetOutgoingByTeamByUser(teamId, userId, page*perPage, perPage)
|
webhooks, err := a.Srv().Store.Webhook().GetOutgoingByTeamByUser(teamID, userID, page*perPage, perPage)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("GetOutgoingWebhooksForTeamPageByUser", "app.webhooks.get_outgoing_by_team.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return nil, model.NewAppError("GetOutgoingWebhooksForTeamPageByUser", "app.webhooks.get_outgoing_by_team.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
@@ -614,12 +614,12 @@ func (a *App) GetOutgoingWebhooksForTeamPageByUser(teamId string, userId string,
|
|||||||
return webhooks, nil
|
return webhooks, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) DeleteOutgoingWebhook(hookId string) *model.AppError {
|
func (a *App) DeleteOutgoingWebhook(hookID string) *model.AppError {
|
||||||
if !*a.Config().ServiceSettings.EnableOutgoingWebhooks {
|
if !*a.Config().ServiceSettings.EnableOutgoingWebhooks {
|
||||||
return model.NewAppError("DeleteOutgoingWebhook", "api.outgoing_webhook.disabled.app_error", nil, "", http.StatusNotImplemented)
|
return model.NewAppError("DeleteOutgoingWebhook", "api.outgoing_webhook.disabled.app_error", nil, "", http.StatusNotImplemented)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := a.Srv().Store.Webhook().DeleteOutgoing(hookId, model.GetMillis()); err != nil {
|
if err := a.Srv().Store.Webhook().DeleteOutgoing(hookID, model.GetMillis()); err != nil {
|
||||||
return model.NewAppError("DeleteOutgoingWebhook", "app.webhooks.delete_outgoing.app_error", nil, err.Error(), http.StatusInternalServerError)
|
return model.NewAppError("DeleteOutgoingWebhook", "app.webhooks.delete_outgoing.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -641,14 +641,14 @@ func (a *App) RegenOutgoingWebhookToken(hook *model.OutgoingWebhook) (*model.Out
|
|||||||
return webhook, nil
|
return webhook, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) HandleIncomingWebhook(hookId string, req *model.IncomingWebhookRequest) *model.AppError {
|
func (a *App) HandleIncomingWebhook(hookID string, req *model.IncomingWebhookRequest) *model.AppError {
|
||||||
if !*a.Config().ServiceSettings.EnableIncomingWebhooks {
|
if !*a.Config().ServiceSettings.EnableIncomingWebhooks {
|
||||||
return model.NewAppError("HandleIncomingWebhook", "web.incoming_webhook.disabled.app_error", nil, "", http.StatusNotImplemented)
|
return model.NewAppError("HandleIncomingWebhook", "web.incoming_webhook.disabled.app_error", nil, "", http.StatusNotImplemented)
|
||||||
}
|
}
|
||||||
|
|
||||||
hchan := make(chan store.StoreResult, 1)
|
hchan := make(chan store.StoreResult, 1)
|
||||||
go func() {
|
go func() {
|
||||||
webhook, err := a.Srv().Store.Webhook().GetIncoming(hookId, true)
|
webhook, err := a.Srv().Store.Webhook().GetIncoming(hookID, true)
|
||||||
hchan <- store.StoreResult{Data: webhook, NErr: err}
|
hchan <- store.StoreResult{Data: webhook, NErr: err}
|
||||||
close(hchan)
|
close(hchan)
|
||||||
}()
|
}()
|
||||||
@@ -775,18 +775,18 @@ func (a *App) HandleIncomingWebhook(hookId string, req *model.IncomingWebhookReq
|
|||||||
overrideUsername = req.Username
|
overrideUsername = req.Username
|
||||||
}
|
}
|
||||||
|
|
||||||
overrideIconUrl := hook.IconURL
|
overrideIconURL := hook.IconURL
|
||||||
if req.IconURL != "" {
|
if req.IconURL != "" {
|
||||||
overrideIconUrl = req.IconURL
|
overrideIconURL = req.IconURL
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := a.CreateWebhookPost(hook.UserId, channel, text, overrideUsername, overrideIconUrl, req.IconEmoji, req.Props, webhookType, "")
|
_, err := a.CreateWebhookPost(hook.UserId, channel, text, overrideUsername, overrideIconURL, req.IconEmoji, req.Props, webhookType, "")
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) CreateCommandWebhook(commandId string, args *model.CommandArgs) (*model.CommandWebhook, *model.AppError) {
|
func (a *App) CreateCommandWebhook(commandID string, args *model.CommandArgs) (*model.CommandWebhook, *model.AppError) {
|
||||||
hook := &model.CommandWebhook{
|
hook := &model.CommandWebhook{
|
||||||
CommandId: commandId,
|
CommandId: commandID,
|
||||||
UserId: args.UserId,
|
UserId: args.UserId,
|
||||||
ChannelId: args.ChannelId,
|
ChannelId: args.ChannelId,
|
||||||
RootId: args.RootId,
|
RootId: args.RootId,
|
||||||
@@ -810,17 +810,17 @@ func (a *App) CreateCommandWebhook(commandId string, args *model.CommandArgs) (*
|
|||||||
return savedHook, nil
|
return savedHook, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) HandleCommandWebhook(hookId string, response *model.CommandResponse) *model.AppError {
|
func (a *App) HandleCommandWebhook(hookID string, response *model.CommandResponse) *model.AppError {
|
||||||
if response == nil {
|
if response == nil {
|
||||||
return model.NewAppError("HandleCommandWebhook", "app.command_webhook.handle_command_webhook.parse", nil, "", http.StatusBadRequest)
|
return model.NewAppError("HandleCommandWebhook", "app.command_webhook.handle_command_webhook.parse", nil, "", http.StatusBadRequest)
|
||||||
}
|
}
|
||||||
|
|
||||||
hook, nErr := a.Srv().Store.CommandWebhook().Get(hookId)
|
hook, nErr := a.Srv().Store.CommandWebhook().Get(hookID)
|
||||||
if nErr != nil {
|
if nErr != nil {
|
||||||
var nfErr *store.ErrNotFound
|
var nfErr *store.ErrNotFound
|
||||||
switch {
|
switch {
|
||||||
case errors.As(nErr, &nfErr):
|
case errors.As(nErr, &nfErr):
|
||||||
return model.NewAppError("HandleCommandWebhook", "app.command_webhook.get.missing", map[string]interface{}{"hook_id": hookId}, nfErr.Error(), http.StatusNotFound)
|
return model.NewAppError("HandleCommandWebhook", "app.command_webhook.get.missing", map[string]interface{}{"hook_id": hookID}, nfErr.Error(), http.StatusNotFound)
|
||||||
default:
|
default:
|
||||||
return model.NewAppError("HandleCommandWebhook", "app.command_webhook.get.internal_error", nil, nErr.Error(), http.StatusInternalServerError)
|
return model.NewAppError("HandleCommandWebhook", "app.command_webhook.get.internal_error", nil, nErr.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -607,7 +607,7 @@ func TestTriggerOutGoingWebhookWithUsernameAndIconURL(t *testing.T) {
|
|||||||
EnablePostUsernameOverride bool
|
EnablePostUsernameOverride bool
|
||||||
EnablePostIconOverride bool
|
EnablePostIconOverride bool
|
||||||
ExpectedUsername string
|
ExpectedUsername string
|
||||||
ExpectedIconUrl string
|
ExpectedIconURL string
|
||||||
WebhookResponse *model.OutgoingWebhookResponse
|
WebhookResponse *model.OutgoingWebhookResponse
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -637,7 +637,7 @@ func TestTriggerOutGoingWebhookWithUsernameAndIconURL(t *testing.T) {
|
|||||||
EnablePostUsernameOverride: true,
|
EnablePostUsernameOverride: true,
|
||||||
EnablePostIconOverride: true,
|
EnablePostIconOverride: true,
|
||||||
ExpectedUsername: "some-user-name",
|
ExpectedUsername: "some-user-name",
|
||||||
ExpectedIconUrl: "http://some-icon/",
|
ExpectedIconURL: "http://some-icon/",
|
||||||
},
|
},
|
||||||
"Should not override username and Icon": {
|
"Should not override username and Icon": {
|
||||||
EnablePostUsernameOverride: false,
|
EnablePostUsernameOverride: false,
|
||||||
@@ -647,7 +647,7 @@ func TestTriggerOutGoingWebhookWithUsernameAndIconURL(t *testing.T) {
|
|||||||
EnablePostUsernameOverride: true,
|
EnablePostUsernameOverride: true,
|
||||||
EnablePostIconOverride: true,
|
EnablePostIconOverride: true,
|
||||||
ExpectedUsername: "webhookuser",
|
ExpectedUsername: "webhookuser",
|
||||||
ExpectedIconUrl: "http://webhok/icon",
|
ExpectedIconURL: "http://webhok/icon",
|
||||||
WebhookResponse: &model.OutgoingWebhookResponse{Text: &webHookResponse, Username: "webhookuser", IconURL: "http://webhok/icon"},
|
WebhookResponse: &model.OutgoingWebhookResponse{Text: &webHookResponse, Username: "webhookuser", IconURL: "http://webhok/icon"},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@@ -692,8 +692,8 @@ func TestTriggerOutGoingWebhookWithUsernameAndIconURL(t *testing.T) {
|
|||||||
case webhookPost := <-createdPost:
|
case webhookPost := <-createdPost:
|
||||||
assert.Equal(t, webhookPost.Message, "sample response text from test server")
|
assert.Equal(t, webhookPost.Message, "sample response text from test server")
|
||||||
assert.Equal(t, webhookPost.GetProp("from_webhook"), "true")
|
assert.Equal(t, webhookPost.GetProp("from_webhook"), "true")
|
||||||
if testCase.ExpectedIconUrl != "" {
|
if testCase.ExpectedIconURL != "" {
|
||||||
assert.Equal(t, webhookPost.GetProp("override_icon_url"), testCase.ExpectedIconUrl)
|
assert.Equal(t, webhookPost.GetProp("override_icon_url"), testCase.ExpectedIconURL)
|
||||||
} else {
|
} else {
|
||||||
assert.Nil(t, webhookPost.GetProp("override_icon_url"))
|
assert.Nil(t, webhookPost.GetProp("override_icon_url"))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -73,9 +73,9 @@ func dummyWebsocketHandler() http.HandlerFunc {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func registerDummyWebConn(a *App, addr net.Addr, userId string) *WebConn {
|
func registerDummyWebConn(a *App, addr net.Addr, userID string) *WebConn {
|
||||||
session, appErr := a.CreateSession(&model.Session{
|
session, appErr := a.CreateSession(&model.Session{
|
||||||
UserId: userId,
|
UserId: userID,
|
||||||
})
|
})
|
||||||
if appErr != nil {
|
if appErr != nil {
|
||||||
panic(appErr)
|
panic(appErr)
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user