From 17153b694ed8e2134cfd1f4d0c29e93e465611d3 Mon Sep 17 00:00:00 2001 From: Miguel Cabrerizo <30386061+doncicuto@users.noreply.github.com> Date: Mon, 8 Jan 2024 18:45:54 +0100 Subject: [PATCH] feat: search users by list of emails (users/_search) (#6983) Co-authored-by: Stefan Benz <46600784+stebenz@users.noreply.github.com> --- internal/api/grpc/user/query.go | 7 +++++++ internal/query/user.go | 3 +++ proto/zitadel/user.proto | 10 ++++++++++ 3 files changed, 20 insertions(+) diff --git a/internal/api/grpc/user/query.go b/internal/api/grpc/user/query.go index cd01e545a4..7cd3d3799c 100644 --- a/internal/api/grpc/user/query.go +++ b/internal/api/grpc/user/query.go @@ -46,6 +46,8 @@ func UserQueryToQuery(query *user_pb.SearchQuery, level uint8) (query.SearchQuer return ResourceOwnerQueryToQuery(q.ResourceOwner) case *user_pb.SearchQuery_InUserIdsQuery: return InUserIdsQueryToQuery(q.InUserIdsQuery) + case *user_pb.SearchQuery_InUserEmailsQuery: + return InUserEmailsQueryToQuery(q.InUserEmailsQuery) case *user_pb.SearchQuery_OrQuery: return OrQueryToQuery(q.OrQuery, level) case *user_pb.SearchQuery_AndQuery: @@ -100,6 +102,11 @@ func ResourceOwnerQueryToQuery(q *user_pb.ResourceOwnerQuery) (query.SearchQuery func InUserIdsQueryToQuery(q *user_pb.InUserIDQuery) (query.SearchQuery, error) { return query.NewUserInUserIdsSearchQuery(q.UserIds) } + +func InUserEmailsQueryToQuery(q *user_pb.InUserEmailsQuery) (query.SearchQuery, error) { + return query.NewUserInUserEmailsSearchQuery(q.UserEmails) +} + func OrQueryToQuery(q *user_pb.OrQuery, level uint8) (query.SearchQuery, error) { mappedQueries, err := UserQueriesToQuery(q.Queries, level+1) if err != nil { diff --git a/internal/query/user.go b/internal/query/user.go index 371d5c0002..350189bd33 100644 --- a/internal/query/user.go +++ b/internal/query/user.go @@ -656,6 +656,9 @@ func NewUserNotSearchQuery(value SearchQuery) (SearchQuery, error) { func NewUserInUserIdsSearchQuery(values []string) (SearchQuery, error) { return NewInTextQuery(UserIDCol, values) } +func NewUserInUserEmailsSearchQuery(values []string) (SearchQuery, error) { + return NewInTextQuery(HumanEmailCol, values) +} func NewUserResourceOwnerSearchQuery(value string, comparison TextComparison) (SearchQuery, error) { return NewTextQuery(UserResourceOwnerCol, value, comparison) diff --git a/proto/zitadel/user.proto b/proto/zitadel/user.proto index e40f10d0f3..40d89cb2f0 100644 --- a/proto/zitadel/user.proto +++ b/proto/zitadel/user.proto @@ -188,6 +188,7 @@ message SearchQuery { OrQuery or_query = 11; AndQuery and_query = 12; NotQuery not_query = 13; + InUserEmailsQuery in_user_emails_query = 14; } } @@ -223,6 +224,15 @@ message InUserIDQuery { ]; } +message InUserEmailsQuery { + repeated string user_emails = 1 [ + (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { + description: "the emails of the users to include" + example: "[\"test@example.com\",\"test@example.org\"]"; + } + ]; +} + message UserNameQuery { string user_name = 1 [ (validate.rules).string = {max_len: 200},