Maze / Library /PackageCache /com.unity.collab-proxy@2.0.4 /Editor /PlasticSCM /WebApi /WebRestApiClient.cs
| using System; | |
| using System.IO; | |
| using System.Net; | |
| using Unity.Plastic.Newtonsoft.Json; | |
| using Codice.Client.Common.WebApi; | |
| using Codice.CM.Common; | |
| using Codice.LogWrapper; | |
| using PlasticGui.WebApi.Responses; | |
| namespace Unity.PlasticSCM.Editor.WebApi | |
| { | |
| internal static class WebRestApiClient | |
| { | |
| internal static class PlasticScm | |
| { | |
| internal static TokenExchangeResponse TokenExchange(string unityAccessToken) | |
| { | |
| Uri endpoint = mWebApiUris.GetFullUri( | |
| string.Format(TokenExchangeEndpoint, unityAccessToken)); | |
| try | |
| { | |
| HttpWebRequest request = (HttpWebRequest)WebRequest.Create(endpoint); | |
| request.Method = "GET"; | |
| request.ContentType = "application/json"; | |
| return GetResponse<TokenExchangeResponse>(request); | |
| } | |
| catch (Exception ex) | |
| { | |
| mLog.ErrorFormat( | |
| "Unable to exchange tokens '{0}': {1}", | |
| endpoint.ToString(), ex.Message); | |
| mLog.DebugFormat( | |
| "StackTrace:{0}{1}", | |
| Environment.NewLine, ex.StackTrace); | |
| return null; | |
| } | |
| } | |
| internal static IsCollabProjectMigratedResponse IsCollabProjectMigrated(string bearerToken, string projectId) | |
| { | |
| Uri endpoint = mWebApiUris.GetFullUri(string.Format( | |
| IsCollabProjectMigratedEndpoint, projectId)); | |
| try | |
| { | |
| HttpWebRequest request = (HttpWebRequest)WebRequest.Create(endpoint); | |
| request.Method = "GET"; | |
| request.ContentType = "application/json"; | |
| request.Headers.Add( | |
| HttpRequestHeader.Authorization, | |
| string.Format("Bearer {0}", bearerToken)); | |
| return GetResponse<IsCollabProjectMigratedResponse>(request); | |
| } | |
| catch (Exception ex) | |
| { | |
| mLog.ErrorFormat( | |
| "Unable to retrieve is collab migrated '{0}': {1}", | |
| endpoint.ToString(), ex.Message); | |
| mLog.DebugFormat( | |
| "StackTrace:{0}{1}", | |
| Environment.NewLine, ex.StackTrace); | |
| return null; | |
| } | |
| } | |
| internal static NewVersionResponse GetLastVersion(Edition plasticEdition) | |
| { | |
| Uri endpoint = mWebApiUris.GetFullUri( | |
| WebApiEndpoints.LastVersion.NewVersion, | |
| "9.0.0.0", | |
| WebApiEndpoints.LastVersion.GetEditionString(plasticEdition), | |
| WebApiEndpoints.LastVersion.GetPlatformString()); | |
| try | |
| { | |
| HttpWebRequest request = (HttpWebRequest)WebRequest.Create(endpoint); | |
| request.Method = "GET"; | |
| request.ContentType = "application/json"; | |
| return GetResponse<NewVersionResponse>(request); | |
| } | |
| catch (Exception ex) | |
| { | |
| mLog.ErrorFormat( | |
| "Unable to retrieve new versions from '{0}': {1}", | |
| endpoint.ToString(), ex.Message); | |
| mLog.DebugFormat( | |
| "StackTrace:{0}{1}", | |
| Environment.NewLine, ex.StackTrace); | |
| return null; | |
| } | |
| } | |
| internal static CredentialsResponse GetCredentials(string unityToken) | |
| { | |
| Uri endpoint = mWebApiUris.GetFullUri( | |
| WebApiEndpoints.Authentication.Credentials, | |
| unityToken); | |
| try | |
| { | |
| HttpWebRequest request = (HttpWebRequest)WebRequest.Create(endpoint); | |
| request.Method = "GET"; | |
| request.ContentType = "application/json"; | |
| return GetResponse<CredentialsResponse>(request); | |
| } | |
| catch (Exception ex) | |
| { | |
| return new CredentialsResponse | |
| { | |
| Error = BuildLoggedErrorFields(ex, endpoint) | |
| }; | |
| } | |
| } | |
| internal static CurrentUserAdminCheckResponse IsUserAdmin( | |
| string organizationName, | |
| string authToken) | |
| { | |
| Uri endpoint = mWebApiUris.GetFullUri( | |
| IsUserAdminEnpoint, | |
| organizationName); | |
| try | |
| { | |
| HttpWebRequest request = (HttpWebRequest)WebRequest.Create(endpoint); | |
| request.Method = "GET"; | |
| request.ContentType = "application/json"; | |
| string authenticationToken = "Basic " + authToken; | |
| request.Headers.Add( | |
| HttpRequestHeader.Authorization, authenticationToken); | |
| return GetResponse<CurrentUserAdminCheckResponse>(request); | |
| } | |
| catch (Exception ex) | |
| { | |
| mLog.ErrorFormat( | |
| "Unable to retrieve is user admin '{0}': {1}", | |
| endpoint.ToString(), ex.Message); | |
| mLog.DebugFormat( | |
| "StackTrace:{0}{1}", | |
| Environment.NewLine, ex.StackTrace); | |
| return new CurrentUserAdminCheckResponse | |
| { | |
| Error = BuildLoggedErrorFields(ex, endpoint) | |
| }; | |
| } | |
| } | |
| const string IsBetaEnabledEndpoint = "api/unity-package/beta/is-enabled"; | |
| const string TokenExchangeEndpoint = "api/oauth/unityid/exchange/{0}"; | |
| const string IsCollabProjectMigratedEndpoint = "api/cloud/unity/projects/{0}/is-migrated"; | |
| const string IsUserAdminEnpoint = "api/cloud/organizations/{0}/is-user-admin"; | |
| static readonly PlasticWebApiUris mWebApiUris = PlasticWebApiUris.BuildDefault(); | |
| } | |
| internal static class CloudServer | |
| { | |
| internal static string WebLogin( | |
| string webServerUri, | |
| string organizationName, | |
| OrganizationCredentials credentials) | |
| { | |
| Uri endpoint = new Uri( | |
| new Uri(webServerUri), | |
| string.Format(WebLoginEndPoint, organizationName)); | |
| try | |
| { | |
| HttpWebRequest request = (HttpWebRequest)WebRequest.Create(endpoint); | |
| request.Method = "POST"; | |
| request.ContentType = "application/json"; | |
| request.Timeout = 5000; | |
| WriteBody(request, credentials); | |
| return GetResponse<string>(request); | |
| } | |
| catch (Exception ex) | |
| { | |
| mLog.ErrorFormat( | |
| "Unable to retrieve the organization login '{0}': {1}", | |
| endpoint.ToString(), ex.Message); | |
| mLog.DebugFormat( | |
| "StackTrace:{0}{1}", | |
| Environment.NewLine, ex.StackTrace); | |
| return null; | |
| } | |
| } | |
| internal static ChangesetFromCollabCommitResponse GetChangesetFromCollabCommit( | |
| string webServerUri, | |
| string organizationName, | |
| string webLoginAccessToken, | |
| string projectId, | |
| string commitSha) | |
| { | |
| Uri endpoint = new Uri( | |
| new Uri(webServerUri), | |
| string.Format(GetChangesetFromCollabCommitEndpoint, | |
| organizationName, projectId, commitSha)); | |
| try | |
| { | |
| HttpWebRequest request = (HttpWebRequest)WebRequest.Create(endpoint); | |
| request.Method = "GET"; | |
| request.ContentType = "application/json"; | |
| request.Headers.Add( | |
| HttpRequestHeader.Authorization, | |
| string.Format("Bearer {0}", webLoginAccessToken)); | |
| return GetResponse<ChangesetFromCollabCommitResponse>(request); | |
| } | |
| catch (Exception ex) | |
| { | |
| mLog.ErrorFormat( | |
| "Unable to retrieve the changeset from collab commit '{0}': {1}", | |
| endpoint.ToString(), ex.Message); | |
| mLog.DebugFormat( | |
| "StackTrace:{0}{1}", | |
| Environment.NewLine, ex.StackTrace); | |
| return null; | |
| } | |
| } | |
| const string WebLoginEndPoint = "api/v1/organizations/{0}/login/accesstoken"; | |
| const string GetChangesetFromCollabCommitEndpoint = "cloudapi/v1/organizations/{0}/repos/{1}/collabcommit/{2}/changeset"; | |
| } | |
| static void WriteBody(WebRequest request, object body) | |
| { | |
| using (Stream st = request.GetRequestStream()) | |
| using (StreamWriter writer = new StreamWriter(st)) | |
| { | |
| writer.Write(JsonConvert.SerializeObject(body)); | |
| } | |
| } | |
| static TRes GetResponse<TRes>(WebRequest request) | |
| { | |
| using (WebResponse response = request.GetResponse()) | |
| using (StreamReader reader = new StreamReader(response.GetResponseStream())) | |
| { | |
| string json = reader.ReadToEnd(); | |
| if (string.IsNullOrEmpty(json)) | |
| return default(TRes); | |
| return JsonConvert.DeserializeObject<TRes>(json); | |
| } | |
| } | |
| static ErrorResponse.ErrorFields BuildLoggedErrorFields( | |
| Exception ex, Uri endpoint) | |
| { | |
| LogException(ex, endpoint); | |
| return new ErrorResponse.ErrorFields | |
| { | |
| ErrorCode = ErrorCodes.ClientError, | |
| Message = ex.Message | |
| }; | |
| } | |
| static void LogException(Exception ex, Uri endpoint) | |
| { | |
| mLog.ErrorFormat( | |
| "There was an error while calling '{0}': {1}", | |
| endpoint.ToString(), ex.Message); | |
| mLog.DebugFormat( | |
| "StackTrace:{0}{1}", | |
| Environment.NewLine, ex.StackTrace); | |
| } | |
| static readonly ILog mLog = LogManager.GetLogger("WebRestApiClient"); | |
| } | |
| } | |