Keine Beschreibung
Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

SSOCredentialsDialog.cs 7.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  1. using UnityEngine;
  2. using UnityEditor;
  3. using PlasticGui;
  4. using Unity.PlasticSCM.Editor.UI;
  5. using Unity.PlasticSCM.Editor.UI.Progress;
  6. using Codice.CM.Common;
  7. using Codice.Client.Common.Connection;
  8. using Unity.PlasticSCM.Editor.Configuration.CloudEdition.Welcome;
  9. using PlasticGui.Configuration.CloudEdition.Welcome;
  10. using System.Collections.Generic;
  11. using PlasticGui.WebApi.Responses;
  12. using PlasticGui.Configuration.CloudEdition;
  13. namespace Unity.PlasticSCM.Editor.Configuration
  14. {
  15. internal class SSOCredentialsDialog : PlasticDialog, OAuthSignIn.INotify, Login.INotify
  16. {
  17. protected override Rect DefaultRect
  18. {
  19. get
  20. {
  21. var baseRect = base.DefaultRect;
  22. return new Rect(baseRect.x, baseRect.y, 525, 450);
  23. }
  24. }
  25. internal static AskCredentialsToUser.DialogData RequestCredentials(
  26. string cloudServer,
  27. EditorWindow parentWindow)
  28. {
  29. SSOCredentialsDialog dialog = Create(
  30. cloudServer, new ProgressControlsForDialogs());
  31. ResponseType dialogResult = dialog.RunModal(parentWindow);
  32. return dialog.BuildCredentialsDialogData(dialogResult);
  33. }
  34. protected override void OnModalGUI()
  35. {
  36. Title(PlasticLocalization.GetString(
  37. PlasticLocalization.Name.CredentialsDialogTitle));
  38. Paragraph(PlasticLocalization.GetString(
  39. PlasticLocalization.Name.CredentialsDialogExplanation, mServer));
  40. GUILayout.Space(20);
  41. DoEntriesArea();
  42. GUILayout.Space(10);
  43. DrawProgressForDialogs.For(
  44. mProgressControls.ProgressData);
  45. GUILayout.Space(10);
  46. DoButtonsArea();
  47. }
  48. protected override string GetTitle()
  49. {
  50. return PlasticLocalization.GetString(
  51. PlasticLocalization.Name.CredentialsDialogTitle);
  52. }
  53. AskCredentialsToUser.DialogData BuildCredentialsDialogData(
  54. ResponseType dialogResult)
  55. {
  56. return new AskCredentialsToUser.DialogData(
  57. dialogResult == ResponseType.Ok,
  58. mEmail, mPassword, false, SEIDWorkingMode.SSOWorkingMode);
  59. }
  60. void OAuthSignIn.INotify.SuccessForSSO(string organization)
  61. {
  62. OkButtonAction();
  63. }
  64. void OAuthSignIn.INotify.SuccessForProfile(string email)
  65. {
  66. OkButtonAction();
  67. }
  68. void OAuthSignIn.INotify.SuccessForCredentials(
  69. string email,
  70. string accessToken)
  71. {
  72. OkButtonAction();
  73. }
  74. void OAuthSignIn.INotify.SuccessForHomeView(string usrName)
  75. {
  76. }
  77. void OAuthSignIn.INotify.Cancel(string errorMessage)
  78. {
  79. CancelButtonAction();
  80. }
  81. void OAuthSignIn.INotify.SuccessForConfigure(
  82. List<string> organizations,
  83. bool canCreateAnOrganization,
  84. string userName,
  85. string accessToken)
  86. {
  87. mEmail = userName;
  88. mPassword = accessToken;
  89. if (!organizations.Contains(mServer))
  90. {
  91. CancelButtonAction();
  92. return;
  93. }
  94. CloudEditionWelcomeWindow.JoinCloudServer(
  95. mServer, userName, accessToken);
  96. GetWindow<PlasticWindow>().InitializePlastic();
  97. OkButtonAction();
  98. }
  99. void DoButtonsArea()
  100. {
  101. using (new EditorGUILayout.HorizontalScope())
  102. {
  103. GUILayout.FlexibleSpace();
  104. if (Application.platform == RuntimePlatform.WindowsEditor)
  105. {
  106. DoOkButton();
  107. DoCancelButton();
  108. return;
  109. }
  110. DoCancelButton();
  111. DoOkButton();
  112. }
  113. }
  114. internal void OAuthSignInForConfigure(string ssoProviderName)
  115. {
  116. OAuthSignIn mSignIn = new OAuthSignIn();
  117. mSignIn.ForConfigure(
  118. PlasticGui.Plastic.WebRestAPI,
  119. ssoProviderName,
  120. mProgressControls,
  121. this,
  122. GetWindow<PlasticWindow>().CmConnectionForTesting);
  123. }
  124. void DoUnityIDButton()
  125. {
  126. if (NormalButton("Sign in with Unity ID"))
  127. {
  128. OAuthSignInForConfigure(SsoProvider.UNITY_URL_ACTION);
  129. }
  130. }
  131. void DoEntriesArea()
  132. {
  133. Paragraph("Sign in with Unity ID");
  134. GUILayout.Space(5);
  135. DoUnityIDButton();
  136. GUILayout.Space(25);
  137. Paragraph(" --or-- ");
  138. Paragraph("Sign in with email");
  139. mEmail = TextEntry(PlasticLocalization.GetString(
  140. PlasticLocalization.Name.Email), mEmail,
  141. ENTRY_WIDTH, ENTRY_X);
  142. GUILayout.Space(5);
  143. mPassword = PasswordEntry(PlasticLocalization.GetString(
  144. PlasticLocalization.Name.Password), mPassword,
  145. ENTRY_WIDTH, ENTRY_X);
  146. }
  147. void DoOkButton()
  148. {
  149. if (!AcceptButton(PlasticLocalization.GetString(
  150. PlasticLocalization.Name.OkButton)))
  151. return;
  152. OkButtonWithValidationAction();
  153. }
  154. void DoCancelButton()
  155. {
  156. if (!NormalButton(PlasticLocalization.GetString(
  157. PlasticLocalization.Name.CancelButton)))
  158. return;
  159. CancelButtonAction();
  160. }
  161. void OkButtonWithValidationAction()
  162. {
  163. Login.Run(
  164. PlasticGui.Plastic.WebRestAPI,
  165. new SaveCloudEditionCreds(),
  166. mEmail,
  167. mPassword,
  168. string.Empty,
  169. string.Empty,
  170. Login.Mode.Configure,
  171. mProgressControls,
  172. this);
  173. }
  174. void Login.INotify.SuccessForConfigure(
  175. List<string> organizations,
  176. bool canCreateAnOrganization,
  177. string userName,
  178. string password)
  179. {
  180. OkButtonAction();
  181. }
  182. void Login.INotify.SuccessForSSO(
  183. string organization)
  184. {
  185. OkButtonAction();
  186. }
  187. void Login.INotify.SuccessForCredentials(string userName, string password)
  188. {
  189. OkButtonAction();
  190. }
  191. void Login.INotify.SuccessForProfile(
  192. string userName)
  193. {
  194. OkButtonAction();
  195. }
  196. void Login.INotify.SuccessForHomeView(string userName)
  197. {
  198. }
  199. void Login.INotify.ValidationFailed(
  200. Login.ValidationResult validationResult)
  201. {
  202. CancelButtonAction();
  203. }
  204. void Login.INotify.SignUpNeeded(
  205. Login.Data loginData)
  206. {
  207. CancelButtonAction();
  208. }
  209. void Login.INotify.Error(
  210. string message)
  211. {
  212. CancelButtonAction();
  213. }
  214. static SSOCredentialsDialog Create(
  215. string server,
  216. ProgressControlsForDialogs progressControls)
  217. {
  218. var instance = CreateInstance<SSOCredentialsDialog>();
  219. instance.mServer = server;
  220. instance.mProgressControls = progressControls;
  221. instance.mEnterKeyAction = instance.OkButtonWithValidationAction;
  222. instance.mEscapeKeyAction = instance.CancelButtonAction;
  223. return instance;
  224. }
  225. string mEmail;
  226. string mPassword = string.Empty;
  227. ProgressControlsForDialogs mProgressControls;
  228. string mServer;
  229. const float ENTRY_WIDTH = 345f;
  230. const float ENTRY_X = 150f;
  231. }
  232. }