private static int ParseCommands(string[] args) { // try to parse commands var cmd = new ParseArgs(args); // set/update configuration based on commands while (cmd.IsValid) { if (cmd.CurrentArg == "-i") { // interactive mode cmd.Next(); if (cmd.IsValid) { Console.WriteLine("Unexpected argument for interactive mode."); return(1); // error } InteractiveMode(); return(0); // do not continue } else if (cmd.CurrentArg == "-?") { // help PrintHelp(); return(0); // do not continue } else if (cmd.CurrentArg == "-u") { // user name for non-interactive mode //cmd.Next(); return(NonInteractiveMode(cmd)); } else if (cmd.CurrentArg == "-m") { // merge mode cmd.Next(); if (!cmd.IsValid) { Console.WriteLine("missing first filename."); return(1); // error } var firstFile = cmd.CurrentArg; cmd.Next(); if (!cmd.IsValid) { Console.WriteLine("missing second filename."); return(1); // error } var secondFile = cmd.CurrentArg; cmd.Next(); string saveHere = null; // null means don't save merged result if (cmd.IsValid) { if (cmd.CurrentArg != "-o") { Console.WriteLine("unknown option " + cmd.CurrentArg); return(1); // error } cmd.Next(); if (!cmd.IsValid) { Console.WriteLine("missing second filename."); return(1); // error } saveHere = cmd.CurrentArg; cmd.Next(); if (cmd.IsValid) { Console.WriteLine("unknown option " + cmd.CurrentArg); return(1); // error } if (string.Equals(saveHere, firstFile, StringComparison.InvariantCultureIgnoreCase) || string.Equals(saveHere, secondFile, StringComparison.InvariantCultureIgnoreCase)) { // overwriting input files is not supported Console.WriteLine("Not merging: overwriting the input files is not supported." + cmd.CurrentArg); return(1); // error } } // read both files var firstConfig = new Configuration(); using (var file = File.OpenRead(firstFile)) { firstConfig.Load(file); } var secondConfig = new Configuration(); using (var file = File.OpenRead(secondFile)) { secondConfig.Load(file); } Console.WriteLine("Found entries: " + firstConfig.Sites.Count + " sites in 1st, " + secondConfig.Sites.Count + " sites in 2nd"); // merge Merge.Result result; try { result = Merge.Perform(firstConfig, secondConfig); } catch (Exception ex) { Console.WriteLine("Merge failed."); Console.WriteLine(ex.Message); return(1); } // print result var identical = result.SitesMerged.Where(m => m.Which == Merge.MergedEntry.Resolution.Identical).ToList(); if (identical.Count > 0) { Console.WriteLine("Same in both both configs: " + identical.Count + " entries"); foreach (var item in identical) { Console.WriteLine(" site: " + item.First.SiteName + " (login='******' c=" + item.First.Counter + " t=" + item.First.Type + ")"); } } // Display overview var firstNew = result.SitesMerged.Where(m => m.Which == Merge.MergedEntry.Resolution.FirstNew).ToList(); if (firstNew.Count > 0) { Console.WriteLine("New in 1st (not found in 2nd): " + firstNew.Count + " entries"); foreach (var item in firstNew) { Console.WriteLine(" site: " + item.First.SiteName + " (login='******' c=" + item.First.Counter + " t=" + item.First.Type + ")"); } } var firstNewer = result.SitesMerged.Where(m => m.Which == Merge.MergedEntry.Resolution.FirstNewer).ToList(); if (firstNewer.Count > 0) { Console.WriteLine("Newer in 1st (also found in 2nd but older): " + firstNewer.Count + " entries"); foreach (var item in firstNewer) { Console.WriteLine(" site: " + item.First.SiteName + " (login='******' c=" + item.First.Counter + " t=" + item.First.Type + ")"); } } var secondNew = result.SitesMerged.Where(m => m.Which == Merge.MergedEntry.Resolution.SecondNew).ToList(); if (secondNew.Count > 0) { Console.WriteLine("New in 2nd (not found in 1st): " + secondNew.Count + " entries"); foreach (var item in secondNew) { Console.WriteLine(" site: " + item.Second.SiteName + " (login='******' c=" + item.Second.Counter + " t=" + item.Second.Type + ")"); } } var secondNewer = result.SitesMerged.Where(m => m.Which == Merge.MergedEntry.Resolution.SecondNewer).ToList(); if (secondNewer.Count > 0) { Console.WriteLine("Newer in 2nd (also found in 1st but older): " + secondNewer.Count + " entries"); foreach (var item in secondNewer) { Console.WriteLine(" site: " + item.Second.SiteName + " (login='******' c=" + item.Second.Counter + " t=" + item.Second.Type + ")"); } } var conflicts = result.SitesMerged.Where(m => m.Which == Merge.MergedEntry.Resolution.Conflict).ToList(); if (conflicts.Count > 0) { Console.WriteLine("Conflicts (site found in both and unclear which is 'better'): " + conflicts.Count + " entries (merged would contain both)"); foreach (var item in conflicts) { Console.WriteLine(" site: " + item.First.SiteName); Console.WriteLine(" in 1st: login='******' c=" + item.First.Counter + " t=" + item.First.Type + ""); Console.WriteLine(" in 2nd: login='******' c=" + item.Second.Counter + " t=" + item.Second.Type + ""); } } if (null != saveHere) { // save var merged = new Configuration(); merged.UserName = firstConfig.UserName; foreach (var item in result.SitesMerged) { switch (item.Which) { case Merge.MergedEntry.Resolution.Identical: case Merge.MergedEntry.Resolution.FirstNew: case Merge.MergedEntry.Resolution.FirstNewer: merged.Sites.Add(new SiteEntry(item.First)); break; case Merge.MergedEntry.Resolution.SecondNew: case Merge.MergedEntry.Resolution.SecondNewer: merged.Sites.Add(new SiteEntry(item.Second)); break; case Merge.MergedEntry.Resolution.Conflict: // we include both merged.Sites.Add(new SiteEntry(item.First)); merged.Sites.Add(new SiteEntry(item.Second)); break; default: break; } } using (var file = File.OpenWrite(saveHere)) { merged.Save(file); } Console.WriteLine("Saved merged " + merged.Sites.Count + " entries to '" + saveHere + "'" + (conflicts.Count > 0 ? " including 2 x " + conflicts.Count + " entries for the conflicts" : "") + "."); } return(1); } else { Console.WriteLine("unknown command " + cmd.CurrentArg); return(1); } } Console.WriteLine("Missing command."); PrintHelp(); return(1); // error }
private static int ParseCommands(string[] args) { // try to parse commands var cmd = new ParseArgs(args); // configuration string userName = null; string siteName = null; PasswordType? type = null; int counter = 1; string masterPassword = null; // set/update configuration based on commands while (cmd.IsValid) { if (cmd.CurrentArg == "-i") { // interactive mode InteractiveMode(); return 0; // do not continue } else if (cmd.CurrentArg == "-?") { // help PrintHelp(); return 0; // do not continue } else if (cmd.CurrentArg == "-u") { // user name cmd.Next(); if (!cmd.IsValid) { Console.WriteLine("missing user name"); } else { userName = cmd.CurrentArg; } } else if (cmd.CurrentArg == "-s") { // site name cmd.Next(); if (!cmd.IsValid) { Console.WriteLine("missing site name"); } else { siteName = cmd.CurrentArg; } } else if (cmd.CurrentArg == "-t") { // type of password cmd.Next(); if (!cmd.IsValid) { Console.WriteLine("missing type of password"); } else { type = ExtractTypeFromString(GetPasswordTypes(), cmd.CurrentArg); } } else if (cmd.CurrentArg == "-p") { // master password cmd.Next(); if (!cmd.IsValid) { Console.WriteLine("missing master password"); } else { masterPassword = cmd.CurrentArg; } } cmd.Next(); } // check configuration values - are they configured now? bool ok = true; if (string.IsNullOrEmpty(userName)) { // missing Console.WriteLine("Cannot generate password, specify user name in options."); ok = false; } if (string.IsNullOrEmpty(siteName)) { // missing Console.WriteLine("Cannot generate password, specify site name in options."); ok = false; } if (!type.HasValue) { // missing Console.WriteLine("Cannot generate password, specify type of password in options."); ok = false; } if (string.IsNullOrEmpty(masterPassword)) { // missing Console.WriteLine("Cannot generate password, specify master password in options."); ok = false; } // OK? if (!ok) { // configuration not OK return 1; } // perform actual generation GeneratePassword(userName, siteName, type.Value, counter, masterPassword); return 0; }
private static int NonInteractiveMode(ParseArgs cmd) { // configuration string userName = null; string siteName = null; PasswordType?type = null; int counter = 1; string masterPassword = null; if (!cmd.IsValid) { Console.WriteLine("missing user name"); } else { userName = cmd.CurrentArg; } while (cmd.IsValid) { cmd.Next(); userName = cmd.CurrentArg; //Console.WriteLine(userName); cmd.Next(); if (cmd.CurrentArg == "-s") { // site name cmd.Next(); if (!cmd.IsValid) { Console.WriteLine("missing site name"); } else { siteName = cmd.CurrentArg; //Console.WriteLine(siteName); cmd.Next(); } } if (cmd.CurrentArg == "-t") { // type of password cmd.Next(); if (!cmd.IsValid) { Console.WriteLine("missing type of password"); } else { type = ExtractTypeFromString(GetPasswordTypes(), cmd.CurrentArg); //Console.WriteLine(type); cmd.Next(); } } if (cmd.CurrentArg == "-c") { // counter cmd.Next(); if (!cmd.IsValid) { Console.WriteLine("missing site counter"); } else { counter = int.Parse(cmd.CurrentArg); //Console.WriteLine(counter); cmd.Next(); } } if (cmd.CurrentArg == "-p") { // master password cmd.Next(); if (!cmd.IsValid) { Console.WriteLine("missing master password"); } else { masterPassword = cmd.CurrentArg; //Console.WriteLine(masterPassword); } } else { Console.WriteLine("unexpected argument " + cmd.CurrentArg); return(1); } cmd.Next(); } // check configuration values - are they configured now? bool ok = true; if (string.IsNullOrEmpty(userName)) { // missing Console.WriteLine("Cannot generate password, specify user name in options."); ok = false; } if (string.IsNullOrEmpty(siteName)) { // missing Console.WriteLine("Cannot generate password, specify site name in options."); ok = false; } if (!type.HasValue) { // missing Console.WriteLine("Cannot generate password, specify type of password in options."); ok = false; } if (string.IsNullOrEmpty(masterPassword)) { // missing Console.WriteLine("Cannot generate password, specify master password in options."); ok = false; } // OK? if (!ok) { // configuration not OK return(1); } //var types = GetPasswordTypes(); //string userName = "******"; //string siteName = "masterpasswordapp.com"; //var type = ExtractTypeFromString(types, "1"); //int counter = 1; //string masterPassword = "******"; // perform actual generation //generation 1 //GeneratePassword(userName, siteName, type, counter, masterPassword); GeneratePassword(userName, siteName, type.Value, counter, masterPassword); return(0); }
private static int NonInteractiveMode(ParseArgs cmd) { // configuration string userName = null; string siteName = null; PasswordType?type = null; const int counter = 1; string masterPassword = null; var toClipboard = false; if (!cmd.IsValid) { Console.WriteLine("missing user name"); } else { userName = cmd.CurrentArg; cmd.Next(); } while (cmd.IsValid) { switch (cmd.CurrentArg) { case "-s": { // site name cmd.Next(); if (!cmd.IsValid) { Console.WriteLine("missing site name"); } else { siteName = cmd.CurrentArg; } break; } case "-t": { // type of password cmd.Next(); if (!cmd.IsValid) { Console.WriteLine("missing type of password"); } else { type = ExtractTypeFromString(GetPasswordTypes(), cmd.CurrentArg); } break; } case "-p": { // master password cmd.Next(); if (!cmd.IsValid) { Console.WriteLine("missing master password"); } else { masterPassword = cmd.CurrentArg; } break; } case "-clip": { toClipboard = true; break; } default: { Console.WriteLine("unexpected argument " + cmd.CurrentArg); return(1); } } cmd.Next(); } // check configuration values - are they configured now? bool ok = true; if (string.IsNullOrEmpty(userName)) { // missing Console.WriteLine("Cannot generate password, specify user name in options."); ok = false; } if (string.IsNullOrEmpty(siteName)) { // missing Console.WriteLine("Cannot generate password, specify site name in options."); ok = false; } if (!type.HasValue) { // missing Console.WriteLine("Cannot generate password, specify type of password in options."); ok = false; } if (string.IsNullOrEmpty(masterPassword)) { // missing Console.WriteLine("Cannot generate password, specify master password in options."); ok = false; } // OK? if (!ok) // configuration not OK { return(1); } // perform actual generation var generatedPassword = GeneratePassword(userName, siteName, type.Value, counter, masterPassword); if (toClipboard) { WriteToClipboard(generatedPassword); } else { Console.WriteLine(generatedPassword); } return(0); }