138 lines
4.5 KiB
C#
138 lines
4.5 KiB
C#
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);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|