public static void Login(string usr, string pws, string responseStatus = "none") { // Checks for username and password if (string.IsNullOrEmpty(usr) || string.IsNullOrEmpty(pws)) { MessageBox.Show("No username or password entered!", "Incorrect Login Information"); return; } else { // Set username and password as globals for future use LocalGlobals.usr = usr; LocalGlobals.pws = LauncherProgram.EncodePasswordToBase64(pws); var data = new NameValueCollection(); // Enters login queue switch (responseStatus) { // Second POST before logging in. case "delayed": data["queueToken"] = LocalGlobals.queueToken; break; // User entered incorrect login details case "false": MessageBox.Show(LocalGlobals.banner, "Yipes!"); return; // Prompts user to enter 2FA or ToonGuard token to login case "partial": data["appToken"] = Interaction.InputBox(LocalGlobals.banner, "Authorization Token Needed", ""); data["authToken"] = LocalGlobals.responseToken; // Exit login sequence if auth pop up is closed if (string.IsNullOrWhiteSpace(data["appToken"])) { return; } break; // Intial POST to login case "none": data["username"] = usr; data["password"] = LauncherProgram.DecodeFrom64(LocalGlobals.pws); break; } // Sends POST response var login_process = HTTPPostClient(data); if (login_process is String) { // Good POST request, client now starts login process. HTTPStatus(login_process); } else { // HTTPPostClient has run into an error and has notfied the user. return; } } }
public static void HTTPStatus(string response) { // JObject is used to get values from the response dynamic json = JObject.Parse(response); switch (Convert.ToString(json.success)) { case "false": LocalGlobals.banner = json.banner; Login(LocalGlobals.usr, LauncherProgram.DecodeFrom64(LocalGlobals.pws), Convert.ToString(json.success)); break; case "delayed": // Adds 1 second to delay LocalGlobals.timeToWait += 1000; Task.Delay(LocalGlobals.timeToWait).Wait(); // Sends another POST request with the queueToken only LocalGlobals.queueToken = json.queueToken; Login(LocalGlobals.usr, LauncherProgram.DecodeFrom64(LocalGlobals.pws), Convert.ToString(json.success)); break; case "partial": LocalGlobals.banner = json.banner; // Adds 1 second to delay LocalGlobals.timeToWait += 1000; Task.Delay(LocalGlobals.timeToWait).Wait(); // Sends another POST request with the authToken and responseToken only LocalGlobals.responseToken = json.responseToken; Login(LocalGlobals.usr, LauncherProgram.DecodeFrom64(LocalGlobals.pws), Convert.ToString(json.success)); break; case "true": LocalGlobals.timeToWait = 0; LocalGlobals.GETInterval = 150000; // Logins to game using credientials Console.WriteLine("SUCCESS: Logging you in to the Tooniverse..."); Environment.SetEnvironmentVariable("TTR_GAMESERVER", Convert.ToString(json.gameserver)); Console.WriteLine($"GAMESERVER: {Convert.ToString(json.gameserver)}"); Environment.SetEnvironmentVariable("TTR_PLAYCOOKIE", Convert.ToString(json.cookie)); string dir = Convert.ToString(Properties.Settings.Default["GameDirectory"]); ProcessStartInfo startInfo = new ProcessStartInfo { FileName = "TTREngine.exe", WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden }; try { Directory.SetCurrentDirectory(dir); // Starts game MessageBox.Show("Logging you in to the Tooniverse...", "Successful Login"); Process.Start(startInfo); } catch (Exception start_error) { MessageBox.Show(Convert.ToString(start_error), "Error!"); } break; } }