fix: change to repository event types and removed unused code (#3386)

* fix: change to repository event types and removed unused code

* some fixes

* remove unused code
This commit is contained in:
Livio Amstutz
2022-03-31 11:36:26 +02:00
committed by GitHub
parent 55af4a18a2
commit 87560157c1
170 changed files with 999 additions and 9581 deletions

View File

@@ -19,7 +19,6 @@ type APIConfig struct {
ClientSecret *crypto.CryptoValue
ClientSecretString string
AuthMethodType APIAuthMethodType
ClientKeys []*ClientKey
}
type APIAuthMethodType int32

View File

@@ -1,8 +1,6 @@
package model
import (
"github.com/golang/protobuf/ptypes/timestamp"
es_models "github.com/caos/zitadel/internal/eventstore/v1/models"
)
@@ -16,21 +14,6 @@ type Application struct {
OIDCConfig *OIDCConfig
APIConfig *APIConfig
}
type ApplicationChanges struct {
Changes []*ApplicationChange
LastSequence uint64
}
type ApplicationChange struct {
ChangeDate *timestamp.Timestamp `json:"changeDate,omitempty"`
EventType string `json:"eventType,omitempty"`
Sequence uint64 `json:"sequence,omitempty"`
ModifierId string `json:"modifierUser,omitempty"`
ModifierName string `json:"-"`
ModifierLoginName string `json:"-"`
ModifierAvatarURL string `json:"-"`
Data interface{} `json:"data,omitempty"`
}
type AppState int32
@@ -49,10 +32,6 @@ const (
AppTypeAPI
)
func NewApplication(projectID, appID string) *Application {
return &Application{ObjectRoot: es_models.ObjectRoot{AggregateID: projectID}, AppID: appID, State: AppStateActive}
}
func (a *Application) IsValid(includeConfig bool) bool {
if a.Name == "" || a.AggregateID == "" {
return false
@@ -68,15 +47,3 @@ func (a *Application) IsValid(includeConfig bool) bool {
}
return true
}
func (a *Application) GetKey(keyID string) (int, *ClientKey) {
if a.OIDCConfig == nil {
return -1, nil
}
for i, k := range a.OIDCConfig.ClientKeys {
if k.KeyID == keyID {
return i, k
}
}
return -1, nil
}

View File

@@ -1,87 +0,0 @@
package model
import (
"github.com/caos/zitadel/internal/domain"
caos_errors "github.com/caos/zitadel/internal/errors"
"time"
)
type ApplicationView struct {
ID string
ProjectID string
Name string
CreationDate time.Time
ChangeDate time.Time
ResourceOwner string
State AppState
ProjectRoleAssertion bool
ProjectRoleCheck bool
HasProjectCheck bool
PrivateLabelingSetting domain.PrivateLabelingSetting
IsOIDC bool
OIDCVersion OIDCVersion
OIDCClientID string
OIDCRedirectUris []string
OIDCResponseTypes []OIDCResponseType
OIDCGrantTypes []OIDCGrantType
OIDCApplicationType OIDCApplicationType
OIDCAuthMethodType OIDCAuthMethodType
OIDCPostLogoutRedirectUris []string
NoneCompliant bool
ComplianceProblems []string
DevMode bool
OriginAllowList []string
AdditionalOrigins []string
AccessTokenType OIDCTokenType
IDTokenRoleAssertion bool
AccessTokenRoleAssertion bool
IDTokenUserinfoAssertion bool
ClockSkew time.Duration
Sequence uint64
}
type ApplicationSearchRequest struct {
Offset uint64
Limit uint64
SortingColumn AppSearchKey
Asc bool
Queries []*ApplicationSearchQuery
}
type AppSearchKey int32
const (
AppSearchKeyUnspecified AppSearchKey = iota
AppSearchKeyName
AppSearchKeyOIDCClientID
AppSearchKeyProjectID
AppSearchKeyAppID
)
type ApplicationSearchQuery struct {
Key AppSearchKey
Method domain.SearchMethod
Value interface{}
}
type ApplicationSearchResponse struct {
Offset uint64
Limit uint64
TotalResult uint64
Result []*ApplicationView
Sequence uint64
Timestamp time.Time
}
func (r *ApplicationSearchRequest) EnsureLimit(limit uint64) error {
if r.Limit > limit {
return caos_errors.ThrowInvalidArgument(nil, "SEARCH-3Mf8s", "Errors.Limit.ExceedsDefault")
}
if r.Limit == 0 {
r.Limit = limit
}
return nil
}

View File

@@ -12,7 +12,6 @@ import (
"github.com/caos/zitadel/internal/errors"
es_models "github.com/caos/zitadel/internal/eventstore/v1/models"
"github.com/caos/zitadel/internal/id"
key_model "github.com/caos/zitadel/internal/key/model"
)
type OIDCConfig struct {
@@ -35,7 +34,6 @@ type OIDCConfig struct {
IDTokenRoleAssertion bool
IDTokenUserinfoAssertion bool
ClockSkew time.Duration
ClientKeys []*ClientKey
}
type OIDCVersion int32
@@ -89,17 +87,6 @@ const (
OIDCTokenTypeJWT
)
type ClientKey struct {
es_models.ObjectRoot
ApplicationID string
ClientID string
KeyID string
Type key_model.AuthNKeyType
ExpirationDate time.Time
PrivateKey []byte
}
type Token struct {
es_models.ObjectRoot

View File

@@ -1,8 +1,6 @@
package model
import (
"github.com/golang/protobuf/ptypes/timestamp"
"github.com/caos/zitadel/internal/domain"
es_models "github.com/caos/zitadel/internal/eventstore/v1/models"
)
@@ -21,21 +19,6 @@ type Project struct {
HasProjectCheck bool
PrivateLabelingSetting domain.PrivateLabelingSetting
}
type ProjectChanges struct {
Changes []*ProjectChange
LastSequence uint64
}
type ProjectChange struct {
ChangeDate *timestamp.Timestamp `json:"changeDate,omitempty"`
EventType string `json:"eventType,omitempty"`
Sequence uint64 `json:"sequence,omitempty"`
ModifierId string `json:"modifierUser,omitempty"`
ModifierName string `json:"-"`
ModifierLoginName string `json:"-"`
ModifierAvatarURL string `json:"-"`
Data interface{} `json:"data,omitempty"`
}
type ProjectState int32
@@ -45,10 +28,6 @@ const (
ProjectStateRemoved
)
func NewProject(id string) *Project {
return &Project{ObjectRoot: es_models.ObjectRoot{AggregateID: id}, State: ProjectStateActive}
}
func (p *Project) IsActive() bool {
return p.State == ProjectStateActive
}

View File

@@ -7,7 +7,6 @@ import (
"github.com/caos/zitadel/internal/crypto"
es_models "github.com/caos/zitadel/internal/eventstore/v1/models"
"github.com/caos/zitadel/internal/project/model"
)
type APIConfig struct {
@@ -28,28 +27,6 @@ func (c *APIConfig) Changes(changed *APIConfig) map[string]interface{} {
return changes
}
func APIConfigFromModel(config *model.APIConfig) *APIConfig {
return &APIConfig{
ObjectRoot: config.ObjectRoot,
AppID: config.AppID,
ClientID: config.ClientID,
ClientSecret: config.ClientSecret,
AuthMethodType: int32(config.AuthMethodType),
}
}
func APIConfigToModel(config *APIConfig) *model.APIConfig {
oidcConfig := &model.APIConfig{
ObjectRoot: config.ObjectRoot,
AppID: config.AppID,
ClientID: config.ClientID,
ClientSecret: config.ClientSecret,
AuthMethodType: model.APIAuthMethodType(config.AuthMethodType),
ClientKeys: ClientKeysToModel(config.ClientKeys),
}
return oidcConfig
}
func (o *APIConfig) setData(event *es_models.Event) error {
o.ObjectRoot.AppendEvent(event)
if err := json.Unmarshal(event.Data, o); err != nil {

View File

@@ -23,15 +23,6 @@ type ApplicationID struct {
AppID string `json:"appId"`
}
func GetApplication(apps []*Application, id string) (int, *Application) {
for i, a := range apps {
if a.AppID == id {
return i, a
}
}
return -1, nil
}
func (a *Application) setData(event *es_models.Event) error {
a.ObjectRoot.AppendEvent(event)
if err := json.Unmarshal(event.Data, a); err != nil {

View File

@@ -8,9 +8,9 @@ import (
"github.com/caos/zitadel/internal/crypto"
"github.com/caos/zitadel/internal/errors"
"github.com/caos/zitadel/internal/eventstore"
es_models "github.com/caos/zitadel/internal/eventstore/v1/models"
key_model "github.com/caos/zitadel/internal/key/model"
"github.com/caos/zitadel/internal/project/model"
"github.com/caos/zitadel/internal/repository/project"
)
type OIDCConfig struct {
@@ -75,38 +75,18 @@ func (key *ClientKey) AppendEvents(events ...*es_models.Event) error {
func (key *ClientKey) AppendEvent(event *es_models.Event) (err error) {
key.ObjectRoot.AppendEvent(event)
switch event.Type {
case ClientKeyAdded:
switch eventstore.EventType(event.Type) {
case project.ApplicationKeyAddedEventType:
err = json.Unmarshal(event.Data, key)
if err != nil {
return errors.ThrowInternal(err, "MODEL-Fetg3", "Errors.Internal")
}
case ClientKeyRemoved:
case project.ApplicationKeyRemovedEventType:
key.ExpirationDate = event.CreationDate
}
return err
}
func ClientKeysToModel(keys []*ClientKey) []*model.ClientKey {
clientKeys := make([]*model.ClientKey, len(keys))
for i, key := range keys {
clientKeys[i] = ClientKeyToModel(key)
}
return clientKeys
}
func ClientKeyToModel(key *ClientKey) *model.ClientKey {
return &model.ClientKey{
ObjectRoot: key.ObjectRoot,
ExpirationDate: key.ExpirationDate,
ApplicationID: key.ApplicationID,
ClientID: key.ClientID,
KeyID: key.KeyID,
PrivateKey: key.privateKey,
Type: key_model.AuthNKeyType(key.Type),
}
}
func (key *ClientKey) GenerateClientKeyPair(keySize int) error {
privateKey, publicKey, err := crypto.GenerateKeyPair(keySize)
if err != nil {

View File

@@ -5,12 +5,10 @@ import (
"github.com/caos/logging"
"github.com/caos/zitadel/internal/eventstore"
es_models "github.com/caos/zitadel/internal/eventstore/v1/models"
"github.com/caos/zitadel/internal/project/model"
)
const (
ProjectVersion = "v1"
"github.com/caos/zitadel/internal/repository/project"
)
type Project struct {
@@ -52,14 +50,14 @@ func (p *Project) AppendEvents(events ...*es_models.Event) error {
func (p *Project) AppendEvent(event *es_models.Event) error {
p.ObjectRoot.AppendEvent(event)
switch event.Type {
case ProjectAdded, ProjectChanged:
switch eventstore.EventType(event.Type) {
case project.ProjectAddedType, project.ProjectChangedType:
return p.AppendAddProjectEvent(event)
case ProjectDeactivated:
case project.ProjectDeactivatedType:
return p.appendDeactivatedEvent()
case ProjectReactivated:
case project.ProjectReactivatedType:
return p.appendReactivatedEvent()
case ProjectRemoved:
case project.ProjectRemovedType:
return p.appendRemovedEvent()
}
return nil

View File

@@ -23,15 +23,6 @@ type ProjectGrantID struct {
GrantID string `json:"grantId"`
}
func GetProjectGrant(grants []*ProjectGrant, id string) (int, *ProjectGrant) {
for i, g := range grants {
if g.GrantID == id {
return i, g
}
}
return -1, nil
}
func (g *ProjectGrant) Changes(changed *ProjectGrant) map[string]interface{} {
changes := make(map[string]interface{}, 1)
changes["grantId"] = g.GrantID

View File

@@ -6,6 +6,7 @@ import (
es_models "github.com/caos/zitadel/internal/eventstore/v1/models"
"github.com/caos/zitadel/internal/project/model"
"github.com/caos/zitadel/internal/repository/project"
)
func TestProjectFromEvents(t *testing.T) {
@@ -22,7 +23,7 @@ func TestProjectFromEvents(t *testing.T) {
name: "project from events, ok",
args: args{
event: []*es_models.Event{
{AggregateID: "AggregateID", Sequence: 1, Type: ProjectAdded},
{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(project.ProjectAddedType)},
},
project: &Project{Name: "ProjectName"},
},
@@ -32,7 +33,7 @@ func TestProjectFromEvents(t *testing.T) {
name: "project from events, nil project",
args: args{
event: []*es_models.Event{
{AggregateID: "AggregateID", Sequence: 1, Type: ProjectAdded},
{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(project.ProjectAddedType)},
},
project: nil,
},
@@ -66,7 +67,7 @@ func TestAppendEvent(t *testing.T) {
{
name: "append added event",
args: args{
event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: ProjectAdded},
event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(project.ProjectAddedType)},
project: &Project{Name: "ProjectName"},
},
result: &Project{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID"}, State: int32(model.ProjectStateActive), Name: "ProjectName"},
@@ -74,7 +75,7 @@ func TestAppendEvent(t *testing.T) {
{
name: "append change event",
args: args{
event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: ProjectChanged},
event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(project.ProjectChangedType)},
project: &Project{Name: "ProjectName"},
},
result: &Project{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID"}, State: int32(model.ProjectStateActive), Name: "ProjectName"},
@@ -82,14 +83,14 @@ func TestAppendEvent(t *testing.T) {
{
name: "append deactivate event",
args: args{
event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: ProjectDeactivated},
event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(project.ProjectDeactivatedType)},
},
result: &Project{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID"}, State: int32(model.ProjectStateInactive)},
},
{
name: "append reactivate event",
args: args{
event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: ProjectReactivated},
event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(project.ProjectReactivatedType)},
},
result: &Project{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID"}, State: int32(model.ProjectStateActive)},
},

View File

@@ -1,53 +0,0 @@
package model
import "github.com/caos/zitadel/internal/eventstore/v1/models"
const (
ProjectAggregate models.AggregateType = "project"
ProjectAdded models.EventType = "project.added"
ProjectChanged models.EventType = "project.changed"
ProjectDeactivated models.EventType = "project.deactivated"
ProjectReactivated models.EventType = "project.reactivated"
ProjectRemoved models.EventType = "project.removed"
ProjectMemberAdded models.EventType = "project.member.added"
ProjectMemberChanged models.EventType = "project.member.changed"
ProjectMemberRemoved models.EventType = "project.member.removed"
ProjectMemberCascadeRemoved models.EventType = "project.member.cascade.removed"
ProjectRoleAdded models.EventType = "project.role.added"
ProjectRoleChanged models.EventType = "project.role.changed"
ProjectRoleRemoved models.EventType = "project.role.removed"
ProjectGrantAdded models.EventType = "project.grant.added"
ProjectGrantChanged models.EventType = "project.grant.changed"
ProjectGrantRemoved models.EventType = "project.grant.removed"
ProjectGrantDeactivated models.EventType = "project.grant.deactivated"
ProjectGrantReactivated models.EventType = "project.grant.reactivated"
ProjectGrantCascadeChanged models.EventType = "project.grant.cascade.changed"
ProjectGrantMemberAdded models.EventType = "project.grant.member.added"
ProjectGrantMemberChanged models.EventType = "project.grant.member.changed"
ProjectGrantMemberRemoved models.EventType = "project.grant.member.removed"
ProjectGrantMemberCascadeRemoved models.EventType = "project.grant.member.cascade.removed"
ApplicationAdded models.EventType = "project.application.added"
ApplicationChanged models.EventType = "project.application.changed"
ApplicationRemoved models.EventType = "project.application.removed"
ApplicationDeactivated models.EventType = "project.application.deactivated"
ApplicationReactivated models.EventType = "project.application.reactivated"
OIDCConfigAdded models.EventType = "project.application.config.oidc.added"
OIDCConfigChanged models.EventType = "project.application.config.oidc.changed"
OIDCConfigSecretChanged models.EventType = "project.application.config.oidc.secret.changed"
OIDCClientSecretCheckSucceeded models.EventType = "project.application.oidc.secret.check.succeeded"
OIDCClientSecretCheckFailed models.EventType = "project.application.oidc.secret.check.failed"
APIConfigAdded models.EventType = "project.application.config.api.added"
APIConfigChanged models.EventType = "project.application.config.api.changed"
APIConfigSecretChanged models.EventType = "project.application.config.api.secret.changed"
ClientKeyAdded models.EventType = "project.application.oidc.key.added"
ClientKeyRemoved models.EventType = "project.application.oidc.key.removed"
)

View File

@@ -10,9 +10,10 @@ import (
http_util "github.com/caos/zitadel/internal/api/http"
"github.com/caos/zitadel/internal/domain"
caos_errs "github.com/caos/zitadel/internal/errors"
"github.com/caos/zitadel/internal/eventstore"
"github.com/caos/zitadel/internal/eventstore/v1/models"
"github.com/caos/zitadel/internal/project/model"
es_model "github.com/caos/zitadel/internal/project/repository/eventsourcing/model"
"github.com/caos/zitadel/internal/repository/project"
)
const (
@@ -59,43 +60,6 @@ type ApplicationView struct {
Sequence uint64 `json:"-" gorm:"sequence"`
}
func ApplicationViewToModel(app *ApplicationView) *model.ApplicationView {
return &model.ApplicationView{
ID: app.ID,
ProjectID: app.ProjectID,
Name: app.Name,
State: model.AppState(app.State),
Sequence: app.Sequence,
CreationDate: app.CreationDate,
ChangeDate: app.ChangeDate,
ResourceOwner: app.ResourceOwner,
ProjectRoleAssertion: app.ProjectRoleAssertion,
ProjectRoleCheck: app.ProjectRoleCheck,
HasProjectCheck: app.HasProjectCheck,
PrivateLabelingSetting: app.PrivateLabelingSetting,
IsOIDC: app.IsOIDC,
OIDCVersion: model.OIDCVersion(app.OIDCVersion),
OIDCClientID: app.OIDCClientID,
OIDCRedirectUris: app.OIDCRedirectUris,
OIDCResponseTypes: OIDCResponseTypesToModel(app.OIDCResponseTypes),
OIDCGrantTypes: OIDCGrantTypesToModel(app.OIDCGrantTypes),
OIDCApplicationType: model.OIDCApplicationType(app.OIDCApplicationType),
OIDCAuthMethodType: model.OIDCAuthMethodType(app.OIDCAuthMethodType),
OIDCPostLogoutRedirectUris: app.OIDCPostLogoutRedirectUris,
NoneCompliant: app.NoneCompliant,
ComplianceProblems: app.ComplianceProblems,
DevMode: app.DevMode,
OriginAllowList: app.OriginAllowList,
AdditionalOrigins: app.AdditionalOrigins,
AccessTokenType: model.OIDCTokenType(app.AccessTokenType),
AccessTokenRoleAssertion: app.AccessTokenRoleAssertion,
IDTokenRoleAssertion: app.IDTokenRoleAssertion,
IDTokenUserinfoAssertion: app.IDTokenUserinfoAssertion,
ClockSkew: app.ClockSkew,
}
}
func OIDCResponseTypesToModel(oidctypes []int64) []model.OIDCResponseType {
result := make([]model.OIDCResponseType, len(oidctypes))
for i, t := range oidctypes {
@@ -112,41 +76,33 @@ func OIDCGrantTypesToModel(granttypes []int64) []model.OIDCGrantType {
return result
}
func ApplicationViewsToModel(roles []*ApplicationView) []*model.ApplicationView {
result := make([]*model.ApplicationView, len(roles))
for i, r := range roles {
result[i] = ApplicationViewToModel(r)
}
return result
}
func (a *ApplicationView) AppendEventIfMyApp(event *models.Event) (err error) {
view := new(ApplicationView)
switch event.Type {
case es_model.ApplicationAdded:
switch eventstore.EventType(event.Type) {
case project.ApplicationAddedType:
err = view.SetData(event)
if err != nil {
return err
}
case es_model.ApplicationChanged,
es_model.OIDCConfigAdded,
es_model.OIDCConfigChanged,
es_model.APIConfigAdded,
es_model.APIConfigChanged,
es_model.ApplicationDeactivated,
es_model.ApplicationReactivated:
case project.ApplicationChangedType,
project.OIDCConfigAddedType,
project.OIDCConfigChangedType,
project.APIConfigAddedType,
project.APIConfigChangedType,
project.ApplicationDeactivatedType,
project.ApplicationReactivatedType:
err = view.SetData(event)
if err != nil {
return err
}
case es_model.ApplicationRemoved:
case project.ApplicationRemovedType:
err = view.SetData(event)
if err != nil {
return err
}
case es_model.ProjectChanged:
case project.ProjectChangedType:
return a.AppendEvent(event)
case es_model.ProjectRemoved:
case project.ProjectRemovedType:
return a.AppendEvent(event)
default:
return nil
@@ -160,13 +116,13 @@ func (a *ApplicationView) AppendEventIfMyApp(event *models.Event) (err error) {
func (a *ApplicationView) AppendEvent(event *models.Event) (err error) {
a.Sequence = event.Sequence
a.ChangeDate = event.CreationDate
switch event.Type {
case es_model.ApplicationAdded:
switch eventstore.EventType(event.Type) {
case project.ApplicationAddedType:
a.setRootData(event)
a.CreationDate = event.CreationDate
a.ResourceOwner = event.ResourceOwner
err = a.SetData(event)
case es_model.OIDCConfigAdded:
case project.OIDCConfigAddedType:
a.IsOIDC = true
err = a.SetData(event)
if err != nil {
@@ -174,27 +130,27 @@ func (a *ApplicationView) AppendEvent(event *models.Event) (err error) {
}
a.setCompliance()
return a.setOriginAllowList()
case es_model.APIConfigAdded:
case project.APIConfigAddedType:
a.IsOIDC = false
return a.SetData(event)
case es_model.ApplicationChanged:
case project.ApplicationChangedType:
return a.SetData(event)
case es_model.OIDCConfigChanged:
case project.OIDCConfigChangedType:
err = a.SetData(event)
if err != nil {
return err
}
a.setCompliance()
return a.setOriginAllowList()
case es_model.APIConfigChanged:
case project.APIConfigChangedType:
return a.SetData(event)
case es_model.ProjectChanged:
case project.ProjectChangedType:
return a.setProjectChanges(event)
case es_model.ApplicationDeactivated:
case project.ApplicationDeactivatedType:
a.State = int32(model.AppStateInactive)
case es_model.ApplicationReactivated:
case project.ApplicationReactivatedType:
a.State = int32(model.AppStateActive)
case es_model.ApplicationRemoved, es_model.ProjectRemoved:
case project.ApplicationRemovedType, project.ProjectRemovedType:
a.State = int32(model.AppStateRemoved)
}
return err

View File

@@ -1,65 +0,0 @@
package model
import (
"github.com/caos/zitadel/internal/domain"
proj_model "github.com/caos/zitadel/internal/project/model"
"github.com/caos/zitadel/internal/view/repository"
)
type ApplicationSearchRequest proj_model.ApplicationSearchRequest
type ApplicationSearchQuery proj_model.ApplicationSearchQuery
type ApplicationSearchKey proj_model.AppSearchKey
func (req ApplicationSearchRequest) GetLimit() uint64 {
return req.Limit
}
func (req ApplicationSearchRequest) GetOffset() uint64 {
return req.Offset
}
func (req ApplicationSearchRequest) GetSortingColumn() repository.ColumnKey {
if req.SortingColumn == proj_model.AppSearchKeyUnspecified {
return nil
}
return ApplicationSearchKey(req.SortingColumn)
}
func (req ApplicationSearchRequest) GetAsc() bool {
return req.Asc
}
func (req ApplicationSearchRequest) GetQueries() []repository.SearchQuery {
result := make([]repository.SearchQuery, len(req.Queries))
for i, q := range req.Queries {
result[i] = ApplicationSearchQuery{Key: q.Key, Value: q.Value, Method: q.Method}
}
return result
}
func (req ApplicationSearchQuery) GetKey() repository.ColumnKey {
return ApplicationSearchKey(req.Key)
}
func (req ApplicationSearchQuery) GetMethod() domain.SearchMethod {
return req.Method
}
func (req ApplicationSearchQuery) GetValue() interface{} {
return req.Value
}
func (key ApplicationSearchKey) ToColumnName() string {
switch proj_model.AppSearchKey(key) {
case proj_model.AppSearchKeyAppID:
return ApplicationKeyID
case proj_model.AppSearchKeyName:
return ApplicationKeyName
case proj_model.AppSearchKeyProjectID:
return ApplicationKeyProjectID
case proj_model.AppSearchKeyOIDCClientID:
return ApplicationKeyOIDCClientID
default:
return ""
}
}

View File

@@ -2,10 +2,12 @@ package model
import (
"encoding/json"
"testing"
es_models "github.com/caos/zitadel/internal/eventstore/v1/models"
"github.com/caos/zitadel/internal/project/model"
es_model "github.com/caos/zitadel/internal/project/repository/eventsourcing/model"
"testing"
"github.com/caos/zitadel/internal/repository/project"
)
func mockAppData(app *es_model.Application) []byte {
@@ -31,7 +33,7 @@ func TestApplicationAppendEvent(t *testing.T) {
{
name: "append added app event",
args: args{
event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_model.ApplicationAdded, Data: mockAppData(&es_model.Application{Name: "AppName"})},
event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(project.ApplicationAddedType), Data: mockAppData(&es_model.Application{Name: "AppName"})},
app: &ApplicationView{},
},
result: &ApplicationView{ProjectID: "AggregateID", Name: "AppName", State: int32(model.AppStateActive)},
@@ -39,7 +41,7 @@ func TestApplicationAppendEvent(t *testing.T) {
{
name: "append changed app event",
args: args{
event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_model.ApplicationChanged, Data: mockAppData(&es_model.Application{Name: "AppNameChanged"})},
event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(project.ApplicationChangedType), Data: mockAppData(&es_model.Application{Name: "AppNameChanged"})},
app: &ApplicationView{ProjectID: "AggregateID", Name: "AppName", State: int32(model.AppStateActive)},
},
result: &ApplicationView{ProjectID: "AggregateID", Name: "AppNameChanged", State: int32(model.AppStateActive)},
@@ -47,7 +49,7 @@ func TestApplicationAppendEvent(t *testing.T) {
{
name: "append deactivate app event",
args: args{
event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_model.ApplicationDeactivated},
event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(project.ApplicationDeactivatedType)},
app: &ApplicationView{ProjectID: "AggregateID", Name: "AppName", State: int32(model.AppStateActive)},
},
result: &ApplicationView{ProjectID: "AggregateID", Name: "AppName", State: int32(model.AppStateInactive)},
@@ -55,7 +57,7 @@ func TestApplicationAppendEvent(t *testing.T) {
{
name: "append reactivate app event",
args: args{
event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_model.ApplicationReactivated},
event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(project.ApplicationReactivatedType)},
app: &ApplicationView{ProjectID: "AggregateID", Name: "AppName", State: int32(model.AppStateInactive)},
},
result: &ApplicationView{ProjectID: "AggregateID", Name: "AppName", State: int32(model.AppStateActive)},
@@ -63,7 +65,7 @@ func TestApplicationAppendEvent(t *testing.T) {
{
name: "append added oidc config event",
args: args{
event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_model.OIDCConfigAdded, Data: mockOIDCConfigData(&es_model.OIDCConfig{ClientID: "clientID"})},
event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(project.OIDCConfigAddedType), Data: mockOIDCConfigData(&es_model.OIDCConfig{ClientID: "clientID"})},
app: &ApplicationView{ProjectID: "AggregateID", Name: "AppName", State: int32(model.AppStateActive)},
},
result: &ApplicationView{ProjectID: "AggregateID", Name: "AppName", IsOIDC: true, OIDCClientID: "clientID", State: int32(model.AppStateActive)},
@@ -71,7 +73,7 @@ func TestApplicationAppendEvent(t *testing.T) {
{
name: "append changed oidc config event",
args: args{
event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_model.OIDCConfigAdded, Data: mockOIDCConfigData(&es_model.OIDCConfig{ClientID: "clientIDChanged"})},
event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(project.OIDCConfigAddedType), Data: mockOIDCConfigData(&es_model.OIDCConfig{ClientID: "clientIDChanged"})},
app: &ApplicationView{ProjectID: "AggregateID", Name: "AppName", OIDCClientID: "clientID", State: int32(model.AppStateActive)},
},
result: &ApplicationView{ProjectID: "AggregateID", Name: "AppName", IsOIDC: true, OIDCClientID: "clientIDChanged", State: int32(model.AppStateActive)},

View File

@@ -8,9 +8,10 @@ import (
"github.com/caos/zitadel/internal/domain"
caos_errs "github.com/caos/zitadel/internal/errors"
"github.com/caos/zitadel/internal/eventstore"
"github.com/caos/zitadel/internal/eventstore/v1/models"
"github.com/caos/zitadel/internal/project/model"
es_model "github.com/caos/zitadel/internal/project/repository/eventsourcing/model"
"github.com/caos/zitadel/internal/repository/project"
)
const (
@@ -33,46 +34,22 @@ type ProjectView struct {
Sequence uint64 `json:"-" gorm:"column:sequence"`
}
func ProjectToModel(project *ProjectView) *model.ProjectView {
return &model.ProjectView{
ProjectID: project.ProjectID,
Name: project.Name,
ChangeDate: project.ChangeDate,
CreationDate: project.CreationDate,
State: model.ProjectState(project.State),
ResourceOwner: project.ResourceOwner,
ProjectRoleAssertion: project.ProjectRoleAssertion,
ProjectRoleCheck: project.ProjectRoleCheck,
HasProjectCheck: project.HasProjectCheck,
PrivateLabelingSetting: project.PrivateLabelingSetting,
Sequence: project.Sequence,
}
}
func ProjectsToModel(projects []*ProjectView) []*model.ProjectView {
result := make([]*model.ProjectView, len(projects))
for i, p := range projects {
result[i] = ProjectToModel(p)
}
return result
}
func (p *ProjectView) AppendEvent(event *models.Event) (err error) {
p.ChangeDate = event.CreationDate
p.Sequence = event.Sequence
switch event.Type {
case es_model.ProjectAdded:
switch eventstore.EventType(event.Type) {
case project.ProjectAddedType:
p.State = int32(model.ProjectStateActive)
p.CreationDate = event.CreationDate
p.setRootData(event)
err = p.setData(event)
case es_model.ProjectChanged:
case project.ProjectChangedType:
err = p.setData(event)
case es_model.ProjectDeactivated:
case project.ProjectDeactivatedType:
p.State = int32(model.ProjectStateInactive)
case es_model.ProjectReactivated:
case project.ProjectReactivatedType:
p.State = int32(model.ProjectStateActive)
case es_model.ProjectRemoved:
case project.ProjectRemovedType:
p.State = int32(model.ProjectStateRemoved)
}
return err

View File

@@ -8,9 +8,10 @@ import (
"github.com/lib/pq"
caos_errs "github.com/caos/zitadel/internal/errors"
"github.com/caos/zitadel/internal/eventstore"
"github.com/caos/zitadel/internal/eventstore/v1/models"
"github.com/caos/zitadel/internal/project/model"
es_model "github.com/caos/zitadel/internal/project/repository/eventsourcing/model"
"github.com/caos/zitadel/internal/repository/project"
)
const (
@@ -44,62 +45,20 @@ type ProjectGrant struct {
InstanceID string `json:"instanceID"`
}
func ProjectGrantFromModel(project *model.ProjectGrantView) *ProjectGrantView {
return &ProjectGrantView{
ProjectID: project.ProjectID,
OrgID: project.OrgID,
Name: project.Name,
ChangeDate: project.ChangeDate,
CreationDate: project.CreationDate,
State: int32(project.State),
ResourceOwner: project.ResourceOwner,
ResourceOwnerName: project.ResourceOwnerName,
OrgName: project.OrgName,
GrantID: project.GrantID,
GrantedRoleKeys: project.GrantedRoleKeys,
Sequence: project.Sequence,
}
}
func ProjectGrantToModel(project *ProjectGrantView) *model.ProjectGrantView {
return &model.ProjectGrantView{
ProjectID: project.ProjectID,
OrgID: project.OrgID,
Name: project.Name,
ChangeDate: project.ChangeDate,
CreationDate: project.CreationDate,
State: model.ProjectState(project.State),
ResourceOwner: project.ResourceOwner,
ResourceOwnerName: project.ResourceOwnerName,
OrgName: project.OrgName,
GrantID: project.GrantID,
Sequence: project.Sequence,
GrantedRoleKeys: project.GrantedRoleKeys,
}
}
func ProjectGrantsToModel(projects []*ProjectGrantView) []*model.ProjectGrantView {
result := make([]*model.ProjectGrantView, len(projects))
for i, p := range projects {
result[i] = ProjectGrantToModel(p)
}
return result
}
func (p *ProjectGrantView) AppendEvent(event *models.Event) (err error) {
p.ChangeDate = event.CreationDate
p.Sequence = event.Sequence
switch event.Type {
case es_model.ProjectGrantAdded:
switch eventstore.EventType(event.Type) {
case project.GrantAddedType:
p.State = int32(model.ProjectStateActive)
p.CreationDate = event.CreationDate
p.setRootData(event)
err = p.setProjectGrantData(event)
case es_model.ProjectGrantChanged, es_model.ProjectGrantCascadeChanged:
case project.GrantChangedType, project.GrantCascadeChangedType:
err = p.setProjectGrantData(event)
case es_model.ProjectGrantDeactivated:
case project.GrantDeactivatedType:
p.State = int32(model.ProjectStateInactive)
case es_model.ProjectGrantReactivated:
case project.GrantReactivatedType:
p.State = int32(model.ProjectStateActive)
}
return err

View File

@@ -7,11 +7,10 @@ import (
"github.com/caos/logging"
"github.com/lib/pq"
"github.com/caos/zitadel/internal/domain"
caos_errs "github.com/caos/zitadel/internal/errors"
"github.com/caos/zitadel/internal/eventstore"
"github.com/caos/zitadel/internal/eventstore/v1/models"
"github.com/caos/zitadel/internal/project/model"
es_model "github.com/caos/zitadel/internal/project/repository/eventsourcing/model"
"github.com/caos/zitadel/internal/repository/project"
)
const (
@@ -43,43 +42,15 @@ type ProjectGrantMemberView struct {
ChangeDate time.Time `json:"-" gorm:"column:change_date"`
}
func ProjectGrantMemberToModel(member *ProjectGrantMemberView, prefixAvatarURL string) *model.ProjectGrantMemberView {
return &model.ProjectGrantMemberView{
UserID: member.UserID,
GrantID: member.GrantID,
ProjectID: member.ProjectID,
UserName: member.UserName,
Email: member.Email,
FirstName: member.FirstName,
LastName: member.LastName,
DisplayName: member.DisplayName,
PreferredLoginName: member.PreferredLoginName,
AvatarURL: domain.AvatarURL(prefixAvatarURL, member.UserResourceOwner, member.AvatarKey),
UserResourceOwner: member.UserResourceOwner,
Roles: member.Roles,
Sequence: member.Sequence,
CreationDate: member.CreationDate,
ChangeDate: member.ChangeDate,
}
}
func ProjectGrantMembersToModel(roles []*ProjectGrantMemberView, prefixAvatarURL string) []*model.ProjectGrantMemberView {
result := make([]*model.ProjectGrantMemberView, len(roles))
for i, r := range roles {
result[i] = ProjectGrantMemberToModel(r, prefixAvatarURL)
}
return result
}
func (r *ProjectGrantMemberView) AppendEvent(event *models.Event) (err error) {
r.Sequence = event.Sequence
r.ChangeDate = event.CreationDate
switch event.Type {
case es_model.ProjectGrantMemberAdded:
switch eventstore.EventType(event.Type) {
case project.GrantMemberAddedType:
r.setRootData(event)
r.CreationDate = event.CreationDate
err = r.SetData(event)
case es_model.ProjectGrantMemberChanged:
case project.GrantMemberChangedType:
err = r.SetData(event)
}
return err

View File

@@ -1,71 +0,0 @@
package model
import (
"github.com/caos/zitadel/internal/domain"
proj_model "github.com/caos/zitadel/internal/project/model"
"github.com/caos/zitadel/internal/view/repository"
)
type ProjectGrantMemberSearchRequest proj_model.ProjectGrantMemberSearchRequest
type ProjectGrantMemberSearchQuery proj_model.ProjectGrantMemberSearchQuery
type ProjectGrantMemberSearchKey proj_model.ProjectGrantMemberSearchKey
func (req ProjectGrantMemberSearchRequest) GetLimit() uint64 {
return req.Limit
}
func (req ProjectGrantMemberSearchRequest) GetOffset() uint64 {
return req.Offset
}
func (req ProjectGrantMemberSearchRequest) GetSortingColumn() repository.ColumnKey {
if req.SortingColumn == proj_model.ProjectGrantMemberSearchKeyUnspecified {
return nil
}
return ProjectGrantMemberSearchKey(req.SortingColumn)
}
func (req ProjectGrantMemberSearchRequest) GetAsc() bool {
return req.Asc
}
func (req ProjectGrantMemberSearchRequest) GetQueries() []repository.SearchQuery {
result := make([]repository.SearchQuery, len(req.Queries))
for i, q := range req.Queries {
result[i] = ProjectGrantMemberSearchQuery{Key: q.Key, Value: q.Value, Method: q.Method}
}
return result
}
func (req ProjectGrantMemberSearchQuery) GetKey() repository.ColumnKey {
return ProjectGrantMemberSearchKey(req.Key)
}
func (req ProjectGrantMemberSearchQuery) GetMethod() domain.SearchMethod {
return req.Method
}
func (req ProjectGrantMemberSearchQuery) GetValue() interface{} {
return req.Value
}
func (key ProjectGrantMemberSearchKey) ToColumnName() string {
switch proj_model.ProjectGrantMemberSearchKey(key) {
case proj_model.ProjectGrantMemberSearchKeyEmail:
return ProjectGrantMemberKeyEmail
case proj_model.ProjectGrantMemberSearchKeyFirstName:
return ProjectGrantMemberKeyFirstName
case proj_model.ProjectGrantMemberSearchKeyLastName:
return ProjectGrantMemberKeyLastName
case proj_model.ProjectGrantMemberSearchKeyUserName:
return ProjectGrantMemberKeyUserName
case proj_model.ProjectGrantMemberSearchKeyUserID:
return ProjectGrantMemberKeyUserID
case proj_model.ProjectGrantMemberSearchKeyGrantID:
return ProjectGrantMemberKeyGrantID
case proj_model.ProjectGrantMemberSearchKeyProjectID:
return ProjectGrantMemberKeyProjectID
default:
return ""
}
}

View File

@@ -5,9 +5,11 @@ import (
"reflect"
"testing"
"github.com/lib/pq"
es_models "github.com/caos/zitadel/internal/eventstore/v1/models"
es_model "github.com/caos/zitadel/internal/project/repository/eventsourcing/model"
"github.com/lib/pq"
"github.com/caos/zitadel/internal/repository/project"
)
func mockProjectGrantMemberData(member *es_model.ProjectGrantMember) []byte {
@@ -28,7 +30,7 @@ func TestGrantedProjectMemberAppendEvent(t *testing.T) {
{
name: "append added member event",
args: args{
event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_model.ProjectGrantMemberAdded, ResourceOwner: "OrgID", Data: mockProjectGrantMemberData(&es_model.ProjectGrantMember{GrantID: "ProjectGrantID", UserID: "UserID", Roles: pq.StringArray{"Role"}})},
event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(project.GrantMemberAddedType), ResourceOwner: "OrgID", Data: mockProjectGrantMemberData(&es_model.ProjectGrantMember{GrantID: "ProjectGrantID", UserID: "UserID", Roles: pq.StringArray{"Role"}})},
member: &ProjectGrantMemberView{},
},
result: &ProjectGrantMemberView{ProjectID: "AggregateID", UserID: "UserID", GrantID: "ProjectGrantID", Roles: pq.StringArray{"Role"}},
@@ -36,7 +38,7 @@ func TestGrantedProjectMemberAppendEvent(t *testing.T) {
{
name: "append changed member event",
args: args{
event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_model.ProjectGrantMemberAdded, ResourceOwner: "OrgID", Data: mockProjectGrantMemberData(&es_model.ProjectGrantMember{GrantID: "ProjectGrantID", Roles: pq.StringArray{"RoleChanged"}})},
event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(project.GrantMemberAddedType), ResourceOwner: "OrgID", Data: mockProjectGrantMemberData(&es_model.ProjectGrantMember{GrantID: "ProjectGrantID", Roles: pq.StringArray{"RoleChanged"}})},
member: &ProjectGrantMemberView{ProjectID: "AggregateID", UserID: "UserID", GrantID: "ProjectGrantID", Roles: pq.StringArray{"Role"}},
},
result: &ProjectGrantMemberView{ProjectID: "AggregateID", UserID: "UserID", GrantID: "ProjectGrantID", Roles: pq.StringArray{"RoleChanged"}},

View File

@@ -1,69 +0,0 @@
package model
import (
"github.com/caos/zitadel/internal/domain"
proj_model "github.com/caos/zitadel/internal/project/model"
"github.com/caos/zitadel/internal/view/repository"
)
type ProjectGrantSearchRequest proj_model.ProjectGrantViewSearchRequest
type ProjectGrantSearchQuery proj_model.ProjectGrantViewSearchQuery
type ProjectGrantSearchKey proj_model.ProjectGrantViewSearchKey
func (req ProjectGrantSearchRequest) GetLimit() uint64 {
return req.Limit
}
func (req ProjectGrantSearchRequest) GetOffset() uint64 {
return req.Offset
}
func (req ProjectGrantSearchRequest) GetSortingColumn() repository.ColumnKey {
if req.SortingColumn == proj_model.GrantedProjectSearchKeyUnspecified {
return nil
}
return ProjectGrantSearchKey(req.SortingColumn)
}
func (req ProjectGrantSearchRequest) GetAsc() bool {
return req.Asc
}
func (req ProjectGrantSearchRequest) GetQueries() []repository.SearchQuery {
result := make([]repository.SearchQuery, len(req.Queries))
for i, q := range req.Queries {
result[i] = ProjectGrantSearchQuery{Key: q.Key, Value: q.Value, Method: q.Method}
}
return result
}
func (req ProjectGrantSearchQuery) GetKey() repository.ColumnKey {
return ProjectGrantSearchKey(req.Key)
}
func (req ProjectGrantSearchQuery) GetMethod() domain.SearchMethod {
return req.Method
}
func (req ProjectGrantSearchQuery) GetValue() interface{} {
return req.Value
}
func (key ProjectGrantSearchKey) ToColumnName() string {
switch proj_model.ProjectGrantViewSearchKey(key) {
case proj_model.GrantedProjectSearchKeyName:
return ProjectGrantKeyName
case proj_model.GrantedProjectSearchKeyGrantID:
return ProjectGrantKeyGrantID
case proj_model.GrantedProjectSearchKeyOrgID:
return ProjectGrantKeyOrgID
case proj_model.GrantedProjectSearchKeyProjectID:
return ProjectGrantKeyProjectID
case proj_model.GrantedProjectSearchKeyResourceOwner:
return ProjectGrantKeyResourceOwner
case proj_model.GrantedProjectSearchKeyRoleKeys:
return ProjectGrantKeyRoleKeys
default:
return ""
}
}

View File

@@ -2,12 +2,15 @@ package model
import (
"encoding/json"
"reflect"
"testing"
"github.com/lib/pq"
es_models "github.com/caos/zitadel/internal/eventstore/v1/models"
"github.com/caos/zitadel/internal/project/model"
es_model "github.com/caos/zitadel/internal/project/repository/eventsourcing/model"
"github.com/lib/pq"
"reflect"
"testing"
"github.com/caos/zitadel/internal/repository/project"
)
func mockProjectData(project *es_model.Project) []byte {
@@ -33,7 +36,7 @@ func TestProjectGrantAppendEvent(t *testing.T) {
{
name: "append added project grant event",
args: args{
event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_model.ProjectGrantAdded, ResourceOwner: "GrantedOrgID", Data: mockProjectGrantData(&es_model.ProjectGrant{GrantID: "ProjectGrantID", GrantedOrgID: "GrantedOrgID", RoleKeys: pq.StringArray{"Role"}})},
event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(project.GrantAddedType), ResourceOwner: "GrantedOrgID", Data: mockProjectGrantData(&es_model.ProjectGrant{GrantID: "ProjectGrantID", GrantedOrgID: "GrantedOrgID", RoleKeys: pq.StringArray{"Role"}})},
project: &ProjectGrantView{},
},
result: &ProjectGrantView{ProjectID: "AggregateID", ResourceOwner: "GrantedOrgID", OrgID: "GrantedOrgID", State: int32(model.ProjectStateActive), GrantedRoleKeys: pq.StringArray{"Role"}},
@@ -41,7 +44,7 @@ func TestProjectGrantAppendEvent(t *testing.T) {
{
name: "append change project grant event",
args: args{
event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_model.ProjectGrantChanged, ResourceOwner: "GrantedOrgID", Data: mockProjectGrantData(&es_model.ProjectGrant{GrantID: "ProjectGrantID", RoleKeys: pq.StringArray{"RoleChanged"}})},
event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(project.GrantChangedType), ResourceOwner: "GrantedOrgID", Data: mockProjectGrantData(&es_model.ProjectGrant{GrantID: "ProjectGrantID", RoleKeys: pq.StringArray{"RoleChanged"}})},
project: &ProjectGrantView{ProjectID: "AggregateID", ResourceOwner: "GrantedOrgID", OrgID: "GrantedOrgID", State: int32(model.ProjectStateActive), GrantedRoleKeys: pq.StringArray{"Role"}},
},
result: &ProjectGrantView{ProjectID: "AggregateID", ResourceOwner: "GrantedOrgID", OrgID: "GrantedOrgID", State: int32(model.ProjectStateActive), GrantedRoleKeys: pq.StringArray{"RoleChanged"}},
@@ -49,7 +52,7 @@ func TestProjectGrantAppendEvent(t *testing.T) {
{
name: "append deactivate project grant event",
args: args{
event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_model.ProjectGrantDeactivated, ResourceOwner: "GrantedOrgID", Data: mockProjectGrantData(&es_model.ProjectGrant{GrantID: "ProjectGrantID"})},
event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(project.GrantDeactivatedType), ResourceOwner: "GrantedOrgID", Data: mockProjectGrantData(&es_model.ProjectGrant{GrantID: "ProjectGrantID"})},
project: &ProjectGrantView{ProjectID: "AggregateID", ResourceOwner: "GrantedOrgID", OrgID: "GrantedOrgID", State: int32(model.ProjectStateActive), GrantedRoleKeys: pq.StringArray{"Role"}},
},
result: &ProjectGrantView{ProjectID: "AggregateID", ResourceOwner: "GrantedOrgID", OrgID: "GrantedOrgID", State: int32(model.ProjectStateInactive), GrantedRoleKeys: pq.StringArray{"Role"}},
@@ -57,7 +60,7 @@ func TestProjectGrantAppendEvent(t *testing.T) {
{
name: "append reactivate project grant event",
args: args{
event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_model.ProjectGrantReactivated, ResourceOwner: "GrantedOrgID", Data: mockProjectGrantData(&es_model.ProjectGrant{GrantID: "ProjectGrantID"})},
event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(project.GrantReactivatedType), ResourceOwner: "GrantedOrgID", Data: mockProjectGrantData(&es_model.ProjectGrant{GrantID: "ProjectGrantID"})},
project: &ProjectGrantView{ProjectID: "AggregateID", ResourceOwner: "GrantedOrgID", OrgID: "GrantedOrgID", State: int32(model.ProjectStateInactive), GrantedRoleKeys: pq.StringArray{"Role"}},
},
result: &ProjectGrantView{ProjectID: "AggregateID", ResourceOwner: "GrantedOrgID", OrgID: "GrantedOrgID", State: int32(model.ProjectStateActive), GrantedRoleKeys: pq.StringArray{"Role"}},

View File

@@ -7,11 +7,10 @@ import (
"github.com/caos/logging"
"github.com/lib/pq"
"github.com/caos/zitadel/internal/domain"
caos_errs "github.com/caos/zitadel/internal/errors"
"github.com/caos/zitadel/internal/eventstore"
"github.com/caos/zitadel/internal/eventstore/v1/models"
"github.com/caos/zitadel/internal/project/model"
es_model "github.com/caos/zitadel/internal/project/repository/eventsourcing/model"
"github.com/caos/zitadel/internal/repository/project"
)
const (
@@ -41,42 +40,15 @@ type ProjectMemberView struct {
ChangeDate time.Time `json:"-" gorm:"column:change_date"`
}
func ProjectMemberToModel(member *ProjectMemberView, prefixAvatarURL string) *model.ProjectMemberView {
return &model.ProjectMemberView{
UserID: member.UserID,
ProjectID: member.ProjectID,
UserName: member.UserName,
Email: member.Email,
FirstName: member.FirstName,
LastName: member.LastName,
DisplayName: member.DisplayName,
PreferredLoginName: member.PreferredLoginName,
AvatarURL: domain.AvatarURL(prefixAvatarURL, member.UserResourceOwner, member.AvatarKey),
UserResourceOwner: member.UserResourceOwner,
Roles: member.Roles,
Sequence: member.Sequence,
CreationDate: member.CreationDate,
ChangeDate: member.ChangeDate,
}
}
func ProjectMembersToModel(roles []*ProjectMemberView, prefixAvatarURL string) []*model.ProjectMemberView {
result := make([]*model.ProjectMemberView, len(roles))
for i, r := range roles {
result[i] = ProjectMemberToModel(r, prefixAvatarURL)
}
return result
}
func (r *ProjectMemberView) AppendEvent(event *models.Event) (err error) {
r.Sequence = event.Sequence
r.ChangeDate = event.CreationDate
switch event.Type {
case es_model.ProjectMemberAdded:
switch eventstore.EventType(event.Type) {
case project.MemberAddedType:
r.setRootData(event)
r.CreationDate = event.CreationDate
err = r.SetData(event)
case es_model.ProjectMemberChanged:
case project.MemberChangedType:
err = r.SetData(event)
}
return err

View File

@@ -1,69 +0,0 @@
package model
import (
"github.com/caos/zitadel/internal/domain"
proj_model "github.com/caos/zitadel/internal/project/model"
"github.com/caos/zitadel/internal/view/repository"
)
type ProjectMemberSearchRequest proj_model.ProjectMemberSearchRequest
type ProjectMemberSearchQuery proj_model.ProjectMemberSearchQuery
type ProjectMemberSearchKey proj_model.ProjectMemberSearchKey
func (req ProjectMemberSearchRequest) GetLimit() uint64 {
return req.Limit
}
func (req ProjectMemberSearchRequest) GetOffset() uint64 {
return req.Offset
}
func (req ProjectMemberSearchRequest) GetSortingColumn() repository.ColumnKey {
if req.SortingColumn == proj_model.ProjectMemberSearchKeyUnspecified {
return nil
}
return ProjectMemberSearchKey(req.SortingColumn)
}
func (req ProjectMemberSearchRequest) GetAsc() bool {
return req.Asc
}
func (req ProjectMemberSearchRequest) GetQueries() []repository.SearchQuery {
result := make([]repository.SearchQuery, len(req.Queries))
for i, q := range req.Queries {
result[i] = ProjectMemberSearchQuery{Key: q.Key, Value: q.Value, Method: q.Method}
}
return result
}
func (req ProjectMemberSearchQuery) GetKey() repository.ColumnKey {
return ProjectMemberSearchKey(req.Key)
}
func (req ProjectMemberSearchQuery) GetMethod() domain.SearchMethod {
return req.Method
}
func (req ProjectMemberSearchQuery) GetValue() interface{} {
return req.Value
}
func (key ProjectMemberSearchKey) ToColumnName() string {
switch proj_model.ProjectMemberSearchKey(key) {
case proj_model.ProjectMemberSearchKeyEmail:
return ProjectMemberKeyEmail
case proj_model.ProjectMemberSearchKeyFirstName:
return ProjectMemberKeyFirstName
case proj_model.ProjectMemberSearchKeyLastName:
return ProjectMemberKeyLastName
case proj_model.ProjectMemberSearchKeyUserName:
return ProjectMemberKeyUserName
case proj_model.ProjectMemberSearchKeyUserID:
return ProjectMemberKeyUserID
case proj_model.ProjectMemberSearchKeyProjectID:
return ProjectMemberKeyProjectID
default:
return ""
}
}

View File

@@ -5,9 +5,11 @@ import (
"reflect"
"testing"
"github.com/lib/pq"
es_models "github.com/caos/zitadel/internal/eventstore/v1/models"
es_model "github.com/caos/zitadel/internal/project/repository/eventsourcing/model"
"github.com/lib/pq"
"github.com/caos/zitadel/internal/repository/project"
)
func mockProjectMemberData(member *es_model.ProjectMember) []byte {
@@ -28,7 +30,7 @@ func TestProjectMemberAppendEvent(t *testing.T) {
{
name: "append added member event",
args: args{
event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_model.ProjectMemberAdded, ResourceOwner: "OrgID", Data: mockProjectMemberData(&es_model.ProjectMember{UserID: "UserID", Roles: pq.StringArray{"Role"}})},
event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(project.MemberAddedType), ResourceOwner: "OrgID", Data: mockProjectMemberData(&es_model.ProjectMember{UserID: "UserID", Roles: pq.StringArray{"Role"}})},
member: &ProjectMemberView{},
},
result: &ProjectMemberView{ProjectID: "AggregateID", UserID: "UserID", Roles: pq.StringArray{"Role"}},
@@ -36,7 +38,7 @@ func TestProjectMemberAppendEvent(t *testing.T) {
{
name: "append changed member event",
args: args{
event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_model.ProjectMemberAdded, ResourceOwner: "OrgID", Data: mockProjectMemberData(&es_model.ProjectMember{UserID: "UserID", Roles: pq.StringArray{"RoleChanged"}})},
event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(project.MemberAddedType), ResourceOwner: "OrgID", Data: mockProjectMemberData(&es_model.ProjectMember{UserID: "UserID", Roles: pq.StringArray{"RoleChanged"}})},
member: &ProjectMemberView{ProjectID: "AggregateID", UserID: "UserID", Roles: pq.StringArray{"Role"}},
},
result: &ProjectMemberView{ProjectID: "AggregateID", UserID: "UserID", Roles: pq.StringArray{"RoleChanged"}},

View File

@@ -1,63 +0,0 @@
package model
import (
"github.com/caos/zitadel/internal/domain"
proj_model "github.com/caos/zitadel/internal/project/model"
"github.com/caos/zitadel/internal/view/repository"
)
type ProjectSearchRequest proj_model.ProjectViewSearchRequest
type ProjectSearchQuery proj_model.ProjectViewSearchQuery
type ProjectSearchKey proj_model.ProjectViewSearchKey
func (req ProjectSearchRequest) GetLimit() uint64 {
return req.Limit
}
func (req ProjectSearchRequest) GetOffset() uint64 {
return req.Offset
}
func (req ProjectSearchRequest) GetSortingColumn() repository.ColumnKey {
if req.SortingColumn == proj_model.ProjectViewSearchKeyUnspecified {
return nil
}
return ProjectSearchKey(req.SortingColumn)
}
func (req ProjectSearchRequest) GetAsc() bool {
return req.Asc
}
func (req ProjectSearchRequest) GetQueries() []repository.SearchQuery {
result := make([]repository.SearchQuery, len(req.Queries))
for i, q := range req.Queries {
result[i] = ProjectSearchQuery{Key: q.Key, Value: q.Value, Method: q.Method}
}
return result
}
func (req ProjectSearchQuery) GetKey() repository.ColumnKey {
return ProjectSearchKey(req.Key)
}
func (req ProjectSearchQuery) GetMethod() domain.SearchMethod {
return req.Method
}
func (req ProjectSearchQuery) GetValue() interface{} {
return req.Value
}
func (key ProjectSearchKey) ToColumnName() string {
switch proj_model.ProjectViewSearchKey(key) {
case proj_model.ProjectViewSearchKeyName:
return ProjectKeyName
case proj_model.ProjectViewSearchKeyProjectID:
return ProjectKeyProjectID
case proj_model.ProjectViewSearchKeyResourceOwner:
return ProjectKeyResourceOwner
default:
return ""
}
}

View File

@@ -1,10 +1,12 @@
package model
import (
"testing"
es_models "github.com/caos/zitadel/internal/eventstore/v1/models"
"github.com/caos/zitadel/internal/project/model"
es_model "github.com/caos/zitadel/internal/project/repository/eventsourcing/model"
"testing"
"github.com/caos/zitadel/internal/repository/project"
)
func TestProjectAppendEvent(t *testing.T) {
@@ -20,7 +22,7 @@ func TestProjectAppendEvent(t *testing.T) {
{
name: "append added project event",
args: args{
event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_model.ProjectAdded, ResourceOwner: "GrantedOrgID", Data: mockProjectData(&es_model.Project{Name: "ProjectName"})},
event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(project.ProjectAddedType), ResourceOwner: "GrantedOrgID", Data: mockProjectData(&es_model.Project{Name: "ProjectName"})},
project: &ProjectView{},
},
result: &ProjectView{ProjectID: "AggregateID", ResourceOwner: "GrantedOrgID", Name: "ProjectName", State: int32(model.ProjectStateActive)},
@@ -28,7 +30,7 @@ func TestProjectAppendEvent(t *testing.T) {
{
name: "append change project event",
args: args{
event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_model.ProjectChanged, ResourceOwner: "GrantedOrgID", Data: mockProjectData(&es_model.Project{Name: "ProjectNameChanged"})},
event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(project.ProjectChangedType), ResourceOwner: "GrantedOrgID", Data: mockProjectData(&es_model.Project{Name: "ProjectNameChanged"})},
project: &ProjectView{ProjectID: "AggregateID", ResourceOwner: "GrantedOrgID", Name: "ProjectName", State: int32(model.ProjectStateActive)},
},
result: &ProjectView{ProjectID: "AggregateID", ResourceOwner: "GrantedOrgID", Name: "ProjectNameChanged", State: int32(model.ProjectStateActive)},
@@ -36,7 +38,7 @@ func TestProjectAppendEvent(t *testing.T) {
{
name: "append project deactivate event",
args: args{
event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_model.ProjectDeactivated, ResourceOwner: "GrantedOrgID"},
event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(project.ProjectDeactivatedType), ResourceOwner: "GrantedOrgID"},
project: &ProjectView{ProjectID: "AggregateID", ResourceOwner: "GrantedOrgID", Name: "ProjectName", State: int32(model.ProjectStateActive)},
},
result: &ProjectView{ProjectID: "AggregateID", ResourceOwner: "GrantedOrgID", Name: "ProjectName", State: int32(model.ProjectStateInactive)},
@@ -44,7 +46,7 @@ func TestProjectAppendEvent(t *testing.T) {
{
name: "append project reactivate event",
args: args{
event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_model.ProjectReactivated, ResourceOwner: "GrantedOrgID"},
event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(project.ProjectReactivatedType), ResourceOwner: "GrantedOrgID"},
project: &ProjectView{ProjectID: "AggregateID", ResourceOwner: "GrantedOrgID", Name: "ProjectName", State: int32(model.ProjectStateInactive)},
},
result: &ProjectView{ProjectID: "AggregateID", ResourceOwner: "GrantedOrgID", Name: "ProjectName", State: int32(model.ProjectStateActive)},

View File

@@ -44,8 +44,3 @@ func DeleteOrgProjectMappingsByProjectGrantID(db *gorm.DB, table, projectGrantID
delete := repository.PrepareDeleteByKey(table, model.OrgProjectMappingSearchKey(proj_model.OrgProjectMappingSearchKeyProjectGrantID), projectGrantID)
return delete(db)
}
func DeleteOrgProjectMappingsByOrgID(db *gorm.DB, table, orgID string) error {
delete := repository.PrepareDeleteByKey(table, model.OrgProjectMappingSearchKey(proj_model.OrgProjectMappingSearchKeyOrgID), orgID)
return delete(db)
}

View File

@@ -1,92 +0,0 @@
package view
import (
"github.com/caos/zitadel/internal/domain"
caos_errs "github.com/caos/zitadel/internal/errors"
proj_model "github.com/caos/zitadel/internal/project/model"
"github.com/caos/zitadel/internal/project/repository/view/model"
"github.com/caos/zitadel/internal/view/repository"
"github.com/jinzhu/gorm"
)
func ProjectGrantMemberByIDs(db *gorm.DB, table, grantID, userID string) (*model.ProjectGrantMemberView, error) {
grant := new(model.ProjectGrantMemberView)
grantIDQuery := model.ProjectGrantMemberSearchQuery{Key: proj_model.ProjectGrantMemberSearchKeyGrantID, Value: grantID, Method: domain.SearchMethodEquals}
userIDQuery := model.ProjectGrantMemberSearchQuery{Key: proj_model.ProjectGrantMemberSearchKeyUserID, Value: userID, Method: domain.SearchMethodEquals}
query := repository.PrepareGetByQuery(table, grantIDQuery, userIDQuery)
err := query(db, grant)
if caos_errs.IsNotFound(err) {
return nil, caos_errs.ThrowNotFound(nil, "VIEW-Sgr32", "Errors.Project.Member.NotExisting")
}
return grant, err
}
func ProjectGrantMembersByProjectID(db *gorm.DB, table, projectID string) ([]*model.ProjectGrantMemberView, error) {
members := make([]*model.ProjectGrantMemberView, 0)
queries := []*proj_model.ProjectGrantMemberSearchQuery{
{Key: proj_model.ProjectGrantMemberSearchKeyProjectID, Value: projectID, Method: domain.SearchMethodEquals},
}
query := repository.PrepareSearchQuery(table, model.ProjectGrantMemberSearchRequest{Queries: queries})
_, err := query(db, &members)
if err != nil {
return nil, err
}
return members, nil
}
func SearchProjectGrantMembers(db *gorm.DB, table string, req *proj_model.ProjectGrantMemberSearchRequest) ([]*model.ProjectGrantMemberView, uint64, error) {
roles := make([]*model.ProjectGrantMemberView, 0)
query := repository.PrepareSearchQuery(table, model.ProjectGrantMemberSearchRequest{Limit: req.Limit, Offset: req.Offset, Queries: req.Queries})
count, err := query(db, &roles)
if err != nil {
return nil, 0, err
}
return roles, count, nil
}
func ProjectGrantMembersByUserID(db *gorm.DB, table, userID string) ([]*model.ProjectGrantMemberView, error) {
members := make([]*model.ProjectGrantMemberView, 0)
queries := []*proj_model.ProjectGrantMemberSearchQuery{
{Key: proj_model.ProjectGrantMemberSearchKeyUserID, Value: userID, Method: domain.SearchMethodEquals},
}
query := repository.PrepareSearchQuery(table, model.ProjectGrantMemberSearchRequest{Queries: queries})
_, err := query(db, &members)
if err != nil {
return nil, err
}
return members, nil
}
func PutProjectGrantMember(db *gorm.DB, table string, role *model.ProjectGrantMemberView) error {
save := repository.PrepareSave(table)
return save(db, role)
}
func PutProjectGrantMembers(db *gorm.DB, table string, members ...*model.ProjectGrantMemberView) error {
save := repository.PrepareBulkSave(table)
m := make([]interface{}, len(members))
for i, member := range members {
m[i] = member
}
return save(db, m...)
}
func DeleteProjectGrantMember(db *gorm.DB, table, grantID, userID string) error {
grant, err := ProjectGrantMemberByIDs(db, table, grantID, userID)
if err != nil {
return err
}
delete := repository.PrepareDeleteByObject(table, grant)
return delete(db)
}
func DeleteProjectGrantMembersByProjectID(db *gorm.DB, table, projectID string) error {
delete := repository.PrepareDeleteByKey(table, model.ProjectGrantMemberSearchKey(proj_model.ProjectGrantMemberSearchKeyProjectID), projectID)
return delete(db)
}
func DeleteProjectGrantMembersByUserID(db *gorm.DB, table, userID string) error {
delete := repository.PrepareDeleteByKey(table, model.ProjectGrantMemberSearchKey(proj_model.ProjectGrantMemberSearchKeyUserID), userID)
return delete(db)
}

View File

@@ -1,11 +1,9 @@
package view
import (
"time"
"github.com/caos/zitadel/internal/errors"
es_models "github.com/caos/zitadel/internal/eventstore/v1/models"
"github.com/caos/zitadel/internal/project/repository/eventsourcing/model"
"github.com/caos/zitadel/internal/repository/project"
)
func ProjectByIDQuery(id string, latestSequence uint64) (*es_models.SearchQuery, error) {
@@ -18,22 +16,6 @@ func ProjectByIDQuery(id string, latestSequence uint64) (*es_models.SearchQuery,
func ProjectQuery(latestSequence uint64) *es_models.SearchQuery {
return es_models.NewSearchQuery().
AggregateTypeFilter(model.ProjectAggregate).
AggregateTypeFilter(project.AggregateType).
LatestSequenceFilter(latestSequence)
}
func ChangesQuery(projectID string, latestSequence, limit uint64, sortAscending bool, retention time.Duration) *es_models.SearchQuery {
query := es_models.NewSearchQuery().
AggregateTypeFilter(model.ProjectAggregate)
if !sortAscending {
query.OrderDesc()
}
if retention > 0 {
query.CreationDateNewerFilter(time.Now().Add(-retention))
}
query.LatestSequenceFilter(latestSequence).
AggregateIDFilter(projectID).
SetLimit(limit)
return query
}