示例#1
0
        public static async Task MainAsync(string[] args)
        {
            string secret = "";

            if (args.Any())
            {
                secret = string.Join("", args).Replace(" ", "");
                var token = VipAccess.CreateCurrentTotpKey(secret);
                Console.WriteLine($"Writing token '${token}' to token.txt");
                File.WriteAllText("token.txt", token);
            }
            else
            {
                while (string.IsNullOrWhiteSpace(secret))
                {
                    Console.WriteLine("Please choose what you want to do:");
                    Console.WriteLine("1: Generate new secret + show 2fa token");
                    Console.WriteLine("2: Enter existing secret to show 2fa token");

                    Console.Write("> ");
                    var inp = Console.ReadLine();

                    switch (inp)
                    {
                    case "1":
                        Console.WriteLine("Generating secret...");
                        var s = await VipAccess.ProvisionTokenNow();

                        secret = s.Secret;
                        Console.WriteLine($"Secret:{Environment.NewLine}{ApplyThisInFrontOfLines(s.ToString(), "\t")}");
                        break;

                    case "2":
                        Console.Write("Enter your secret> ");
                        secret = Console.ReadLine().Trim();
                        break;

                    default:
                        Console.WriteLine("Error: Option not found, please choose one of the options above");
                        break;
                    }
                }

                string currentToken = "";
                Console.WriteLine();
                Console.WriteLine(@"\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_");
                Console.WriteLine(@"\_\_\_ Auto refreshing token, press ESC to exit the application \_\_\_");
                Console.WriteLine(@"\_\_\_          Token will refresh every ~30 seconds            \_\_\_");
                Console.WriteLine(@"\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_");
                Console.WriteLine();
                while (!Console.KeyAvailable || Console.ReadKey(true).Key != ConsoleKey.Escape)
                {
                    var newToken = VipAccess.CreateCurrentTotpKey(secret);
                    if (currentToken != newToken)
                    {
                        currentToken = newToken;
                        Console.WriteLine($"\tCurrent token: {currentToken}");
                    }
                    await Task.Delay(100);
                }
            }
        }