Beispiel #1
0
        private static async Task <Group> CreateGroupAsync(string accessToken, HttpClient httpClient, string displayName, string description, string classification, string mailNickname, string owner, GroupVisibility visibility, TeamsTemplateType templateType = TeamsTemplateType.None, TeamResourceBehaviorOptions?[] resourceBehaviorOptions = null)
        {
            Group group = new Group();
            // get the owner if no owner was specified
            var ownerId = string.Empty;

            if (string.IsNullOrEmpty(owner))
            {
                var user = await GraphHelper.GetAsync <User>(httpClient, "v1.0/me?$select=Id", accessToken);

                ownerId = user.Id;
            }
            else
            {
                var user = await GraphHelper.GetAsync <User>(httpClient, $"v1.0/users/{owner}?$select=Id", accessToken);

                if (user != null)
                {
                    ownerId = user.Id;
                }
                else
                {
                    // find the user in the organization
                    var collection = await GraphHelper.GetResultCollectionAsync <User>(httpClient, $"v1.0/users?$filter=mail eq '{owner}'&$select=Id", accessToken);

                    if (collection != null)
                    {
                        if (collection.Any())
                        {
                            ownerId = collection.First().Id;
                        }
                    }
                }
            }

            group.DisplayName    = displayName;
            group.Description    = description;
            group.Classification = classification;
            group.MailEnabled    = true;
            group.MailNickname   = mailNickname ?? await CreateAliasAsync(httpClient, accessToken);

            group.GroupTypes = new List <string>()
            {
                "Unified"
            };
            group.SecurityEnabled = false;
            group.Owners          = new List <string>()
            {
                $"https://{PnPConnection.Current.GraphEndPoint}/v1.0/users/{ownerId}"
            };
            group.Members = new List <string>()
            {
                $"https://{PnPConnection.Current.GraphEndPoint}/v1.0/users/{ownerId}"
            };
            group.Visibility = visibility == GroupVisibility.NotSpecified ? GroupVisibility.Private : visibility;
            if (resourceBehaviorOptions != null && resourceBehaviorOptions.Length > 0)
            {
                var teamResourceBehaviorOptionsValue = new List <string>();
                for (int i = 0; i < resourceBehaviorOptions.Length; i++)
                {
                    teamResourceBehaviorOptionsValue.Add(resourceBehaviorOptions[i].ToString());
                }
                group.ResourceBehaviorOptions = teamResourceBehaviorOptionsValue;
            }

            switch (templateType)
            {
            case TeamsTemplateType.EDU_Class:
            {
                group.Visibility      = GroupVisibility.HiddenMembership;
                group.CreationOptions = new List <string> {
                    "ExchangeProvisioningFlags:461", "classAssignments"
                };
                group.EducationObjectType = "Section";
                break;
            }

            case TeamsTemplateType.EDU_PLC:
            {
                group.CreationOptions = new List <string> {
                    "PLC"
                };
                break;
            }

            default:
            {
                group.CreationOptions = new List <string> {
                    "ExchangeProvisioningFlags:3552"
                };
                break;
            }
            }
            try
            {
                return(await GraphHelper.PostAsync <Group>(httpClient, "v1.0/groups", group, accessToken));
            }
            catch (GraphException ex)
            {
                if (ex.Error.Message.Contains("extension_fe2174665583431c953114ff7268b7b3_Education_ObjectType"))
                {
                    throw new PSInvalidOperationException("Invalid EDU license type");
                }
                else
                {
                    throw;
                }
            }
        }
Beispiel #2
0
        public static async Task <Team> NewTeamAsync(string accessToken, HttpClient httpClient, string groupId, string displayName, string description, string classification, string mailNickname, string owner, GroupVisibility visibility, TeamCreationInformation teamCI, TeamsTemplateType templateType = TeamsTemplateType.None, TeamResourceBehaviorOptions?[] resourceBehaviorOptions = null)
        {
            Group group      = null;
            Team  returnTeam = null;

            // Create group
            if (string.IsNullOrEmpty(groupId))
            {
                group = await CreateGroupAsync(accessToken, httpClient, displayName, description, classification, mailNickname, owner, visibility, templateType, resourceBehaviorOptions);

                bool wait       = true;
                int  iterations = 0;
                while (wait)
                {
                    iterations++;

                    try
                    {
                        var createdGroup = await GraphHelper.GetAsync <Group>(httpClient, $"v1.0/groups/{group.Id}", accessToken);

                        if (!string.IsNullOrEmpty(createdGroup.DisplayName))
                        {
                            wait = false;
                        }
                    }
                    catch (Exception)
                    {
                        // In case of exception wait for 5 secs
                        await Task.Delay(TimeSpan.FromSeconds(5));
                    }

                    // Don't wait more than 1 minute
                    if (iterations > 12)
                    {
                        wait = false;
                    }
                }
            }
            else
            {
                group = await GraphHelper.GetAsync <Group>(httpClient, $"v1.0/groups/{groupId}", accessToken);

                if (group == null)
                {
                    throw new PSArgumentException($"Cannot find group with id {groupId}");
                }
                teamCI.Visibility  = group.Visibility;
                teamCI.Description = group.Description;
            }
            if (group != null)
            {
                Team team      = teamCI.ToTeam(group.Visibility);
                var  retry     = true;
                var  iteration = 0;
                while (retry)
                {
                    try
                    {
                        var teamSettings = await GraphHelper.PutAsync(httpClient, $"v1.0/groups/{group.Id}/team", team, accessToken);

                        if (teamSettings != null)
                        {
                            returnTeam = await TeamsUtility.GetTeamAsync(accessToken, httpClient, group.Id);
                        }
                        retry = false;
                    }

                    catch (Exception)
                    {
                        await Task.Delay(5000);

                        iteration++;
                    }

                    if (iteration > 10) // don't try more than 10 times
                    {
                        retry = false;
                    }
                }
            }
            return(returnTeam);
        }