Migrate to idiomatic error handling in app/team.go (#9701)

Этот коммит содержится в:
Hanzei
2018-10-30 12:55:59 +01:00
коммит произвёл George Goldberg
родитель 2b6d6acb78
Коммит a8b867cd52

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

@@ -14,7 +14,6 @@ import (
"strings" "strings"
"github.com/disintegration/imaging" "github.com/disintegration/imaging"
"github.com/mattermost/mattermost-server/mlog" "github.com/mattermost/mattermost-server/mlog"
"github.com/mattermost/mattermost-server/model" "github.com/mattermost/mattermost-server/model"
"github.com/mattermost/mattermost-server/plugin" "github.com/mattermost/mattermost-server/plugin"
@@ -22,34 +21,32 @@ import (
) )
func (a *App) CreateTeam(team *model.Team) (*model.Team, *model.AppError) { func (a *App) CreateTeam(team *model.Team) (*model.Team, *model.AppError) {
if result := <-a.Srv.Store.Team().Save(team); result.Err != nil { result := <-a.Srv.Store.Team().Save(team)
if result.Err != nil {
return nil, result.Err return nil, result.Err
} else {
rteam := result.Data.(*model.Team)
if _, err := a.CreateDefaultChannels(rteam.Id); err != nil {
return nil, err
}
return rteam, nil
} }
rteam := result.Data.(*model.Team)
if _, err := a.CreateDefaultChannels(rteam.Id); err != nil {
return nil, err
}
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) {
var user *model.User user, err := a.GetUser(userId)
var err *model.AppError if err != nil {
if user, err = a.GetUser(userId); err != nil {
return nil, err return nil, err
} else {
team.Email = user.Email
} }
team.Email = user.Email
if !a.isTeamEmailAllowed(user, team) { if !a.isTeamEmailAllowed(user, team) {
return nil, model.NewAppError("isTeamEmailAllowed", "api.team.is_team_creation_allowed.domain.app_error", nil, "", http.StatusBadRequest) return nil, model.NewAppError("isTeamEmailAllowed", "api.team.is_team_creation_allowed.domain.app_error", nil, "", http.StatusBadRequest)
} }
var rteam *model.Team rteam, err := a.CreateTeam(team)
if rteam, err = a.CreateTeam(team); err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -100,9 +97,8 @@ func (a *App) isTeamEmailAllowed(user *model.User, team *model.Team) bool {
} }
func (a *App) UpdateTeam(team *model.Team) (*model.Team, *model.AppError) { func (a *App) UpdateTeam(team *model.Team) (*model.Team, *model.AppError) {
var oldTeam *model.Team oldTeam, err := a.GetTeam(team.Id)
var err *model.AppError if err != nil {
if oldTeam, err = a.GetTeam(team.Id); err != nil {
return nil, err return nil, err
} }
@@ -117,7 +113,7 @@ func (a *App) UpdateTeam(team *model.Team) (*model.Team, *model.AppError) {
} }
} }
if !matched { if !matched {
err := model.NewAppError("UpdateTeam", "api.team.update_restricted_domains.mismatch.app_error", map[string]interface{}{"Domain": domain}, "", http.StatusBadRequest) err = model.NewAppError("UpdateTeam", "api.team.update_restricted_domains.mismatch.app_error", map[string]interface{}{"Domain": domain}, "", http.StatusBadRequest)
return nil, err return nil, err
} }
} }
@@ -142,17 +138,17 @@ func (a *App) UpdateTeam(team *model.Team) (*model.Team, *model.AppError) {
} }
func (a *App) updateTeamUnsanitized(team *model.Team) (*model.Team, *model.AppError) { func (a *App) updateTeamUnsanitized(team *model.Team) (*model.Team, *model.AppError) {
if result := <-a.Srv.Store.Team().Update(team); result.Err != nil { result := <-a.Srv.Store.Team().Update(team)
if result.Err != nil {
return nil, result.Err return nil, result.Err
} else {
return result.Data.(*model.Team), nil
} }
return result.Data.(*model.Team), nil
} }
func (a *App) UpdateTeamScheme(team *model.Team) (*model.Team, *model.AppError) { func (a *App) UpdateTeamScheme(team *model.Team) (*model.Team, *model.AppError) {
var oldTeam *model.Team oldTeam, err := a.GetTeam(team.Id)
var err *model.AppError if err != nil {
if oldTeam, err = a.GetTeam(team.Id); err != nil {
return nil, err return nil, err
} }
@@ -196,31 +192,28 @@ func (a *App) sendTeamEvent(team *model.Team, event string) {
} }
func (a *App) GetSchemeRolesForTeam(teamId string) (string, string, *model.AppError) { func (a *App) GetSchemeRolesForTeam(teamId string) (string, string, *model.AppError) {
var team *model.Team team, err := a.GetTeam(teamId)
var err *model.AppError if err != nil {
if team, err = a.GetTeam(teamId); err != nil {
return "", "", err return "", "", err
} }
if team.SchemeId != nil && len(*team.SchemeId) != 0 { if team.SchemeId != nil && len(*team.SchemeId) != 0 {
if scheme, err := a.GetScheme(*team.SchemeId); err != nil { scheme, err := a.GetScheme(*team.SchemeId)
if err != nil {
return "", "", err return "", "", err
} else {
return scheme.DefaultTeamUserRole, scheme.DefaultTeamAdminRole, nil
} }
return scheme.DefaultTeamUserRole, scheme.DefaultTeamAdminRole, nil
} }
return model.TEAM_USER_ROLE_ID, model.TEAM_ADMIN_ROLE_ID, nil return 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) {
var member *model.TeamMember result := <-a.Srv.Store.Team().GetMember(teamId, userId)
if result := <-a.Srv.Store.Team().GetMember(teamId, userId); result.Err != nil { if result.Err != nil {
return nil, result.Err return nil, result.Err
} else {
member = result.Data.(*model.TeamMember)
} }
member := result.Data.(*model.TeamMember)
if member == nil { if member == nil {
err := model.NewAppError("UpdateTeamMemberRoles", "api.team.update_member_roles.not_a_member", nil, "userId="+userId+" teamId="+teamId, http.StatusBadRequest) err := model.NewAppError("UpdateTeamMemberRoles", "api.team.update_member_roles.not_a_member", nil, "userId="+userId+" teamId="+teamId, http.StatusBadRequest)
@@ -237,10 +230,12 @@ func (a *App) UpdateTeamMemberRoles(teamId string, userId string, newRoles strin
member.SchemeAdmin = false member.SchemeAdmin = false
for _, roleName := range strings.Fields(newRoles) { for _, roleName := range strings.Fields(newRoles) {
if role, err := a.GetRoleByName(roleName); err != nil { role, err := a.GetRoleByName(roleName)
if err != nil {
err.StatusCode = http.StatusBadRequest err.StatusCode = http.StatusBadRequest
return nil, err return nil, err
} else if !role.SchemeManaged { }
if !role.SchemeManaged {
// The role is not scheme-managed, so it's OK to apply it to the explicit roles field. // The role is not scheme-managed, so it's OK to apply it to the explicit roles field.
newExplicitRoles = append(newExplicitRoles, roleName) newExplicitRoles = append(newExplicitRoles, roleName)
} else { } else {
@@ -259,11 +254,11 @@ func (a *App) UpdateTeamMemberRoles(teamId string, userId string, newRoles strin
member.ExplicitRoles = strings.Join(newExplicitRoles, " ") member.ExplicitRoles = strings.Join(newExplicitRoles, " ")
if result := <-a.Srv.Store.Team().UpdateMember(member); result.Err != nil { result = <-a.Srv.Store.Team().UpdateMember(member)
if result.Err != nil {
return nil, result.Err return nil, result.Err
} else {
member = result.Data.(*model.TeamMember)
} }
member = result.Data.(*model.TeamMember)
a.ClearSessionCacheForUser(userId) a.ClearSessionCacheForUser(userId)
@@ -286,11 +281,11 @@ func (a *App) UpdateTeamMemberSchemeRoles(teamId string, userId string, isScheme
member.ExplicitRoles = RemoveRoles([]string{model.TEAM_USER_ROLE_ID, model.TEAM_ADMIN_ROLE_ID}, member.ExplicitRoles) member.ExplicitRoles = RemoveRoles([]string{model.TEAM_USER_ROLE_ID, model.TEAM_ADMIN_ROLE_ID}, member.ExplicitRoles)
} }
if result := <-a.Srv.Store.Team().UpdateMember(member); result.Err != nil { result := <-a.Srv.Store.Team().UpdateMember(member)
if result.Err != nil {
return nil, result.Err return nil, result.Err
} else {
member = result.Data.(*model.TeamMember)
} }
member = result.Data.(*model.TeamMember)
a.ClearSessionCacheForUser(userId) a.ClearSessionCacheForUser(userId)
@@ -309,19 +304,17 @@ func (a *App) AddUserToTeam(teamId string, userId string, userRequestorId string
tchan := a.Srv.Store.Team().Get(teamId) tchan := a.Srv.Store.Team().Get(teamId)
uchan := a.Srv.Store.User().Get(userId) uchan := a.Srv.Store.User().Get(userId)
var team *model.Team result := <-tchan
if result := <-tchan; result.Err != nil { if result.Err != nil {
return nil, result.Err return nil, result.Err
} else {
team = result.Data.(*model.Team)
} }
team := result.Data.(*model.Team)
var user *model.User result = <-uchan
if result := <-uchan; result.Err != nil { if result.Err != nil {
return nil, result.Err return nil, result.Err
} else {
user = result.Data.(*model.User)
} }
user := result.Data.(*model.User)
if err := a.JoinUserToTeam(team, user, userRequestorId); err != nil { if err := a.JoinUserToTeam(team, user, userRequestorId); err != nil {
return nil, err return nil, err
@@ -331,11 +324,11 @@ func (a *App) AddUserToTeam(teamId string, userId string, userRequestorId string
} }
func (a *App) AddUserToTeamByTeamId(teamId string, user *model.User) *model.AppError { func (a *App) AddUserToTeamByTeamId(teamId string, user *model.User) *model.AppError {
if result := <-a.Srv.Store.Team().Get(teamId); result.Err != nil { result := <-a.Srv.Store.Team().Get(teamId)
if result.Err != nil {
return result.Err return result.Err
} else {
return a.JoinUserToTeam(result.Data.(*model.Team), user, "")
} }
return a.JoinUserToTeam(result.Data.(*model.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) {
@@ -359,19 +352,17 @@ func (a *App) AddUserToTeamByToken(userId string, tokenId string) (*model.Team,
tchan := a.Srv.Store.Team().Get(tokenData["teamId"]) tchan := a.Srv.Store.Team().Get(tokenData["teamId"])
uchan := a.Srv.Store.User().Get(userId) uchan := a.Srv.Store.User().Get(userId)
var team *model.Team result = <-tchan
if result := <-tchan; result.Err != nil { if result.Err != nil {
return nil, result.Err return nil, result.Err
} else {
team = result.Data.(*model.Team)
} }
team := result.Data.(*model.Team)
var user *model.User result = <-uchan
if result := <-uchan; result.Err != nil { if result.Err != nil {
return nil, result.Err return nil, result.Err
} else {
user = result.Data.(*model.User)
} }
user := result.Data.(*model.User)
if err := a.JoinUserToTeam(team, user, ""); err != nil { if err := a.JoinUserToTeam(team, user, ""); err != nil {
return nil, err return nil, err
@@ -388,19 +379,17 @@ func (a *App) AddUserToTeamByInviteId(inviteId string, userId string) (*model.Te
tchan := a.Srv.Store.Team().GetByInviteId(inviteId) tchan := a.Srv.Store.Team().GetByInviteId(inviteId)
uchan := a.Srv.Store.User().Get(userId) uchan := a.Srv.Store.User().Get(userId)
var team *model.Team result := <-tchan
if result := <-tchan; result.Err != nil { if result.Err != nil {
return nil, result.Err return nil, result.Err
} else {
team = result.Data.(*model.Team)
} }
team := result.Data.(*model.Team)
var user *model.User result = <-uchan
if result := <-uchan; result.Err != nil { if result.Err != nil {
return nil, result.Err return nil, result.Err
} else {
user = result.Data.(*model.User)
} }
user := result.Data.(*model.User)
if err := a.JoinUserToTeam(team, user, ""); err != nil { if err := a.JoinUserToTeam(team, user, ""); err != nil {
return nil, err return nil, err
@@ -424,34 +413,39 @@ func (a *App) joinUserToTeam(team *model.Team, user *model.User) (*model.TeamMem
tm.SchemeAdmin = true tm.SchemeAdmin = true
} }
if etmr := <-a.Srv.Store.Team().GetMember(team.Id, user.Id); etmr.Err == nil { etmr := <-a.Srv.Store.Team().GetMember(team.Id, user.Id)
// Membership already exists. Check if deleted and and update, otherwise do nothing if etmr.Err != nil {
rtm := etmr.Data.(*model.TeamMember) // Membership appears to be missing. Lets try to add.
tmr := <-a.Srv.Store.Team().SaveMember(tm, *a.Config().TeamSettings.MaxUsersPerTeam)
// Do nothing if already added if tmr.Err != nil {
if rtm.DeleteAt == 0 {
return rtm, true, nil
}
if membersCount := <-a.Srv.Store.Team().GetActiveMemberCount(tm.TeamId); membersCount.Err != nil {
return nil, false, membersCount.Err
} else if membersCount.Data.(int64) >= int64(*a.Config().TeamSettings.MaxUsersPerTeam) {
return nil, false, model.NewAppError("joinUserToTeam", "app.team.join_user_to_team.max_accounts.app_error", nil, "teamId="+tm.TeamId, http.StatusBadRequest)
} else {
if tmr := <-a.Srv.Store.Team().UpdateMember(tm); tmr.Err != nil {
return nil, false, tmr.Err
} else {
return tmr.Data.(*model.TeamMember), false, nil
}
}
} else {
// Membership appears to be missing. Lets try to add.
if tmr := <-a.Srv.Store.Team().SaveMember(tm, *a.Config().TeamSettings.MaxUsersPerTeam); tmr.Err != nil {
return nil, false, tmr.Err return nil, false, tmr.Err
} else {
return tmr.Data.(*model.TeamMember), false, nil
} }
return tmr.Data.(*model.TeamMember), false, nil
} }
// Membership already exists. Check if deleted and and update, otherwise do nothing
rtm := etmr.Data.(*model.TeamMember)
// Do nothing if already added
if rtm.DeleteAt == 0 {
return rtm, true, nil
}
membersCount := <-a.Srv.Store.Team().GetActiveMemberCount(tm.TeamId)
if membersCount.Err != nil {
return nil, false, membersCount.Err
}
if membersCount.Data.(int64) >= int64(*a.Config().TeamSettings.MaxUsersPerTeam) {
return nil, false, model.NewAppError("joinUserToTeam", "app.team.join_user_to_team.max_accounts.app_error", nil, "teamId="+tm.TeamId, http.StatusBadRequest)
}
tmr := <-a.Srv.Store.Team().UpdateMember(tm)
if tmr.Err != nil {
return nil, false, tmr.Err
}
return tmr.Data.(*model.TeamMember), false, nil
} }
func (a *App) JoinUserToTeam(team *model.Team, user *model.User, userRequestorId string) *model.AppError { func (a *App) JoinUserToTeam(team *model.Team, user *model.User, userRequestorId string) *model.AppError {
@@ -461,7 +455,8 @@ func (a *App) JoinUserToTeam(team *model.Team, user *model.User, userRequestorId
tm, alreadyAdded, err := a.joinUserToTeam(team, user) tm, alreadyAdded, err := a.joinUserToTeam(team, user)
if err != nil { if err != nil {
return err return err
} else if alreadyAdded { }
if alreadyAdded {
return nil return nil
} }
@@ -503,116 +498,116 @@ func (a *App) JoinUserToTeam(team *model.Team, user *model.User, userRequestorId
} }
func (a *App) GetTeam(teamId string) (*model.Team, *model.AppError) { func (a *App) GetTeam(teamId string) (*model.Team, *model.AppError) {
if result := <-a.Srv.Store.Team().Get(teamId); result.Err != nil { result := <-a.Srv.Store.Team().Get(teamId)
if result.Err != nil {
return nil, result.Err return nil, result.Err
} else {
return result.Data.(*model.Team), nil
} }
return result.Data.(*model.Team), nil
} }
func (a *App) GetTeamByName(name string) (*model.Team, *model.AppError) { func (a *App) GetTeamByName(name string) (*model.Team, *model.AppError) {
if result := <-a.Srv.Store.Team().GetByName(name); result.Err != nil { result := <-a.Srv.Store.Team().GetByName(name)
if result.Err != nil {
result.Err.StatusCode = http.StatusNotFound result.Err.StatusCode = http.StatusNotFound
return nil, result.Err return nil, result.Err
} else {
return result.Data.(*model.Team), nil
} }
return result.Data.(*model.Team), nil
} }
func (a *App) GetTeamByInviteId(inviteId string) (*model.Team, *model.AppError) { func (a *App) GetTeamByInviteId(inviteId string) (*model.Team, *model.AppError) {
if result := <-a.Srv.Store.Team().GetByInviteId(inviteId); result.Err != nil { result := <-a.Srv.Store.Team().GetByInviteId(inviteId)
if result.Err != nil {
return nil, result.Err return nil, result.Err
} else {
return result.Data.(*model.Team), nil
} }
return result.Data.(*model.Team), nil
} }
func (a *App) GetAllTeams() ([]*model.Team, *model.AppError) { func (a *App) GetAllTeams() ([]*model.Team, *model.AppError) {
if result := <-a.Srv.Store.Team().GetAll(); result.Err != nil { result := <-a.Srv.Store.Team().GetAll()
if result.Err != nil {
return nil, result.Err return nil, result.Err
} else {
return result.Data.([]*model.Team), nil
} }
return result.Data.([]*model.Team), nil
} }
func (a *App) GetAllTeamsPage(offset int, limit int) ([]*model.Team, *model.AppError) { func (a *App) GetAllTeamsPage(offset int, limit int) ([]*model.Team, *model.AppError) {
if result := <-a.Srv.Store.Team().GetAllPage(offset, limit); result.Err != nil { result := <-a.Srv.Store.Team().GetAllPage(offset, limit)
if result.Err != nil {
return nil, result.Err return nil, result.Err
} else {
return result.Data.([]*model.Team), nil
} }
return result.Data.([]*model.Team), nil
} }
func (a *App) GetAllOpenTeams() ([]*model.Team, *model.AppError) { func (a *App) GetAllOpenTeams() ([]*model.Team, *model.AppError) {
if result := <-a.Srv.Store.Team().GetAllTeamListing(); result.Err != nil { result := <-a.Srv.Store.Team().GetAllTeamListing()
if result.Err != nil {
return nil, result.Err return nil, result.Err
} else {
return result.Data.([]*model.Team), nil
} }
return result.Data.([]*model.Team), nil
} }
func (a *App) SearchAllTeams(term string) ([]*model.Team, *model.AppError) { func (a *App) SearchAllTeams(term string) ([]*model.Team, *model.AppError) {
if result := <-a.Srv.Store.Team().SearchAll(term); result.Err != nil { result := <-a.Srv.Store.Team().SearchAll(term)
if result.Err != nil {
return nil, result.Err return nil, result.Err
} else {
return result.Data.([]*model.Team), nil
} }
return result.Data.([]*model.Team), nil
} }
func (a *App) SearchOpenTeams(term string) ([]*model.Team, *model.AppError) { func (a *App) SearchOpenTeams(term string) ([]*model.Team, *model.AppError) {
if result := <-a.Srv.Store.Team().SearchOpen(term); result.Err != nil { result := <-a.Srv.Store.Team().SearchOpen(term)
if result.Err != nil {
return nil, result.Err return nil, result.Err
} else {
return result.Data.([]*model.Team), nil
} }
return result.Data.([]*model.Team), nil
} }
func (a *App) GetAllOpenTeamsPage(offset int, limit int) ([]*model.Team, *model.AppError) { func (a *App) GetAllOpenTeamsPage(offset int, limit int) ([]*model.Team, *model.AppError) {
if result := <-a.Srv.Store.Team().GetAllTeamPageListing(offset, limit); result.Err != nil { result := <-a.Srv.Store.Team().GetAllTeamPageListing(offset, limit)
if result.Err != nil {
return nil, result.Err return nil, result.Err
} else {
return result.Data.([]*model.Team), nil
} }
return result.Data.([]*model.Team), nil
} }
func (a *App) GetTeamsForUser(userId string) ([]*model.Team, *model.AppError) { func (a *App) GetTeamsForUser(userId string) ([]*model.Team, *model.AppError) {
if result := <-a.Srv.Store.Team().GetTeamsByUserId(userId); result.Err != nil { result := <-a.Srv.Store.Team().GetTeamsByUserId(userId)
if result.Err != nil {
return nil, result.Err return nil, result.Err
} else {
return result.Data.([]*model.Team), nil
} }
return result.Data.([]*model.Team), nil
} }
func (a *App) GetTeamMember(teamId, userId string) (*model.TeamMember, *model.AppError) { func (a *App) GetTeamMember(teamId, userId string) (*model.TeamMember, *model.AppError) {
if result := <-a.Srv.Store.Team().GetMember(teamId, userId); result.Err != nil { result := <-a.Srv.Store.Team().GetMember(teamId, userId)
if result.Err != nil {
return nil, result.Err return nil, result.Err
} else {
return result.Data.(*model.TeamMember), nil
} }
return result.Data.(*model.TeamMember), nil
} }
func (a *App) GetTeamMembersForUser(userId string) ([]*model.TeamMember, *model.AppError) { func (a *App) GetTeamMembersForUser(userId string) ([]*model.TeamMember, *model.AppError) {
if result := <-a.Srv.Store.Team().GetTeamsForUser(userId); result.Err != nil { result := <-a.Srv.Store.Team().GetTeamsForUser(userId)
if result.Err != nil {
return nil, result.Err return nil, result.Err
} else {
return result.Data.([]*model.TeamMember), nil
} }
return result.Data.([]*model.TeamMember), nil
} }
func (a *App) GetTeamMembers(teamId string, offset int, limit int) ([]*model.TeamMember, *model.AppError) { func (a *App) GetTeamMembers(teamId string, offset int, limit int) ([]*model.TeamMember, *model.AppError) {
if result := <-a.Srv.Store.Team().GetMembers(teamId, offset, limit); result.Err != nil { result := <-a.Srv.Store.Team().GetMembers(teamId, offset, limit)
if result.Err != nil {
return nil, result.Err return nil, result.Err
} else {
return result.Data.([]*model.TeamMember), nil
} }
return result.Data.([]*model.TeamMember), nil
} }
func (a *App) GetTeamMembersByIds(teamId string, userIds []string) ([]*model.TeamMember, *model.AppError) { func (a *App) GetTeamMembersByIds(teamId string, userIds []string) ([]*model.TeamMember, *model.AppError) {
if result := <-a.Srv.Store.Team().GetMembersByIds(teamId, userIds); result.Err != nil { result := <-a.Srv.Store.Team().GetMembersByIds(teamId, userIds)
if result.Err != nil {
return nil, result.Err return nil, result.Err
} else {
return result.Data.([]*model.TeamMember), nil
} }
return result.Data.([]*model.TeamMember), nil
} }
func (a *App) AddTeamMember(teamId, userId string) (*model.TeamMember, *model.AppError) { func (a *App) AddTeamMember(teamId, userId string) (*model.TeamMember, *model.AppError) {
@@ -641,11 +636,11 @@ func (a *App) AddTeamMembers(teamId string, userIds []string, userRequestorId st
return nil, err return nil, err
} }
if teamMember, err := a.GetTeamMember(teamId, userId); err != nil { teamMember, err := a.GetTeamMember(teamId, userId)
if err != nil {
return nil, err return nil, err
} else {
members = append(members, teamMember)
} }
members = append(members, 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)
@@ -657,33 +652,30 @@ func (a *App) AddTeamMembers(teamId string, userIds []string, userRequestorId st
} }
func (a *App) AddTeamMemberByToken(userId, tokenId string) (*model.TeamMember, *model.AppError) { func (a *App) AddTeamMemberByToken(userId, tokenId string) (*model.TeamMember, *model.AppError) {
var team *model.Team team, err := a.AddUserToTeamByToken(userId, tokenId)
var err *model.AppError if err != nil {
if team, err = a.AddUserToTeamByToken(userId, tokenId); err != nil {
return nil, err return nil, err
} }
if teamMember, err := a.GetTeamMember(team.Id, userId); err != nil { teamMember, err := a.GetTeamMember(team.Id, userId)
if err != nil {
return nil, err return nil, err
} else {
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) {
var team *model.Team team, err := a.AddUserToTeamByInviteId(inviteId, userId)
var err *model.AppError if err != nil {
if team, err = a.AddUserToTeamByInviteId(inviteId, userId); err != nil {
return nil, err return nil, err
} }
if teamMember, err := a.GetTeamMember(team.Id, userId); err != nil { teamMember, err := a.GetTeamMember(team.Id, userId)
if err != nil {
return nil, err return nil, err
} else {
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) {
@@ -714,19 +706,17 @@ func (a *App) RemoveUserFromTeam(teamId string, userId string, requestorId strin
tchan := a.Srv.Store.Team().Get(teamId) tchan := a.Srv.Store.Team().Get(teamId)
uchan := a.Srv.Store.User().Get(userId) uchan := a.Srv.Store.User().Get(userId)
var team *model.Team result := <-tchan
if result := <-tchan; result.Err != nil { if result.Err != nil {
return result.Err return result.Err
} else {
team = result.Data.(*model.Team)
} }
team := result.Data.(*model.Team)
var user *model.User result = <-uchan
if result := <-uchan; result.Err != nil { if result.Err != nil {
return result.Err return result.Err
} else {
user = result.Data.(*model.User)
} }
user := result.Data.(*model.User)
if err := a.LeaveTeam(team, user, requestorId); err != nil { if err := a.LeaveTeam(team, user, requestorId); err != nil {
return err return err
@@ -749,7 +739,6 @@ func (a *App) LeaveTeam(team *model.Team, user *model.User, requestorId string)
} else { } else {
return result.Err return result.Err
} }
} else { } else {
channelList = result.Data.(*model.ChannelList) channelList = result.Data.(*model.ChannelList)
} }
@@ -763,12 +752,11 @@ func (a *App) LeaveTeam(team *model.Team, user *model.User, requestorId string)
} }
} }
var channel *model.Channel result := <-a.Srv.Store.Channel().GetByName(team.Id, model.DEFAULT_CHANNEL, false)
if result := <-a.Srv.Store.Channel().GetByName(team.Id, model.DEFAULT_CHANNEL, false); result.Err != nil { if result.Err != nil {
return result.Err return result.Err
} else {
channel = result.Data.(*model.Channel)
} }
channel := result.Data.(*model.Channel)
if *a.Config().ServiceSettings.ExperimentalEnableDefaultChannelLeaveJoinMessages { if *a.Config().ServiceSettings.ExperimentalEnableDefaultChannelLeaveJoinMessages {
if requestorId == user.Id { if requestorId == user.Id {
@@ -874,19 +862,17 @@ func (a *App) InviteNewUsersToTeam(emailList []string, teamId, senderId string)
tchan := a.Srv.Store.Team().Get(teamId) tchan := a.Srv.Store.Team().Get(teamId)
uchan := a.Srv.Store.User().Get(senderId) uchan := a.Srv.Store.User().Get(senderId)
var team *model.Team result := <-tchan
if result := <-tchan; result.Err != nil { if result.Err != nil {
return result.Err return result.Err
} else {
team = result.Data.(*model.Team)
} }
team := result.Data.(*model.Team)
var user *model.User result = <-uchan
if result := <-uchan; result.Err != nil { if result.Err != nil {
return result.Err return result.Err
} else {
user = result.Data.(*model.User)
} }
user := result.Data.(*model.User)
var invalidEmailList []string var invalidEmailList []string
@@ -911,48 +897,47 @@ func (a *App) InviteNewUsersToTeam(emailList []string, teamId, senderId string)
func (a *App) FindTeamByName(name string) bool { func (a *App) FindTeamByName(name string) bool {
if result := <-a.Srv.Store.Team().GetByName(name); result.Err != nil { if result := <-a.Srv.Store.Team().GetByName(name); result.Err != nil {
return false return false
} else {
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) {
if result := <-a.Srv.Store.Team().GetChannelUnreadsForAllTeams(excludeTeamId, userId); result.Err != nil { result := <-a.Srv.Store.Team().GetChannelUnreadsForAllTeams(excludeTeamId, userId)
if result.Err != nil {
return nil, result.Err return nil, result.Err
} else {
data := result.Data.([]*model.ChannelUnread)
members := []*model.TeamUnread{}
membersMap := make(map[string]*model.TeamUnread)
unreads := func(cu *model.ChannelUnread, tu *model.TeamUnread) *model.TeamUnread {
tu.MentionCount += cu.MentionCount
if cu.NotifyProps["mark_unread"] != model.CHANNEL_MARK_UNREAD_MENTION {
tu.MsgCount += cu.MsgCount
}
return tu
}
for i := range data {
id := data[i].TeamId
if mu, ok := membersMap[id]; ok {
membersMap[id] = unreads(data[i], mu)
} else {
membersMap[id] = unreads(data[i], &model.TeamUnread{
MsgCount: 0,
MentionCount: 0,
TeamId: id,
})
}
}
for _, val := range membersMap {
members = append(members, val)
}
return members, nil
} }
data := result.Data.([]*model.ChannelUnread)
members := []*model.TeamUnread{}
membersMap := make(map[string]*model.TeamUnread)
unreads := func(cu *model.ChannelUnread, tu *model.TeamUnread) *model.TeamUnread {
tu.MentionCount += cu.MentionCount
if cu.NotifyProps["mark_unread"] != model.CHANNEL_MARK_UNREAD_MENTION {
tu.MsgCount += cu.MsgCount
}
return tu
}
for i := range data {
id := data[i].TeamId
if mu, ok := membersMap[id]; ok {
membersMap[id] = unreads(data[i], mu)
} else {
membersMap[id] = unreads(data[i], &model.TeamUnread{
MsgCount: 0,
MentionCount: 0,
TeamId: id,
})
}
}
for _, val := range membersMap {
members = append(members, val)
}
return members, nil
} }
func (a *App) PermanentDeleteTeamId(teamId string) *model.AppError { func (a *App) PermanentDeleteTeamId(teamId string) *model.AppError {
@@ -1021,17 +1006,17 @@ func (a *App) GetTeamStats(teamId string) (*model.TeamStats, *model.AppError) {
stats := &model.TeamStats{} stats := &model.TeamStats{}
stats.TeamId = teamId stats.TeamId = teamId
if result := <-tchan; result.Err != nil { result := <-tchan
if result.Err != nil {
return nil, result.Err return nil, result.Err
} else {
stats.TotalMemberCount = result.Data.(int64)
} }
stats.TotalMemberCount = result.Data.(int64)
if result := <-achan; result.Err != nil { result = <-achan
if result.Err != nil {
return nil, result.Err return nil, result.Err
} else {
stats.ActiveMemberCount = result.Data.(int64)
} }
stats.ActiveMemberCount = result.Data.(int64)
return stats, nil return stats, nil
} }
@@ -1059,13 +1044,14 @@ func (a *App) GetTeamIdFromQuery(query url.Values) (string, *model.AppError) {
tokenData := model.MapFromJson(strings.NewReader(token.Extra)) tokenData := model.MapFromJson(strings.NewReader(token.Extra))
return tokenData["teamId"], nil return tokenData["teamId"], nil
} else if len(inviteId) > 0 { }
if result := <-a.Srv.Store.Team().GetByInviteId(inviteId); result.Err != nil { if len(inviteId) > 0 {
// soft fail, so we still create user but don't auto-join team result := <-a.Srv.Store.Team().GetByInviteId(inviteId)
mlog.Error(fmt.Sprintf("%v", result.Err)) if result.Err == nil {
} else {
return result.Data.(*model.Team).Id, nil return result.Data.(*model.Team).Id, nil
} }
// soft fail, so we still create user but don't auto-join team
mlog.Error(fmt.Sprintf("%v", result.Err))
} }
return "", nil return "", nil
@@ -1090,14 +1076,15 @@ func (a *App) SanitizeTeams(session model.Session, teams []*model.Team) []*model
func (a *App) GetTeamIcon(team *model.Team) ([]byte, *model.AppError) { func (a *App) GetTeamIcon(team *model.Team) ([]byte, *model.AppError) {
if len(*a.Config().FileSettings.DriverName) == 0 { if len(*a.Config().FileSettings.DriverName) == 0 {
return nil, model.NewAppError("GetTeamIcon", "api.team.get_team_icon.filesettings_no_driver.app_error", nil, "", http.StatusNotImplemented) return nil, model.NewAppError("GetTeamIcon", "api.team.get_team_icon.filesettings_no_driver.app_error", nil, "", http.StatusNotImplemented)
} else {
path := "teams/" + team.Id + "/teamIcon.png"
if data, err := a.ReadFile(path); err != nil {
return nil, model.NewAppError("GetTeamIcon", "api.team.get_team_icon.read_file.app_error", nil, err.Error(), http.StatusNotFound)
} else {
return data, nil
}
} }
path := "teams/" + team.Id + "/teamIcon.png"
data, err := a.ReadFile(path)
if err != nil {
return nil, model.NewAppError("GetTeamIcon", "api.team.get_team_icon.read_file.app_error", nil, err.Error(), http.StatusNotFound)
}
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 {
@@ -1110,7 +1097,6 @@ func (a *App) SetTeamIcon(teamId string, imageData *multipart.FileHeader) *model
} }
func (a *App) SetTeamIconFromFile(teamId string, file multipart.File) *model.AppError { func (a *App) SetTeamIconFromFile(teamId string, file multipart.File) *model.AppError {
team, getTeamErr := a.GetTeam(teamId) team, getTeamErr := a.GetTeam(teamId)
if getTeamErr != nil { if getTeamErr != nil {
@@ -1125,7 +1111,8 @@ func (a *App) SetTeamIconFromFile(teamId string, file multipart.File) *model.App
config, _, err := image.DecodeConfig(file) config, _, err := image.DecodeConfig(file)
if err != nil { if err != nil {
return model.NewAppError("SetTeamIcon", "api.team.set_team_icon.decode_config.app_error", nil, err.Error(), http.StatusBadRequest) return model.NewAppError("SetTeamIcon", "api.team.set_team_icon.decode_config.app_error", nil, err.Error(), http.StatusBadRequest)
} else if config.Width*config.Height > model.MaxImageSize { }
if config.Width*config.Height > model.MaxImageSize {
return model.NewAppError("SetTeamIcon", "api.team.set_team_icon.too_large.app_error", nil, err.Error(), http.StatusBadRequest) return model.NewAppError("SetTeamIcon", "api.team.set_team_icon.too_large.app_error", nil, err.Error(), http.StatusBadRequest)
} }