mirror of
https://github.com/zitadel/zitadel.git
synced 2025-08-14 04:27:34 +00:00
fixup! Merge branch 'main' into org_api
This commit is contained in:
@@ -463,7 +463,7 @@ func startAPIs(
|
|||||||
if err := apis.RegisterService(ctx, settings_v2beta.CreateServer(commands, queries)); err != nil {
|
if err := apis.RegisterService(ctx, settings_v2beta.CreateServer(commands, queries)); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if err := apis.RegisterService(ctx, org_v2beta.CreateServer(commands, queries, permissionCheck)); err != nil {
|
if err := apis.RegisterService(ctx, org_v2beta.CreateServer(config.SystemDefaults, commands, queries, permissionCheck)); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if err := apis.RegisterService(ctx, feature_v2beta.CreateServer(commands, queries)); err != nil {
|
if err := apis.RegisterService(ctx, feature_v2beta.CreateServer(commands, queries)); err != nil {
|
||||||
|
@@ -901,6 +901,7 @@ func (s *Server) ListHumanLinkedIDPs(ctx context.Context, req *mgmt_pb.ListHuman
|
|||||||
Details: obj_grpc.ToListDetails(res.Count, res.Sequence, res.LastRun),
|
Details: obj_grpc.ToListDetails(res.Count, res.Sequence, res.LastRun),
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) RemoveHumanLinkedIDP(ctx context.Context, req *mgmt_pb.RemoveHumanLinkedIDPRequest) (*mgmt_pb.RemoveHumanLinkedIDPResponse, error) {
|
func (s *Server) RemoveHumanLinkedIDP(ctx context.Context, req *mgmt_pb.RemoveHumanLinkedIDPRequest) (*mgmt_pb.RemoveHumanLinkedIDPResponse, error) {
|
||||||
objectDetails, err := s.command.RemoveUserIDPLink(ctx, RemoveHumanLinkedIDPRequestToDomain(ctx, req))
|
objectDetails, err := s.command.RemoveUserIDPLink(ctx, RemoveHumanLinkedIDPRequestToDomain(ctx, req))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -947,18 +948,21 @@ func cascadingIAMMembership(membership *query.IAMMembership) *command.CascadingI
|
|||||||
}
|
}
|
||||||
return &command.CascadingIAMMembership{IAMID: membership.IAMID}
|
return &command.CascadingIAMMembership{IAMID: membership.IAMID}
|
||||||
}
|
}
|
||||||
|
|
||||||
func cascadingOrgMembership(membership *query.OrgMembership) *command.CascadingOrgMembership {
|
func cascadingOrgMembership(membership *query.OrgMembership) *command.CascadingOrgMembership {
|
||||||
if membership == nil {
|
if membership == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return &command.CascadingOrgMembership{OrgID: membership.OrgID}
|
return &command.CascadingOrgMembership{OrgID: membership.OrgID}
|
||||||
}
|
}
|
||||||
|
|
||||||
func cascadingProjectMembership(membership *query.ProjectMembership) *command.CascadingProjectMembership {
|
func cascadingProjectMembership(membership *query.ProjectMembership) *command.CascadingProjectMembership {
|
||||||
if membership == nil {
|
if membership == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return &command.CascadingProjectMembership{ProjectID: membership.ProjectID}
|
return &command.CascadingProjectMembership{ProjectID: membership.ProjectID}
|
||||||
}
|
}
|
||||||
|
|
||||||
func cascadingProjectGrantMembership(membership *query.ProjectGrantMembership) *command.CascadingProjectGrantMembership {
|
func cascadingProjectGrantMembership(membership *query.ProjectGrantMembership) *command.CascadingProjectGrantMembership {
|
||||||
if membership == nil {
|
if membership == nil {
|
||||||
return nil
|
return nil
|
||||||
|
@@ -6,6 +6,7 @@ import (
|
|||||||
metadata "github.com/zitadel/zitadel/internal/api/grpc/metadata/v2beta"
|
metadata "github.com/zitadel/zitadel/internal/api/grpc/metadata/v2beta"
|
||||||
v2beta_object "github.com/zitadel/zitadel/internal/api/grpc/object/v2beta"
|
v2beta_object "github.com/zitadel/zitadel/internal/api/grpc/object/v2beta"
|
||||||
"github.com/zitadel/zitadel/internal/command"
|
"github.com/zitadel/zitadel/internal/command"
|
||||||
|
"github.com/zitadel/zitadel/internal/config/systemdefaults"
|
||||||
"github.com/zitadel/zitadel/internal/domain"
|
"github.com/zitadel/zitadel/internal/domain"
|
||||||
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
|
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
|
||||||
"github.com/zitadel/zitadel/internal/query"
|
"github.com/zitadel/zitadel/internal/query"
|
||||||
@@ -14,6 +15,7 @@ import (
|
|||||||
"google.golang.org/protobuf/types/known/timestamppb"
|
"google.golang.org/protobuf/types/known/timestamppb"
|
||||||
|
|
||||||
// TODO fix below
|
// TODO fix below
|
||||||
|
filter "github.com/zitadel/zitadel/internal/api/grpc/filter/v2beta"
|
||||||
org "github.com/zitadel/zitadel/pkg/grpc/org/v2beta"
|
org "github.com/zitadel/zitadel/pkg/grpc/org/v2beta"
|
||||||
v2beta_org "github.com/zitadel/zitadel/pkg/grpc/org/v2beta"
|
v2beta_org "github.com/zitadel/zitadel/pkg/grpc/org/v2beta"
|
||||||
)
|
)
|
||||||
@@ -21,9 +23,12 @@ import (
|
|||||||
// NOTE: most of this code is copied from `internal/api/grpc/admin/*`, as we will eventually axe the previous versons of the API,
|
// NOTE: most of this code is copied from `internal/api/grpc/admin/*`, as we will eventually axe the previous versons of the API,
|
||||||
// we will have code duplication until then
|
// we will have code duplication until then
|
||||||
|
|
||||||
func listOrgRequestToModel(request *v2beta_org.ListOrganizationsRequest) (*query.OrgSearchQueries, error) {
|
func listOrgRequestToModel(systemDefaults systemdefaults.SystemDefaults, request *v2beta_org.ListOrganizationsRequest) (*query.OrgSearchQueries, error) {
|
||||||
offset, limit, asc := v2beta_object.ListQueryToModel(request.Query)
|
offset, limit, asc, err := filter.PaginationPbToQuery(systemDefaults, request.Pagination)
|
||||||
queries, err := OrgQueriesToModel(request.Queries)
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
queries, err := OrgQueriesToModel(request.Filter)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -94,7 +99,7 @@ func OrgViewsToPb(orgs []*query.Org) []*v2beta_org.Organization {
|
|||||||
return o
|
return o
|
||||||
}
|
}
|
||||||
|
|
||||||
func OrgQueriesToModel(queries []*v2beta_org.OrgQuery) (_ []query.SearchQuery, err error) {
|
func OrgQueriesToModel(queries []*v2beta_org.OrgQueryFilter) (_ []query.SearchQuery, err error) {
|
||||||
q := make([]query.SearchQuery, len(queries))
|
q := make([]query.SearchQuery, len(queries))
|
||||||
for i, query := range queries {
|
for i, query := range queries {
|
||||||
q[i], err = OrgQueryToModel(query)
|
q[i], err = OrgQueryToModel(query)
|
||||||
@@ -105,15 +110,15 @@ func OrgQueriesToModel(queries []*v2beta_org.OrgQuery) (_ []query.SearchQuery, e
|
|||||||
return q, nil
|
return q, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func OrgQueryToModel(apiQuery *v2beta_org.OrgQuery) (query.SearchQuery, error) {
|
func OrgQueryToModel(apiQuery *v2beta_org.OrgQueryFilter) (query.SearchQuery, error) {
|
||||||
switch q := apiQuery.Query.(type) {
|
switch q := apiQuery.Query.(type) {
|
||||||
case *v2beta_org.OrgQuery_DomainQuery:
|
case *v2beta_org.OrgQueryFilter_DomainQuery:
|
||||||
return query.NewOrgVerifiedDomainSearchQuery(v2beta_object.TextMethodToQuery(q.DomainQuery.Method), q.DomainQuery.Domain)
|
return query.NewOrgVerifiedDomainSearchQuery(v2beta_object.TextMethodToQuery(q.DomainQuery.Method), q.DomainQuery.Domain)
|
||||||
case *v2beta_org.OrgQuery_NameQuery:
|
case *v2beta_org.OrgQueryFilter_NameQuery:
|
||||||
return query.NewOrgNameSearchQuery(v2beta_object.TextMethodToQuery(q.NameQuery.Method), q.NameQuery.Name)
|
return query.NewOrgNameSearchQuery(v2beta_object.TextMethodToQuery(q.NameQuery.Method), q.NameQuery.Name)
|
||||||
case *v2beta_org.OrgQuery_StateQuery:
|
case *v2beta_org.OrgQueryFilter_StateQuery:
|
||||||
return query.NewOrgStateSearchQuery(OrgStateToDomain(q.StateQuery.State))
|
return query.NewOrgStateSearchQuery(OrgStateToDomain(q.StateQuery.State))
|
||||||
case *v2beta_org.OrgQuery_IdQuery:
|
case *v2beta_org.OrgQueryFilter_IdQuery:
|
||||||
return query.NewOrgIDSearchQuery(q.IdQuery.Id)
|
return query.NewOrgIDSearchQuery(q.IdQuery.Id)
|
||||||
default:
|
default:
|
||||||
return nil, zerrors.ThrowInvalidArgument(nil, "ORG-vR9nC", "List.Query.Invalid")
|
return nil, zerrors.ThrowInvalidArgument(nil, "ORG-vR9nC", "List.Query.Invalid")
|
||||||
@@ -164,10 +169,9 @@ func OrgViewToPb(org *query.Org) *v2beta_org.Organization {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func ListOrgDomainsRequestToModel(req *org.ListOrganizationDomainsRequest) (*query.OrgDomainSearchQueries, error) {
|
func ListOrgDomainsRequestToModel(systemDefaults systemdefaults.SystemDefaults, request *org.ListOrganizationDomainsRequest) (*query.OrgDomainSearchQueries, error) {
|
||||||
offset, limit, asc := ListQueryToModel(req.Query)
|
offset, limit, asc, err := filter.PaginationPbToQuery(systemDefaults, request.Pagination)
|
||||||
// queries, err := org_grpc.DomainQueriesToModel(req.Queries)
|
queries, err := DomainQueriesToModel(request.Filter)
|
||||||
queries, err := DomainQueriesToModel(req.Queries)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -249,9 +253,9 @@ func BulkSetOrgMetadataToDomain(req *v2beta_org.SetOrganizationMetadataRequest)
|
|||||||
return metadata
|
return metadata
|
||||||
}
|
}
|
||||||
|
|
||||||
func ListOrgMetadataToDomain(request *v2beta_org.ListOrganizationMetadataRequest) (*query.OrgMetadataSearchQueries, error) {
|
func ListOrgMetadataToDomain(systemDefaults systemdefaults.SystemDefaults, request *v2beta_org.ListOrganizationMetadataRequest) (*query.OrgMetadataSearchQueries, error) {
|
||||||
offset, limit, asc := v2beta_object.ListQueryToModel(request.Query)
|
offset, limit, asc, err := filter.PaginationPbToQuery(systemDefaults, request.Pagination)
|
||||||
queries, err := metadata.OrgMetadataQueriesToQuery(request.Queries)
|
queries, err := metadata.OrgMetadataQueriesToQuery(request.Filter)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@@ -276,7 +276,7 @@ func TestServer_ListOrganization(t *testing.T) {
|
|||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
ctx context.Context
|
ctx context.Context
|
||||||
query []*v2beta_org.OrgQuery
|
query []*v2beta_org.OrgQueryFilter
|
||||||
want []*v2beta_org.Organization
|
want []*v2beta_org.Organization
|
||||||
wantErr bool
|
wantErr bool
|
||||||
}{
|
}{
|
||||||
@@ -301,9 +301,9 @@ func TestServer_ListOrganization(t *testing.T) {
|
|||||||
{
|
{
|
||||||
name: "list organizations by id happy path",
|
name: "list organizations by id happy path",
|
||||||
ctx: Instance.WithAuthorization(context.Background(), integration.UserTypeIAMOwner),
|
ctx: Instance.WithAuthorization(context.Background(), integration.UserTypeIAMOwner),
|
||||||
query: []*v2beta_org.OrgQuery{
|
query: []*v2beta_org.OrgQueryFilter{
|
||||||
{
|
{
|
||||||
Query: &v2beta_org.OrgQuery_IdQuery{
|
Query: &v2beta_org.OrgQueryFilter_IdQuery{
|
||||||
IdQuery: &v2beta_org.OrgIDQuery{
|
IdQuery: &v2beta_org.OrgIDQuery{
|
||||||
Id: orgs[1].Id,
|
Id: orgs[1].Id,
|
||||||
},
|
},
|
||||||
@@ -320,9 +320,9 @@ func TestServer_ListOrganization(t *testing.T) {
|
|||||||
{
|
{
|
||||||
name: "list organizations by state active",
|
name: "list organizations by state active",
|
||||||
ctx: Instance.WithAuthorization(context.Background(), integration.UserTypeIAMOwner),
|
ctx: Instance.WithAuthorization(context.Background(), integration.UserTypeIAMOwner),
|
||||||
query: []*v2beta_org.OrgQuery{
|
query: []*v2beta_org.OrgQueryFilter{
|
||||||
{
|
{
|
||||||
Query: &v2beta_org.OrgQuery_StateQuery{
|
Query: &v2beta_org.OrgQueryFilter_StateQuery{
|
||||||
StateQuery: &v2beta_org.OrgStateQuery{
|
StateQuery: &v2beta_org.OrgStateQuery{
|
||||||
State: v2beta_org.OrgState_ORG_STATE_ACTIVE,
|
State: v2beta_org.OrgState_ORG_STATE_ACTIVE,
|
||||||
},
|
},
|
||||||
@@ -343,9 +343,9 @@ func TestServer_ListOrganization(t *testing.T) {
|
|||||||
{
|
{
|
||||||
name: "list organizations by state inactive",
|
name: "list organizations by state inactive",
|
||||||
ctx: Instance.WithAuthorization(context.Background(), integration.UserTypeIAMOwner),
|
ctx: Instance.WithAuthorization(context.Background(), integration.UserTypeIAMOwner),
|
||||||
query: []*v2beta_org.OrgQuery{
|
query: []*v2beta_org.OrgQueryFilter{
|
||||||
{
|
{
|
||||||
Query: &v2beta_org.OrgQuery_StateQuery{
|
Query: &v2beta_org.OrgQueryFilter_StateQuery{
|
||||||
StateQuery: &v2beta_org.OrgStateQuery{
|
StateQuery: &v2beta_org.OrgStateQuery{
|
||||||
State: v2beta_org.OrgState_ORG_STATE_INACTIVE,
|
State: v2beta_org.OrgState_ORG_STATE_INACTIVE,
|
||||||
},
|
},
|
||||||
@@ -362,9 +362,9 @@ func TestServer_ListOrganization(t *testing.T) {
|
|||||||
{
|
{
|
||||||
name: "list organizations by id bad id",
|
name: "list organizations by id bad id",
|
||||||
ctx: Instance.WithAuthorization(context.Background(), integration.UserTypeIAMOwner),
|
ctx: Instance.WithAuthorization(context.Background(), integration.UserTypeIAMOwner),
|
||||||
query: []*v2beta_org.OrgQuery{
|
query: []*v2beta_org.OrgQueryFilter{
|
||||||
{
|
{
|
||||||
Query: &v2beta_org.OrgQuery_IdQuery{
|
Query: &v2beta_org.OrgQueryFilter_IdQuery{
|
||||||
IdQuery: &v2beta_org.OrgIDQuery{
|
IdQuery: &v2beta_org.OrgIDQuery{
|
||||||
Id: "bad id",
|
Id: "bad id",
|
||||||
},
|
},
|
||||||
@@ -375,9 +375,9 @@ func TestServer_ListOrganization(t *testing.T) {
|
|||||||
{
|
{
|
||||||
name: "list organizations specify org name equals",
|
name: "list organizations specify org name equals",
|
||||||
ctx: Instance.WithAuthorization(context.Background(), integration.UserTypeIAMOwner),
|
ctx: Instance.WithAuthorization(context.Background(), integration.UserTypeIAMOwner),
|
||||||
query: []*v2beta_org.OrgQuery{
|
query: []*v2beta_org.OrgQueryFilter{
|
||||||
{
|
{
|
||||||
Query: &v2beta_org.OrgQuery_NameQuery{
|
Query: &v2beta_org.OrgQueryFilter_NameQuery{
|
||||||
NameQuery: &v2beta_org.OrgNameQuery{
|
NameQuery: &v2beta_org.OrgNameQuery{
|
||||||
Name: orgsName[1],
|
Name: orgsName[1],
|
||||||
Method: v2beta_object.TextQueryMethod_TEXT_QUERY_METHOD_EQUALS,
|
Method: v2beta_object.TextQueryMethod_TEXT_QUERY_METHOD_EQUALS,
|
||||||
@@ -395,9 +395,9 @@ func TestServer_ListOrganization(t *testing.T) {
|
|||||||
{
|
{
|
||||||
name: "list organizations specify org name contains",
|
name: "list organizations specify org name contains",
|
||||||
ctx: Instance.WithAuthorization(context.Background(), integration.UserTypeIAMOwner),
|
ctx: Instance.WithAuthorization(context.Background(), integration.UserTypeIAMOwner),
|
||||||
query: []*v2beta_org.OrgQuery{
|
query: []*v2beta_org.OrgQueryFilter{
|
||||||
{
|
{
|
||||||
Query: &v2beta_org.OrgQuery_NameQuery{
|
Query: &v2beta_org.OrgQueryFilter_NameQuery{
|
||||||
NameQuery: &v2beta_org.OrgNameQuery{
|
NameQuery: &v2beta_org.OrgNameQuery{
|
||||||
Name: func() string {
|
Name: func() string {
|
||||||
return orgsName[1][1 : len(orgsName[1])-2]
|
return orgsName[1][1 : len(orgsName[1])-2]
|
||||||
@@ -417,9 +417,9 @@ func TestServer_ListOrganization(t *testing.T) {
|
|||||||
{
|
{
|
||||||
name: "list organizations specify org name contains IGNORE CASE",
|
name: "list organizations specify org name contains IGNORE CASE",
|
||||||
ctx: Instance.WithAuthorization(context.Background(), integration.UserTypeIAMOwner),
|
ctx: Instance.WithAuthorization(context.Background(), integration.UserTypeIAMOwner),
|
||||||
query: []*v2beta_org.OrgQuery{
|
query: []*v2beta_org.OrgQueryFilter{
|
||||||
{
|
{
|
||||||
Query: &v2beta_org.OrgQuery_NameQuery{
|
Query: &v2beta_org.OrgQueryFilter_NameQuery{
|
||||||
NameQuery: &v2beta_org.OrgNameQuery{
|
NameQuery: &v2beta_org.OrgNameQuery{
|
||||||
Name: func() string {
|
Name: func() string {
|
||||||
return strings.ToUpper(orgsName[1][1 : len(orgsName[1])-2])
|
return strings.ToUpper(orgsName[1][1 : len(orgsName[1])-2])
|
||||||
@@ -439,15 +439,15 @@ func TestServer_ListOrganization(t *testing.T) {
|
|||||||
{
|
{
|
||||||
name: "list organizations specify domain name equals",
|
name: "list organizations specify domain name equals",
|
||||||
ctx: Instance.WithAuthorization(context.Background(), integration.UserTypeIAMOwner),
|
ctx: Instance.WithAuthorization(context.Background(), integration.UserTypeIAMOwner),
|
||||||
query: []*v2beta_org.OrgQuery{
|
query: []*v2beta_org.OrgQueryFilter{
|
||||||
{
|
{
|
||||||
Query: &org.OrgQuery_DomainQuery{
|
Query: &org.OrgQueryFilter_DomainQuery{
|
||||||
DomainQuery: &org.OrgDomainQuery{
|
DomainQuery: &org.OrgDomainQuery{
|
||||||
Domain: func() string {
|
Domain: func() string {
|
||||||
listOrgRes, err := Client.ListOrganizations(CTX, &v2beta_org.ListOrganizationsRequest{
|
listOrgRes, err := Client.ListOrganizations(CTX, &v2beta_org.ListOrganizationsRequest{
|
||||||
Queries: []*v2beta_org.OrgQuery{
|
Filter: []*v2beta_org.OrgQueryFilter{
|
||||||
{
|
{
|
||||||
Query: &v2beta_org.OrgQuery_IdQuery{
|
Query: &v2beta_org.OrgQueryFilter_IdQuery{
|
||||||
IdQuery: &v2beta_org.OrgIDQuery{
|
IdQuery: &v2beta_org.OrgIDQuery{
|
||||||
Id: orgs[1].Id,
|
Id: orgs[1].Id,
|
||||||
},
|
},
|
||||||
@@ -474,9 +474,9 @@ func TestServer_ListOrganization(t *testing.T) {
|
|||||||
{
|
{
|
||||||
name: "list organizations specify domain name contains",
|
name: "list organizations specify domain name contains",
|
||||||
ctx: Instance.WithAuthorization(context.Background(), integration.UserTypeIAMOwner),
|
ctx: Instance.WithAuthorization(context.Background(), integration.UserTypeIAMOwner),
|
||||||
query: []*v2beta_org.OrgQuery{
|
query: []*v2beta_org.OrgQueryFilter{
|
||||||
{
|
{
|
||||||
Query: &org.OrgQuery_DomainQuery{
|
Query: &org.OrgQueryFilter_DomainQuery{
|
||||||
DomainQuery: &org.OrgDomainQuery{
|
DomainQuery: &org.OrgDomainQuery{
|
||||||
Domain: func() string {
|
Domain: func() string {
|
||||||
domain := strings.ToLower(strings.ReplaceAll(orgsName[1][1:len(orgsName[1])-2], " ", "-"))
|
domain := strings.ToLower(strings.ReplaceAll(orgsName[1][1:len(orgsName[1])-2], " ", "-"))
|
||||||
@@ -497,9 +497,9 @@ func TestServer_ListOrganization(t *testing.T) {
|
|||||||
{
|
{
|
||||||
name: "list organizations specify org name contains IGNORE CASE",
|
name: "list organizations specify org name contains IGNORE CASE",
|
||||||
ctx: Instance.WithAuthorization(context.Background(), integration.UserTypeIAMOwner),
|
ctx: Instance.WithAuthorization(context.Background(), integration.UserTypeIAMOwner),
|
||||||
query: []*v2beta_org.OrgQuery{
|
query: []*v2beta_org.OrgQueryFilter{
|
||||||
{
|
{
|
||||||
Query: &org.OrgQuery_DomainQuery{
|
Query: &org.OrgQueryFilter_DomainQuery{
|
||||||
DomainQuery: &org.OrgDomainQuery{
|
DomainQuery: &org.OrgDomainQuery{
|
||||||
Domain: func() string {
|
Domain: func() string {
|
||||||
domain := strings.ToUpper(strings.ReplaceAll(orgsName[1][1:len(orgsName[1])-2], " ", "-"))
|
domain := strings.ToUpper(strings.ReplaceAll(orgsName[1][1:len(orgsName[1])-2], " ", "-"))
|
||||||
@@ -523,7 +523,7 @@ func TestServer_ListOrganization(t *testing.T) {
|
|||||||
retryDuration, tick := integration.WaitForAndTickWithMaxDuration(context.Background(), 10*time.Minute)
|
retryDuration, tick := integration.WaitForAndTickWithMaxDuration(context.Background(), 10*time.Minute)
|
||||||
require.EventuallyWithT(t, func(ttt *assert.CollectT) {
|
require.EventuallyWithT(t, func(ttt *assert.CollectT) {
|
||||||
got, err := Client.ListOrganizations(tt.ctx, &v2beta_org.ListOrganizationsRequest{
|
got, err := Client.ListOrganizations(tt.ctx, &v2beta_org.ListOrganizationsRequest{
|
||||||
Queries: tt.query,
|
Filter: tt.query,
|
||||||
})
|
})
|
||||||
|
|
||||||
if tt.wantErr {
|
if tt.wantErr {
|
||||||
@@ -596,9 +596,9 @@ func TestServer_DeleteOrganization(t *testing.T) {
|
|||||||
assert.WithinRange(t, gotCD, now.Add(-time.Minute), now.Add(time.Minute))
|
assert.WithinRange(t, gotCD, now.Add(-time.Minute), now.Add(time.Minute))
|
||||||
|
|
||||||
listOrgRes, err := Client.ListOrganizations(tt.ctx, &v2beta_org.ListOrganizationsRequest{
|
listOrgRes, err := Client.ListOrganizations(tt.ctx, &v2beta_org.ListOrganizationsRequest{
|
||||||
Queries: []*v2beta_org.OrgQuery{
|
Filter: []*v2beta_org.OrgQueryFilter{
|
||||||
{
|
{
|
||||||
Query: &v2beta_org.OrgQuery_IdQuery{
|
Query: &v2beta_org.OrgQueryFilter_IdQuery{
|
||||||
IdQuery: &v2beta_org.OrgIDQuery{
|
IdQuery: &v2beta_org.OrgIDQuery{
|
||||||
Id: tt.req.Id,
|
Id: tt.req.Id,
|
||||||
},
|
},
|
||||||
@@ -639,9 +639,9 @@ func TestServer_DeactivateReactivateOrganization(t *testing.T) {
|
|||||||
|
|
||||||
// 2. check inital state of organization
|
// 2. check inital state of organization
|
||||||
listOrgRes, err := Client.ListOrganizations(ctx, &v2beta_org.ListOrganizationsRequest{
|
listOrgRes, err := Client.ListOrganizations(ctx, &v2beta_org.ListOrganizationsRequest{
|
||||||
Queries: []*v2beta_org.OrgQuery{
|
Filter: []*v2beta_org.OrgQueryFilter{
|
||||||
{
|
{
|
||||||
Query: &v2beta_org.OrgQuery_IdQuery{
|
Query: &v2beta_org.OrgQueryFilter_IdQuery{
|
||||||
IdQuery: &v2beta_org.OrgIDQuery{
|
IdQuery: &v2beta_org.OrgIDQuery{
|
||||||
Id: orgId,
|
Id: orgId,
|
||||||
},
|
},
|
||||||
@@ -663,9 +663,9 @@ func TestServer_DeactivateReactivateOrganization(t *testing.T) {
|
|||||||
|
|
||||||
// 4. check organization state is deactivated
|
// 4. check organization state is deactivated
|
||||||
listOrgRes, err = Client.ListOrganizations(ctx, &v2beta_org.ListOrganizationsRequest{
|
listOrgRes, err = Client.ListOrganizations(ctx, &v2beta_org.ListOrganizationsRequest{
|
||||||
Queries: []*v2beta_org.OrgQuery{
|
Filter: []*v2beta_org.OrgQueryFilter{
|
||||||
{
|
{
|
||||||
Query: &v2beta_org.OrgQuery_IdQuery{
|
Query: &v2beta_org.OrgQueryFilter_IdQuery{
|
||||||
IdQuery: &v2beta_org.OrgIDQuery{
|
IdQuery: &v2beta_org.OrgIDQuery{
|
||||||
Id: orgId,
|
Id: orgId,
|
||||||
},
|
},
|
||||||
@@ -686,9 +686,9 @@ func TestServer_DeactivateReactivateOrganization(t *testing.T) {
|
|||||||
|
|
||||||
// 6. repeat check organization state is still deactivated
|
// 6. repeat check organization state is still deactivated
|
||||||
listOrgRes, err = Client.ListOrganizations(ctx, &v2beta_org.ListOrganizationsRequest{
|
listOrgRes, err = Client.ListOrganizations(ctx, &v2beta_org.ListOrganizationsRequest{
|
||||||
Queries: []*v2beta_org.OrgQuery{
|
Filter: []*v2beta_org.OrgQueryFilter{
|
||||||
{
|
{
|
||||||
Query: &v2beta_org.OrgQuery_IdQuery{
|
Query: &v2beta_org.OrgQueryFilter_IdQuery{
|
||||||
IdQuery: &v2beta_org.OrgIDQuery{
|
IdQuery: &v2beta_org.OrgIDQuery{
|
||||||
Id: orgId,
|
Id: orgId,
|
||||||
},
|
},
|
||||||
@@ -710,9 +710,9 @@ func TestServer_DeactivateReactivateOrganization(t *testing.T) {
|
|||||||
|
|
||||||
// 8. check organization state is active
|
// 8. check organization state is active
|
||||||
listOrgRes, err = Client.ListOrganizations(ctx, &v2beta_org.ListOrganizationsRequest{
|
listOrgRes, err = Client.ListOrganizations(ctx, &v2beta_org.ListOrganizationsRequest{
|
||||||
Queries: []*v2beta_org.OrgQuery{
|
Filter: []*v2beta_org.OrgQueryFilter{
|
||||||
{
|
{
|
||||||
Query: &v2beta_org.OrgQuery_IdQuery{
|
Query: &v2beta_org.OrgQueryFilter_IdQuery{
|
||||||
IdQuery: &v2beta_org.OrgIDQuery{
|
IdQuery: &v2beta_org.OrgIDQuery{
|
||||||
Id: orgId,
|
Id: orgId,
|
||||||
},
|
},
|
||||||
@@ -732,9 +732,9 @@ func TestServer_DeactivateReactivateOrganization(t *testing.T) {
|
|||||||
|
|
||||||
// 10. repeat check organization state is still active
|
// 10. repeat check organization state is still active
|
||||||
listOrgRes, err = Client.ListOrganizations(ctx, &v2beta_org.ListOrganizationsRequest{
|
listOrgRes, err = Client.ListOrganizations(ctx, &v2beta_org.ListOrganizationsRequest{
|
||||||
Queries: []*v2beta_org.OrgQuery{
|
Filter: []*v2beta_org.OrgQueryFilter{
|
||||||
{
|
{
|
||||||
Query: &v2beta_org.OrgQuery_IdQuery{
|
Query: &v2beta_org.OrgQueryFilter_IdQuery{
|
||||||
IdQuery: &v2beta_org.OrgIDQuery{
|
IdQuery: &v2beta_org.OrgIDQuery{
|
||||||
Id: orgId,
|
Id: orgId,
|
||||||
},
|
},
|
||||||
|
@@ -9,6 +9,7 @@ import (
|
|||||||
"github.com/zitadel/zitadel/internal/command"
|
"github.com/zitadel/zitadel/internal/command"
|
||||||
"github.com/zitadel/zitadel/internal/query"
|
"github.com/zitadel/zitadel/internal/query"
|
||||||
"github.com/zitadel/zitadel/internal/zerrors"
|
"github.com/zitadel/zitadel/internal/zerrors"
|
||||||
|
filter "github.com/zitadel/zitadel/pkg/grpc/filter/v2beta"
|
||||||
org "github.com/zitadel/zitadel/pkg/grpc/org/v2beta"
|
org "github.com/zitadel/zitadel/pkg/grpc/org/v2beta"
|
||||||
v2beta_org "github.com/zitadel/zitadel/pkg/grpc/org/v2beta"
|
v2beta_org "github.com/zitadel/zitadel/pkg/grpc/org/v2beta"
|
||||||
"google.golang.org/protobuf/types/known/timestamppb"
|
"google.golang.org/protobuf/types/known/timestamppb"
|
||||||
@@ -38,7 +39,7 @@ func (s *Server) UpdateOrganization(ctx context.Context, request *v2beta_org.Upd
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) ListOrganizations(ctx context.Context, request *v2beta_org.ListOrganizationsRequest) (*v2beta_org.ListOrganizationsResponse, error) {
|
func (s *Server) ListOrganizations(ctx context.Context, request *v2beta_org.ListOrganizationsRequest) (*v2beta_org.ListOrganizationsResponse, error) {
|
||||||
queries, err := listOrgRequestToModel(request)
|
queries, err := listOrgRequestToModel(s.systemDefaults, request)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -47,8 +48,11 @@ func (s *Server) ListOrganizations(ctx context.Context, request *v2beta_org.List
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return &v2beta_org.ListOrganizationsResponse{
|
return &v2beta_org.ListOrganizationsResponse{
|
||||||
Result: OrgViewsToPb(orgs.Orgs),
|
Result: OrgViewsToPb(orgs.Orgs),
|
||||||
Details: object.ToListDetails(orgs.SearchResponse),
|
Pagination: &filter.PaginationResponse{
|
||||||
|
TotalResult: orgs.Count,
|
||||||
|
AppliedLimit: uint64(request.GetPagination().GetLimit()),
|
||||||
|
},
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -73,7 +77,7 @@ func (s *Server) SetOrganizationMetadata(ctx context.Context, request *v2beta_or
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) ListOrganizationMetadata(ctx context.Context, request *v2beta_org.ListOrganizationMetadataRequest) (*v2beta_org.ListOrganizationMetadataResponse, error) {
|
func (s *Server) ListOrganizationMetadata(ctx context.Context, request *v2beta_org.ListOrganizationMetadataRequest) (*v2beta_org.ListOrganizationMetadataResponse, error) {
|
||||||
metadataQueries, err := ListOrgMetadataToDomain(request)
|
metadataQueries, err := ListOrgMetadataToDomain(s.systemDefaults, request)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -82,8 +86,11 @@ func (s *Server) ListOrganizationMetadata(ctx context.Context, request *v2beta_o
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return &v2beta_org.ListOrganizationMetadataResponse{
|
return &v2beta_org.ListOrganizationMetadataResponse{
|
||||||
Result: metadata.OrgMetadataListToPb(res.Metadata),
|
Result: metadata.OrgMetadataListToPb(res.Metadata),
|
||||||
Details: object.ToListDetails(res.SearchResponse),
|
Pagination: &filter.PaginationResponse{
|
||||||
|
TotalResult: res.Count,
|
||||||
|
AppliedLimit: uint64(request.GetPagination().GetLimit()),
|
||||||
|
},
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -132,7 +139,7 @@ func (s *Server) AddOrganizationDomain(ctx context.Context, request *org.AddOrga
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) ListOrganizationDomains(ctx context.Context, req *org.ListOrganizationDomainsRequest) (*org.ListOrganizationDomainsResponse, error) {
|
func (s *Server) ListOrganizationDomains(ctx context.Context, req *org.ListOrganizationDomainsRequest) (*org.ListOrganizationDomainsResponse, error) {
|
||||||
queries, err := ListOrgDomainsRequestToModel(req)
|
queries, err := ListOrgDomainsRequestToModel(s.systemDefaults, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -147,8 +154,11 @@ func (s *Server) ListOrganizationDomains(ctx context.Context, req *org.ListOrgan
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return &org.ListOrganizationDomainsResponse{
|
return &org.ListOrganizationDomainsResponse{
|
||||||
Result: object.DomainsToPb(domains.Domains),
|
Result: object.DomainsToPb(domains.Domains),
|
||||||
Details: object.ToListDetails(domains.SearchResponse),
|
Pagination: &filter.PaginationResponse{
|
||||||
|
TotalResult: domains.Count,
|
||||||
|
AppliedLimit: uint64(req.GetPagination().GetLimit()),
|
||||||
|
},
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -6,6 +6,7 @@ import (
|
|||||||
"github.com/zitadel/zitadel/internal/api/authz"
|
"github.com/zitadel/zitadel/internal/api/authz"
|
||||||
"github.com/zitadel/zitadel/internal/api/grpc/server"
|
"github.com/zitadel/zitadel/internal/api/grpc/server"
|
||||||
"github.com/zitadel/zitadel/internal/command"
|
"github.com/zitadel/zitadel/internal/command"
|
||||||
|
"github.com/zitadel/zitadel/internal/config/systemdefaults"
|
||||||
"github.com/zitadel/zitadel/internal/domain"
|
"github.com/zitadel/zitadel/internal/domain"
|
||||||
"github.com/zitadel/zitadel/internal/query"
|
"github.com/zitadel/zitadel/internal/query"
|
||||||
org "github.com/zitadel/zitadel/pkg/grpc/org/v2beta"
|
org "github.com/zitadel/zitadel/pkg/grpc/org/v2beta"
|
||||||
@@ -15,6 +16,7 @@ var _ org.OrganizationServiceServer = (*Server)(nil)
|
|||||||
|
|
||||||
type Server struct {
|
type Server struct {
|
||||||
org.UnimplementedOrganizationServiceServer
|
org.UnimplementedOrganizationServiceServer
|
||||||
|
systemDefaults systemdefaults.SystemDefaults
|
||||||
command *command.Commands
|
command *command.Commands
|
||||||
query *query.Queries
|
query *query.Queries
|
||||||
checkPermission domain.PermissionCheck
|
checkPermission domain.PermissionCheck
|
||||||
@@ -23,11 +25,13 @@ type Server struct {
|
|||||||
type Config struct{}
|
type Config struct{}
|
||||||
|
|
||||||
func CreateServer(
|
func CreateServer(
|
||||||
|
systemDefaults systemdefaults.SystemDefaults,
|
||||||
command *command.Commands,
|
command *command.Commands,
|
||||||
query *query.Queries,
|
query *query.Queries,
|
||||||
checkPermission domain.PermissionCheck,
|
checkPermission domain.PermissionCheck,
|
||||||
) *Server {
|
) *Server {
|
||||||
return &Server{
|
return &Server{
|
||||||
|
systemDefaults: systemDefaults,
|
||||||
command: command,
|
command: command,
|
||||||
query: query,
|
query: query,
|
||||||
checkPermission: checkPermission,
|
checkPermission: checkPermission,
|
||||||
|
@@ -45,7 +45,7 @@ enum OrgFieldName {
|
|||||||
ORG_FIELD_NAME_CREATION_DATE = 2;
|
ORG_FIELD_NAME_CREATION_DATE = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
message OrgQuery {
|
message OrgQueryFilter {
|
||||||
oneof query {
|
oneof query {
|
||||||
option (validate.required) = true;
|
option (validate.required) = true;
|
||||||
|
|
||||||
|
@@ -15,6 +15,7 @@ import "google/protobuf/struct.proto";
|
|||||||
import "protoc-gen-openapiv2/options/annotations.proto";
|
import "protoc-gen-openapiv2/options/annotations.proto";
|
||||||
import "validate/validate.proto";
|
import "validate/validate.proto";
|
||||||
import "google/protobuf/timestamp.proto";
|
import "google/protobuf/timestamp.proto";
|
||||||
|
import "zitadel/filter/v2beta/filter.proto";
|
||||||
|
|
||||||
option go_package = "github.com/zitadel/zitadel/pkg/grpc/org/v2beta;org";
|
option go_package = "github.com/zitadel/zitadel/pkg/grpc/org/v2beta;org";
|
||||||
|
|
||||||
@@ -488,21 +489,21 @@ message ListOrganizationsRequest {
|
|||||||
json_schema: {
|
json_schema: {
|
||||||
description: "Search query for lists";
|
description: "Search query for lists";
|
||||||
required: ["query"]
|
required: ["query"]
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
// list limitations and ordering
|
// List limitations and ordering.
|
||||||
zitadel.object.v2beta.ListQuery query = 1;
|
optional zitadel.filter.v2beta.PaginationRequest pagination = 1;
|
||||||
// the field the result is sorted
|
// the field the result is sorted
|
||||||
zitadel.org.v2beta.OrgFieldName sorting_column = 2;
|
zitadel.org.v2beta.OrgFieldName sorting_column = 2;
|
||||||
//criteria the client is looking for
|
// Define the criteria to query for.
|
||||||
repeated zitadel.org.v2beta.OrgQuery queries = 3;
|
// repeated ProjectRoleFilter filters = 4;
|
||||||
|
repeated zitadel.org.v2beta.OrgQueryFilter filter = 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
message ListOrganizationsResponse {
|
message ListOrganizationsResponse {
|
||||||
zitadel.object.v2beta.ListDetails details = 1;
|
zitadel.filter.v2beta.PaginationResponse pagination = 1;
|
||||||
zitadel.org.v2beta.OrgFieldName sorting_column = 2;
|
repeated zitadel.org.v2beta.Organization result = 2;
|
||||||
repeated zitadel.org.v2beta.Organization result = 3;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
message DeleteOrganizationRequest {
|
message DeleteOrganizationRequest {
|
||||||
@@ -613,14 +614,15 @@ message ListOrganizationDomainsRequest {
|
|||||||
description: "Organization ID of the organization you want the domains of."
|
description: "Organization ID of the organization you want the domains of."
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
//list limitations and ordering
|
|
||||||
zitadel.object.v2beta.ListQuery query = 2;
|
// List limitations and ordering.
|
||||||
//criteria the client is looking for
|
optional zitadel.filter.v2beta.PaginationRequest pagination = 2;
|
||||||
repeated DomainSearchQuery queries = 3;
|
// Define the criteria to query for.
|
||||||
|
repeated DomainSearchQuery filter = 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
message ListOrganizationDomainsResponse {
|
message ListOrganizationDomainsResponse {
|
||||||
zitadel.object.v2beta.ListDetails details = 1;
|
zitadel.filter.v2beta.PaginationResponse pagination = 1;
|
||||||
repeated Domain result = 2;
|
repeated Domain result = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -638,6 +640,7 @@ message DeleteOrganizationDomainRequest {
|
|||||||
string domain = 2 [
|
string domain = 2 [
|
||||||
(validate.rules).string = {min_len: 1, max_len: 200},
|
(validate.rules).string = {min_len: 1, max_len: 200},
|
||||||
(google.api.field_behavior) = REQUIRED,
|
(google.api.field_behavior) = REQUIRED,
|
||||||
|
// repeated ProjectRoleFilter filters = 4;
|
||||||
(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
|
(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
|
||||||
min_length: 1;
|
min_length: 1;
|
||||||
max_length: 200;
|
max_length: 200;
|
||||||
@@ -746,17 +749,25 @@ message SetOrganizationMetadataResponse{
|
|||||||
}
|
}
|
||||||
|
|
||||||
message ListOrganizationMetadataRequest {
|
message ListOrganizationMetadataRequest {
|
||||||
string id = 1;
|
// Organization ID
|
||||||
zitadel.object.v2beta.ListQuery query = 2;
|
string id = 1 [
|
||||||
repeated zitadel.metadata.v2beta.MetadataQuery queries = 3 [
|
(validate.rules).string = {min_len: 1, max_len: 200},
|
||||||
(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
|
(google.api.field_behavior) = REQUIRED,
|
||||||
title: "Medata Query"
|
(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
|
||||||
description: "Metadata object-specific queries."
|
min_length: 1;
|
||||||
}];
|
max_length: 200;
|
||||||
|
example: "\"69629012906488334\"";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
// List limitations and ordering.
|
||||||
|
optional zitadel.filter.v2beta.PaginationRequest pagination = 2;
|
||||||
|
// Define the criteria to query for.
|
||||||
|
repeated zitadel.metadata.v2beta.MetadataQuery filter = 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
message ListOrganizationMetadataResponse {
|
message ListOrganizationMetadataResponse {
|
||||||
zitadel.object.v2beta.ListDetails details = 1;
|
zitadel.filter.v2beta.PaginationResponse pagination = 1;
|
||||||
repeated zitadel.metadata.v2beta.Metadata result = 2;
|
repeated zitadel.metadata.v2beta.Metadata result = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user