194 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
		
		
			
		
	
	
			194 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
|  | using System; | ||
|  | using System.IO; | ||
|  | using System.Net; | ||
|  | 
 | ||
|  | using Unity.Plastic.Newtonsoft.Json; | ||
|  | 
 | ||
|  | using Codice.Client.Common.WebApi; | ||
|  | using Codice.Client.Common.WebApi.Responses; | ||
|  | using Codice.CM.Common; | ||
|  | using Codice.LogWrapper; | ||
|  | using ErrorResponse = PlasticGui.WebApi.Responses.ErrorResponse; | ||
|  | 
 | ||
|  | 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 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 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) | ||
|  |                     }; | ||
|  |                 } | ||
|  |             } | ||
|  | 
 | ||
|  |             internal static SubscriptionDetailsResponse GetSubscriptionDetails( | ||
|  |                 string organizationName, | ||
|  |                 string authToken) | ||
|  |             { | ||
|  |                 Uri endpoint = mWebApiUris.GetFullUri( | ||
|  |                     SubscriptionDetailsEndpoint, | ||
|  |                     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<SubscriptionDetailsResponse>(request); | ||
|  |                 } | ||
|  |                 catch (Exception ex) | ||
|  |                 { | ||
|  |                     mLog.ErrorFormat( | ||
|  |                        "Unable to retrieve subscription details '{0}': {1}", | ||
|  |                        endpoint.ToString(), ex.Message); | ||
|  | 
 | ||
|  |                     mLog.DebugFormat( | ||
|  |                         "StackTrace:{0}{1}", | ||
|  |                         Environment.NewLine, ex.StackTrace); | ||
|  | 
 | ||
|  |                     return null; | ||
|  |                 } | ||
|  |             } | ||
|  |             const string TokenExchangeEndpoint = "api/oauth/unityid/exchange/{0}"; | ||
|  |             const string IsUserAdminEnpoint = "api/cloud/organizations/{0}/is-user-admin"; | ||
|  |             const string SubscriptionDetailsEndpoint = "api/cloud/organizations/{0}/subscription-details"; | ||
|  | 
 | ||
|  |             static readonly PlasticWebApiUris mWebApiUris = PlasticWebApiUris.BuildDefault(); | ||
|  |         } | ||
|  | 
 | ||
|  |         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 = PlasticApp.GetLogger("WebRestApiClient"); | ||
|  |     } | ||
|  | } |