using Common; namespace CLI; class Program { static string BINARY_NAME = "pass"; static int Main(string[] args) { ConfigFileManager.ExceptionOccured += (e) => ErrorOccured(e); ConfigFileManager.Init(); if (args.Length == 0) { ListPasswords(); return 0; } else { switch (args[0]) { case "help": HelpMessage(); break; case "list": if (ListPasswords() == 1) { return 1; } break; default: HelpMessage(); break; } } return 0; } static int ListPasswords() { DirectoryInfo d; FileInfo[] files = new FileInfo[0]; try { //since this file is already dependent on the Common namespace, we don't need events to mitigate this; better off asking ConfigFileManager for the path directly d = new DirectoryInfo(ConfigFileManager.GetPath()); files = d.GetFiles("*.gpg"); } catch (ArgumentNullException e) { ErrorOccured(e, "Error while getting password files"); return 1; } foreach (FileInfo f in files) { Console.WriteLine($"\t{f.Name}"); } return 0; } static void ErrorOccured(Exception e, string errorName = "Error") { Console.WriteLine($"{errorName}: {e}\nMore details:\n{e.ToString()}"); } static void HelpMessage() { Console.WriteLine($"Usage: {BINARY_NAME} [optional arguments]"); Console.WriteLine("\nArguments:"); Console.WriteLine("\t- list:\t\t\tlist all passwords; this is the default action"); Console.WriteLine("\t- :\t\tdecrypt password and copy it to clipboard"); Console.WriteLine($"\t- new :\t\tgenerate password\n\t\t[length]:\tthe length of the password, default is {PasswordGenerator.DEFAULT_LENGTH}\n\t\t[true|false]:\twhether the password should include symbols, default is true"); Console.WriteLine($"\t- rm :\tdelete password"); Console.WriteLine($"\t- insert :\tinstead of generating the password, you enter its contents"); Console.WriteLine($"\t- find :\tlist password that match your query"); Console.WriteLine($"\t- edit :\tedit the contents of an existing password"); } }