fix: changes (#1482)

* fix: changes

* change listquery to changequery

* fix: changes in auth

Co-authored-by: Max Peintner <max@caos.ch>
This commit is contained in:
Livio Amstutz 2021-03-29 10:32:23 +02:00 committed by GitHub
parent 0a058a821e
commit 48456b84b9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 54 additions and 38 deletions

View File

@ -69,6 +69,7 @@ import {
VerifyMyPhoneRequest, VerifyMyPhoneRequest,
VerifyMyPhoneResponse, VerifyMyPhoneResponse,
} from '../proto/generated/zitadel/auth_pb'; } from '../proto/generated/zitadel/auth_pb';
import { ChangeQuery } from '../proto/generated/zitadel/change_pb';
import { ListQuery } from '../proto/generated/zitadel/object_pb'; import { ListQuery } from '../proto/generated/zitadel/object_pb';
import { Org, OrgQuery } from '../proto/generated/zitadel/org_pb'; import { Org, OrgQuery } from '../proto/generated/zitadel/org_pb';
import { Gender, User, WebAuthNVerification } from '../proto/generated/zitadel/user_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()); return this.grpcService.auth.verifyMyPhone(req, null).then(resp => resp.toObject());
} }
public listMyUserChanges(limit: number, offset: number): Promise<ListMyUserChangesResponse.AsObject> { public listMyUserChanges(limit: number, sequence: number): Promise<ListMyUserChangesResponse.AsObject> {
const req = new ListMyUserChangesRequest(); const req = new ListMyUserChangesRequest();
const query = new ListQuery(); const query = new ChangeQuery();
if (limit) { if (limit) {
query.setLimit(limit); query.setLimit(limit);
} }
if (offset) { if (sequence) {
query.setOffset(offset); query.setSequence(sequence);
} }
req.setQuery(query); req.setQuery(query);
return this.grpcService.auth.listMyUserChanges(req, null).then(resp => resp.toObject()); return this.grpcService.auth.listMyUserChanges(req, null).then(resp => resp.toObject());

View File

@ -5,6 +5,7 @@ import { BehaviorSubject } from 'rxjs';
import { AppQuery } from '../proto/generated/zitadel/app_pb'; import { AppQuery } from '../proto/generated/zitadel/app_pb';
import { KeyType } from '../proto/generated/zitadel/auth_n_key_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 { IDPOwnerType } from '../proto/generated/zitadel/idp_pb';
import { import {
AddAPIAppRequest, AddAPIAppRequest,
@ -1144,62 +1145,63 @@ export class ManagementService {
return this.grpcService.mgmt.bulkRemoveUserGrant(req, null).then(resp => resp.toObject()); return this.grpcService.mgmt.bulkRemoveUserGrant(req, null).then(resp => resp.toObject());
} }
public listAppChanges(appId: string, projectId: string, limit: number, offset: number): Promise<ListAppChangesResponse.AsObject> { public listAppChanges(appId: string, projectId: string, limit: number, sequence: number): Promise<ListAppChangesResponse.AsObject> {
const req = new ListAppChangesRequest(); const req = new ListAppChangesRequest();
const query = new ListQuery(); const query = new ChangeQuery();
req.setAppId(appId); req.setAppId(appId);
req.setProjectId(projectId); req.setProjectId(projectId);
if (limit) { if (limit) {
query.setLimit(limit); query.setLimit(limit);
} }
if (offset) { if (sequence) {
query.setOffset(offset); query.setSequence(sequence);
} }
req.setQuery(query); req.setQuery(query);
return this.grpcService.mgmt.listAppChanges(req, null).then(resp => resp.toObject()); return this.grpcService.mgmt.listAppChanges(req, null).then(resp => resp.toObject());
} }
public listOrgChanges(limit: number, offset: number): Promise<ListOrgChangesResponse.AsObject> { public listOrgChanges(limit: number, sequence: number): Promise<ListOrgChangesResponse.AsObject> {
const req = new ListOrgChangesRequest(); const req = new ListOrgChangesRequest();
const query = new ListQuery(); const query = new ChangeQuery();
if (limit) { if (limit) {
query.setLimit(limit); query.setLimit(limit);
} }
if (offset) { if (sequence) {
query.setOffset(offset); query.setSequence(sequence);
} }
req.setQuery(query); req.setQuery(query);
return this.grpcService.mgmt.listOrgChanges(req, null).then(resp => resp.toObject()); return this.grpcService.mgmt.listOrgChanges(req, null).then(resp => resp.toObject());
} }
public listProjectChanges(projectId: string, limit: number, offset: number): Promise<ListProjectChangesResponse.AsObject> { public listProjectChanges(projectId: string, limit: number, sequence: number): Promise<ListProjectChangesResponse.AsObject> {
const req = new ListProjectChangesRequest(); const req = new ListProjectChangesRequest();
req.setProjectId(projectId); req.setProjectId(projectId);
const query = new ListQuery(); const query = new ChangeQuery();
if (limit) { if (limit) {
query.setLimit(limit); query.setLimit(limit);
} }
if (offset) { if (sequence) {
query.setOffset(offset); query.setSequence(sequence);
} }
req.setQuery(query); req.setQuery(query);
return this.grpcService.mgmt.listProjectChanges(req, null).then(resp => resp.toObject()); return this.grpcService.mgmt.listProjectChanges(req, null).then(resp => resp.toObject());
} }
public listUserChanges(userId: string, limit: number, offset: number): Promise<ListUserChangesResponse.AsObject> { public listUserChanges(userId: string, limit: number, sequence: number): Promise<ListUserChangesResponse.AsObject> {
const req = new ListUserChangesRequest(); const req = new ListUserChangesRequest();
req.setUserId(userId); req.setUserId(userId);
const query = new ListQuery(); const query = new ChangeQuery();
if (limit) { if (limit) {
query.setLimit(limit); query.setLimit(limit);
} }
if (offset) { if (sequence) {
query.setOffset(offset); query.setSequence(sequence);
} }
req.setQuery(query); req.setQuery(query);

View File

@ -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) { 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) features, err := s.repo.GetOrgFeatures(ctx, authz.GetCtxData(ctx).ResourceOwner)
if err != nil { if err != nil {
return nil, err 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 { if err != nil {
return nil, err return nil, err
} }

View File

@ -8,6 +8,13 @@ import (
"github.com/caos/zitadel/pkg/grpc/message" "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 { func UserChangesToPb(changes []*user_model.UserChange) []*change_pb.Change {
c := make([]*change_pb.Change, len(changes)) c := make([]*change_pb.Change, len(changes))
for i, change := range changes { for i, change := range changes {

View File

@ -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) { 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) features, err := s.features.GetOrgFeatures(ctx, authz.GetCtxData(ctx).OrgID)
if err != nil { if err != nil {
return nil, err 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 { if err != nil {
return nil, err return nil, err
} }

View File

@ -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) { 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) features, err := s.features.GetOrgFeatures(ctx, authz.GetCtxData(ctx).OrgID)
if err != nil { if err != nil {
return nil, err 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 { if err != nil {
return nil, err return nil, err
} }

View File

@ -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) { 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) features, err := s.features.GetOrgFeatures(ctx, authz.GetCtxData(ctx).OrgID)
if err != nil { if err != nil {
return nil, err 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 { if err != nil {
return nil, err return nil, err
} }

View File

@ -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) { 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) features, err := s.features.GetOrgFeatures(ctx, authz.GetCtxData(ctx).OrgID)
if err != nil { if err != nil {
return nil, err 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 { if err != nil {
return nil, err return nil, err
} }

View File

@ -56,9 +56,6 @@ func (q *SearchQuery) LatestSequenceFilter(sequence uint64) *SearchQuery {
return q return q
} }
sortOrder := Operation_Greater sortOrder := Operation_Greater
if q.Desc {
sortOrder = Operation_Less
}
return q.setFilter(NewFilter(Field_LatestSequence, sequence, sortOrder)) return q.setFilter(NewFilter(Field_LatestSequence, sequence, sortOrder))
} }

View File

@ -420,7 +420,7 @@ message GetMyUserResponse {
} }
message ListMyUserChangesRequest { message ListMyUserChangesRequest {
zitadel.v1.ListQuery query = 1; zitadel.change.v1.ChangeQuery query = 1;
} }
message ListMyUserChangesResponse { message ListMyUserChangesResponse {

View File

@ -14,4 +14,10 @@ message Change {
string editor_id = 4; string editor_id = 4;
string editor_display_name = 5; string editor_display_name = 5;
string resource_owner_id = 6; string resource_owner_id = 6;
}
message ChangeQuery {
uint64 sequence = 1;
uint32 limit = 2;
bool asc = 3;
} }

View File

@ -135,6 +135,7 @@ service ManagementService {
rpc ListUserChanges(ListUserChangesRequest) returns (ListUserChangesResponse) { rpc ListUserChanges(ListUserChangesRequest) returns (ListUserChangesResponse) {
option (google.api.http) = { option (google.api.http) = {
post: "/users/{user_id}/changes/_search" post: "/users/{user_id}/changes/_search"
body: "*"
}; };
option (zitadel.v1.auth_option) = { option (zitadel.v1.auth_option) = {
@ -536,6 +537,7 @@ service ManagementService {
rpc ListOrgChanges(ListOrgChangesRequest) returns (ListOrgChangesResponse) { rpc ListOrgChanges(ListOrgChangesRequest) returns (ListOrgChangesResponse) {
option (google.api.http) = { option (google.api.http) = {
post: "/orgs/me/changes/_search" post: "/orgs/me/changes/_search"
body: "*"
}; };
option (zitadel.v1.auth_option) = { option (zitadel.v1.auth_option) = {
@ -1867,7 +1869,7 @@ message ListUsersResponse {
} }
message ListUserChangesRequest { 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}]; string user_id = 2 [(validate.rules).string = {min_len: 1, max_len: 200}];
} }
@ -2265,7 +2267,7 @@ message GetOrgByDomainGlobalRequest {
} }
message ListOrgChangesRequest { message ListOrgChangesRequest {
zitadel.v1.ListQuery query = 1; zitadel.change.v1.ChangeQuery query = 1;
} }
message ListOrgChangesResponse { message ListOrgChangesResponse {
@ -2429,7 +2431,7 @@ message ListGrantedProjectsResponse {
} }
message ListProjectChangesRequest { 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}]; string project_id = 2 [(validate.rules).string = {min_len: 1, max_len: 200}];
} }
@ -2609,7 +2611,7 @@ message ListAppsResponse {
} }
message ListAppChangesRequest { 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 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}]; string app_id = 3 [(validate.rules).string = {min_len: 1, max_len: 200}];
} }