A game about forced loneliness, made by TACStudios
1using System;
2using UnityEditor;
3using UnityEngine;
4
5using Codice.Client.Common.Threading;
6using Codice.CM.Common;
7using Codice.LogWrapper;
8using PlasticGui;
9using Unity.PlasticSCM.Editor.UI;
10using Unity.PlasticSCM.Editor.WebApi;
11
12namespace Unity.PlasticSCM.Editor.Configuration.CloudEdition.Welcome
13{
14 internal class AutoLogin
15 {
16 internal enum State : byte
17 {
18 Off = 0,
19 Started = 1,
20 Running = 2,
21 ResponseInit = 3,
22 ResponseEnd = 4,
23 ResponseSuccess = 5,
24 ErrorNoToken = 20,
25 ErrorTokenException = 21,
26 ErrorResponseNull = 22,
27 ErrorResponseError = 23,
28 ErrorTokenEmpty = 24,
29 }
30
31 internal void Run()
32 {
33 mPlasticWindow = GetPlasticWindow();
34
35 if (!string.IsNullOrEmpty(CloudProjectSettings.accessToken))
36 {
37 mLog.Debug("Run");
38 ExchangeTokensAndJoinOrganizationInThreadWaiter(CloudProjectSettings.accessToken);
39 return;
40 }
41
42 mPlasticWindow.GetWelcomeView().autoLoginState = AutoLogin.State.ErrorNoToken;
43 }
44
45 void ExchangeTokensAndJoinOrganizationInThreadWaiter(string unityAccessToken)
46 {
47 int ini = Environment.TickCount;
48
49 TokenExchangeResponse tokenExchangeResponse = null;
50
51 IThreadWaiter waiter = ThreadWaiter.GetWaiter(10);
52 waiter.Execute(
53 /*threadOperationDelegate*/ delegate
54 {
55 mPlasticWindow.GetWelcomeView().autoLoginState = AutoLogin.State.ResponseInit;
56 tokenExchangeResponse = WebRestApiClient.PlasticScm.TokenExchange(unityAccessToken);
57 },
58 /*afterOperationDelegate*/ delegate
59 {
60 mLog.DebugFormat(
61 "TokenExchange time {0} ms",
62 Environment.TickCount - ini);
63
64 if (waiter.Exception != null)
65 {
66 mPlasticWindow.GetWelcomeView().autoLoginState = AutoLogin.State.ErrorTokenException;
67 ExceptionsHandler.LogException(
68 "TokenExchangeSetting",
69 waiter.Exception);
70 Debug.LogWarning(waiter.Exception.Message);
71 return;
72 }
73
74 if (tokenExchangeResponse == null)
75 {
76 mPlasticWindow.GetWelcomeView().autoLoginState = AutoLogin.State.ErrorResponseNull;
77 var warning = PlasticLocalization.GetString(PlasticLocalization.Name.TokenExchangeResponseNull);
78 mLog.Warn(warning);
79 Debug.LogWarning(warning);
80 return;
81 }
82
83 if (tokenExchangeResponse.Error != null)
84 {
85 mPlasticWindow.GetWelcomeView().autoLoginState = AutoLogin.State.ErrorResponseError;
86 var warning = string.Format(
87 PlasticLocalization.GetString(PlasticLocalization.Name.TokenExchangeResponseError),
88 tokenExchangeResponse.Error.Message, tokenExchangeResponse.Error.ErrorCode);
89 mLog.ErrorFormat(warning);
90 Debug.LogWarning(warning);
91 return;
92 }
93
94 if (string.IsNullOrEmpty(tokenExchangeResponse.AccessToken))
95 {
96 mPlasticWindow.GetWelcomeView().autoLoginState = AutoLogin.State.ErrorTokenEmpty;
97 var warning = string.Format(
98 PlasticLocalization.GetString(PlasticLocalization.Name.TokenExchangeAccessEmpty),
99 tokenExchangeResponse.User);
100 mLog.InfoFormat(warning);
101 Debug.LogWarning(warning);
102 return;
103 }
104
105 mPlasticWindow.GetWelcomeView().autoLoginState = AutoLogin.State.ResponseEnd;
106
107 Credentials credentials = new Credentials(
108 new SEID(tokenExchangeResponse.User, false, tokenExchangeResponse.AccessToken),
109 SEIDWorkingMode.SSOWorkingMode);
110
111 ShowOrganizationsPanel(credentials);
112 });
113 }
114
115 void ShowOrganizationsPanel(Credentials credentials)
116 {
117 mPlasticWindow = GetPlasticWindow();
118 mPlasticWindow.GetWelcomeView().autoLoginState = AutoLogin.State.ResponseSuccess;
119
120 CloudEditionWelcomeWindow.ShowWindow(
121 PlasticGui.Plastic.WebRestAPI, null, true);
122
123 mCloudEditionWelcomeWindow = CloudEditionWelcomeWindow.GetWelcomeWindow();
124
125 mCloudEditionWelcomeWindow.GetOrganizations(credentials);
126
127 mCloudEditionWelcomeWindow.Focus();
128 }
129
130 static PlasticWindow GetPlasticWindow()
131 {
132 var windows = Resources.FindObjectsOfTypeAll<PlasticWindow>();
133 PlasticWindow plasticWindow = windows.Length > 0 ? windows[0] : null;
134
135 if (plasticWindow == null)
136 plasticWindow = ShowWindow.Plastic();
137
138 return plasticWindow;
139 }
140
141 PlasticWindow mPlasticWindow;
142 CloudEditionWelcomeWindow mCloudEditionWelcomeWindow;
143
144 static readonly ILog mLog = PlasticApp.GetLogger("AutoLogin");
145 }
146}