123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298 |
- 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.Help.NewVersions;
- 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");
- }
- }
|