Beispiel #1
0
        public static async Task Login(string username, string password)
        {
            if (Client.IsConnected())
            {
                if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(password))
                {
                    logger.Warn("No login data entered to request auth");
                    ControlsManager.SetStatus("Enter login and password!");
                    return;
                }

                string clientName = ControlsManager.GetSelectedClientName();
                if (string.IsNullOrEmpty(clientName))
                {
                    logger.Error("Client not selected!");
                    ControlsManager.SetStatus("Select client!");
                    return;
                }

                ControlsManager.DisableLoginButton();
                logger.Info("Requesting client update");
                ClientsData.Client client = Config.Instance.Clients.Clients.First(c => c.Name == clientName);

                ControlsManager.SetStatus("Checking for updates...");
                await UpdateManager.UpdateClient(client);

                logger.Info("Waiting client updates to finish");
                ControlsManager.SetStatus("Updating...");
                await Task.Run(() => { UpdateManager.ClientUpdate.WaitOne(); });

                logger.Info("Client updating done");
                ControlsManager.SetStatus("Ready");

                logger.Info("Updating config with current login data");
                Config.Instance.Username = username;

                string passHash = Config.Instance.PassHash == password ? Config.Instance.PassHash : CryptoUtils.CalculateStringVersaHash(password);
                Config.Instance.PassHash = passHash;

                string session = Anticheat.Session;

                logger.Info("Requesting auth");
                ControlsManager.SetStatus("Requesting auth...");
                Client.SendAuth(session, username, passHash);

                logger.Info("Launching Minecraft");
                ControlsManager.SetStatus("Launching Minecraft...");
                Anticheat.HideLauncher();
                var minecraft = Start(username, session, client.Server, client.Path);

                if (Config.Instance.WindowedFullscreen)
                {
                    EnableWindowedFullscreen(minecraft);
                }

                Anticheat.Protect();

                logger.Info("All jobs done");
                System.Windows.Application.Current.Shutdown();
            }

            // TODO: offline mode
        }