using Newtonsoft.Json.Linq; using System.Numerics; using TMPro; using UnityEngine; using UnityEngine.Networking; using UnityEngine.UI; public class AccountLogin : MonoBehaviour { [SerializeField] private TMP_Text loginPanelStatusText; [SerializeField] private TMP_InputField loginUsernameInput; [SerializeField] private TMP_InputField loginPasswordInput; [SerializeField] private Button forgotUsernameButton; [SerializeField] private Button forgotPasswordButton; [SerializeField] private Button loginBackButton; [SerializeField] private Button loginSubmitButton; void Awake() { loginUsernameInput.onSelect.AddListener((_) => loginUsernameInput.caretPosition = loginUsernameInput.text.Length); loginPasswordInput.onSelect.AddListener((_) => loginPasswordInput.caretPosition = loginPasswordInput.text.Length); loginBackButton.onClick.AddListener(() => AccountHandler.instance.SwitchPanel(1)); loginSubmitButton.onClick.AddListener(() => SubmitLogin()); forgotUsernameButton.onClick.AddListener(() => { AccountHandler.instance.SwitchPanel(7); AccountHandler.instance.accountForgotDetails.mode = 0; AccountHandler.instance.accountForgotDetails.forgotDetailsTitleText.text = "Forgot username"; AccountHandler.instance.accountForgotDetails.forgotDetailsBackButton.interactable = true; AccountHandler.instance.accountForgotDetails.forgotDetailsSubmitButton.interactable = true; }); forgotPasswordButton.onClick.AddListener(() => { AccountHandler.instance.SwitchPanel(7); AccountHandler.instance.accountForgotDetails.mode = 1; AccountHandler.instance.accountForgotDetails.forgotDetailsTitleText.text = "Forgot password"; AccountHandler.instance.accountForgotDetails.forgotDetailsBackButton.interactable = true; AccountHandler.instance.accountForgotDetails.forgotDetailsSubmitButton.interactable = true; }); } void OnEnable() { loginUsernameInput.text = ""; loginPasswordInput.text = ""; loginPanelStatusText.text = ""; } async void SubmitLogin() { loginBackButton.interactable = false; loginSubmitButton.interactable = false; if (loginUsernameInput.text == string.Empty || loginPasswordInput.text == string.Empty) { Tools.UpdateStatusText(loginPanelStatusText, "All input fields must be filled", Color.red); return; } WWWForm dataForm = new(); dataForm.AddField("username", loginUsernameInput.text); dataForm.AddField("password", loginPasswordInput.text); using UnityWebRequest request = UnityWebRequest.Post(Endpoints.ACCOUNT_LOGIN_ENDPOINT, dataForm); request.SetRequestHeader("Requester", "BerryDashClient"); request.SetRequestHeader("ClientVersion", Application.version); request.SetRequestHeader("ClientPlatform", Application.platform.ToString()); await request.SendWebRequest(); if (request.downloadHandler.text == null) { loginBackButton.interactable = true; loginSubmitButton.interactable = true; Tools.UpdateStatusText(loginPanelStatusText, "Failed to make HTTP request", Color.red); return; } var jsonResponse = JObject.Parse(request.downloadHandler.text); if ((bool)jsonResponse["success"]) { BazookaManager.Instance.SetAccountSession((string)jsonResponse["data"]["session"]); BazookaManager.Instance.SetAccountName((string)jsonResponse["data"]["username"]); BazookaManager.Instance.SetAccountID(BigInteger.Parse((string)jsonResponse["data"]["id"])); AccountHandler.instance.SwitchPanel(0); Tools.UpdateStatusText(loginPanelStatusText, "", Color.red); } else { Tools.UpdateStatusText(loginPanelStatusText, (string)jsonResponse["message"], Color.red); } loginBackButton.interactable = true; loginSubmitButton.interactable = true; } }