fix: use query side for requests (#2818)

* refactor(domain): add user type

* fix(projections): start with login names

* fix(login_policy): correct handling of user domain claimed event

* fix(projections): add members

* refactor: simplify member projections

* add migration for members

* add metadata to member projections

* refactor: login name projection

* fix: set correct suffixes on login name projections

* test(projections): login name reduces

* fix: correct cols in reduce member

* test(projections): org, iam, project members

* member additional cols and conds as opt,
add project grant members

* fix(migration): members

* fix(migration): correct database name

* migration version

* migs

* better naming for member cond and col

* split project and project grant members

* prepare member columns

* feat(queries): membership query

* test(queries): membership prepare

* fix(queries): multiple projections for latest sequence

* fix(api): use query for membership queries in auth and management

* feat: org member queries

* fix(api): use query for iam member calls

* fix(queries): org members

* fix(queries): project members

* fix(queries): project grant members

* refactor: remove unsued methods in repo-interfaces

* start

* fix(query): membership

* fix(auth): list my project orgs

* fix(query): member queries and user avatar column

* refactor(auth): MyProjectOrgs

* fix(queries): member and membership stmts

* fix user test

* fix(management): use query for project (-grant) members

* fix(admin): use query for member calls

* fix(api): add domain to org mapping

* remove old idp

* membership

* refactor: remove old files

* idp

* refactor: use query for idps and idp user links

* refactor(eventstore): rename EventPusher to Command, EventReader to Event, PushEvents to Push and FilterEvents to Filter

* gloabl org check for org roles

Co-authored-by: Livio Amstutz <livio.a@gmail.com>
This commit is contained in:
Silvan
2022-01-13 08:58:14 +01:00
committed by GitHub
parent 3d14653a08
commit b8bec25129
63 changed files with 307 additions and 4926 deletions

View File

@@ -198,28 +198,17 @@ func (q *Queries) IDPByIDAndResourceOwner(ctx context.Context, id, resourceOwner
return scan(row)
}
//SearchIDPs searches executes the query in the context of the resource owner and IAM
func (q *Queries) SearchIDPs(ctx context.Context, resourceOwner string, queries *IDPSearchQueries) (idps *IDPs, err error) {
//IDPs searches idps matching the query
func (q *Queries) IDPs(ctx context.Context, queries *IDPSearchQueries) (idps *IDPs, err error) {
query, scan := prepareIDPsQuery()
query = queries.toQuery(query)
query = query.Where(
sq.Or{
sq.Eq{
IDPResourceOwnerCol.identifier(): resourceOwner,
},
sq.Eq{
IDPResourceOwnerCol.identifier(): q.iamID,
},
},
)
stmt, args, err := queries.toQuery(query).ToSql()
if err != nil {
return nil, errors.ThrowInvalidArgument(err, "QUERY-zC6gk", "Errors.Query.InvalidRequest")
return nil, errors.ThrowInvalidArgument(err, "QUERY-X6X7y", "Errors.Query.InvalidRequest")
}
rows, err := q.client.QueryContext(ctx, stmt, args...)
if err != nil {
return nil, errors.ThrowInternal(err, "QUERY-YTug9", "Errors.Internal")
return nil, errors.ThrowInternal(err, "QUERY-xPlVH", "Errors.Internal")
}
idps, err = scan(rows)
if err != nil {
@@ -246,6 +235,10 @@ func NewIDPNameSearchQuery(method TextComparison, value string) (SearchQuery, er
return NewTextQuery(IDPNameCol, value, method)
}
func NewIDPResourceOwnerSearchQuery(value string) (SearchQuery, error) {
return NewTextQuery(IDPResourceOwnerCol, value, TextEquals)
}
func (q *IDPSearchQueries) toQuery(query sq.SelectBuilder) sq.SelectBuilder {
query = q.SearchRequest.toQuery(query)
for _, q := range q.Queries {

View File

@@ -16,6 +16,7 @@ type IDPUserLink struct {
IDPName string
ProvidedUserID string
ProvidedUsername string
ResourceOwner string
IDPType domain.IDPConfigType
}
@@ -94,6 +95,10 @@ func (q *Queries) IDPUserLinks(ctx context.Context, queries *IDPUserLinksSearchQ
return idps, err
}
func NewIDPUserLinkIDPIDSearchQuery(value string) (SearchQuery, error) {
return NewTextQuery(IDPUserLinkIDPIDCol, value, TextEquals)
}
func NewIDPUserLinksUserIDSearchQuery(value string) (SearchQuery, error) {
return NewTextQuery(IDPUserLinkUserIDCol, value, TextEquals)
}
@@ -110,6 +115,7 @@ func prepareIDPUserLinksQuery() (sq.SelectBuilder, func(*sql.Rows) (*IDPUserLink
IDPUserLinkExternalUserIDCol.identifier(),
IDPUserLinkDisplayNameCol.identifier(),
IDPTypeCol.identifier(),
IDPUserLinkResourceOwnerCol.identifier(),
countColumn.identifier()).
From(idpUserLinkTable.identifier()).
LeftJoin(join(IDPIDCol, IDPUserLinkIDPIDCol)).PlaceholderFormat(sq.Dollar),
@@ -129,6 +135,7 @@ func prepareIDPUserLinksQuery() (sq.SelectBuilder, func(*sql.Rows) (*IDPUserLink
&idp.ProvidedUserID,
&idp.ProvidedUsername,
&idpType,
&idp.ResourceOwner,
&count,
)
if err != nil {

View File

@@ -18,6 +18,7 @@ var (
` zitadel.projections.idp_user_links.external_user_id,` +
` zitadel.projections.idp_user_links.display_name,` +
` zitadel.projections.idps.type,` +
` zitadel.projections.idp_user_links.resource_owner,` +
` COUNT(*) OVER ()` +
` FROM zitadel.projections.idp_user_links` +
` LEFT JOIN zitadel.projections.idps ON zitadel.projections.idp_user_links.idp_id = zitadel.projections.idps.id`)
@@ -28,6 +29,7 @@ var (
"external_user_id",
"display_name",
"type",
"resource_owner",
"count",
}
)
@@ -58,6 +60,7 @@ func Test_IDPUserLinkPrepares(t *testing.T) {
"external-user-id",
"display-name",
domain.IDPConfigTypeJWT,
"ro",
},
},
),
@@ -74,6 +77,7 @@ func Test_IDPUserLinkPrepares(t *testing.T) {
ProvidedUserID: "external-user-id",
ProvidedUsername: "display-name",
IDPType: domain.IDPConfigTypeJWT,
ResourceOwner: "ro",
},
},
},
@@ -93,6 +97,7 @@ func Test_IDPUserLinkPrepares(t *testing.T) {
"external-user-id",
"display-name",
nil,
"ro",
},
},
),
@@ -109,6 +114,7 @@ func Test_IDPUserLinkPrepares(t *testing.T) {
ProvidedUserID: "external-user-id",
ProvidedUsername: "display-name",
IDPType: domain.IDPConfigTypeUnspecified,
ResourceOwner: "ro",
},
},
},

View File

@@ -276,9 +276,9 @@ func prepareLabelPolicyQuery() (sq.SelectBuilder, func(*sql.Row) (*LabelPolicy,
)
if err != nil {
if errs.Is(err, sql.ErrNoRows) {
return nil, errors.ThrowNotFound(err, "QUERY-bJEsm", "errors.policy.label.not_found")
return nil, errors.ThrowNotFound(err, "QUERY-bJEsm", "Errors.Org.PolicyNotExisting")
}
return nil, errors.ThrowInternal(err, "QUERY-awLM6", "errors.internal")
return nil, errors.ThrowInternal(err, "QUERY-awLM6", "Errors.Internal")
}
policy.FontURL = fontURL.String

View File

@@ -157,6 +157,14 @@ func NewOrgNameSearchQuery(method TextComparison, value string) (SearchQuery, er
return NewTextQuery(OrgColumnName, value, method)
}
func NewOrgIDsSearchQuery(ids ...string) (SearchQuery, error) {
list := make([]interface{}, len(ids))
for i, value := range ids {
list[i] = value
}
return NewListQuery(OrgColumnID, list, ListIn)
}
func prepareOrgsQuery() (sq.SelectBuilder, func(*sql.Rows) (*Orgs, error)) {
return sq.Select(
OrgColumnID.identifier(),

View File

@@ -110,9 +110,9 @@ func prepareOrgMembersQuery() (sq.SelectBuilder, func(*sql.Rows) (*Members, erro
for rows.Next() {
member := new(Member)
roles := pq.StringArray{}
var (
roles = pq.StringArray{}
preferredLoginName = sql.NullString{}
email = sql.NullString{}
firstName = sql.NullString{}