File size: 4,640 Bytes
18a519f | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 | 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);
}
}
}
}
|