Giter Club home page Giter Club logo

nmarc's Introduction

Native Mode Alignment Tool Report Converter (NMARC)

The NMARC tool enables admins to parse the Native Mode alignment report for Yammer. This YAML file can be large and difficult to understand with a text editor. This utility reads the YAML and outputs text files in a tabular format that is easier to open with Microsoft Excel, or other tools, which can process CSV.

This tool is currently in preview and no precompiled executable is available for download. NMARC is a Windows Forms application that needs to be compiled using Visual Studio 2019.

Community Help and Support

This tool is unsupported by Microsoft Support (CSS). It is expected that users understand how to compile and run Visual Studio 2019 projects, or have assistance from others in their organization to do this.

GitHub Issues is the best place to ask questions, report bugs, and new request features. Updates will be made on a best efforts basis.

Getting started

These steps are currently required to build the utility. You will need admin privileges on your machine.

  1. Install Visual Studio 2019 (any edition) and make sure the .NET desktop development workload is selected.
  2. Check out this code from GitHub.
  3. Open the solution file in the src directory of this project.
  4. Once the solution fully loads, update the NuGet packages in the project. Specifically, make sure that the YamlDotNet library is updated, or the project will not build.
  5. Audit the source code. This is optional, but you should always make sure that you are comfortable with source code that you run on your machine.
  6. Build the solution. A Windows Forms executable will be produced. This can be run on other machines, but you may get a security warning.

If you experience a problem building the solution, it's most likely a generic Visual Studio, NuGet, or Windows Forms issue. Answers are can often be found very quickly via a web search.

Contributing

This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visit https://cla.opensource.microsoft.com.

When you submit a pull request, a CLA bot will automatically determine whether you need to provide a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions provided by the bot. You will only need to do this once across all repos using our CLA.

This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact [email protected] with any additional questions or comments.

Security Reporting

If you find a security issue with our libraries or services please report it to [email protected] with as much detail as possible. Your submission may be eligible for a bounty through the Microsoft Bounty program. Please do not post security issues to GitHub Issues or any other public site. We will contact you shortly upon receiving the information. We encourage you to get notifications of when security incidents occur by visiting this page and subscribing to Security Advisory Alerts.

nmarc's People

Contributors

brianly avatar dependabot[bot] avatar microsoftopensource avatar swethara avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

nmarc's Issues

Getting to Output Stage

I found several errors before getting an output working from the code download.

  1. Property ':Groups' not found
  • Updated AlignmentReport.cs groups and users to :Groups and :Users
  1. Property 'approximate_messages_count' not found
  • Fixed messages_count to approximate_messages_count in Groups.cs
  1. Line 10 YAML - The string was not recognized as a valid DateTime
  • Never rather than date statement that could be fixed by the same coding as your lastaccessed.
  • I just copied another date to quickly get past this.
  1. Expected 'StreamEnd', got 'DocumentStart'
  • YAML file - removed the --- from between groups and user sections
  1. Property 'community_message_count' not found
  • Fixed public_message_count to community_message_count in User.CS

I should mention I'm in Australia so not sure if some field names differ based on geolocation.
And this is where I encounter the issue you already have regarding group admin outputs.

Generate output that helps admins add users back to communities as AAD B2B users

Native mode converts legacy external groups to regular connected communities. Those support external users (AAD B2B), but there is currently a gap with how to quickly get users up and running because they lose access when native mode alignment happens. Think of ways we can provide something to help admins move forward and implement support for it.

tool doesn't support unicode characters

unicode chars do not survive the transformation

a group with this name in the .yml file
Nødkommunikasjon i jernbanetunnel

becomes this in the processed file
Nødkommunikasjon i jernbanetunnel

Create an options dialog

The current app has hardcoded defaults for the output separator (comma) and the extension of the output files (.CSV). As a result, embedded commas in data causes problems with opening the results. By adding an options dialog, these things can be configurable.

Support is needed for tabs. Adding a \t as a separator should enable tab separated output.

csv output not RFC 4180 compliant

The csv files that are generated by this tool are not compliant with RFC 4180, specifically the part of the RFC that stipulates that:

Each line should contain the same number of fields.
Fields that contain a special character (comma, CR, LF, or double quote), must be "escaped" by enclosing them in double quotes (Hex 22)> .

Since none of the field values are encapsulated in double quotes in the CSV that is created by the NMARC tool, it means that "," characters in field values will be parsed as a delimiter, and not as an "escaped" coma...which causes problems for field values like "this is, a field value, with many comma's". The comma's in a field value like that should not be parsed as a delimiter, but as an "escaped coma".

group names which contain a comma

As we have a number of groups which contain a comma in their name, the generated CSV file fails to import correctly to excel

would it be possible to change the delimiter to another value - or even better enclose the values in "" so excel can import/break columns correctly
would work
"3479542","Name of,Department","internal","unlisted","active","7","2/2/2018 2:09:15"

splits one value into two columns and messes up format in excel
3479542,Name of,Department,internal,unlisted,active,7,2/2/2018 2:09:15

Improve summary display when the tool runs.

Currently, the tool runs and displays a random assortment of information. It would be good to show total numbers of objects and list all of the output files containing that data.

Some group output from the tool is incomplete

When parsing the YAML some items like groups, the parsing is quite complicated. Compare the group_admins element for these groups:

groups:
  123456:
    name: Test Group
    id: 123456
    type: internal
    privacy_setting: private
    state: active
    messages_count: 321
    last_message_at: 2020-04-30 22:35:25.506949969 +00:00
    o365_connected: true
    group_admins:
      with_o365_creation_rights: []
      without_o365_creation_rights:
      - [email protected]
      - [email protected]
    member_counts:
      internal: 91
      external: 0
    uploaded_file_counts:
      yammer_files: 32
      sharepoint_files: 0
  456789:
    name: Test Group 2
    id: 456789
    type: internal
    privacy_setting: private
    state: active
    messages_count: 321
    last_message_at: 2020-04-30 22:35:25.506949969 +00:00
    o365_connected: true
    group_admins: All Yammer Verified admins
    member_counts:
      internal: 91
      external: 0
    uploaded_file_counts:
      yammer_files: 32
      sharepoint_files: 0

Sometimes group_admins is a simple string which gets parsed easily with the declarations, but at other times this element is a complex structure. Fixing this requires the creation of an IYamlTypeConverter for each of these complicated sections of YAML.

My first attempt was successful for the last_date_accessed element (see LastAccessed and LastAccessedTypeConverter classes.) When I implemented this for the group_admins element there were some issues with the internals of YamlDotNet getting out of sync when deserializing. It would overrun into the member_counts when a full file was processed.

Get this tool signed

It would be better if folks could just download a Windows executable (.exe) so that they don't have to compile this project. Unfortunately, I can't just post this to GitHub without proper verification and signing.

We need to work out how to get it signed properly so that it's easy for users. Ideas:

  • Add release pipeline with signing.
  • Publish to Windows Store, if it now support WinForms apps.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.