package model import ( es_models "github.com/caos/zitadel/internal/eventstore/models" "strings" "github.com/golang/protobuf/ptypes/timestamp" ) type Org struct { es_models.ObjectRoot State OrgState Name string Domains []*OrgDomain Members []*OrgMember OrgIamPolicy *OrgIamPolicy } type OrgChanges struct { Changes []*OrgChange LastSequence uint64 } type OrgChange struct { ChangeDate *timestamp.Timestamp `json:"changeDate,omitempty"` EventType string `json:"eventType,omitempty"` Sequence uint64 `json:"sequence,omitempty"` Modifier string `json:"modifierUser,omitempty"` Data interface{} `json:"data,omitempty"` } type OrgState int32 const ( ORGSTATE_ACTIVE OrgState = iota ORGSTATE_INACTIVE ) func NewOrg(id string) *Org { return &Org{ObjectRoot: es_models.ObjectRoot{AggregateID: id}, State: ORGSTATE_ACTIVE} } func (o *Org) IsActive() bool { return o.State == ORGSTATE_ACTIVE } func (o *Org) IsValid() bool { return o.Name != "" } func (o *Org) ContainsDomain(domain *OrgDomain) bool { for _, d := range o.Domains { if d.Domain == domain.Domain { return true } } return false } func (o *Org) ContainsMember(userID string) bool { for _, member := range o.Members { if member.UserID == userID { return true } } return false } func (o *Org) nameForDomain(iamDomain string) string { return strings.ToLower(strings.ReplaceAll(o.Name, " ", "-") + "." + iamDomain) } func (o *Org) AddIAMDomain(iamDomain string) { o.Domains = append(o.Domains, &OrgDomain{Domain: o.nameForDomain(iamDomain), Verified: true, Primary: true}) }