From b216e11349bfc846ef662650de248e0cbdd31e21 Mon Sep 17 00:00:00 2001 From: nyagamunene Date: Thu, 1 Aug 2024 15:08:42 +0300 Subject: [PATCH 1/3] Changed implementation of search in listmembers Signed-off-by: nyagamunene --- users/service.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/users/service.go b/users/service.go index dfc1ebeb8c..0a168f41ba 100644 --- a/users/service.go +++ b/users/service.go @@ -5,6 +5,7 @@ package users import ( "context" + "strings" "time" "github.com/absmach/magistrala" @@ -523,6 +524,11 @@ func (svc service) ListMembers(ctx context.Context, token, objectKind, objectID } pm.IDs = userIDs + var nameQuery string + if pm.Name != "" && len(pm.IDs) != 0 { + nameQuery = pm.Name + pm.Name = "" + } cp, err := svc.clients.RetrieveAll(ctx, pm) if err != nil { return mgclients.MembersPage{}, errors.Wrap(svcerr.ErrViewEntity, err) @@ -538,6 +544,16 @@ func (svc service) ListMembers(ctx context.Context, token, objectKind, objectID } } + if nameQuery != "" { + filteredClients := make([]mgclients.Client, 0, len(cp.Clients)) + for _, c := range cp.Clients { + if strings.Contains(c.Name, nameQuery) { + filteredClients = append(filteredClients, c) + } + } + cp.Clients = filteredClients + } + if pm.ListPerms && len(cp.Clients) > 0 { g, ctx := errgroup.WithContext(ctx) From edae10cc1ed618e81e7e651710f965de4054b7b6 Mon Sep 17 00:00:00 2001 From: nyagamunene Date: Thu, 1 Aug 2024 15:18:03 +0300 Subject: [PATCH 2/3] Add tests cases for ListMembers Signed-off-by: nyagamunene --- users/service_test.go | 44 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/users/service_test.go b/users/service_test.go index ae9c6febe2..ae604c444e 100644 --- a/users/service_test.go +++ b/users/service_test.go @@ -2201,6 +2201,50 @@ func TestListMembers(t *testing.T) { }, err: nil, }, + { + desc: "list members with policies successsfully of the groups kind and name query", + token: validToken, + groupID: validID, + objectKind: authsvc.GroupsKind, + objectID: validID, + page: mgclients.Page{Offset: 0, Limit: 100, Permission: "read", Name: client.Name}, + identifyResponse: &magistrala.IdentityRes{UserId: client.ID}, + authorizeReq: &magistrala.AuthorizeReq{ + SubjectType: authsvc.UserType, + SubjectKind: authsvc.TokenKind, + Subject: validToken, + Permission: "read", + ObjectType: authsvc.GroupType, + Object: validID, + }, + listAllSubjectsReq: &magistrala.ListSubjectsReq{ + SubjectType: authsvc.UserType, + Permission: "read", + Object: validID, + ObjectType: authsvc.GroupType, + }, + authorizeResponse: &magistrala.AuthorizeRes{Authorized: true}, + listAllSubjectsResponse: &magistrala.ListSubjectsRes{ + Policies: []string{validPolicy}, + }, + retrieveAllResponse: mgclients.ClientsPage{ + Page: mgclients.Page{ + Total: 1, + Offset: 0, + Limit: 100, + }, + Clients: []mgclients.Client{client}, + }, + response: mgclients.MembersPage{ + Page: mgclients.Page{ + Total: 1, + Offset: 0, + Limit: 100, + }, + Members: []mgclients.Client{basicClient}, + }, + err: nil, + }, { desc: "list members with invalid token", token: inValidToken, From 1d2d84c2deeb9ca7474f9793d0cfed7765d69b30 Mon Sep 17 00:00:00 2001 From: nyagamunene Date: Thu, 1 Aug 2024 16:12:26 +0300 Subject: [PATCH 3/3] Fix total clients Signed-off-by: nyagamunene --- users/service.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/users/service.go b/users/service.go index 0a168f41ba..441b206786 100644 --- a/users/service.go +++ b/users/service.go @@ -547,11 +547,12 @@ func (svc service) ListMembers(ctx context.Context, token, objectKind, objectID if nameQuery != "" { filteredClients := make([]mgclients.Client, 0, len(cp.Clients)) for _, c := range cp.Clients { - if strings.Contains(c.Name, nameQuery) { + if strings.Contains(strings.ToLower(c.Name), strings.ToLower(nameQuery)) { filteredClients = append(filteredClients, c) } } cp.Clients = filteredClients + cp.Total = uint64(len(filteredClients)) } if pm.ListPerms && len(cp.Clients) > 0 {