private static async Task HandleListCommand(string alias, string file, string password, string group, IConsole console) { string filepath = await ConsoleHelper.GetPwsFilePath(file, alias); if (!File.Exists(filepath)) { System.Console.Error.WriteLine($"Can't locate a valid file, please check your command parameters or configuration in ~/pwsafe.json"); return; } SecureString secureString = ConsoleHelper.GetSecureString(password); try { using FileStream stream = File.OpenRead(filepath); using MemoryStream ms = new MemoryStream(); stream.CopyTo(ms); ms.Position = 0; PwsFileV3 pwsFile = (PwsFileV3)await PwsFile.OpenAsync(ms, secureString); List <ItemData> items = await PwsFileHelper.ReadAllItemsFromPwsFileV3Async(pwsFile); Group rootGroup = Group.GroupItems(items); if (string.IsNullOrWhiteSpace(group)) { PrintGroup(rootGroup); } else { Group?subGroup = rootGroup.FindSubGroup(item => item.Path == group); if (subGroup is null) { System.Console.Error.WriteLine("No such group, {0}", group); } else { System.Console.WriteLine("Items ({0}):", subGroup.Items.Count); subGroup.Items.ForEach((item) => { System.Console.WriteLine(item.Title); }); System.Console.WriteLine("Groups ({0}):", subGroup.Groups.Count); subGroup.Groups.ForEach((item) => { System.Console.WriteLine(item.Name); }); } } pwsFile.Dispose(); } catch (Exception e) { System.Console.Error.WriteLine(e.Message); throw; } }
private static async Task HandleRootCommand(string ALIAS, string FILE, string TITLE, string PASSWORD, IConsole console) { string filepath = await ConsoleHelper.GetPwsFilePath(FILE, ALIAS); if (!File.Exists(filepath)) { System.Console.Error.WriteLine($"Can't locate a valid file, please check your command parameters or configuration in ~/pwsafe.json"); return; } if (string.IsNullOrWhiteSpace(TITLE)) { TITLE = ConsoleHelper.ReadString("Title:"); if (string.IsNullOrWhiteSpace(TITLE)) { System.Console.Error.WriteLine($"Title is required"); return; } } SecureString secureString = ConsoleHelper.GetSecureString(PASSWORD); try { using FileStream stream = File.OpenRead(filepath); using MemoryStream ms = new MemoryStream(); stream.CopyTo(ms); ms.Position = 0; PwsFileV3 pwsFile = (PwsFileV3)await PwsFile.OpenAsync(ms, secureString); List <ItemData> items = await PwsFileHelper.ReadAllItemsFromPwsFileV3Async(pwsFile); ItemData?item = items.Where(item => item.Title == TITLE).FirstOrDefault(); if (item is null) { System.Console.Error.WriteLine($"Can't find the password of {TITLE}"); return; } TextCopy.ClipboardService.SetText(item.Password); System.Console.WriteLine("Successfully copy password to clipboard"); pwsFile.Dispose(); } catch (Exception e) { System.Console.Error.WriteLine("Unexpected error: {0}", e.Message); throw; } }