/// <summary> /// Launches interactive mode with the specified client. /// </summary> /// <param name="client">The client to use.</param> private static void LaunchInteractiveMode(IPwnedClient client) { Console.WriteLine($"Interactive mode launched against service: {client.GetInteractiveModePrompt()}"); string buffer; do { // Prompt for password. Console.Write($"{client.GetInteractiveModePrompt()}> "); buffer = Console.ReadLine(); // Output result. Console.WriteLine(client.GetNumberOfAppearances(buffer) + " occurrences found."); } while (buffer != "exit"); // Read until exit. // Say goodbye and quit. Console.WriteLine("Bye!"); }
/// <summary> /// Generates and outputs results for a batch-mode operation. /// </summary> /// <param name="service">The service to use for the operation.</param> /// <param name="passwords">The passwords to get frequencies for.</param> /// <param name="format">The format to output results in.</param> private static void GenerateResults(IPwnedClient service, string[] passwords, string format) { // Query service. var results = service.GetNumberOfAppearancesForAll(passwords); // Plain output goes straight to console. switch (format) { case "plain": // Plain is just plain CSV. Console.WriteLine("password, appearances"); foreach (var entry in results) { Console.WriteLine($"\"{entry.Key.Replace("\"", "\"\"")}\", {entry.Value}"); } break; case "coq": // Coq lookup format needs placing into template. var output = new StringBuilder(); var first = true; foreach (var entry in results) { if (!first) { output.Append(";"); output.AppendLine(); } output.Append($" (\"{entry.Key}\", {entry.Value} # 1)"); first = false; } // Output template to console with placeholders filled. Console.Write(Properties.Resources.coq_template .Replace("%NAME", "pwned_passwords_output") .Replace("%PASSWORDS", output.ToString())); break; } }