Esempio n. 1
0
        public static void WriteGroupAdminsReport(AlignmentReport report, string basePath, string extension, string separator)
        {
            var groupAdminOutput = new StringBuilder();

            groupAdminOutput.AppendLine($"GroupID{separator}CreationRightsState{separator}Email");

            foreach (var group in report.Groups)
            {
                var admins = group.Administrators;

                if (!(admins is string))
                {
                    Console.WriteLine($@"Group:{group.Administrators}");
                    var convAdmins = (Dictionary <object, object>)admins;

                    foreach (KeyValuePair <object, object> entry in convAdmins)
                    {
                        var key  = entry.Key as string;
                        var vals = (List <object>)entry.Value;

                        foreach (var adminEmail in vals)
                        {
                            var email = (string)adminEmail;
                            groupAdminOutput.AppendLine($"{group.Id}{separator}{key}{separator}{email}");
                        }
                    }
                }
                else
                {
                    groupAdminOutput.AppendLine($"{group.Id},,No Admins");
                }
            }

            Utilities.WriteFile($@"{basePath}\groupadmins{extension}", groupAdminOutput);
        }
Esempio n. 2
0
        /// <summary>
        /// Deserializes the alignment report into useful objects we can work with.
        /// </summary>
        /// <param name="path">Path to file containing YAML</param>
        /// <returns>AlignmentReport containing all data from the YAML</returns>
        public static AlignmentReport ParseAlignmentReport(string path)
        {
            DocumentStart documentStartEvent;
            var           report = new AlignmentReport();

            using (var input = new StreamReader(path))
            {
                int iteration = 0; // Manually tracking this to map document to model
                var parser    = new Parser(input);

                // Consume the stream start event "manually"
                parser.Consume <StreamStart>();

                // Parse each document in the stream
                while (parser.TryConsume(out documentStartEvent))
                {
                    // We expect a message header line document, but actual content in later documents.
                    if (parser.Current.GetType() == typeof(Scalar))
                    {
                        var deserializer = new DeserializerBuilder().Build();
                        var scalar       = deserializer.Deserialize <string>(parser);
                        Console.WriteLine(scalar);
                        parser.MoveNext();
                        iteration += 1;
                        continue;
                    }

                    // Handle documents with content
                    switch (iteration)
                    {
                    case 1:
                        report.Groups = ParseGroups(parser);
                        Console.WriteLine($"Groups: {report.Groups.Count}");
                        break;

                    case 2:
                        report.Users = ParseUsers(parser);
                        Console.WriteLine($"Users: {report.Users.Count}");
                        break;

                    case 3:
                        report.GroupLevelGuests = ParseGuests(parser);
                        Console.WriteLine($"Group Level Guests: {report.GroupLevelGuests.Count}");
                        break;

                    default:
                        Console.WriteLine("Unknown document type.");
                        break;
                    }

                    parser.MoveNext();
                    iteration += 1;
                }
            }

            return(report);
        }
Esempio n. 3
0
        public static void WriteGroupsReport(AlignmentReport report, string basePath, string extension, string separator)
        {
            // GROUPS
            var groupOutput = new StringBuilder();

            groupOutput.AppendLine(
                $"Id{separator}Name{separator}Type{separator}PrivacySetting{separator}State{separator}MessageCount{separator}LastMessageDate{separator}ConnectedToO365{separator}Memberships.External{separator}Memberships.Internal{separator}Uploads.SharePoint{separator}Uploads.Yammer");
            foreach (var group in report.Groups)
            {
                Console.WriteLine($"{@group.Id}:{@group.Name}");

                groupOutput.AppendLine(@group.GetCsv(separator));
            }

            Utilities.WriteFile($@"{basePath}\groups{extension}", groupOutput);
        }
Esempio n. 4
0
        private static void WriteGroupsReport(AlignmentReport report, string basePath)
        {
            // GROUPS
            var groupOutput = new StringBuilder();

            groupOutput.AppendLine(
                "Id,Name,Type,PrivacySetting,State,MessageCount,LastMessageDate,ConnectedToO365,Memberships.External,Memberships.Internal,Uploads.SharePoint,Uploads.Yammer");
            foreach (var group in report.Groups)
            {
                Console.WriteLine($"{@group.Id}:{@group.Name}");

                groupOutput.AppendLine(@group.GetCsv());
            }

            Utilities.WriteFile($@"{basePath}\groups.txt", groupOutput);
        }
Esempio n. 5
0
        private static void WriteUsersReport(AlignmentReport report, string basePath)
        {
            // USERS
            var userOutput = new StringBuilder();

            userOutput.AppendLine(
                "Email,Internal,State,PrivateFileCount,IsUserMapped,PublicMessageCount,PrivateMessageCount,LastAccessed");
            foreach (var user in report.Users)
            {
                Console.WriteLine($"{user.Id}:{user.Email}");

                userOutput.AppendLine(user.GetCsv());
            }

            Utilities.WriteFile($@"{basePath}\users.txt", userOutput);
        }
Esempio n. 6
0
        public static void WriteUsersReport(AlignmentReport report, string basePath, string extension, string separator)
        {
            // USERS
            var userOutput = new StringBuilder();

            userOutput.AppendLine(
                $"Email{separator}Internal{separator}State{separator}PrivateFileCount{separator}PublicMessageCount{separator}PrivateMessageCount{separator}LastAccessed{separator}AAD_State");

            foreach (var user in report.Users)
            {
                Console.WriteLine($"{user.Id}:{user.Email}");

                userOutput.AppendLine(user.GetCsv(separator));
            }

            Utilities.WriteFile($@"{basePath}\users{extension}", userOutput);
        }
Esempio n. 7
0
        /// <summary>
        /// Exports the alignment report to multiple files in a specific folder.
        /// </summary>
        /// <param name="report">AlignmentReport instance containing deserialized data.</param>
        private void ExportReport(AlignmentReport report)
        {
            // TODO: Refactoring the code in this method requires some extra work:
            //       * Headers match up with the models. Use reflection, or something newer in C#, to get these automatically.
            //       * Manually parse the YAML, so that we don't have to deal with the dictionaries at the top-level.
            //       * Warn about path not being selected.

            string basePath = DlgSelectOutputFolder.SelectedPath;

            Console.WriteLine("Write...");

            WriteGroupsReport(report, basePath);

            WriteUsersReport(report, basePath);

            WriteGroupAdminsReport(report, basePath);
        }
Esempio n. 8
0
        /// <summary>
        /// Exports the alignment report to multiple files in a specific folder.
        /// </summary>
        /// <param name="report">AlignmentReport instance containing deserialized data.</param>
        private void ExportReport(AlignmentReport report, string path, string extension, string separator)
        {
            // TODO: Refactoring the code in this method requires some extra work:
            //       * Headers match up with the models. Use reflection, or something newer in C#, to get these automatically.
            //       * Manually parse the YAML, so that we don't have to deal with the dictionaries at the top-level.
            //       * Warn about path not being selected.

            separator = separator.Replace("\\t", "\t"); // Permit tabs in output

            Console.WriteLine("Write...");

            ReportWriter.WriteGroupsReport(report, path, extension, separator);

            ReportWriter.WriteUsersReport(report, path, extension, separator);

            ReportWriter.WriteGroupAdminsReport(report, path, extension, separator);

            ReportWriter.WriteActiveCommunityGuestsReport(report, path, extension, separator);

            ReportWriter.WriteOtherCommunityGuestsReport(report, path, extension, separator);
        }
Esempio n. 9
0
        public static void WriteOtherCommunityGuestsReport(AlignmentReport report, string basePath, string extension, string separator)
        {
            var communityGuestOutput = new StringBuilder();

            communityGuestOutput.AppendLine($"GroupID{separator}Email");

            foreach (var group in report.Groups)
            {
                if (group.OtherCommunityGuests != null)
                {
                    if (group.OtherCommunityGuests.Count > 0)
                    {
                        foreach (var guest in group.OtherCommunityGuests)
                        {
                            communityGuestOutput.AppendLine($"{group.Id}{separator}{guest}");
                        }
                    }
                }
            }

            Utilities.WriteFile($@"{basePath}\othercommunityguests{extension}", communityGuestOutput);
        }