Keepers fc5f42545f
rename graph.Service to Servicer (#1787)
## Description

`graph.Service -> graph.Servicer`,  no other changes.

More compliant with golang naming standards,
and will allow us to eventually migrate the
Service struct out of connector and into graph.

## Type of change

- [x] 🐹 Trivial/Minor

## Issue(s)

* #1725
2022-12-13 17:37:03 +00:00

84 lines
2.1 KiB
Go

package discovery
import (
"context"
msgraphgocore "github.com/microsoftgraph/msgraph-sdk-go-core"
"github.com/microsoftgraph/msgraph-sdk-go/models"
msuser "github.com/microsoftgraph/msgraph-sdk-go/users"
"github.com/pkg/errors"
"github.com/alcionai/corso/src/internal/connector/graph"
"github.com/alcionai/corso/src/internal/connector/support"
)
const (
userSelectID = "id"
userSelectPrincipalName = "userPrincipalName"
userSelectDisplayName = "displayName"
)
func Users(ctx context.Context, gs graph.Servicer, tenantID string) ([]models.Userable, error) {
users := make([]models.Userable, 0)
options := &msuser.UsersRequestBuilderGetRequestConfiguration{
QueryParameters: &msuser.UsersRequestBuilderGetQueryParameters{
Select: []string{userSelectID, userSelectPrincipalName, userSelectDisplayName},
},
}
response, err := gs.Client().Users().Get(ctx, options)
if err != nil {
return nil, errors.Wrapf(
err,
"retrieving resources for tenant %s: %s",
tenantID,
support.ConnectorStackErrorTrace(err),
)
}
iter, err := msgraphgocore.NewPageIterator(response, gs.Adapter(),
models.CreateUserCollectionResponseFromDiscriminatorValue)
if err != nil {
return nil, errors.Wrap(err, support.ConnectorStackErrorTrace(err))
}
var iterErrs error
callbackFunc := func(item interface{}) bool {
u, err := parseUser(item)
if err != nil {
iterErrs = support.WrapAndAppend("discovering users: ", err, iterErrs)
return true
}
users = append(users, u)
return true
}
if err := iter.Iterate(ctx, callbackFunc); err != nil {
return nil, errors.Wrap(err, support.ConnectorStackErrorTrace(err))
}
return users, iterErrs
}
// parseUser extracts information from `models.Userable` we care about
func parseUser(item interface{}) (models.Userable, error) {
m, ok := item.(models.Userable)
if !ok {
return nil, errors.New("iteration retrieved non-User item")
}
if m.GetId() == nil {
return nil, errors.Errorf("no ID for User")
}
if m.GetUserPrincipalName() == nil {
return nil, errors.Errorf("no principal name for User: %s", *m.GetId())
}
return m, nil
}