diff options
author | Martin Kraft <mkraft@users.noreply.github.com> | 2018-05-17 11:37:00 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-05-17 11:37:00 -0400 |
commit | e0390632b3c941670671d968b8828bcefbf71581 (patch) | |
tree | d4eb82a217aa45c5be8a3afb2fc1d2d7ed5d6b37 /model/scheme.go | |
parent | 463065c8ba4b4aece7fd9b7764ba917df3e73292 (diff) | |
download | chat-e0390632b3c941670671d968b8828bcefbf71581.tar.gz chat-e0390632b3c941670671d968b8828bcefbf71581.tar.bz2 chat-e0390632b3c941670671d968b8828bcefbf71581.zip |
MM-10264: Adds CLI command to import and export permissions. (#8787)
* MM-10264: Adds CLI command to import and export permissions.
* MM-10264: Changes Scheme Name to DisplayName and adds Name slug field.
* MM-10264: Changes display name max size.
* MM-10264: Another merge fix.
* MM-10264: Changes for more Schemes methods checking for migration.
* MM-10264: More updates for Schemes migration checking.
Diffstat (limited to 'model/scheme.go')
-rw-r--r-- | model/scheme.go | 53 |
1 files changed, 48 insertions, 5 deletions
diff --git a/model/scheme.go b/model/scheme.go index f949d9122..959b80c24 100644 --- a/model/scheme.go +++ b/model/scheme.go @@ -5,19 +5,23 @@ package model import ( "encoding/json" + "fmt" "io" + "regexp" ) const ( - SCHEME_NAME_MAX_LENGTH = 64 - SCHEME_DESCRIPTION_MAX_LENGTH = 1024 - SCHEME_SCOPE_TEAM = "team" - SCHEME_SCOPE_CHANNEL = "channel" + SCHEME_DISPLAY_NAME_MAX_LENGTH = 128 + SCHEME_NAME_MAX_LENGTH = 64 + SCHEME_DESCRIPTION_MAX_LENGTH = 1024 + SCHEME_SCOPE_TEAM = "team" + SCHEME_SCOPE_CHANNEL = "channel" ) type Scheme struct { Id string `json:"id"` Name string `json:"name"` + DisplayName string `json:"display_name"` Description string `json:"description"` CreateAt int64 `json:"create_at"` UpdateAt int64 `json:"update_at"` @@ -31,6 +35,7 @@ type Scheme struct { type SchemePatch struct { Name *string `json:"name"` + DisplayName *string `json:"display_name"` Description *string `json:"description"` } @@ -38,6 +43,32 @@ type SchemeIDPatch struct { SchemeID *string `json:"scheme_id"` } +// SchemeConveyor is used for importing and exporting a Scheme and its associated Roles. +type SchemeConveyor struct { + Name string `json:"name"` + DisplayName string `json:"display_name"` + Description string `json:"description"` + Scope string `json:"scope"` + TeamAdmin string `json:"default_team_admin_role"` + TeamUser string `json:"default_team_user_role"` + ChannelAdmin string `json:"default_channel_admin_role"` + ChannelUser string `json:"default_channel_user_role"` + Roles []*Role `json:"roles"` +} + +func (sc *SchemeConveyor) Scheme() *Scheme { + return &Scheme{ + DisplayName: sc.DisplayName, + Name: sc.Name, + Description: sc.Description, + Scope: sc.Scope, + DefaultTeamAdminRole: sc.TeamAdmin, + DefaultTeamUserRole: sc.TeamUser, + DefaultChannelAdminRole: sc.ChannelAdmin, + DefaultChannelUserRole: sc.ChannelUser, + } +} + func (scheme *Scheme) ToJson() string { b, _ := json.Marshal(scheme) return string(b) @@ -72,7 +103,11 @@ func (scheme *Scheme) IsValid() bool { } func (scheme *Scheme) IsValidForCreate() bool { - if len(scheme.Name) == 0 || len(scheme.Name) > SCHEME_NAME_MAX_LENGTH { + if len(scheme.DisplayName) == 0 || len(scheme.DisplayName) > SCHEME_DISPLAY_NAME_MAX_LENGTH { + return false + } + + if !IsValidSchemeName(scheme.Name) { return false } @@ -118,6 +153,9 @@ func (scheme *Scheme) IsValidForCreate() bool { } func (scheme *Scheme) Patch(patch *SchemePatch) { + if patch.DisplayName != nil { + scheme.DisplayName = *patch.DisplayName + } if patch.Name != nil { scheme.Name = *patch.Name } @@ -147,3 +185,8 @@ func (p *SchemeIDPatch) ToJson() string { b, _ := json.Marshal(p) return string(b) } + +func IsValidSchemeName(name string) bool { + re := regexp.MustCompile(fmt.Sprintf("^[a-z0-9_]{0,%d}$", SCHEME_NAME_MAX_LENGTH)) + return re.MatchString(name) +} |