using System; using System.Collections.Generic; using System.Net; using Facepunch.Steamworks; using HGsignup.Service; using TMPro; using UnityEngine; namespace RoR2.UI.MainMenu; public class SignupMainMenuScreen : BaseMainMenuScreen { private const string environment = "prod"; private const string title = "Canary"; private static string viewableName = "Signup"; [SerializeField] private TMP_InputField emailInput; [SerializeField] private HGButton submitButton; [SerializeField] private HGButton backButton; [SerializeField] private HGTextMeshProUGUI successText; [SerializeField] private HGTextMeshProUGUI failureText; [SerializeField] private HGTextMeshProUGUI waitingText; [SerializeField] private HGGamepadInputEvent backGamepadInputEvent; private SignupClient signupClient; private string email; private bool awaitingResponse; private HashSet successfulEmailSubmissions; [SystemInitializer(new Type[] { })] private static void Init() { ViewablesCatalog.AddNodeToRoot(new ViewablesCatalog.Node(viewableName, isFolder: false) { shouldShowUnviewed = CheckViewable }); } private static bool CheckViewable(UserProfile userProfile) { return !userProfile.HasViewedViewable("/" + viewableName); } private new void Awake() { signupClient = new SignupClient("prod"); successfulEmailSubmissions = new HashSet(); } private new void OnEnable() { waitingText?.gameObject?.SetActive(value: false); successText?.gameObject?.SetActive(value: false); failureText?.gameObject?.SetActive(value: false); if ((bool)backGamepadInputEvent) { backGamepadInputEvent.enabled = true; } } private new void Update() { base.Update(); if ((bool)submitButton) { if ((bool)emailInput && SignupClient.IsEmailValid(emailInput.text) && !awaitingResponse && !successfulEmailSubmissions.Contains(emailInput.text)) { submitButton.interactable = true; } else { submitButton.interactable = false; } } if ((bool)backButton) { backButton.interactable = !awaitingResponse; } if ((bool)backGamepadInputEvent) { backGamepadInputEvent.enabled = !awaitingResponse; } } public void TrySubmit() { if (!awaitingResponse && (bool)emailInput && !successfulEmailSubmissions.Contains(emailInput.text) && SignupClient.IsEmailValid(emailInput.text)) { email = emailInput.text; User user = Client.Instance.User; user.OnEncryptedAppTicketRequestComplete = (Action)Delegate.Combine(user.OnEncryptedAppTicketRequestComplete, new Action(ProcessAppTicketRefresh)); Client.Instance.User.RequestEncryptedAppTicketAsync(new byte[0]); awaitingResponse = true; waitingText?.gameObject?.SetActive(value: true); successText?.gameObject?.SetActive(value: false); failureText?.gameObject?.SetActive(value: false); } } private void ProcessAppTicketRefresh(bool success, byte[] ticket) { bool flag = success; User user = Client.Instance.User; user.OnEncryptedAppTicketRequestComplete = (Action)Delegate.Remove(user.OnEncryptedAppTicketRequestComplete, new Action(ProcessAppTicketRefresh)); if (success) { if (SignupClient.IsTicketValid(ticket)) { if (signupClient != null) { signupClient.SignupCompleted += SignupCompleted; signupClient.SignupSteamAsync(email, "Canary", ticket); } } else { Debug.LogError("Can't signup with an invalid ticket!"); flag = false; } } else { Debug.LogError("Failure refreshing Encrypted App Ticket from Steam for mailing list!"); flag = false; } if (!flag) { awaitingResponse = false; waitingText?.gameObject?.SetActive(value: false); successText?.gameObject?.SetActive(value: false); failureText?.gameObject?.SetActive(value: true); } } private void SignupCompleted(string email, HttpStatusCode statusCode) { awaitingResponse = false; waitingText?.gameObject?.SetActive(value: false); if (statusCode == HttpStatusCode.OK) { successfulEmailSubmissions.Add(email); successText?.gameObject?.SetActive(value: true); failureText?.gameObject?.SetActive(value: false); } else { successText?.gameObject?.SetActive(value: false); failureText?.gameObject?.SetActive(value: true); } } }