github.com/mattermosttest/mattermost-server/v5@v5.0.0-20200917143240-9dfa12e121f9/app/scheme.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See LICENSE.txt for license information. 3 4 package app 5 6 import ( 7 "errors" 8 "net/http" 9 10 "github.com/mattermost/mattermost-server/v5/model" 11 "github.com/mattermost/mattermost-server/v5/store" 12 ) 13 14 func (a *App) GetScheme(id string) (*model.Scheme, *model.AppError) { 15 if appErr := a.IsPhase2MigrationCompleted(); appErr != nil { 16 return nil, appErr 17 } 18 19 scheme, err := a.Srv().Store.Scheme().Get(id) 20 if err != nil { 21 var nfErr *store.ErrNotFound 22 switch { 23 case errors.As(err, &nfErr): 24 return nil, model.NewAppError("GetScheme", "app.scheme.get.app_error", nil, err.Error(), http.StatusNotFound) 25 default: 26 return nil, model.NewAppError("GetScheme", "app.scheme.get.app_error", nil, err.Error(), http.StatusInternalServerError) 27 } 28 } 29 return scheme, nil 30 } 31 32 func (a *App) GetSchemeByName(name string) (*model.Scheme, *model.AppError) { 33 if err := a.IsPhase2MigrationCompleted(); err != nil { 34 return nil, err 35 } 36 37 scheme, err := a.Srv().Store.Scheme().GetByName(name) 38 if err != nil { 39 var nfErr *store.ErrNotFound 40 switch { 41 case errors.As(err, &nfErr): 42 return nil, model.NewAppError("GetSchemeByName", "app.scheme.get.app_error", nil, err.Error(), http.StatusNotFound) 43 default: 44 return nil, model.NewAppError("GetSchemeByName", "app.scheme.get.app_error", nil, err.Error(), http.StatusInternalServerError) 45 } 46 } 47 return scheme, nil 48 } 49 50 func (a *App) GetSchemesPage(scope string, page int, perPage int) ([]*model.Scheme, *model.AppError) { 51 if err := a.IsPhase2MigrationCompleted(); err != nil { 52 return nil, err 53 } 54 55 return a.GetSchemes(scope, page*perPage, perPage) 56 } 57 58 func (s *Server) GetSchemes(scope string, offset int, limit int) ([]*model.Scheme, *model.AppError) { 59 if err := s.IsPhase2MigrationCompleted(); err != nil { 60 return nil, err 61 } 62 63 scheme, err := s.Store.Scheme().GetAllPage(scope, offset, limit) 64 if err != nil { 65 return nil, model.NewAppError("GetSchemes", "app.scheme.get.app_error", nil, err.Error(), http.StatusInternalServerError) 66 } 67 return scheme, nil 68 } 69 70 func (a *App) GetSchemes(scope string, offset int, limit int) ([]*model.Scheme, *model.AppError) { 71 return a.Srv().GetSchemes(scope, offset, limit) 72 } 73 74 func (a *App) CreateScheme(scheme *model.Scheme) (*model.Scheme, *model.AppError) { 75 if err := a.IsPhase2MigrationCompleted(); err != nil { 76 return nil, err 77 } 78 79 // Clear any user-provided values for trusted properties. 80 scheme.DefaultTeamAdminRole = "" 81 scheme.DefaultTeamUserRole = "" 82 scheme.DefaultTeamGuestRole = "" 83 scheme.DefaultChannelAdminRole = "" 84 scheme.DefaultChannelUserRole = "" 85 scheme.DefaultChannelGuestRole = "" 86 scheme.CreateAt = 0 87 scheme.UpdateAt = 0 88 scheme.DeleteAt = 0 89 90 scheme, err := a.Srv().Store.Scheme().Save(scheme) 91 if err != nil { 92 var invErr *store.ErrInvalidInput 93 var appErr *model.AppError 94 switch { 95 case errors.As(err, &appErr): 96 return nil, appErr 97 case errors.As(err, &invErr): 98 return nil, model.NewAppError("CreateScheme", "app.scheme.save.invalid_scheme.app_error", nil, err.Error(), http.StatusBadRequest) 99 default: 100 return nil, model.NewAppError("CreateScheme", "app.scheme.save.app_error", nil, err.Error(), http.StatusInternalServerError) 101 } 102 } 103 return scheme, nil 104 } 105 106 func (a *App) PatchScheme(scheme *model.Scheme, patch *model.SchemePatch) (*model.Scheme, *model.AppError) { 107 if err := a.IsPhase2MigrationCompleted(); err != nil { 108 return nil, err 109 } 110 111 scheme.Patch(patch) 112 scheme, err := a.UpdateScheme(scheme) 113 if err != nil { 114 return nil, err 115 } 116 117 return scheme, err 118 } 119 120 func (a *App) UpdateScheme(scheme *model.Scheme) (*model.Scheme, *model.AppError) { 121 if err := a.IsPhase2MigrationCompleted(); err != nil { 122 return nil, err 123 } 124 125 scheme, err := a.Srv().Store.Scheme().Save(scheme) 126 if err != nil { 127 var invErr *store.ErrInvalidInput 128 var appErr *model.AppError 129 switch { 130 case errors.As(err, &appErr): 131 return nil, appErr 132 case errors.As(err, &invErr): 133 return nil, model.NewAppError("UpdateScheme", "app.scheme.save.invalid_scheme.app_error", nil, err.Error(), http.StatusBadRequest) 134 default: 135 return nil, model.NewAppError("UpdateScheme", "app.scheme.save.app_error", nil, err.Error(), http.StatusInternalServerError) 136 } 137 } 138 return scheme, nil 139 } 140 141 func (a *App) DeleteScheme(schemeId string) (*model.Scheme, *model.AppError) { 142 if err := a.IsPhase2MigrationCompleted(); err != nil { 143 return nil, err 144 } 145 146 scheme, err := a.Srv().Store.Scheme().Delete(schemeId) 147 if err != nil { 148 var nfErr *store.ErrNotFound 149 switch { 150 case errors.As(err, &nfErr): 151 return nil, model.NewAppError("DeleteScheme", "app.scheme.get.app_error", nil, err.Error(), http.StatusNotFound) 152 default: 153 return nil, model.NewAppError("DeleteScheme", "app.scheme.delete.app_error", nil, err.Error(), http.StatusInternalServerError) 154 } 155 } 156 return scheme, nil 157 } 158 159 func (a *App) GetTeamsForSchemePage(scheme *model.Scheme, page int, perPage int) ([]*model.Team, *model.AppError) { 160 if err := a.IsPhase2MigrationCompleted(); err != nil { 161 return nil, err 162 } 163 164 return a.GetTeamsForScheme(scheme, page*perPage, perPage) 165 } 166 167 func (a *App) GetTeamsForScheme(scheme *model.Scheme, offset int, limit int) ([]*model.Team, *model.AppError) { 168 if err := a.IsPhase2MigrationCompleted(); err != nil { 169 return nil, err 170 } 171 172 teams, err := a.Srv().Store.Team().GetTeamsByScheme(scheme.Id, offset, limit) 173 if err != nil { 174 return nil, err 175 } 176 return teams, nil 177 } 178 179 func (a *App) GetChannelsForSchemePage(scheme *model.Scheme, page int, perPage int) (model.ChannelList, *model.AppError) { 180 if err := a.IsPhase2MigrationCompleted(); err != nil { 181 return nil, err 182 } 183 184 return a.GetChannelsForScheme(scheme, page*perPage, perPage) 185 } 186 187 func (a *App) GetChannelsForScheme(scheme *model.Scheme, offset int, limit int) (model.ChannelList, *model.AppError) { 188 if err := a.IsPhase2MigrationCompleted(); err != nil { 189 return nil, err 190 } 191 return a.Srv().Store.Channel().GetChannelsByScheme(scheme.Id, offset, limit) 192 } 193 194 func (s *Server) IsPhase2MigrationCompleted() *model.AppError { 195 if s.phase2PermissionsMigrationComplete { 196 return nil 197 } 198 199 if _, err := s.Store.System().GetByName(model.MIGRATION_KEY_ADVANCED_PERMISSIONS_PHASE_2); err != nil { 200 return model.NewAppError("App.IsPhase2MigrationCompleted", "app.schemes.is_phase_2_migration_completed.not_completed.app_error", nil, err.Error(), http.StatusNotImplemented) 201 } 202 203 s.phase2PermissionsMigrationComplete = true 204 205 return nil 206 } 207 208 func (a *App) IsPhase2MigrationCompleted() *model.AppError { 209 return a.Srv().IsPhase2MigrationCompleted() 210 } 211 212 func (a *App) SchemesIterator(scope string, batchSize int) func() []*model.Scheme { 213 offset := 0 214 return func() []*model.Scheme { 215 schemes, err := a.Srv().Store.Scheme().GetAllPage(scope, offset, batchSize) 216 if err != nil { 217 return []*model.Scheme{} 218 } 219 offset += batchSize 220 return schemes 221 } 222 }