From af55c4a65c8b6fac18ead8813a4c18e2587460a2 Mon Sep 17 00:00:00 2001 From: Livio Amstutz Date: Thu, 11 Mar 2021 09:40:40 +0100 Subject: [PATCH] fix: handle possible nil pointer of query (#1407) --- .../api/grpc/admin/iam_member_converter.go | 8 +++-- internal/api/grpc/admin/idp_converter.go | 8 +++-- .../api/grpc/admin/login_policy_converter.go | 8 +++-- internal/api/grpc/admin/org_converter.go | 8 +++-- internal/api/grpc/auth/idp_converter.go | 7 +++-- internal/api/grpc/auth/user.go | 10 ++++--- internal/api/grpc/auth/user_grant.go | 8 +++-- internal/api/grpc/management/org.go | 10 ++++--- internal/api/grpc/management/org_converter.go | 8 +++-- .../grpc/management/policy_login_converter.go | 8 +++-- internal/api/grpc/management/project.go | 3 +- .../grpc/management/project_application.go | 3 +- .../project_application_converter.go | 15 ++++++---- .../api/grpc/management/project_converter.go | 29 +++++++++++-------- .../management/project_grant_converter.go | 15 ++++++---- internal/api/grpc/management/user.go | 3 +- .../api/grpc/management/user_converter.go | 28 +++++++++++------- .../grpc/management/user_grant_converter.go | 8 +++-- internal/api/grpc/object/converter.go | 7 +++++ 19 files changed, 122 insertions(+), 72 deletions(-) diff --git a/internal/api/grpc/admin/iam_member_converter.go b/internal/api/grpc/admin/iam_member_converter.go index aa3d09b6a..89f935738 100644 --- a/internal/api/grpc/admin/iam_member_converter.go +++ b/internal/api/grpc/admin/iam_member_converter.go @@ -2,6 +2,7 @@ package admin import ( member_grpc "github.com/caos/zitadel/internal/api/grpc/member" + "github.com/caos/zitadel/internal/api/grpc/object" "github.com/caos/zitadel/internal/domain" "github.com/caos/zitadel/internal/iam/model" admin_pb "github.com/caos/zitadel/pkg/grpc/admin" @@ -22,10 +23,11 @@ func UpdateIAMMemberToDomain(req *admin_pb.UpdateIAMMemberRequest) *domain.Membe } func ListIAMMemberRequestToModel(req *admin_pb.ListIAMMembersRequest) *model.IAMMemberSearchRequest { + offset, limit, asc := object.ListQueryToModel(req.Query) return &model.IAMMemberSearchRequest{ - Offset: req.Query.Offset, - Limit: uint64(req.Query.Limit), - Asc: req.Query.Asc, + Offset: offset, + Limit: limit, + Asc: asc, // SortingColumn: model.IAMMemberSearchKey, //TOOD: not implemented in proto Queries: member_grpc.MemberQueriesToIAMMember(req.Queries), } diff --git a/internal/api/grpc/admin/idp_converter.go b/internal/api/grpc/admin/idp_converter.go index 6f0d46db6..c74eff76d 100644 --- a/internal/api/grpc/admin/idp_converter.go +++ b/internal/api/grpc/admin/idp_converter.go @@ -2,6 +2,7 @@ package admin import ( idp_grpc "github.com/caos/zitadel/internal/api/grpc/idp" + "github.com/caos/zitadel/internal/api/grpc/object" "github.com/caos/zitadel/internal/domain" "github.com/caos/zitadel/internal/eventstore/v1/models" iam_model "github.com/caos/zitadel/internal/iam/model" @@ -50,10 +51,11 @@ func updateOIDCConfigToDomain(req *admin_pb.UpdateIDPOIDCConfigRequest) *domain. } func listIDPsToModel(req *admin_pb.ListIDPsRequest) *iam_model.IDPConfigSearchRequest { + offset, limit, asc := object.ListQueryToModel(req.Query) return &iam_model.IDPConfigSearchRequest{ - Offset: req.Query.Offset, - Limit: uint64(req.Query.Limit), - Asc: req.Query.Asc, + Offset: offset, + Limit: limit, + Asc: asc, SortingColumn: idp_grpc.FieldNameToModel(req.SortingColumn), Queries: idpQueriesToModel(req.Queries), } diff --git a/internal/api/grpc/admin/login_policy_converter.go b/internal/api/grpc/admin/login_policy_converter.go index 22fcff4d1..fa7737fdf 100644 --- a/internal/api/grpc/admin/login_policy_converter.go +++ b/internal/api/grpc/admin/login_policy_converter.go @@ -1,6 +1,7 @@ package admin import ( + "github.com/caos/zitadel/internal/api/grpc/object" policy_grpc "github.com/caos/zitadel/internal/api/grpc/policy" "github.com/caos/zitadel/internal/domain" "github.com/caos/zitadel/internal/iam/model" @@ -18,10 +19,11 @@ func updateLoginPolicyToDomain(p *admin_pb.UpdateLoginPolicyRequest) *domain.Log } func ListLoginPolicyIDPsRequestToModel(req *admin_pb.ListLoginPolicyIDPsRequest) *model.IDPProviderSearchRequest { + offset, limit, asc := object.ListQueryToModel(req.Query) return &model.IDPProviderSearchRequest{ - Offset: req.Query.Offset, - Limit: uint64(req.Query.Limit), - Asc: req.Query.Asc, + Offset: offset, + Limit: limit, + Asc: asc, // SortingColumn: model.IDPProviderSearchKey, //TODO: not in proto // Queries: []*model.IDPProviderSearchQuery, //TODO: not in proto } diff --git a/internal/api/grpc/admin/org_converter.go b/internal/api/grpc/admin/org_converter.go index 404d9ba5b..5f649d47a 100644 --- a/internal/api/grpc/admin/org_converter.go +++ b/internal/api/grpc/admin/org_converter.go @@ -1,6 +1,7 @@ package admin import ( + "github.com/caos/zitadel/internal/api/grpc/object" org_grpc "github.com/caos/zitadel/internal/api/grpc/org" "github.com/caos/zitadel/internal/domain" "github.com/caos/zitadel/internal/org/model" @@ -8,14 +9,15 @@ import ( ) func listOrgRequestToModel(req *admin.ListOrgsRequest) (*model.OrgSearchRequest, error) { + offset, limit, asc := object.ListQueryToModel(req.Query) queries, err := org_grpc.OrgQueriesToModel(req.Queries) if err != nil { return nil, err } return &model.OrgSearchRequest{ - Offset: req.Query.Offset, - Limit: uint64(req.Query.Limit), - Asc: req.Query.Asc, + Offset: offset, + Limit: limit, + Asc: asc, Queries: queries, }, nil } diff --git a/internal/api/grpc/auth/idp_converter.go b/internal/api/grpc/auth/idp_converter.go index b8c03a36e..2cee80b4b 100644 --- a/internal/api/grpc/auth/idp_converter.go +++ b/internal/api/grpc/auth/idp_converter.go @@ -3,15 +3,18 @@ package auth import ( "context" + "github.com/caos/zitadel/internal/api/grpc/object" "github.com/caos/zitadel/internal/domain" "github.com/caos/zitadel/internal/user/model" auth_pb "github.com/caos/zitadel/pkg/grpc/auth" ) func ListMyLinkedIDPsRequestToModel(req *auth_pb.ListMyLinkedIDPsRequest) *model.ExternalIDPSearchRequest { + offset, limit, asc := object.ListQueryToModel(req.Query) return &model.ExternalIDPSearchRequest{ - Offset: req.Query.Offset, - Limit: uint64(req.Query.Limit), + Offset: offset, + Limit: limit, + Asc: asc, } } diff --git a/internal/api/grpc/auth/user.go b/internal/api/grpc/auth/user.go index 6156dc536..4d5c7a31f 100644 --- a/internal/api/grpc/auth/user.go +++ b/internal/api/grpc/auth/user.go @@ -23,7 +23,8 @@ func (s *Server) GetMyUser(ctx context.Context, _ *auth_pb.GetMyUserRequest) (*a } func (s *Server) ListMyUserChanges(ctx context.Context, req *auth_pb.ListMyUserChangesRequest) (*auth_pb.ListMyUserChangesResponse, error) { - changes, err := s.repo.MyUserChanges(ctx, req.Query.Offset, uint64(req.Query.Limit), req.Query.Asc) + offset, limit, asc := object.ListQueryToModel(req.Query) + changes, err := s.repo.MyUserChanges(ctx, offset, limit, asc) if err != nil { return nil, err } @@ -89,10 +90,11 @@ func (s *Server) ListMyProjectOrgs(ctx context.Context, req *auth_pb.ListMyProje } func ListMyProjectOrgsRequestToModel(req *auth_pb.ListMyProjectOrgsRequest) *grant_model.UserGrantSearchRequest { + offset, limit, asc := object.ListQueryToModel(req.Query) return &grant_model.UserGrantSearchRequest{ - Offset: req.Query.Offset, - Limit: uint64(req.Query.Limit), - Asc: req.Query.Asc, + Offset: offset, + Limit: limit, + Asc: asc, // Queries: queries,//TODO:user grant queries missing in proto } } diff --git a/internal/api/grpc/auth/user_grant.go b/internal/api/grpc/auth/user_grant.go index 6dd6410ce..abbf40833 100644 --- a/internal/api/grpc/auth/user_grant.go +++ b/internal/api/grpc/auth/user_grant.go @@ -1,15 +1,17 @@ package auth import ( + "github.com/caos/zitadel/internal/api/grpc/object" "github.com/caos/zitadel/internal/usergrant/model" auth_pb "github.com/caos/zitadel/pkg/grpc/auth" ) func ListMyUserGrantsRequestToModel(req *auth_pb.ListMyUserGrantsRequest) *model.UserGrantSearchRequest { + offset, limit, asc := object.ListQueryToModel(req.Query) return &model.UserGrantSearchRequest{ - Offset: req.Query.Offset, - Limit: uint64(req.Query.Limit), - Asc: req.Query.Asc, + Offset: offset, + Limit: limit, + Asc: asc, } } diff --git a/internal/api/grpc/management/org.go b/internal/api/grpc/management/org.go index c0d0a7465..08fb98440 100644 --- a/internal/api/grpc/management/org.go +++ b/internal/api/grpc/management/org.go @@ -32,7 +32,8 @@ func (s *Server) GetOrgByDomainGlobal(ctx context.Context, req *mgmt_pb.GetOrgBy } func (s *Server) ListOrgChanges(ctx context.Context, req *mgmt_pb.ListOrgChangesRequest) (*mgmt_pb.ListOrgChangesResponse, error) { - response, err := s.org.OrgChanges(ctx, authz.GetCtxData(ctx).OrgID, req.Query.Offset, uint64(req.Query.Limit), req.Query.Asc) + offset, limit, asc := object.ListQueryToModel(req.Query) + response, err := s.org.OrgChanges(ctx, authz.GetCtxData(ctx).OrgID, offset, limit, asc) if err != nil { return nil, err } @@ -199,11 +200,12 @@ func (s *Server) ListOrgMembers(ctx context.Context, req *mgmt_pb.ListOrgMembers } func ListOrgMembersRequestToModel(req *mgmt_pb.ListOrgMembersRequest) (*org_model.OrgMemberSearchRequest, error) { + offset, limit, asc := object.ListQueryToModel(req.Query) queries := member_grpc.MemberQueriesToOrgMember(req.Queries) return &org_model.OrgMemberSearchRequest{ - Offset: req.Query.Offset, - Limit: uint64(req.Query.Limit), - Asc: req.Query.Asc, + Offset: offset, + Limit: limit, + Asc: asc, //SortingColumn: //TODO: sorting Queries: queries, }, nil diff --git a/internal/api/grpc/management/org_converter.go b/internal/api/grpc/management/org_converter.go index b51b3a5f2..8a4ccd2b9 100644 --- a/internal/api/grpc/management/org_converter.go +++ b/internal/api/grpc/management/org_converter.go @@ -4,6 +4,7 @@ import ( "context" "github.com/caos/zitadel/internal/api/authz" + "github.com/caos/zitadel/internal/api/grpc/object" org_grpc "github.com/caos/zitadel/internal/api/grpc/org" "github.com/caos/zitadel/internal/domain" "github.com/caos/zitadel/internal/eventstore/v1/models" @@ -12,14 +13,15 @@ import ( ) func ListOrgDomainsRequestToModel(req *mgmt_pb.ListOrgDomainsRequest) (*org_model.OrgDomainSearchRequest, error) { + offset, limit, asc := object.ListQueryToModel(req.Query) queries, err := org_grpc.DomainQueriesToModel(req.Queries) if err != nil { return nil, err } return &org_model.OrgDomainSearchRequest{ - Offset: req.Query.Offset, - Limit: uint64(req.Query.Limit), - Asc: req.Query.Asc, + Offset: offset, + Limit: limit, + Asc: asc, //SortingColumn: //TODO: sorting Queries: queries, }, nil diff --git a/internal/api/grpc/management/policy_login_converter.go b/internal/api/grpc/management/policy_login_converter.go index e0386d9af..ef74d57cb 100644 --- a/internal/api/grpc/management/policy_login_converter.go +++ b/internal/api/grpc/management/policy_login_converter.go @@ -1,6 +1,7 @@ package management import ( + "github.com/caos/zitadel/internal/api/grpc/object" policy_grpc "github.com/caos/zitadel/internal/api/grpc/policy" "github.com/caos/zitadel/internal/domain" "github.com/caos/zitadel/internal/iam/model" @@ -28,10 +29,11 @@ func updateLoginPolicyToDomain(p *mgmt_pb.UpdateCustomLoginPolicyRequest) *domai } func ListLoginPolicyIDPsRequestToModel(req *mgmt_pb.ListLoginPolicyIDPsRequest) *model.IDPProviderSearchRequest { + offset, limit, asc := object.ListQueryToModel(req.Query) return &model.IDPProviderSearchRequest{ - Offset: req.Query.Offset, - Limit: uint64(req.Query.Limit), - Asc: req.Query.Asc, + Offset: offset, + Limit: limit, + Asc: asc, // SortingColumn: model.IDPProviderSearchKey, //TODO: not in proto // Queries: []*model.IDPProviderSearchQuery, //TODO: not in proto } diff --git a/internal/api/grpc/management/project.go b/internal/api/grpc/management/project.go index f17a60d55..4c038a7b1 100644 --- a/internal/api/grpc/management/project.go +++ b/internal/api/grpc/management/project.go @@ -70,7 +70,8 @@ func (s *Server) ListGrantedProjects(ctx context.Context, req *mgmt_pb.ListGrant } func (s *Server) ListProjectChanges(ctx context.Context, req *mgmt_pb.ListProjectChangesRequest) (*mgmt_pb.ListProjectChangesResponse, error) { - res, err := s.project.ProjectChanges(ctx, req.ProjectId, req.Query.Offset, uint64(req.Query.Limit), req.Query.Asc) + offset, limit, asc := object_grpc.ListQueryToModel(req.Query) + res, err := s.project.ProjectChanges(ctx, req.ProjectId, offset, limit, asc) if err != nil { return nil, err } diff --git a/internal/api/grpc/management/project_application.go b/internal/api/grpc/management/project_application.go index c952ba4bc..473a4859e 100644 --- a/internal/api/grpc/management/project_application.go +++ b/internal/api/grpc/management/project_application.go @@ -41,7 +41,8 @@ func (s *Server) ListApps(ctx context.Context, req *mgmt_pb.ListAppsRequest) (*m } func (s *Server) ListAppChanges(ctx context.Context, req *mgmt_pb.ListAppChangesRequest) (*mgmt_pb.ListAppChangesResponse, error) { - res, err := s.project.ApplicationChanges(ctx, req.ProjectId, req.AppId, req.Query.Offset, uint64(req.Query.Limit), req.Query.Asc) + offset, limit, asc := object_grpc.ListQueryToModel(req.Query) + res, err := s.project.ApplicationChanges(ctx, req.ProjectId, req.AppId, offset, limit, asc) if err != nil { return nil, err } diff --git a/internal/api/grpc/management/project_application_converter.go b/internal/api/grpc/management/project_application_converter.go index 0ca7e576f..d7b629dd5 100644 --- a/internal/api/grpc/management/project_application_converter.go +++ b/internal/api/grpc/management/project_application_converter.go @@ -4,6 +4,7 @@ import ( "time" authn_grpc "github.com/caos/zitadel/internal/api/grpc/authn" + "github.com/caos/zitadel/internal/api/grpc/object" app_grpc "github.com/caos/zitadel/internal/api/grpc/project" "github.com/caos/zitadel/internal/domain" "github.com/caos/zitadel/internal/eventstore/v1/models" @@ -13,6 +14,7 @@ import ( ) func ListAppsRequestToModel(req *mgmt_pb.ListAppsRequest) (*proj_model.ApplicationSearchRequest, error) { + offset, limit, asc := object.ListQueryToModel(req.Query) queries, err := app_grpc.AppQueriesToModel(req.Queries) if err != nil { return nil, err @@ -23,9 +25,9 @@ func ListAppsRequestToModel(req *mgmt_pb.ListAppsRequest) (*proj_model.Applicati Value: req.ProjectId, }) return &proj_model.ApplicationSearchRequest{ - Offset: req.Query.Offset, - Limit: uint64(req.Query.Limit), - Asc: req.Query.Asc, + Offset: offset, + Limit: limit, + Asc: asc, //SortingColumn: //TODO: sorting Queries: queries, }, nil @@ -118,6 +120,7 @@ func AddAPIClientKeyRequestToDomain(key *mgmt_pb.AddAppKeyRequest) *domain.Appli } func ListAPIClientKeysRequestToModel(req *mgmt_pb.ListAppKeysRequest) (*key_model.AuthNKeySearchRequest, error) { + offset, limit, asc := object.ListQueryToModel(req.Query) queries := make([]*key_model.AuthNKeySearchQuery, 2) queries = append(queries, &key_model.AuthNKeySearchQuery{ Key: key_model.AuthNKeyObjectID, @@ -125,9 +128,9 @@ func ListAPIClientKeysRequestToModel(req *mgmt_pb.ListAppKeysRequest) (*key_mode Value: req.AppId, }) return &key_model.AuthNKeySearchRequest{ - Offset: req.Query.Offset, - Limit: uint64(req.Query.Limit), - Asc: req.Query.Asc, + Offset: offset, + Limit: limit, + Asc: asc, //SortingColumn: //TODO: sorting Queries: queries, }, nil diff --git a/internal/api/grpc/management/project_converter.go b/internal/api/grpc/management/project_converter.go index 890da5b7c..54ad3acc4 100644 --- a/internal/api/grpc/management/project_converter.go +++ b/internal/api/grpc/management/project_converter.go @@ -2,6 +2,7 @@ package management import ( member_grpc "github.com/caos/zitadel/internal/api/grpc/member" + "github.com/caos/zitadel/internal/api/grpc/object" proj_grpc "github.com/caos/zitadel/internal/api/grpc/project" "github.com/caos/zitadel/internal/domain" "github.com/caos/zitadel/internal/eventstore/v1/models" @@ -82,33 +83,36 @@ func UpdateProjectMemberRequestToDomain(req *mgmt_pb.UpdateProjectMemberRequest) } func ListProjectsRequestToModel(req *mgmt_pb.ListProjectsRequest) (*proj_model.ProjectViewSearchRequest, error) { + offset, limit, asc := object.ListQueryToModel(req.Query) queries, err := proj_grpc.ProjectQueriesToModel(req.Queries) if err != nil { return nil, err } return &proj_model.ProjectViewSearchRequest{ - Offset: req.Query.Offset, - Limit: uint64(req.Query.Limit), - Asc: req.Query.Asc, + Offset: offset, + Limit: limit, + Asc: asc, //SortingColumn: //TODO: sorting Queries: queries, }, nil } func ListGrantedProjectsRequestToModel(req *mgmt_pb.ListGrantedProjectsRequest) (*proj_model.ProjectGrantViewSearchRequest, error) { + offset, limit, asc := object.ListQueryToModel(req.Query) queries, err := proj_grpc.GrantedProjectQueriesToModel(req.Queries) if err != nil { return nil, err } return &proj_model.ProjectGrantViewSearchRequest{ - Offset: req.Query.Offset, - Limit: uint64(req.Query.Limit), - Asc: req.Query.Asc, + Offset: offset, + Limit: limit, + Asc: asc, //SortingColumn: //TODO: sorting Queries: queries, }, nil } func ListProjectRolesRequestToModel(req *mgmt_pb.ListProjectRolesRequest) (*proj_model.ProjectRoleSearchRequest, error) { + offset, limit, asc := object.ListQueryToModel(req.Query) queries, err := proj_grpc.RoleQueriesToModel(req.Queries) if err != nil { return nil, err @@ -119,15 +123,16 @@ func ListProjectRolesRequestToModel(req *mgmt_pb.ListProjectRolesRequest) (*proj Value: req.ProjectId, }) return &proj_model.ProjectRoleSearchRequest{ - Offset: req.Query.Offset, - Limit: uint64(req.Query.Limit), - Asc: req.Query.Asc, + Offset: offset, + Limit: limit, + Asc: asc, //SortingColumn: //TODO: sorting Queries: queries, }, nil } func ListProjectMembersRequestToModel(req *mgmt_pb.ListProjectMembersRequest) (*proj_model.ProjectMemberSearchRequest, error) { + offset, limit, asc := object.ListQueryToModel(req.Query) queries := member_grpc.MemberQueriesToProjectMember(req.Queries) queries = append(queries, &proj_model.ProjectMemberSearchQuery{ Key: proj_model.ProjectMemberSearchKeyProjectID, @@ -135,9 +140,9 @@ func ListProjectMembersRequestToModel(req *mgmt_pb.ListProjectMembersRequest) (* Value: req.ProjectId, }) return &proj_model.ProjectMemberSearchRequest{ - Offset: req.Query.Offset, - Limit: uint64(req.Query.Limit), - Asc: req.Query.Asc, + Offset: offset, + Limit: limit, + Asc: asc, //SortingColumn: //TODO: sorting Queries: queries, }, nil diff --git a/internal/api/grpc/management/project_grant_converter.go b/internal/api/grpc/management/project_grant_converter.go index d9597ebb8..3cfdf6690 100644 --- a/internal/api/grpc/management/project_grant_converter.go +++ b/internal/api/grpc/management/project_grant_converter.go @@ -2,6 +2,7 @@ package management import ( member_grpc "github.com/caos/zitadel/internal/api/grpc/member" + "github.com/caos/zitadel/internal/api/grpc/object" proj_grpc "github.com/caos/zitadel/internal/api/grpc/project" "github.com/caos/zitadel/internal/domain" "github.com/caos/zitadel/internal/eventstore/v1/models" @@ -10,6 +11,7 @@ import ( ) func ListProjectGrantsRequestToModel(req *mgmt_pb.ListProjectGrantsRequest) (*proj_model.ProjectGrantViewSearchRequest, error) { + offset, limit, asc := object.ListQueryToModel(req.Query) queries := proj_grpc.ProjectGrantQueriesToModel(req.Queries) queries = append(queries, &proj_model.ProjectGrantViewSearchQuery{ Key: proj_model.GrantedProjectSearchKeyProjectID, @@ -17,9 +19,9 @@ func ListProjectGrantsRequestToModel(req *mgmt_pb.ListProjectGrantsRequest) (*pr Value: req.ProjectId, }) return &proj_model.ProjectGrantViewSearchRequest{ - Offset: req.Query.Offset, - Limit: uint64(req.Query.Limit), - Asc: req.Query.Asc, + Offset: offset, + Limit: limit, + Asc: asc, //SortingColumn: //TODO: sorting Queries: queries, }, nil @@ -46,6 +48,7 @@ func UpdateProjectGrantRequestToDomain(req *mgmt_pb.UpdateProjectGrantRequest) * } func ListProjectGrantMembersRequestToModel(req *mgmt_pb.ListProjectGrantMembersRequest) *proj_model.ProjectGrantMemberSearchRequest { + offset, limit, asc := object.ListQueryToModel(req.Query) queries := member_grpc.MemberQueriesToProjectGrantMember(req.Queries) queries = append(queries, &proj_model.ProjectGrantMemberSearchQuery{ Key: proj_model.ProjectGrantMemberSearchKeyProjectID, @@ -53,9 +56,9 @@ func ListProjectGrantMembersRequestToModel(req *mgmt_pb.ListProjectGrantMembersR Value: req.ProjectId, }) return &proj_model.ProjectGrantMemberSearchRequest{ - Offset: req.Query.Offset, - Limit: uint64(req.Query.Limit), - Asc: req.Query.Asc, + Offset: offset, + Limit: limit, + Asc: asc, //SortingColumn: //TODO: sorting Queries: queries, } diff --git a/internal/api/grpc/management/user.go b/internal/api/grpc/management/user.go index 880ee2707..fc6464121 100644 --- a/internal/api/grpc/management/user.go +++ b/internal/api/grpc/management/user.go @@ -52,7 +52,8 @@ func (s *Server) ListUsers(ctx context.Context, req *mgmt_pb.ListUsersRequest) ( } func (s *Server) ListUserChanges(ctx context.Context, req *mgmt_pb.ListUserChangesRequest) (*mgmt_pb.ListUserChangesResponse, error) { - res, err := s.user.UserChanges(ctx, req.UserId, req.Query.Offset, uint64(req.Query.Limit), req.Query.Asc) + offset, limit, asc := object.ListQueryToModel(req.Query) + res, err := s.user.UserChanges(ctx, req.UserId, offset, limit, asc) if err != nil { return nil, err } diff --git a/internal/api/grpc/management/user_converter.go b/internal/api/grpc/management/user_converter.go index 23f36059f..724d50366 100644 --- a/internal/api/grpc/management/user_converter.go +++ b/internal/api/grpc/management/user_converter.go @@ -10,6 +10,7 @@ import ( "github.com/caos/zitadel/internal/api/authz" "github.com/caos/zitadel/internal/api/grpc/authn" + "github.com/caos/zitadel/internal/api/grpc/object" user_grpc "github.com/caos/zitadel/internal/api/grpc/user" "github.com/caos/zitadel/internal/domain" "github.com/caos/zitadel/internal/eventstore/v1/models" @@ -20,6 +21,7 @@ import ( ) func ListUsersRequestToModel(ctx context.Context, req *mgmt_pb.ListUsersRequest) *user_model.UserSearchRequest { + offset, limit, asc := object.ListQueryToModel(req.Query) req.Queries = append(req.Queries, &user_pb.SearchQuery{ Query: &user_pb.SearchQuery_ResourceOwner{ ResourceOwner: &user_pb.ResourceOwnerQuery{ @@ -29,9 +31,9 @@ func ListUsersRequestToModel(ctx context.Context, req *mgmt_pb.ListUsersRequest) }) return &user_model.UserSearchRequest{ - Offset: req.Query.Offset, - Limit: uint64(req.Query.Limit), - Asc: req.Query.Asc, + Offset: offset, + Limit: limit, + Asc: asc, Queries: user_grpc.UserQueriesToModel(req.Queries), } } @@ -126,10 +128,11 @@ func UpdateMachineRequestToDomain(ctx context.Context, req *mgmt_pb.UpdateMachin } func ListMachineKeysRequestToModel(req *mgmt_pb.ListMachineKeysRequest) *key_model.AuthNKeySearchRequest { + offset, limit, asc := object.ListQueryToModel(req.Query) return &key_model.AuthNKeySearchRequest{ - Offset: req.Query.Offset, - Limit: uint64(req.Query.Limit), - Asc: req.Query.Asc, + Offset: offset, + Limit: limit, + Asc: asc, Queries: []*key_model.AuthNKeySearchQuery{ { Key: key_model.AuthNKeyObjectType, @@ -173,14 +176,17 @@ func RemoveHumanLinkedIDPRequestToDomain(ctx context.Context, req *mgmt_pb.Remov } func ListHumanLinkedIDPsRequestToModel(req *mgmt_pb.ListHumanLinkedIDPsRequest) *user_model.ExternalIDPSearchRequest { + offset, limit, asc := object.ListQueryToModel(req.Query) return &user_model.ExternalIDPSearchRequest{ - Limit: uint64(req.Query.Limit), - Offset: req.Query.Offset, + Offset: offset, + Limit: limit, + Asc: asc, Queries: []*user_model.ExternalIDPSearchQuery{{Key: user_model.ExternalIDPSearchKeyUserID, Method: domain.SearchMethodEquals, Value: req.UserId}}, } } func ListUserMembershipsRequestToModel(req *mgmt_pb.ListUserMembershipsRequest) (*user_model.UserMembershipSearchRequest, error) { + offset, limit, asc := object.ListQueryToModel(req.Query) queries, err := user_grpc.MembershipQueriesToModel(req.Queries) if err != nil { return nil, err @@ -191,9 +197,9 @@ func ListUserMembershipsRequestToModel(req *mgmt_pb.ListUserMembershipsRequest) Value: req.UserId, }) return &user_model.UserMembershipSearchRequest{ - Offset: req.Query.Offset, - Limit: uint64(req.Query.Limit), - Asc: req.Query.Asc, + Offset: offset, + Limit: limit, + Asc: asc, //SortingColumn: //TODO: sorting Queries: queries, }, nil diff --git a/internal/api/grpc/management/user_grant_converter.go b/internal/api/grpc/management/user_grant_converter.go index cbada4401..65f63d7b6 100644 --- a/internal/api/grpc/management/user_grant_converter.go +++ b/internal/api/grpc/management/user_grant_converter.go @@ -3,6 +3,7 @@ package management import ( "context" "github.com/caos/zitadel/internal/api/authz" + "github.com/caos/zitadel/internal/api/grpc/object" user_grpc "github.com/caos/zitadel/internal/api/grpc/user" "github.com/caos/zitadel/internal/domain" "github.com/caos/zitadel/internal/eventstore/v1/models" @@ -11,10 +12,11 @@ import ( ) func ListUserGrantsRequestToModel(ctx context.Context, req *mgmt_pb.ListUserGrantRequest) *model.UserGrantSearchRequest { + offset, limit, asc := object.ListQueryToModel(req.Query) request := &model.UserGrantSearchRequest{ - Offset: req.Query.Offset, - Limit: uint64(req.Query.Limit), - Asc: req.Query.Asc, + Offset: offset, + Limit: limit, + Asc: asc, Queries: user_grpc.UserGrantQueriesToModel(req.Queries), } request.Queries = append(request.Queries, &model.UserGrantSearchQuery{ diff --git a/internal/api/grpc/object/converter.go b/internal/api/grpc/object/converter.go index 504b627d4..155614277 100644 --- a/internal/api/grpc/object/converter.go +++ b/internal/api/grpc/object/converter.go @@ -64,3 +64,10 @@ func TextMethodToModel(method object_pb.TextQueryMethod) domain.SearchMethod { return -1 } } + +func ListQueryToModel(query *object_pb.ListQuery) (offset, limit uint64, asc bool) { + if query == nil { + return + } + return query.Offset, uint64(query.Limit), query.Asc +}