Skip to content

Commit

Permalink
several enhancements and bug fixes, new DeleteUsers command
Browse files Browse the repository at this point in the history
  • Loading branch information
VGA committed Feb 17, 2021
1 parent 986bf62 commit 5c523a2
Show file tree
Hide file tree
Showing 9 changed files with 156 additions and 181 deletions.
1 change: 1 addition & 0 deletions src/cli/Commands/AddToGroupCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,7 @@ public override List<string> GetSupportedCommands()
}

public override bool UseCache => true;
public override bool RequiresUser => true;

public override string Name => "Add To Group";
public override string Description => "Add a given user or a list of users (text file) to a given group, i.e. edu.exe -atg juan.perez preceptores-inicial or edu.exe -atg usuarios.txt mynewgroup";
Expand Down
1 change: 1 addition & 0 deletions src/cli/Commands/ArchiveTeamCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ internal class ArchiveTeamCommand : CommandBase
{
public override bool UseCache => true;
public override bool RequiresGroup => true;
public override bool RequiresValue => true;

public override string Name => "Archive Team";
public override string Description => "Archive/unarchive a Team. Usage: edu.exe groupemail /value:[true|false]";
Expand Down
5 changes: 2 additions & 3 deletions src/cli/Commands/CommandBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -196,10 +196,9 @@ string[] ResolveAliasList()
{
AliasesList = System.IO.File.ReadAllLines(AliasesFile);
}
catch (FileNotFoundException)
catch (FileNotFoundException ex)
{
// a file not found is expected, as this method can be called without knowing if the user has specified a filename or an username
return null;
throw ex;
}
catch (Exception ex)
{
Expand Down
1 change: 1 addition & 0 deletions src/cli/Commands/CommandFactory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ internal CommandFactory(string[] args)
commands.Add(new ListSectionsCommand(args));
commands.Add(new ValidateDataCommand(args));
commands.Add(new ArchiveTeamCommand(args));
commands.Add(new DeleteUsersCommand(args));
}

internal List<ICommand> Commands { get { return commands; } }
Expand Down
4 changes: 1 addition & 3 deletions src/cli/Commands/CreateUsersCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -86,9 +86,7 @@ async public override Task RunInternal()

foreach (var csvUser in records)
{
var user = await Client.GetUserFromUserPrincipalName(csvUser.Username);

await Client.CreateUser(csvUser.Username, csvUser.Password, csvUser.FirstName, csvUser.LastName, csvUser.Type, csvUser.Level, csvUser.Grade, csvUser.Division, "0", DateTime.Now.Year.ToString(), "");
await Client.CreateUser(csvUser.Username, csvUser.Password, csvUser.FirstName.Trim(), csvUser.LastName.Trim(), csvUser.Type, csvUser.Level, csvUser.Grade, csvUser.Division, "0", DateTime.Now.Year.ToString(), "");
Log.Logger.Information($"User created: {csvUser.Username}");
recordCount++;
}
Expand Down
89 changes: 89 additions & 0 deletions src/cli/Commands/DeleteUsersCommand.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
using Serilog;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.IO;
using CsvHelper;
using System.Globalization;
using Clarius.Edu.Graph;
using CsvHelper.Configuration;
using Microsoft.Graph;

namespace Clarius.Edu.CLI
{
internal class DeleteUsersCommand : CommandBase
{
internal DeleteUsersCommand(string[] args) : base(args) { }
public override bool RequiresUser => true;
public override bool UseAppPermissions => false;

async public override Task RunInternal()
{
if (base.User != null)
{
var userData = $"{base.User.DisplayName} ({base.User.UserPrincipalName})";
await Client.Graph.Users[base.User.Id].Request().DeleteAsync();
Log.Logger.Information($"User {userData} has been deleted");
return;
}

int errorCount = 0;
List<User> userList = new List<User>();

// quick check that all specified users do exist
foreach (var line in base.AliasesList)
{
var user = await Client.GetUserFromUserPrincipalName(line);
if (user == null)
{
Log.Logger.Warning($"{line} does not exists");
errorCount++;
}
userList.Add(user);
}

if (errorCount > 0)
{
Log.Logger.Error($"Total errors found: {errorCount}. Please fix errors and re-run this command.");
return;
}

int recordCount = 0;
errorCount = 0;

// second pass to actually delete the users now
foreach (var user in userList)
{
try
{
await Client.Graph.Users[user.Id].Request().DeleteAsync();
recordCount++;
Log.Logger.Information($"User {user.UserPrincipalName} deleted");
}
catch (Exception ex)
{
Log.Logger.Error(ex.Message);
errorCount++;
}
}

if (errorCount > 0)
{
Log.Logger.Error($"Total errors found: {errorCount}. Some deletions may have failed, please review log file.");
return;
}

Log.Logger.Information($"Processed {recordCount} records");
}

public override List<string> GetSupportedCommands()
{
return new List<string>() { "--Delete Users", "-du" };
}

public override bool UseCache => true;

public override string Name => "Delete Users";
public override string Description => "Deletes one or more users";
}
}
33 changes: 31 additions & 2 deletions src/cli/Commands/ListGroupsCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
using System.Threading.Tasks;
using System.Linq;
using Clarius.Edu.Graph;
using Constants = Clarius.Edu.Graph.Constants;

namespace Clarius.Edu.CLI
{
Expand All @@ -25,6 +26,21 @@ async public override Task RunInternal()
.WriteTo.Console(outputTemplate: "{Message}{NewLine}")
.CreateLogger();

//var foo = await Client.GetGroupFromAlias("ijme");
//var customMetadata = new Dictionary<string, object>
// {
// { Constants.PROFILE_GROUPGRADE, ""},
// { Constants.PROFILE_GROUPDIVISION, ""},
// { Constants.PROFILE_GROUPLEVEL, "Primaria"},
// { Constants.PROFILE_GROUPTYPE, Constants.GROUP_TYPE_SUPPORT },
// { Constants.PROFILE_GROUPYEAR, "2020" },
// { Constants.PROFILE_GROUPID, "IJME" },
// };

//var vf = Client.GetGroup(foo);
//await vf.UpdateExtension(Constants.PROFILE_GROUPEXTENSION_ID, customMetadata);


var groups = Client.GetGroups(base.Type, base.Level, base.Grade, base.Division, base.Year);

var groupNames = new List<string>();
Expand All @@ -33,9 +49,22 @@ async public override Task RunInternal()
foreach (var group in groups)
{
var grp = Client.GetGroup(group);
if (base.Filter != null && !group.DisplayName.Contains(base.Filter, StringComparison.InvariantCultureIgnoreCase))
if (!string.IsNullOrEmpty(base.Filter) && !group.DisplayName.Contains(base.Filter, StringComparison.InvariantCultureIgnoreCase))
continue;
groupNames.Add($"{group.DisplayName}, {Client.RemoveDomainPart(group.MailNickname)}");

if (!string.IsNullOrEmpty(base.Year) && !string.Equals(grp.Year, base.Year, StringComparison.InvariantCultureIgnoreCase))
{
continue;
}

if (!base.RawFormat)
{
groupNames.Add($"{group.DisplayName}, {Client.RemoveDomainPart(group.MailNickname)}");
}
else
{
groupNames.Add($"{Client.RemoveDomainPart(group.MailNickname)}");
}
count++;
}

Expand Down
Loading

0 comments on commit 5c523a2

Please sign in to comment.