many incidents
This commit is contained in:
parent
3656e04676
commit
b093334dce
@ -186,15 +186,15 @@ func (suite *SharePointIntegrationSuite) SetupSuite() {
|
||||
si := NewSuiteInfoImpl(suite.T(), ctx, tconfig.M365SiteID(suite.T()), path.SharePointService)
|
||||
|
||||
// users needed for permissions
|
||||
user, err := si.controller.AC.Users().GetByID(ctx, si.user)
|
||||
user, err := si.controller.AC.Users().IsLicenseReconciliationNeeded(ctx, si.user)
|
||||
require.NoError(t, err, "fetching user", si.user, clues.ToCore(err))
|
||||
si.userID = ptr.Val(user.GetId())
|
||||
|
||||
secondaryUser, err := si.controller.AC.Users().GetByID(ctx, si.secondaryUser)
|
||||
secondaryUser, err := si.controller.AC.Users().IsLicenseReconciliationNeeded(ctx, si.secondaryUser)
|
||||
require.NoError(t, err, "fetching user", si.secondaryUser, clues.ToCore(err))
|
||||
si.secondaryUserID = ptr.Val(secondaryUser.GetId())
|
||||
|
||||
tertiaryUser, err := si.controller.AC.Users().GetByID(ctx, si.tertiaryUser)
|
||||
tertiaryUser, err := si.controller.AC.Users().IsLicenseReconciliationNeeded(ctx, si.tertiaryUser)
|
||||
require.NoError(t, err, "fetching user", si.tertiaryUser, clues.ToCore(err))
|
||||
si.tertiaryUserID = ptr.Val(tertiaryUser.GetId())
|
||||
|
||||
@ -255,15 +255,15 @@ func (suite *OneDriveIntegrationSuite) SetupSuite() {
|
||||
|
||||
si := NewSuiteInfoImpl(t, ctx, tconfig.M365UserID(t), path.OneDriveService)
|
||||
|
||||
user, err := si.controller.AC.Users().GetByID(ctx, si.user)
|
||||
user, err := si.controller.AC.Users().IsLicenseReconciliationNeeded(ctx, si.user)
|
||||
require.NoError(t, err, "fetching user", si.user, clues.ToCore(err))
|
||||
si.userID = ptr.Val(user.GetId())
|
||||
|
||||
secondaryUser, err := si.controller.AC.Users().GetByID(ctx, si.secondaryUser)
|
||||
secondaryUser, err := si.controller.AC.Users().IsLicenseReconciliationNeeded(ctx, si.secondaryUser)
|
||||
require.NoError(t, err, "fetching user", si.secondaryUser, clues.ToCore(err))
|
||||
si.secondaryUserID = ptr.Val(secondaryUser.GetId())
|
||||
|
||||
tertiaryUser, err := si.controller.AC.Users().GetByID(ctx, si.tertiaryUser)
|
||||
tertiaryUser, err := si.controller.AC.Users().IsLicenseReconciliationNeeded(ctx, si.tertiaryUser)
|
||||
require.NoError(t, err, "fetching user", si.tertiaryUser, clues.ToCore(err))
|
||||
si.tertiaryUserID = ptr.Val(tertiaryUser.GetId())
|
||||
|
||||
@ -319,15 +319,15 @@ func (suite *OneDriveNightlySuite) SetupSuite() {
|
||||
|
||||
si := NewSuiteInfoImpl(t, ctx, tconfig.M365UserID(t), path.OneDriveService)
|
||||
|
||||
user, err := si.controller.AC.Users().GetByID(ctx, si.user)
|
||||
user, err := si.controller.AC.Users().IsLicenseReconciliationNeeded(ctx, si.user)
|
||||
require.NoError(t, err, "fetching user", si.user, clues.ToCore(err))
|
||||
si.userID = ptr.Val(user.GetId())
|
||||
|
||||
secondaryUser, err := si.controller.AC.Users().GetByID(ctx, si.secondaryUser)
|
||||
secondaryUser, err := si.controller.AC.Users().IsLicenseReconciliationNeeded(ctx, si.secondaryUser)
|
||||
require.NoError(t, err, "fetching user", si.secondaryUser, clues.ToCore(err))
|
||||
si.secondaryUserID = ptr.Val(secondaryUser.GetId())
|
||||
|
||||
tertiaryUser, err := si.controller.AC.Users().GetByID(ctx, si.tertiaryUser)
|
||||
tertiaryUser, err := si.controller.AC.Users().IsLicenseReconciliationNeeded(ctx, si.tertiaryUser)
|
||||
require.NoError(t, err, "fetching user", si.tertiaryUser, clues.ToCore(err))
|
||||
si.tertiaryUserID = ptr.Val(tertiaryUser.GetId())
|
||||
|
||||
|
||||
@ -832,7 +832,7 @@ func (suite *OneDriveBackupIntgSuite) TestBackup_Run_oneDriveOwnerMigration() {
|
||||
control.DefaultOptions())
|
||||
require.NoError(t, err, clues.ToCore(err))
|
||||
|
||||
userable, err := ctrl.AC.Users().GetByID(ctx, suite.its.user.ID)
|
||||
userable, err := ctrl.AC.Users().IsLicenseReconciliationNeeded(ctx, suite.its.user.ID)
|
||||
require.NoError(t, err, clues.ToCore(err))
|
||||
|
||||
uid := ptr.Val(userable.GetId())
|
||||
|
||||
@ -112,15 +112,42 @@ func (c Users) GetAll(
|
||||
return us, el.Failure()
|
||||
}
|
||||
|
||||
// GetByID looks up the user matching the given identifier. The identifier can be either a
|
||||
// IsLicenseReconciliationNeeded looks up the user matching the given identifier. The identifier can be either a
|
||||
// canonical user id or a princpalName.
|
||||
func (c Users) GetByID(ctx context.Context, identifier string) (models.Userable, error) {
|
||||
func (c Users) IsLicenseReconciliationNeeded(ctx context.Context, identifier string) (models.Userable, error) {
|
||||
var (
|
||||
resp models.Userable
|
||||
err error
|
||||
)
|
||||
|
||||
resp, err = c.Stable.Client().Users().ByUserId(identifier).Get(ctx, nil)
|
||||
options := &users.UserItemRequestBuilderGetRequestConfiguration{
|
||||
QueryParameters: &users.UserItemRequestBuilderGetQueryParameters{},
|
||||
}
|
||||
|
||||
options.QueryParameters.Select = []string{"isLicenseReconciliationNeeded"}
|
||||
|
||||
resp, err = c.Stable.Client().Users().ByUserId(identifier).Get(ctx, options)
|
||||
|
||||
if err != nil {
|
||||
return nil, graph.Wrap(ctx, err, "getting user")
|
||||
}
|
||||
|
||||
return resp, err
|
||||
}
|
||||
|
||||
func (c Users) AssignedPlans(ctx context.Context, identifier string) (models.Userable, error) {
|
||||
var (
|
||||
resp models.Userable
|
||||
err error
|
||||
)
|
||||
|
||||
options := &users.UserItemRequestBuilderGetRequestConfiguration{
|
||||
QueryParameters: &users.UserItemRequestBuilderGetQueryParameters{},
|
||||
}
|
||||
|
||||
options.QueryParameters.Select = []string{"assignedPlans"}
|
||||
|
||||
resp, err = c.Stable.Client().Users().ByUserId(identifier).Get(ctx, options)
|
||||
|
||||
if err != nil {
|
||||
return nil, graph.Wrap(ctx, err, "getting user")
|
||||
@ -136,7 +163,7 @@ func (c Users) GetIDAndName(
|
||||
userID string,
|
||||
_ CallConfig, // not currently supported
|
||||
) (string, string, error) {
|
||||
u, err := c.GetByID(ctx, userID)
|
||||
u, err := c.IsLicenseReconciliationNeeded(ctx, userID)
|
||||
if err != nil {
|
||||
return "", "", err
|
||||
}
|
||||
|
||||
@ -7,6 +7,7 @@ import (
|
||||
"github.com/microsoftgraph/msgraph-sdk-go/models"
|
||||
|
||||
"github.com/alcionai/corso/src/internal/common/ptr"
|
||||
"github.com/alcionai/corso/src/internal/common/tform"
|
||||
"github.com/alcionai/corso/src/internal/m365/service/exchange"
|
||||
"github.com/alcionai/corso/src/internal/m365/service/onedrive"
|
||||
"github.com/alcionai/corso/src/pkg/account"
|
||||
@ -104,13 +105,52 @@ func usersNoInfo(ctx context.Context, acct account.Account, errs *fault.Bus) ([]
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
func UserIsLicenseReconciliationNeeded(ctx context.Context, acct account.Account, userID string) (bool, error) {
|
||||
ac, err := makeAC(ctx, acct, path.UnknownService)
|
||||
if err != nil {
|
||||
return false, clues.Stack(err).WithClues(ctx)
|
||||
}
|
||||
|
||||
us, err := ac.Users().IsLicenseReconciliationNeeded(ctx, userID)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
if _, ok := us.GetAdditionalData()["isLicenseReconciliationNeeded"]; ok {
|
||||
licenseReconciliationStatus, err := tform.AnyValueToT[*bool]("isLicenseReconciliationNeeded", us.GetAdditionalData())
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
return *licenseReconciliationStatus, nil
|
||||
}
|
||||
|
||||
return false, clues.New("user missing license information")
|
||||
}
|
||||
|
||||
func UserAssignedPlansCount(ctx context.Context, acct account.Account, userID string) (int, error) {
|
||||
ac, err := makeAC(ctx, acct, path.UnknownService)
|
||||
if err != nil {
|
||||
return 0, clues.Stack(err).WithClues(ctx)
|
||||
}
|
||||
|
||||
us, err := ac.Users().AssignedPlans(ctx, userID)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
if us.GetAssignedPlans() != nil {
|
||||
return len(us.GetAssignedPlans()), nil
|
||||
}
|
||||
|
||||
return 0, clues.New("user missing assigned plans")
|
||||
}
|
||||
|
||||
// parseUser extracts information from `models.Userable` we care about
|
||||
func parseUser(item models.Userable) (*UserNoInfo, error) {
|
||||
if item.GetUserPrincipalName() == nil {
|
||||
return nil, clues.New("user missing principal name").
|
||||
With("user_id", ptr.Val(item.GetId()))
|
||||
}
|
||||
|
||||
u := &UserNoInfo{
|
||||
PrincipalName: ptr.Val(item.GetUserPrincipalName()),
|
||||
ID: ptr.Val(item.GetId()),
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
package m365
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
"github.com/alcionai/clues"
|
||||
@ -202,6 +203,31 @@ func (suite *userIntegrationSuite) TestUserGetMailboxInfo() {
|
||||
}
|
||||
}
|
||||
|
||||
func (suite *userIntegrationSuite) TestUser_GetByID() {
|
||||
t := suite.T()
|
||||
|
||||
ctx, flush := tester.NewContext(t)
|
||||
defer flush()
|
||||
|
||||
acct := tconfig.NewM365Account(t)
|
||||
|
||||
users, err := UsersCompatNoInfo(ctx, acct)
|
||||
assert.NoError(t, err, clues.ToCore(err))
|
||||
assert.NotEmpty(t, users)
|
||||
|
||||
for _, s := range users {
|
||||
suite.Run("user_"+s.ID, func() {
|
||||
t := suite.T()
|
||||
reconciliationNeeded, err := UserIsLicenseReconciliationNeeded(ctx, acct, s.ID)
|
||||
assert.NoError(t, err, clues.ToCore(err))
|
||||
plans, err := UserAssignedPlansCount(ctx, acct, s.ID)
|
||||
assert.NoError(t, err, clues.ToCore(err))
|
||||
fmt.Printf("user: %v \n", reconciliationNeeded)
|
||||
fmt.Printf("user: %v \n", plans)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func (suite *userIntegrationSuite) TestUsers_InvalidCredentials() {
|
||||
table := []struct {
|
||||
name string
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user