Skip to content

Commit

Permalink
⚡️ improve microsoft.groups.length
Browse files Browse the repository at this point in the history
Closes #5109

Signed-off-by: Salim Afiune Maya <[email protected]>
  • Loading branch information
afiune committed Feb 3, 2025
1 parent dec5f92 commit 3d8e2ce
Show file tree
Hide file tree
Showing 4 changed files with 151 additions and 17 deletions.
54 changes: 45 additions & 9 deletions providers/ms365/resources/groups.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,18 @@ package resources

import (
"context"

abstractions "github.com/microsoft/kiota-abstractions-go"
"github.com/microsoftgraph/msgraph-sdk-go/groups"
"github.com/microsoftgraph/msgraph-sdk-go/models"
"go.mondoo.com/cnquery/v11/llx"
"go.mondoo.com/cnquery/v11/providers-sdk/v1/plugin"
"go.mondoo.com/cnquery/v11/providers/ms365/connection"
"go.mondoo.com/cnquery/v11/types"
)

func (m *mqlMicrosoftGroup) id() (string, error) {
return m.Id.Data, nil
func (a *mqlMicrosoftGroup) id() (string, error) {
return a.Id.Data, nil
}

func (a *mqlMicrosoftGroup) members() ([]interface{}, error) {
Expand All @@ -35,9 +38,12 @@ func (a *mqlMicrosoftGroup) members() ([]interface{}, error) {
Top: &top,
}
ctx := context.Background()
resp, err := graphClient.Groups().ByGroupId(groupId).Members().Get(ctx, &groups.ItemMembersRequestBuilderGetRequestConfiguration{
QueryParameters: queryParams,
})
resp, err := graphClient.Groups().
ByGroupId(groupId).
Members().
Get(ctx, &groups.ItemMembersRequestBuilderGetRequestConfiguration{
QueryParameters: queryParams,
})
if err != nil {
return nil, transformError(err)
}
Expand All @@ -60,9 +66,10 @@ func (a *mqlMicrosoftGroup) members() ([]interface{}, error) {
continue
}

newUserResource, err := a.MqlRuntime.NewResource(a.MqlRuntime, "microsoft.user", map[string]*llx.RawData{
"id": llx.StringDataPtr(memberId),
})
newUserResource, err := a.MqlRuntime.
NewResource(a.MqlRuntime, "microsoft.user", map[string]*llx.RawData{
"id": llx.StringDataPtr(memberId),
})
if err != nil {
return nil, err
}
Expand All @@ -72,7 +79,11 @@ func (a *mqlMicrosoftGroup) members() ([]interface{}, error) {
return res, nil
}

func (a *mqlMicrosoft) groups() ([]interface{}, error) {
func (a *mqlMicrosoft) groups() (*mqlMicrosoftGroups, error) {
return newMicrosoftGroups(context.Background(), a.MqlRuntime)
}

func (a *mqlMicrosoftGroups) list() ([]interface{}, error) {
conn := a.MqlRuntime.Connection.(*connection.Ms365Connection)
graphClient, err := conn.GraphClient()
if err != nil {
Expand Down Expand Up @@ -117,3 +128,28 @@ func (a *mqlMicrosoft) groups() ([]interface{}, error) {

return res, nil
}

func initMicrosoftGroups(runtime *plugin.Runtime, args map[string]*llx.RawData) (map[string]*llx.RawData, plugin.Resource, error) {
resource, err := newMicrosoftGroups(context.Background(), runtime)
return nil, resource, err
}

func newMicrosoftGroups(ctx context.Context, runtime *plugin.Runtime) (*mqlMicrosoftGroups, error) {
conn := runtime.Connection.(*connection.Ms365Connection)
graphClient, err := conn.GraphClient()
if err != nil {
return nil, err
}

opts := &groups.CountRequestBuilderGetRequestConfiguration{Headers: abstractions.NewRequestHeaders()}
opts.Headers.Add("ConsistencyLevel", "eventual")
length, err := graphClient.Groups().Count().Get(ctx, opts)
if err != nil {
return nil, err
}
mqlResource, err := CreateResource(runtime, "microsoft.groups",
map[string]*llx.RawData{
"length": llx.IntDataPtr(length),
})
return mqlResource.(*mqlMicrosoftGroups), err
}
11 changes: 9 additions & 2 deletions providers/ms365/resources/ms365.lr
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ microsoft {
// List of users
users() []microsoft.user
// List of groups
groups() []microsoft.group
groups() microsoft.groups
// List of domains
domains() []microsoft.domain
// List of applications
Expand All @@ -30,6 +30,13 @@ microsoft {
tenantDomainName() string
}

// Microsoft groups
microsoft.groups {
[]microsoft.group
// Total number of Microsoft groups
length int
}

// Microsoft Entra tenant
microsoft.tenant @defaults("name") {
// Organization ID
Expand Down Expand Up @@ -830,4 +837,4 @@ private ms365.teams.teamsMeetingPolicyConfig {
private ms365.teams.teamsMessagingPolicyConfig {
// Whether users can report security concerns
allowSecurityEndUserReporting bool
}
}
95 changes: 89 additions & 6 deletions providers/ms365/resources/ms365.lr.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions providers/ms365/resources/ms365.lr.manifest.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -220,6 +220,14 @@ resources:
min_mondoo_version: 9.0.0
is_private: true
min_mondoo_version: 5.15.0
microsoft.groups:
fields:
length: {}
list: {}
min_mondoo_version: 9.0.0
microsoft.groups.length:
fields: {}
min_mondoo_version: 9.0.0
microsoft.keyCredential:
fields:
description: {}
Expand Down

0 comments on commit 3d8e2ce

Please sign in to comment.