137 lines
4.5 KiB
137 lines
4.5 KiB
using Codice.Client.Common; |
|
using Codice.CM.Common; |
|
using PlasticGui; |
|
using Unity.PlasticSCM.Editor.Configuration.CloudEdition.Welcome; |
|
using Unity.PlasticSCM.Editor.WebApi; |
|
|
|
namespace Unity.PlasticSCM.Editor.Configuration |
|
{ |
|
internal static class AutoConfig |
|
{ |
|
internal static TokenExchangeResponse PlasticCredentials( |
|
string unityAccessToken, |
|
string serverName, |
|
string projectPath) |
|
{ |
|
SetupUnityEditionToken.CreateCloudEditionTokenIfNeeded(); |
|
|
|
bool isClientConfigConfigured = ClientConfig.IsConfigured(); |
|
if (!isClientConfigConfigured) |
|
{ |
|
ConfigureClientConf.FromUnityAccessToken( |
|
unityAccessToken, serverName, projectPath); |
|
} |
|
|
|
TokenExchangeResponse tokenExchangeResponse = WebRestApiClient. |
|
PlasticScm.TokenExchange(unityAccessToken); |
|
|
|
if (tokenExchangeResponse.Error != null) |
|
return tokenExchangeResponse; |
|
|
|
CloudEditionWelcomeWindow.JoinCloudServer( |
|
serverName, |
|
tokenExchangeResponse.User, |
|
tokenExchangeResponse.AccessToken); |
|
|
|
if (!isClientConfigConfigured) |
|
return tokenExchangeResponse; |
|
|
|
ConfigureProfile.ForServerIfNeeded( |
|
serverName, |
|
tokenExchangeResponse.User); |
|
|
|
return tokenExchangeResponse; |
|
} |
|
|
|
static class ConfigureClientConf |
|
{ |
|
internal static void FromUnityAccessToken( |
|
string unityAccessToken, |
|
string serverName, |
|
string projectPath) |
|
{ |
|
CredentialsResponse response = WebRestApiClient. |
|
PlasticScm.GetCredentials(unityAccessToken); |
|
|
|
if (response.Error != null) |
|
{ |
|
UnityEngine.Debug.LogErrorFormat( |
|
PlasticLocalization.GetString( |
|
PlasticLocalization.Name.ErrorGettingCredentialsCloudProject), |
|
response.Error.Message, |
|
response.Error.ErrorCode); |
|
|
|
return; |
|
} |
|
|
|
ClientConfigData configData = BuildClientConfigData( |
|
serverName, projectPath, response); |
|
|
|
ClientConfig.Get().Save(configData); |
|
} |
|
|
|
static ClientConfigData BuildClientConfigData( |
|
string serverName, |
|
string projectPath, |
|
CredentialsResponse response) |
|
{ |
|
SEIDWorkingMode workingMode = GetWorkingMode(response.Type); |
|
|
|
ClientConfigData configData = new ClientConfigData(); |
|
|
|
configData.WorkspaceServer = serverName; |
|
configData.CurrentWorkspace = projectPath; |
|
configData.WorkingMode = workingMode.ToString(); |
|
configData.SecurityConfig = UserInfo.GetSecurityConfigStr( |
|
workingMode, |
|
response.Email, |
|
GetPassword(response.Token, response.Type)); |
|
configData.LastRunningEdition = InstalledEdition.Get(); |
|
return configData; |
|
} |
|
|
|
static string GetPassword( |
|
string token, |
|
CredentialsResponse.TokenType tokenType) |
|
{ |
|
if (tokenType == CredentialsResponse.TokenType.Bearer) |
|
return BEARER_PREFIX + token; |
|
|
|
return token; |
|
} |
|
|
|
static SEIDWorkingMode GetWorkingMode(CredentialsResponse.TokenType tokenType) |
|
{ |
|
if (tokenType == CredentialsResponse.TokenType.Bearer) |
|
return SEIDWorkingMode.SSOWorkingMode; |
|
|
|
return SEIDWorkingMode.LDAPWorkingMode; |
|
} |
|
|
|
const string BEARER_PREFIX = "Bearer "; |
|
} |
|
|
|
static class ConfigureProfile |
|
{ |
|
internal static void ForServerIfNeeded(string serverName, string user) |
|
{ |
|
ProfileManager profileManager = CmConnection.Get().GetProfileManager(); |
|
|
|
ServerProfile serverProfile = profileManager.GetProfileForServer(serverName); |
|
|
|
if (serverProfile != null) |
|
return; |
|
|
|
serverProfile = ProfileManager.CreateProfile( |
|
serverName, |
|
SEIDWorkingMode.SSOWorkingMode, |
|
user); |
|
|
|
profileManager.SaveProfile(serverProfile); |
|
} |
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|