diff --git a/console/src/app/services/grpc-auth.service.ts b/console/src/app/services/grpc-auth.service.ts index b2c05e1162..93d764f3f5 100644 --- a/console/src/app/services/grpc-auth.service.ts +++ b/console/src/app/services/grpc-auth.service.ts @@ -69,6 +69,7 @@ import { VerifyMyPhoneRequest, VerifyMyPhoneResponse, } from '../proto/generated/zitadel/auth_pb'; +import { ChangeQuery } from '../proto/generated/zitadel/change_pb'; import { ListQuery } from '../proto/generated/zitadel/object_pb'; import { Org, OrgQuery } from '../proto/generated/zitadel/org_pb'; import { Gender, User, WebAuthNVerification } from '../proto/generated/zitadel/user_pb'; @@ -502,14 +503,15 @@ export class GrpcAuthService { return this.grpcService.auth.verifyMyPhone(req, null).then(resp => resp.toObject()); } - public listMyUserChanges(limit: number, offset: number): Promise { + public listMyUserChanges(limit: number, sequence: number): Promise { const req = new ListMyUserChangesRequest(); - const query = new ListQuery(); + const query = new ChangeQuery(); + if (limit) { query.setLimit(limit); } - if (offset) { - query.setOffset(offset); + if (sequence) { + query.setSequence(sequence); } req.setQuery(query); return this.grpcService.auth.listMyUserChanges(req, null).then(resp => resp.toObject()); diff --git a/console/src/app/services/mgmt.service.ts b/console/src/app/services/mgmt.service.ts index f39706f437..252638a363 100644 --- a/console/src/app/services/mgmt.service.ts +++ b/console/src/app/services/mgmt.service.ts @@ -5,6 +5,7 @@ import { BehaviorSubject } from 'rxjs'; import { AppQuery } from '../proto/generated/zitadel/app_pb'; import { KeyType } from '../proto/generated/zitadel/auth_n_key_pb'; +import { ChangeQuery } from '../proto/generated/zitadel/change_pb'; import { IDPOwnerType } from '../proto/generated/zitadel/idp_pb'; import { AddAPIAppRequest, @@ -1144,62 +1145,63 @@ export class ManagementService { return this.grpcService.mgmt.bulkRemoveUserGrant(req, null).then(resp => resp.toObject()); } - public listAppChanges(appId: string, projectId: string, limit: number, offset: number): Promise { + public listAppChanges(appId: string, projectId: string, limit: number, sequence: number): Promise { const req = new ListAppChangesRequest(); - const query = new ListQuery(); + const query = new ChangeQuery(); req.setAppId(appId); req.setProjectId(projectId); + if (limit) { query.setLimit(limit); } - if (offset) { - query.setOffset(offset); + if (sequence) { + query.setSequence(sequence); } req.setQuery(query); return this.grpcService.mgmt.listAppChanges(req, null).then(resp => resp.toObject()); } - public listOrgChanges(limit: number, offset: number): Promise { + public listOrgChanges(limit: number, sequence: number): Promise { const req = new ListOrgChangesRequest(); - const query = new ListQuery(); + const query = new ChangeQuery(); if (limit) { query.setLimit(limit); } - if (offset) { - query.setOffset(offset); + if (sequence) { + query.setSequence(sequence); } req.setQuery(query); return this.grpcService.mgmt.listOrgChanges(req, null).then(resp => resp.toObject()); } - public listProjectChanges(projectId: string, limit: number, offset: number): Promise { + public listProjectChanges(projectId: string, limit: number, sequence: number): Promise { const req = new ListProjectChangesRequest(); req.setProjectId(projectId); - const query = new ListQuery(); + const query = new ChangeQuery(); if (limit) { query.setLimit(limit); } - if (offset) { - query.setOffset(offset); + if (sequence) { + query.setSequence(sequence); } req.setQuery(query); return this.grpcService.mgmt.listProjectChanges(req, null).then(resp => resp.toObject()); } - public listUserChanges(userId: string, limit: number, offset: number): Promise { + public listUserChanges(userId: string, limit: number, sequence: number): Promise { const req = new ListUserChangesRequest(); req.setUserId(userId); - const query = new ListQuery(); + const query = new ChangeQuery(); if (limit) { query.setLimit(limit); } - if (offset) { - query.setOffset(offset); + if (sequence) { + query.setSequence(sequence); } req.setQuery(query); diff --git a/internal/api/grpc/auth/user.go b/internal/api/grpc/auth/user.go index 27f68afbf9..9531b25693 100644 --- a/internal/api/grpc/auth/user.go +++ b/internal/api/grpc/auth/user.go @@ -23,12 +23,12 @@ 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) { - offset, limit, asc := object.ListQueryToModel(req.Query) + sequence, limit, asc := change.ChangeQueryToModel(req.Query) features, err := s.repo.GetOrgFeatures(ctx, authz.GetCtxData(ctx).ResourceOwner) if err != nil { return nil, err } - changes, err := s.repo.MyUserChanges(ctx, offset, limit, asc, features.AuditLogRetention) + changes, err := s.repo.MyUserChanges(ctx, sequence, limit, asc, features.AuditLogRetention) if err != nil { return nil, err } diff --git a/internal/api/grpc/change/user_changes.go b/internal/api/grpc/change/changes.go similarity index 93% rename from internal/api/grpc/change/user_changes.go rename to internal/api/grpc/change/changes.go index 7982f1feec..280f7ed517 100644 --- a/internal/api/grpc/change/user_changes.go +++ b/internal/api/grpc/change/changes.go @@ -8,6 +8,13 @@ import ( "github.com/caos/zitadel/pkg/grpc/message" ) +func ChangeQueryToModel(query *change_pb.ChangeQuery) (sequence uint64, limit uint64, asc bool) { + if query == nil { + return 0, 0, false + } + return query.Sequence, uint64(query.Limit), query.Asc +} + func UserChangesToPb(changes []*user_model.UserChange) []*change_pb.Change { c := make([]*change_pb.Change, len(changes)) for i, change := range changes { diff --git a/internal/api/grpc/management/org.go b/internal/api/grpc/management/org.go index bac03b75ab..b576d2b9f4 100644 --- a/internal/api/grpc/management/org.go +++ b/internal/api/grpc/management/org.go @@ -32,12 +32,12 @@ 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) { - offset, limit, asc := object.ListQueryToModel(req.Query) + sequence, limit, asc := change_grpc.ChangeQueryToModel(req.Query) features, err := s.features.GetOrgFeatures(ctx, authz.GetCtxData(ctx).OrgID) if err != nil { return nil, err } - response, err := s.org.OrgChanges(ctx, authz.GetCtxData(ctx).OrgID, offset, limit, asc, features.AuditLogRetention) + response, err := s.org.OrgChanges(ctx, authz.GetCtxData(ctx).OrgID, sequence, limit, asc, features.AuditLogRetention) if err != nil { return nil, err } diff --git a/internal/api/grpc/management/project.go b/internal/api/grpc/management/project.go index aaf33bca07..6935d67b07 100644 --- a/internal/api/grpc/management/project.go +++ b/internal/api/grpc/management/project.go @@ -72,12 +72,12 @@ 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) { - offset, limit, asc := object_grpc.ListQueryToModel(req.Query) + sequence, limit, asc := change_grpc.ChangeQueryToModel(req.Query) features, err := s.features.GetOrgFeatures(ctx, authz.GetCtxData(ctx).OrgID) if err != nil { return nil, err } - res, err := s.project.ProjectChanges(ctx, req.ProjectId, offset, limit, asc, features.AuditLogRetention) + res, err := s.project.ProjectChanges(ctx, req.ProjectId, sequence, limit, asc, features.AuditLogRetention) 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 60d25a5a76..b546bd3adf 100644 --- a/internal/api/grpc/management/project_application.go +++ b/internal/api/grpc/management/project_application.go @@ -41,12 +41,12 @@ 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) { - offset, limit, asc := object_grpc.ListQueryToModel(req.Query) + sequence, limit, asc := change_grpc.ChangeQueryToModel(req.Query) features, err := s.features.GetOrgFeatures(ctx, authz.GetCtxData(ctx).OrgID) if err != nil { return nil, err } - res, err := s.project.ApplicationChanges(ctx, req.ProjectId, req.AppId, offset, limit, asc, features.AuditLogRetention) + res, err := s.project.ApplicationChanges(ctx, req.ProjectId, req.AppId, sequence, limit, asc, features.AuditLogRetention) if err != nil { return nil, err } diff --git a/internal/api/grpc/management/user.go b/internal/api/grpc/management/user.go index 3e71e5c549..fe2c8b183c 100644 --- a/internal/api/grpc/management/user.go +++ b/internal/api/grpc/management/user.go @@ -52,12 +52,12 @@ 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) { - offset, limit, asc := object.ListQueryToModel(req.Query) + sequence, limit, asc := change_grpc.ChangeQueryToModel(req.Query) features, err := s.features.GetOrgFeatures(ctx, authz.GetCtxData(ctx).OrgID) if err != nil { return nil, err } - res, err := s.user.UserChanges(ctx, req.UserId, offset, limit, asc, features.AuditLogRetention) + res, err := s.user.UserChanges(ctx, req.UserId, sequence, limit, asc, features.AuditLogRetention) if err != nil { return nil, err } diff --git a/internal/eventstore/v1/models/search_query_old.go b/internal/eventstore/v1/models/search_query_old.go index b68947556d..b9137c017e 100644 --- a/internal/eventstore/v1/models/search_query_old.go +++ b/internal/eventstore/v1/models/search_query_old.go @@ -56,9 +56,6 @@ func (q *SearchQuery) LatestSequenceFilter(sequence uint64) *SearchQuery { return q } sortOrder := Operation_Greater - if q.Desc { - sortOrder = Operation_Less - } return q.setFilter(NewFilter(Field_LatestSequence, sequence, sortOrder)) } diff --git a/proto/zitadel/auth.proto b/proto/zitadel/auth.proto index 280f6e51ef..86a0df1678 100644 --- a/proto/zitadel/auth.proto +++ b/proto/zitadel/auth.proto @@ -420,7 +420,7 @@ message GetMyUserResponse { } message ListMyUserChangesRequest { - zitadel.v1.ListQuery query = 1; + zitadel.change.v1.ChangeQuery query = 1; } message ListMyUserChangesResponse { diff --git a/proto/zitadel/change.proto b/proto/zitadel/change.proto index 98d5915142..b0f869bc04 100644 --- a/proto/zitadel/change.proto +++ b/proto/zitadel/change.proto @@ -14,4 +14,10 @@ message Change { string editor_id = 4; string editor_display_name = 5; string resource_owner_id = 6; +} + +message ChangeQuery { + uint64 sequence = 1; + uint32 limit = 2; + bool asc = 3; } \ No newline at end of file diff --git a/proto/zitadel/management.proto b/proto/zitadel/management.proto index 5cbd200731..bff418d5c9 100644 --- a/proto/zitadel/management.proto +++ b/proto/zitadel/management.proto @@ -135,6 +135,7 @@ service ManagementService { rpc ListUserChanges(ListUserChangesRequest) returns (ListUserChangesResponse) { option (google.api.http) = { post: "/users/{user_id}/changes/_search" + body: "*" }; option (zitadel.v1.auth_option) = { @@ -536,6 +537,7 @@ service ManagementService { rpc ListOrgChanges(ListOrgChangesRequest) returns (ListOrgChangesResponse) { option (google.api.http) = { post: "/orgs/me/changes/_search" + body: "*" }; option (zitadel.v1.auth_option) = { @@ -1867,7 +1869,7 @@ message ListUsersResponse { } message ListUserChangesRequest { - zitadel.v1.ListQuery query = 1; + zitadel.change.v1.ChangeQuery query = 1; string user_id = 2 [(validate.rules).string = {min_len: 1, max_len: 200}]; } @@ -2265,7 +2267,7 @@ message GetOrgByDomainGlobalRequest { } message ListOrgChangesRequest { - zitadel.v1.ListQuery query = 1; + zitadel.change.v1.ChangeQuery query = 1; } message ListOrgChangesResponse { @@ -2429,7 +2431,7 @@ message ListGrantedProjectsResponse { } message ListProjectChangesRequest { - zitadel.v1.ListQuery query = 1; + zitadel.change.v1.ChangeQuery query = 1; string project_id = 2 [(validate.rules).string = {min_len: 1, max_len: 200}]; } @@ -2609,7 +2611,7 @@ message ListAppsResponse { } message ListAppChangesRequest { - zitadel.v1.ListQuery query = 1; + zitadel.change.v1.ChangeQuery query = 1; string project_id = 2 [(validate.rules).string = {min_len: 1, max_len: 200}]; string app_id = 3 [(validate.rules).string = {min_len: 1, max_len: 200}]; }