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  }