No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

SSOCredentialsDialog.cs 8.0KB

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