SSOSignUpPanel.cs 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. using System;
  2. using System.Collections.Generic;
  3. using UnityEditor;
  4. using UnityEngine;
  5. using UnityEngine.UIElements;
  6. using Codice.Client.Common;
  7. using PlasticGui;
  8. using PlasticGui.WebApi;
  9. using PlasticGui.Configuration.CloudEdition;
  10. using PlasticGui.Configuration.CloudEdition.Welcome;
  11. using Unity.PlasticSCM.Editor.UI;
  12. using Unity.PlasticSCM.Editor.UI.UIElements;
  13. using PlasticGui.WebApi.Responses;
  14. namespace Unity.PlasticSCM.Editor.Configuration.CloudEdition.Welcome
  15. {
  16. internal class SSOSignUpPanel :
  17. VisualElement,
  18. SignUp.INotify
  19. {
  20. internal SSOSignUpPanel(
  21. CloudEditionWelcomeWindow parentWindow,
  22. IPlasticWebRestApi restApi,
  23. CmConnection cmConnection)
  24. {
  25. mParentWindow = parentWindow;
  26. mRestApi = restApi;
  27. mCmConnection = cmConnection;
  28. InitializeLayoutAndStyles();
  29. BuildComponents();
  30. }
  31. internal void SetSignUpData(
  32. string user,
  33. string password)
  34. {
  35. mUserNameTextField.value = user;
  36. mPasswordTextField.value = password;
  37. CleanNotificationLabels();
  38. }
  39. internal void Dispose()
  40. {
  41. mSignUpButton.clicked -= SignUpButton_Clicked;
  42. mTermsOfServiceButton.clicked -= TermsOfServiceButton_Clicked;
  43. mPrivacyPolicyButton.clicked -= PrivacyPolicyButton_Clicked;
  44. mPrivacyPolicyStatementButton.clicked -= PrivacyPolicyStatementButton_Clicked;
  45. mUserNameTextField.UnregisterValueChangedCallback(
  46. UserNameTextBox_TextChanged);
  47. mPasswordTextField.UnregisterValueChangedCallback(
  48. PasswordTextBox_TextChanged);
  49. mConfirmPasswordTextField.UnregisterValueChangedCallback(
  50. ConfirmPasswordTextBox_TextChanged);
  51. }
  52. void UserNameTextBox_TextChanged(ChangeEvent<string> evt)
  53. {
  54. CleanNotification(mUserNotificationLabel);
  55. }
  56. void PasswordTextBox_TextChanged(ChangeEvent<string> evt)
  57. {
  58. CleanNotification(mPasswordNotificationLabel);
  59. }
  60. void ConfirmPasswordTextBox_TextChanged(ChangeEvent<string> evt)
  61. {
  62. CleanNotification(mConfirmPasswordNotificationLabel);
  63. }
  64. void SignUpButton_Clicked()
  65. {
  66. CleanNotificationLabels();
  67. SignUp.Run(
  68. mRestApi,
  69. new SaveCloudEditionCreds(),
  70. new SignUp.Data(
  71. mUserNameTextField.text,
  72. mPasswordTextField.text,
  73. mConfirmPasswordTextField.text,
  74. false),
  75. mProgressControls,
  76. this);
  77. }
  78. void SignUpWithUnityButton_clicked()
  79. {
  80. mWaitingSignInPanel = new WaitingSignInPanel(
  81. mParentWindow,
  82. mParentWindow,
  83. mRestApi,
  84. mCmConnection);
  85. mParentWindow.ReplaceRootPanel(mWaitingSignInPanel);
  86. mWaitingSignInPanel.OAuthSignInForConfigure(SsoProvider.UNITY_URL_ACTION);
  87. }
  88. void TermsOfServiceButton_Clicked()
  89. {
  90. Application.OpenURL(SignUp.TERMS_OF_SERVICE_URL);
  91. }
  92. void PrivacyPolicyButton_Clicked()
  93. {
  94. Application.OpenURL(SignUp.PRIVACY_POLICY_URL);
  95. }
  96. void PrivacyPolicyStatementButton_Clicked()
  97. {
  98. Application.OpenURL(SignUp.PRIVACY_POLICY_URL);
  99. }
  100. void BuildComponents()
  101. {
  102. mUserNameTextField = this.Q<TextField>("emailField");
  103. mUserNameTextField.label = PlasticLocalization.GetString(
  104. PlasticLocalization.Name.Email);
  105. mUserNameTextField.RegisterValueChangedCallback(
  106. UserNameTextBox_TextChanged);
  107. mUserNotificationLabel = this.Q<Label>("emailNotification");
  108. mPasswordTextField = this.Q<TextField>("passwordField");
  109. mPasswordTextField.label = PlasticLocalization.GetString(
  110. PlasticLocalization.Name.Password);
  111. mPasswordTextField.RegisterValueChangedCallback(
  112. PasswordTextBox_TextChanged);
  113. mConfirmPasswordTextField = this.Q<TextField>("confirmPasswordField");
  114. mConfirmPasswordTextField.label = PlasticLocalization.GetString(
  115. PlasticLocalization.Name.ConfirmPassword);
  116. mConfirmPasswordTextField.RegisterValueChangedCallback(
  117. ConfirmPasswordTextBox_TextChanged);
  118. mPasswordNotificationLabel = this.Q<Label>("passwordNotificationLabel");
  119. mConfirmPasswordNotificationLabel = this.Q<Label>("confirmPasswordNotificationLabel");
  120. mSignUpButton = this.Q<Button>("signUp");
  121. mSignUpButton.text = PlasticLocalization.GetString(PlasticLocalization.Name.SignUp);
  122. mSignUpButton.clicked += SignUpButton_Clicked;
  123. string[] signUpText = PlasticLocalization.GetString(
  124. PlasticLocalization.Name.SignUpAgreeToShort).Split('{', '}');
  125. Label signUpAgreePt1 = this.Q<Label>("signUpAgreePt1");
  126. signUpAgreePt1.text = signUpText[0];
  127. mTermsOfServiceButton = this.Q<Button>("termsOfService");
  128. mTermsOfServiceButton.text = PlasticLocalization.GetString(PlasticLocalization.Name.TermsOfService);
  129. mTermsOfServiceButton.clicked += TermsOfServiceButton_Clicked;
  130. Label signUpAgreePt2 = this.Q<Label>("signUpAgreePt2");
  131. signUpAgreePt2.text = signUpText[2];
  132. mPrivacyPolicyButton = this.Q<Button>("privacyPolicy");
  133. mPrivacyPolicyButton.text = PlasticLocalization.GetString(PlasticLocalization.Name.PrivacyPolicy);
  134. mPrivacyPolicyButton.clicked += PrivacyPolicyButton_Clicked;
  135. this.SetControlImage("unityIcon", Images.Name.ButtonSsoSignInUnity);
  136. mSignUpWithUnityButton = this.Q<Button>("unityIDButton");
  137. mSignUpWithUnityButton.text = PlasticLocalization.GetString(PlasticLocalization.Name.SignInWithUnityID);
  138. mSignUpWithUnityButton.clicked += SignUpWithUnityButton_clicked;
  139. this.SetControlText<Label>("privacyStatementText",
  140. PlasticLocalization.Name.PrivacyStatementText,
  141. PlasticLocalization.GetString(PlasticLocalization.Name.PrivacyStatement));
  142. mPrivacyPolicyStatementButton = this.Q<Button>("privacyStatement");
  143. mPrivacyPolicyStatementButton.text = PlasticLocalization.GetString(
  144. PlasticLocalization.Name.PrivacyStatement);
  145. mPrivacyPolicyStatementButton.clicked += PrivacyPolicyStatementButton_Clicked;
  146. // TODO: add controls to disable and disable control logic
  147. mProgressControls = new ProgressControlsForDialogs(new VisualElement[] { mSignUpButton, mSignUpWithUnityButton });
  148. mProgressContainer = this.Q<VisualElement>("progressContainer");
  149. mProgressContainer.Add((VisualElement)mProgressControls);
  150. }
  151. void InitializeLayoutAndStyles()
  152. {
  153. AddToClassList("grow");
  154. this.LoadLayout(typeof(SSOSignUpPanel).Name);
  155. this.LoadStyle("SignInSignUp");
  156. this.LoadStyle(typeof(SSOSignUpPanel).Name);
  157. }
  158. void CleanNotificationLabels()
  159. {
  160. CleanNotification(mUserNotificationLabel);
  161. CleanNotification(mPasswordNotificationLabel);
  162. CleanNotification(mConfirmPasswordNotificationLabel);
  163. }
  164. static void ShowNotification(Label label, string text)
  165. {
  166. label.text = text;
  167. label.RemoveFromClassList("hidden");
  168. }
  169. static void CleanNotification(Label label)
  170. {
  171. label.text = "";
  172. label.AddToClassList("hidden");
  173. }
  174. void SignUp.INotify.Success(List<string> organizations, bool canCreateAnOrganization)
  175. {
  176. mParentWindow.ShowOrganizationPanel(
  177. PlasticLocalization.GetString(PlasticLocalization.Name.SignUp),
  178. organizations,
  179. canCreateAnOrganization);
  180. }
  181. void SignUp.INotify.ValidationFailed(SignUp.ValidationResult validationResult)
  182. {
  183. if (validationResult.UserError != null)
  184. ShowNotification(mUserNotificationLabel, validationResult.UserError);
  185. if (validationResult.ClearPasswordError != null)
  186. ShowNotification(mPasswordNotificationLabel, validationResult.ClearPasswordError);
  187. if (validationResult.ClearPasswordConfirmationError != null)
  188. ShowNotification(mConfirmPasswordNotificationLabel, validationResult.ClearPasswordConfirmationError);
  189. }
  190. void SignUp.INotify.LoginNeeded(Login.Data loginData, string message)
  191. {
  192. Debug.Log("LoginNeeded");
  193. throw new NotImplementedException();
  194. //mWelcomeForm.SwitchToLoginPage(
  195. // loginData.User, loginData.ClearPassword, message);
  196. }
  197. void SignUp.INotify.Error(string message)
  198. {
  199. mProgressControls.ShowError(message);
  200. }
  201. Button mTermsOfServiceButton;
  202. Button mPrivacyPolicyButton;
  203. Button mPrivacyPolicyStatementButton;
  204. TextField mUserNameTextField;
  205. TextField mPasswordTextField;
  206. TextField mConfirmPasswordTextField;
  207. Label mUserNotificationLabel;
  208. Label mPasswordNotificationLabel;
  209. Label mConfirmPasswordNotificationLabel;
  210. Button mSignUpButton;
  211. Button mSignUpWithUnityButton;
  212. VisualElement mProgressContainer;
  213. IProgressControls mProgressControls;
  214. WaitingSignInPanel mWaitingSignInPanel;
  215. readonly CloudEditionWelcomeWindow mParentWindow;
  216. readonly IPlasticWebRestApi mRestApi;
  217. readonly CmConnection mCmConnection;
  218. //TODO: remove this once Google sign up functionality is added
  219. const bool hideGoogleSignUpButton = true;
  220. }
  221. }