public override async Task Run() { var options = new ConsoleOptions <Func <Task> >("What would you like to do?", new[] { new Option <Func <Task> >("Export user list", UserLists), new Option <Func <Task> >("Edit a user", ManageUser), new Option <Func <Task> >("Create a user", CreateUser) }); Func <Task> f; do { try { f = options.Ask()?.Value; if (f == null) { break; } await f.Invoke(); } catch (Exception e) { Log.Error(e.UnwrapForLog()); } } while (true); }
public override async Task Run() { var opt = new ConsoleOptions <Func <Task> >("Choose what to edit", new[] { new Option <Func <Task> >("Credentials - Switch file", SwitchCreds), new Option <Func <Task> >("Credentials - Edit", EditCreds), OpenDirectory != null ? new Option <Func <Task> >("Credentials - Open directory", () => OpenDirectory(Settings.CredentialsFile)) : null, new Option <Func <Task> >("Tenant - Edit", EditTenant), new Option <Func <Task> >("Tenant - Add", AddTenant), new Option <Func <Task> >("Tenant - Delete", DeleteTenant) }.Where(o => o != null), "Done"); Func <Task> func; do { if (!Settings.Credentials.Tenants.Any()) { opt.Options.ForEach(o => o.Value.Show = !o.Value.Description.StartsWith("Tenant")); } func = opt.Ask()?.Value; if (func == null) { break; } await func(); } while (true); }
private static async Task <bool> Run() { var options = new ConsoleOptions <Resource>("What would you like to run?", new[] { // new Option<Resource>("export the auditing log", new AuditLog(Settings.ActiveTenant)), // new Option<Resource>("export the usage log", new UsageReport(Settings.ActiveTenant)), new Option <Resource>("User management", new Users(Settings.ActiveTenant)), new Option <Resource>("Settings", new Configuration(Settings.ActiveTenant)) }); var cmd = options.Ask(); if (cmd == null) { return(false); } await cmd.Value.Run(); return(Console.ReadLine().ParseBool() != false); }
private async Task ManageUser() { UserFilter userFilter = null; JObject user = null; string name = null; async Task askForUser() { userFilter = ConsoleOptions.GetInput("Which user? (objectId || signInName || displayName)", mutate: r => { var id = r.ParseGuid(); if (id.HasValue) { return(new UserFilter(id.Value, null)); } try { var mailAddress = new MailAddress(r); return(new UserFilter(null, $"$filter=signInNames / any(x: x / value eq '{r}')")); } catch (Exception) { return(new UserFilter(null, $"$filter=displayName eq '{r}'")); } }); } async Task search() { if (userFilter == null) { return; } user = await QueryUser(userFilter); if (user == null) { return; } name = user["displayName"].ToString(); if (ConsoleOptions.YesNo($"Found {name}. Print user details?")) { Log.PrintJson(user); } } await askForUser(); do { await search(); if (user == null && !ConsoleOptions.YesNo("Search again?")) { return; } } while (user == null); var options = new ConsoleOptions <Func <JObject, Task> >($"What would you like to do with {name}?", new[] { new Option <Func <JObject, Task> >("Update", j => Update(j).Then(search)), new Option <Func <JObject, Task> >("Print user details", async j => Log.PrintJson(j)), new Option <Func <JObject, Task> >("Get another user", async j => await askForUser().Then(search)) }); Func <JObject, Task> f = null; while (userFilter != null) { try { f = options.Ask()?.Value; if (f == null) { break; } await f.Invoke(user); } catch (Exception e) { Log.Error(e.UnwrapForLog()); } } }