diff options
Diffstat (limited to 'model/team.go')
-rw-r--r-- | model/team.go | 141 |
1 files changed, 141 insertions, 0 deletions
diff --git a/model/team.go b/model/team.go new file mode 100644 index 000000000..a510cde78 --- /dev/null +++ b/model/team.go @@ -0,0 +1,141 @@ +// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved. +// See License.txt for license information. + +package model + +import ( + "encoding/json" + "io" +) + +const ( + TEAM_OPEN = "O" + TEAM_INVITE = "I" +) + +type Team struct { + Id string `json:"id"` + CreateAt int64 `json:"create_at"` + UpdateAt int64 `json:"update_at"` + DeleteAt int64 `json:"delete_at"` + Name string `json:"name"` + Domain string `json:"domain"` + Email string `json:"email"` + Type string `json:"type"` + CompanyName string `json:"company_name"` + AllowedDomains string `json:"allowed_domains"` +} + +type Invites struct { + Invites []map[string]string `json:"invites"` +} + +func InvitesFromJson(data io.Reader) *Invites { + decoder := json.NewDecoder(data) + var o Invites + err := decoder.Decode(&o) + if err == nil { + return &o + } else { + return nil + } +} + +func (o *Invites) ToJson() string { + b, err := json.Marshal(o) + if err != nil { + return "" + } else { + return string(b) + } +} + +func (o *Team) ToJson() string { + b, err := json.Marshal(o) + if err != nil { + return "" + } else { + return string(b) + } +} + +func TeamFromJson(data io.Reader) *Team { + decoder := json.NewDecoder(data) + var o Team + err := decoder.Decode(&o) + if err == nil { + return &o + } else { + return nil + } +} + +func (o *Team) Etag() string { + return Etag(o.Id, o.UpdateAt) +} + +func (o *Team) IsValid() *AppError { + + if len(o.Id) != 26 { + return NewAppError("Team.IsValid", "Invalid Id", "") + } + + if o.CreateAt == 0 { + return NewAppError("Team.IsValid", "Create at must be a valid time", "id="+o.Id) + } + + if o.UpdateAt == 0 { + return NewAppError("Team.IsValid", "Update at must be a valid time", "id="+o.Id) + } + + if len(o.Email) > 128 { + return NewAppError("Team.IsValid", "Invalid email", "id="+o.Id) + } + + if !IsValidEmail(o.Email) { + return NewAppError("Team.IsValid", "Invalid email", "id="+o.Id) + } + + if len(o.Name) > 64 { + return NewAppError("Team.IsValid", "Invalid name", "id="+o.Id) + } + + if len(o.Domain) > 64 { + return NewAppError("Team.IsValid", "Invalid domain", "id="+o.Id) + } + + if IsReservedDomain(o.Domain) { + return NewAppError("Team.IsValid", "This URL is unavailable. Please try another.", "id="+o.Id) + } + + if !IsValidDomain(o.Domain) { + return NewAppError("Team.IsValid", "Domain must be 4 or more lowercase alphanumeric characters", "id="+o.Id) + } + + if !(o.Type == TEAM_OPEN || o.Type == TEAM_INVITE) { + return NewAppError("Team.IsValid", "Invalid type", "id="+o.Id) + } + + if len(o.CompanyName) > 64 { + return NewAppError("Team.IsValid", "Invalid company name", "id="+o.Id) + } + + if len(o.AllowedDomains) > 500 { + return NewAppError("Team.IsValid", "Invalid allowed domains", "id="+o.Id) + } + + return nil +} + +func (o *Team) PreSave() { + if o.Id == "" { + o.Id = NewId() + } + + o.CreateAt = GetMillis() + o.UpdateAt = o.CreateAt +} + +func (o *Team) PreUpdate() { + o.UpdateAt = GetMillis() +} |