Skip to content

Commit 326795b

Browse files
committed
Updating principal fetching to incorporate metadata from principal subtypes
1 parent 5415dcf commit 326795b

File tree

1 file changed

+24
-11
lines changed

1 file changed

+24
-11
lines changed

lib/srv/discovery/fetchers/azure-sync/principals.go

+24-11
Original file line numberDiff line numberDiff line change
@@ -29,30 +29,42 @@ import (
2929
"github.com/gravitational/teleport/lib/msgraph"
3030
)
3131

32+
type dirObjMetadata struct {
33+
objectType string
34+
}
35+
36+
type queryResult struct {
37+
metadata dirObjMetadata
38+
dirObj msgraph.DirectoryObject
39+
}
40+
3241
// fetchPrincipals fetches the Azure principals (users, groups, and service principals) using the Graph API
3342
func fetchPrincipals(ctx context.Context, subscriptionID string, cli *msgraph.Client) ([]*accessgraphv1alpha.AzurePrincipal, error) { //nolint: unused // invoked in a dependent PR
3443
var params = &url.Values{
3544
"$expand": []string{"memberOf"},
3645
}
3746

3847
// Fetch the users, groups, and service principals as directory objects
39-
var dirObjs []msgraph.DirectoryObject
48+
var queryResults []queryResult
4049
err := cli.IterateUsers(ctx, params, func(user *msgraph.User) bool {
41-
dirObjs = append(dirObjs, user.DirectoryObject)
50+
res := queryResult{metadata: dirObjMetadata{objectType: "user"}, dirObj: user.DirectoryObject}
51+
queryResults = append(queryResults, res)
4252
return true
4353
})
4454
if err != nil {
4555
return nil, trace.Wrap(err)
4656
}
4757
err = cli.IterateGroups(ctx, params, func(group *msgraph.Group) bool {
48-
dirObjs = append(dirObjs, group.DirectoryObject)
58+
res := queryResult{metadata: dirObjMetadata{objectType: "group"}, dirObj: group.DirectoryObject}
59+
queryResults = append(queryResults, res)
4960
return true
5061
})
5162
if err != nil {
5263
return nil, trace.Wrap(err)
5364
}
5465
err = cli.IterateServicePrincipals(ctx, params, func(servicePrincipal *msgraph.ServicePrincipal) bool {
55-
dirObjs = append(dirObjs, servicePrincipal.DirectoryObject)
66+
res := queryResult{metadata: dirObjMetadata{objectType: "servicePrincipal"}, dirObj: servicePrincipal.DirectoryObject}
67+
queryResults = append(queryResults, res)
5668
return true
5769
})
5870
if err != nil {
@@ -62,22 +74,23 @@ func fetchPrincipals(ctx context.Context, subscriptionID string, cli *msgraph.Cl
6274
// Return the users, groups, and service principals as protobuf messages
6375
var fetchErrs []error
6476
var pbPrincipals []*accessgraphv1alpha.AzurePrincipal
65-
for _, dirObj := range dirObjs {
66-
if dirObj.ID == nil || dirObj.DisplayName == nil {
67-
fetchErrs = append(fetchErrs, trace.BadParameter("nil values on msgraph directory object: %v", dirObj))
77+
for _, res := range queryResults {
78+
if res.dirObj.ID == nil || res.dirObj.DisplayName == nil {
79+
fetchErrs = append(fetchErrs,
80+
trace.BadParameter("nil values on msgraph directory object: %v", res.dirObj))
6881
continue
6982
}
7083
var memberOf []string
71-
for _, member := range dirObj.MemberOf {
84+
for _, member := range res.dirObj.MemberOf {
7285
memberOf = append(memberOf, member.ID)
7386
}
7487
pbPrincipals = append(pbPrincipals, &accessgraphv1alpha.AzurePrincipal{
75-
Id: *dirObj.ID,
88+
Id: *res.dirObj.ID,
7689
SubscriptionId: subscriptionID,
7790
LastSyncTime: timestamppb.Now(),
78-
DisplayName: *dirObj.DisplayName,
91+
DisplayName: *res.dirObj.DisplayName,
7992
MemberOf: memberOf,
80-
ObjectType: "user",
93+
ObjectType: res.metadata.objectType,
8194
})
8295
}
8396
return pbPrincipals, trace.NewAggregate(fetchErrs...)

0 commit comments

Comments
 (0)