Skip to content

Commit

Permalink
Merge pull request #262 from agileknight/cap-guests-or-external-users
Browse files Browse the repository at this point in the history
Implement support for CAP guestsOrExternalUsers
  • Loading branch information
manicminer authored Oct 26, 2023
2 parents 5e507f0 + 0bfce03 commit 4bf4f01
Show file tree
Hide file tree
Showing 2 changed files with 82 additions and 6 deletions.
67 changes: 61 additions & 6 deletions msgraph/models.go
Original file line number Diff line number Diff line change
Expand Up @@ -693,12 +693,67 @@ type ConditionalAccessSessionControls struct {
}

type ConditionalAccessUsers struct {
IncludeUsers *[]string `json:"includeUsers,omitempty"`
ExcludeUsers *[]string `json:"excludeUsers,omitempty"`
IncludeGroups *[]string `json:"includeGroups,omitempty"`
ExcludeGroups *[]string `json:"excludeGroups,omitempty"`
IncludeRoles *[]string `json:"includeRoles,omitempty"`
ExcludeRoles *[]string `json:"excludeRoles,omitempty"`
IncludeUsers *[]string `json:"includeUsers,omitempty"`
ExcludeUsers *[]string `json:"excludeUsers,omitempty"`
IncludeGroups *[]string `json:"includeGroups,omitempty"`
ExcludeGroups *[]string `json:"excludeGroups,omitempty"`
IncludeRoles *[]string `json:"includeRoles,omitempty"`
ExcludeRoles *[]string `json:"excludeRoles,omitempty"`
IncludeGuestsOrExternalUsers *ConditionalAccessGuestsOrExternalUsers `json:"includeGuestsOrExternalUsers"`
ExcludeGuestsOrExternalUsers *ConditionalAccessGuestsOrExternalUsers `json:"excludeGuestsOrExternalUsers"`
}

type ConditionalAccessGuestsOrExternalUsers struct {
GuestOrExternalUserTypes *[]ConditionalAccessGuestOrExternalUserType `json:"-"` // see ConditionalAccessGuestsOrExternalUsers.MarshalJSON / ConditionalAccessGuestsOrExternalUsers.UnmarshalJSON
ExternalTenants *ConditionalAccessExternalTenants `json:"externalTenants,omitempty"`
}

type ConditionalAccessExternalTenants struct {
MembershipKind *ConditionalAccessExternalTenantsMembershipKind `json:"membershipKind,omitempty"`
Members *[]string `json:"members,omitempty"`

}

func (c ConditionalAccessGuestsOrExternalUsers) MarshalJSON() ([]byte, error) {
var val *StringNullWhenEmpty
if c.GuestOrExternalUserTypes != nil {
theTypes := StringNullWhenEmpty(strings.Join(*c.GuestOrExternalUserTypes, ","))
val = &theTypes
}

// Local type needed to avoid recursive MarshalJSON calls
type conditionalAccessGuestsOrExternalUsers ConditionalAccessGuestsOrExternalUsers
guestOrExternalUsers := struct {
GuestOrExternalUserTypes *StringNullWhenEmpty `json:"guestOrExternalUserTypes,omitempty"`
*conditionalAccessGuestsOrExternalUsers
}{
GuestOrExternalUserTypes: val,
conditionalAccessGuestsOrExternalUsers: (*conditionalAccessGuestsOrExternalUsers)(&c),
}
buf, err := json.Marshal(&guestOrExternalUsers)
return buf, err
}

func (c *ConditionalAccessGuestsOrExternalUsers) UnmarshalJSON(data []byte) error {
// Local type needed to avoid recursive UnmarshalJSON calls
type conditionalAccessGuestsOrExternalUsers ConditionalAccessGuestsOrExternalUsers
guestOrExternalUsers := struct {
GuestOrExternalUserTypes *string `json:"guestOrExternalUserTypes"`
*conditionalAccessGuestsOrExternalUsers
}{
conditionalAccessGuestsOrExternalUsers: (*conditionalAccessGuestsOrExternalUsers)(c),
}
if err := json.Unmarshal(data, &guestOrExternalUsers); err != nil {
return err
}
if guestOrExternalUsers.GuestOrExternalUserTypes != nil {
var types []string
for _, s := range strings.Split(*guestOrExternalUsers.GuestOrExternalUserTypes, ",") {
types = append(types, strings.TrimSpace(s))
}
c.GuestOrExternalUserTypes = &types
}
return nil
}

type ConnectionInfo struct {
Expand Down
21 changes: 21 additions & 0 deletions msgraph/valuetypes.go
Original file line number Diff line number Diff line change
Expand Up @@ -404,6 +404,27 @@ const (
ConditionalAccessRiskLevelUnknownFutureValue ConditionalAccessRiskLevel = "unknownFutureValue"
)

type ConditionalAccessGuestOrExternalUserType = string

const (
ConditionalAccessGuestOrExternalUserTypeNone ConditionalAccessGuestOrExternalUserType = "none"
ConditionalAccessGuestOrExternalUserTypeInternalGuest ConditionalAccessGuestOrExternalUserType = "internalGuest"
ConditionalAccessGuestOrExternalUserTypeB2bCollaborationGuest ConditionalAccessGuestOrExternalUserType = "b2bCollaborationGuest"
ConditionalAccessGuestOrExternalUserTypeB2bCollaborationMember ConditionalAccessGuestOrExternalUserType = "b2bCollaborationMember"
ConditionalAccessGuestOrExternalUserTypeB2bDirectConnectUser ConditionalAccessGuestOrExternalUserType = "b2bDirectConnectUser"
ConditionalAccessGuestOrExternalUserTypeOtherExternalUser ConditionalAccessGuestOrExternalUserType = "otherExternalUser"
ConditionalAccessGuestOrExternalUserTypeServiceProvider ConditionalAccessGuestOrExternalUserType = "serviceProvider"
ConditionalAccessGuestOrExternalUserTypeUnknownFutureValue ConditionalAccessGuestOrExternalUserType = "unknownFutureValue"
)

type ConditionalAccessExternalTenantsMembershipKind = string

const (
ConditionalAccessExternalTenantsMembershipKindAll ConditionalAccessExternalTenantsMembershipKind = "all"
ConditionalAccessExternalTenantsMembershipKindEnumerated ConditionalAccessExternalTenantsMembershipKind = "enumerated"
ConditionalAccessExternalTenantsMembershipKindUnknownFutureValue ConditionalAccessExternalTenantsMembershipKind = "unknownFutureValue"
)

type ConnectedOrganizationState = string

const (
Expand Down

0 comments on commit 4bf4f01

Please sign in to comment.