CloudEditionWelcomeWindow.cs 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342
  1. using UnityEditor;
  2. using UnityEngine;
  3. using UnityEngine.UIElements;
  4. using PlasticGui;
  5. using PlasticGui.WebApi;
  6. using Unity.PlasticSCM.Editor.UI.UIElements;
  7. using PlasticGui.Configuration.CloudEdition.Welcome;
  8. using System.Collections.Generic;
  9. using Codice.Client.Common.Servers;
  10. using Codice.Client.Common;
  11. using Codice.Utils;
  12. using Unity.PlasticSCM.Editor.Views.Welcome;
  13. using Codice.CM.Common;
  14. namespace Unity.PlasticSCM.Editor.Configuration.CloudEdition.Welcome
  15. {
  16. internal interface IWelcomeWindowNotify
  17. {
  18. void SuccessForConfigure(List<string> organizations, bool canCreateAnOrganization);
  19. void SuccessForSSO(string organization);
  20. void SuccessForCredentials(string userName, string password);
  21. void SuccessForProfile(string userName);
  22. void SignUpNeeded(string user, string password);
  23. void Back();
  24. }
  25. internal class CloudEditionWelcomeWindow :
  26. EditorWindow,
  27. OAuthSignIn.INotify,
  28. IWelcomeWindowNotify
  29. {
  30. internal static void ShowWindow(
  31. IPlasticWebRestApi restApi,
  32. CmConnection cmConnection,
  33. WelcomeView welcomeView,
  34. bool autoLogin = false)
  35. {
  36. sRestApi = restApi;
  37. sCmConnection = cmConnection;
  38. sAutoLogin = autoLogin;
  39. CloudEditionWelcomeWindow window = GetWindow<CloudEditionWelcomeWindow>();
  40. window.titleContent = new GUIContent(
  41. PlasticLocalization.GetString(PlasticLocalization.Name.SignInToPlasticSCM));
  42. window.minSize = window.maxSize = new Vector2(500, 460);
  43. window.mWelcomeView = welcomeView;
  44. window.Show();
  45. }
  46. internal static CloudEditionWelcomeWindow GetWelcomeWindow()
  47. {
  48. return GetWindow<CloudEditionWelcomeWindow>();
  49. }
  50. void OnEnable()
  51. {
  52. BuildComponents();
  53. }
  54. internal void CancelJoinOrganization()
  55. {
  56. if (sAutoLogin)
  57. {
  58. GetWindow<PlasticWindow>().GetWelcomeView().autoLoginState = AutoLogin.State.Started;
  59. }
  60. }
  61. internal void JoinOrganizationAndWelcomePage(string organization)
  62. {
  63. JoinOrganization(organization,
  64. mUserName,
  65. mAccessToken);
  66. GetWelcomePage.Run(sRestApi, organization);
  67. }
  68. internal void JoinOrganization(string organization)
  69. {
  70. JoinOrganization(organization,
  71. mUserName,
  72. mAccessToken);
  73. }
  74. internal static void JoinOrganization(string organization, string username, string accessToken)
  75. {
  76. SaveCloudServer.ToPlasticGuiConfig(organization);
  77. SaveCloudServer.ToPlasticGuiConfigFile(
  78. organization, GetPlasticConfigFileToSaveOrganization());
  79. SaveCloudServer.ToPlasticGuiConfigFile(
  80. organization, GetGluonConfigFileToSaveOrganization());
  81. KnownServers.ServersFromCloud.InitializeForWindows(
  82. PlasticGuiConfig.Get().Configuration.DefaultCloudServer);
  83. CloudEditionWelcome.WriteToTokensConf(
  84. organization,
  85. username,
  86. accessToken);
  87. if (sAutoLogin)
  88. {
  89. ClientConfigData clientConfigData = ConfigurationChecker.GetClientConfigData();
  90. clientConfigData.WorkspaceServer = organization;
  91. clientConfigData.WorkingMode = SEIDWorkingMode.SSOWorkingMode.ToString();
  92. clientConfigData.SecurityConfig = username;
  93. ClientConfig.Get().Save(clientConfigData);
  94. GetWindow<PlasticWindow>().GetWelcomeView().autoLoginState = AutoLogin.State.OrganizationChoosed;
  95. }
  96. }
  97. internal void ReplaceRootPanel(VisualElement panel)
  98. {
  99. rootVisualElement.Clear();
  100. rootVisualElement.Add(panel);
  101. }
  102. void OnDestroy()
  103. {
  104. Dispose();
  105. if (mWelcomeView != null)
  106. mWelcomeView.OnUserClosedConfigurationWindow();
  107. }
  108. void Dispose()
  109. {
  110. if (mSignInPanel != null)
  111. mSignInPanel.Dispose();
  112. if (mSSOSignUpPanel != null)
  113. mSSOSignUpPanel.Dispose();
  114. if (mOrganizationPanel != null)
  115. mOrganizationPanel.Dispose();
  116. }
  117. void OAuthSignIn.INotify.SuccessForConfigure(
  118. List<string> organizations,
  119. bool canCreateAnOrganization,
  120. string userName,
  121. string accessToken)
  122. {
  123. ShowOrganizationPanel(
  124. GetWindowTitle(),
  125. organizations,
  126. canCreateAnOrganization);
  127. Focus();
  128. mUserName = userName;
  129. mAccessToken = accessToken;
  130. }
  131. internal void ShowOrganizationPanel(
  132. string title,
  133. List<string> organizations,
  134. bool canCreateAnOrganization)
  135. {
  136. mOrganizationPanel = new OrganizationPanel(
  137. this,
  138. sRestApi,
  139. title,
  140. organizations,
  141. canCreateAnOrganization);
  142. ReplaceRootPanel(mOrganizationPanel);
  143. }
  144. void OAuthSignIn.INotify.SuccessForSSO(string organization)
  145. {
  146. // empty implementation
  147. }
  148. void OAuthSignIn.INotify.SuccessForProfile(string email)
  149. {
  150. // empty implementation
  151. }
  152. void OAuthSignIn.INotify.SuccessForCredentials(
  153. string email,
  154. string accessToken)
  155. {
  156. // empty implementation
  157. }
  158. void OAuthSignIn.INotify.Cancel(string errorMessage)
  159. {
  160. Focus();
  161. }
  162. void IWelcomeWindowNotify.SuccessForConfigure(
  163. List<string> organizations,
  164. bool canCreateAnOrganization)
  165. {
  166. ShowOrganizationPanel(
  167. GetWindowTitle(),
  168. organizations,
  169. canCreateAnOrganization);
  170. }
  171. internal void FillUserAndToken(
  172. string userName,
  173. string accessToken)
  174. {
  175. mUserName = userName;
  176. mAccessToken = accessToken;
  177. }
  178. internal void ShowOrganizationPanelFromAutoLogin(
  179. List<string> organizations,
  180. bool canCreateAnOrganization)
  181. {
  182. ShowOrganizationPanel(
  183. GetWindowTitle(),
  184. organizations,
  185. canCreateAnOrganization);
  186. }
  187. void IWelcomeWindowNotify.SuccessForSSO(string organization)
  188. {
  189. // empty implementation
  190. }
  191. void IWelcomeWindowNotify.SuccessForCredentials(string userName, string password)
  192. {
  193. // empty implementation
  194. }
  195. void IWelcomeWindowNotify.SuccessForProfile(string userName)
  196. {
  197. // empty implementation
  198. }
  199. void IWelcomeWindowNotify.SignUpNeeded(
  200. string user,
  201. string password)
  202. {
  203. SwitchToSignUpPage(user, password);
  204. }
  205. void IWelcomeWindowNotify.Back()
  206. {
  207. rootVisualElement.Clear();
  208. rootVisualElement.Add(mTabView);
  209. }
  210. void SwitchToSignUpPage(
  211. string user,
  212. string password)
  213. {
  214. mSSOSignUpPanel.SetSignUpData(user, password);
  215. rootVisualElement.Clear();
  216. rootVisualElement.Add(mTabView);
  217. mTabView.SwitchContent(mSSOSignUpPanel);
  218. }
  219. string GetWindowTitle()
  220. {
  221. return mIsOnSignIn ?
  222. PlasticLocalization.GetString(PlasticLocalization.Name.SignInToPlasticSCM) :
  223. PlasticLocalization.GetString(PlasticLocalization.Name.SignUp);
  224. }
  225. internal static string GetPlasticConfigFileToSaveOrganization()
  226. {
  227. if (PlatformIdentifier.IsMac())
  228. {
  229. return "macgui.conf";
  230. }
  231. return "plasticgui.conf";
  232. }
  233. internal static string GetGluonConfigFileToSaveOrganization()
  234. {
  235. if (PlatformIdentifier.IsMac())
  236. {
  237. return "gluon.conf";
  238. }
  239. return "gameui.conf";
  240. }
  241. void BuildComponents()
  242. {
  243. VisualElement root = rootVisualElement;
  244. root.Clear();
  245. mTabView = new TabView();
  246. mSignInPanel = new SignInPanel(
  247. this,
  248. sRestApi,
  249. sCmConnection);
  250. mSSOSignUpPanel = new SSOSignUpPanel(
  251. this,
  252. sRestApi,
  253. sCmConnection);
  254. mTabView.AddTab(
  255. PlasticLocalization.GetString(PlasticLocalization.Name.SignIn),
  256. mSignInPanel).clicked += () =>
  257. {
  258. mIsOnSignIn = true;
  259. titleContent = new GUIContent(GetWindowTitle());
  260. };
  261. mTabView.AddTab(
  262. PlasticLocalization.GetString(PlasticLocalization.Name.SignUp),
  263. mSSOSignUpPanel).clicked += () =>
  264. {
  265. mIsOnSignIn = false;
  266. titleContent = new GUIContent(GetWindowTitle());
  267. };
  268. root.Add(mTabView);
  269. if (sAutoLogin)
  270. mSignInPanel.SignInWithUnityIdButtonAutoLogin();
  271. }
  272. internal TabView mTabView;
  273. OrganizationPanel mOrganizationPanel;
  274. SignInPanel mSignInPanel;
  275. SSOSignUpPanel mSSOSignUpPanel;
  276. WelcomeView mWelcomeView;
  277. string mUserName;
  278. string mAccessToken;
  279. bool mIsOnSignIn = true;
  280. static IPlasticWebRestApi sRestApi;
  281. static CmConnection sCmConnection;
  282. static bool sAutoLogin = false;
  283. }
  284. }