Exemple #1
0
 internal void SetVisibility(GroupVisibility visibility, List<Player> viewers)
 {
     switch (visibility)
     {
         case GroupVisibility.Nobody:
             SetFaceUp(false);
             break;
         case GroupVisibility.Everybody:
             SetFaceUp(true);
             Reveal();
             break;
         case GroupVisibility.Undefined:
             if (FaceUp) Reveal();
             break;
         case GroupVisibility.Custom:
             SetFaceUp(viewers.Contains(Player.LocalPlayer));
             RevealTo(viewers);
             break;
         default: // could be GroupVisibilty.Owner
             Debug.Fail("[Card.SetVisibility] Invalid visibility!");
             return;
     }
 }
Exemple #2
0
        private static async Task <Group> CreateGroupAsync(string accessToken, HttpClient httpClient, string displayName, string description, string classification, string mailNickname, string owner, GroupVisibility visibility)
        {
            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.GetAsync <GraphCollection <User> >(httpClient, "v1.0/myorganization/users?$filter=mail eq '{owner}'&$select=Id", accessToken);

                    if (collection != null)
                    {
                        if (collection.Items.Any())
                        {
                            ownerId = collection.Items.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://graph.microsoft.com/v1.0/users/{ownerId}"
            };
            group.Members = new List <string>()
            {
                $"https://graph.microsoft.com/v1.0/users/{ownerId}"
            };
            group.Visibility = visibility == GroupVisibility.NotSpecified ? GroupVisibility.Private : visibility;

            return(await GraphHelper.PostAsync <Group>(httpClient, "v1.0/groups", group, accessToken));
        }
Exemple #3
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)
        {
            Group group      = null;
            Team  returnTeam = null;

            // Create group
            if (string.IsNullOrEmpty(groupId))
            {
                group = await CreateGroupAsync(accessToken, httpClient, displayName, description, classification, mailNickname, owner, visibility);
            }
            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();
                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);
                }
            }
            return(returnTeam);
        }
        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)
        {
            Group group      = null;
            Team  returnTeam = null;

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

                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();
                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);
        }
Exemple #5
0
 public GrpTmp(Play.Group g, GroupVisibility vis, List <Play.Player> v)
 {
     Group      = g;
     Visibility = vis;
     Viewers    = v;
 }
        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)
        {
            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.GetAsync <RestResultCollection <User> >(httpClient, "v1.0/myorganization/users?$filter=mail eq '{owner}'&$select=Id", accessToken);

                    if (collection != null)
                    {
                        if (collection.Items.Any())
                        {
                            ownerId = collection.Items.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;

            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;
                }
            }
        }