A game about forced loneliness, made by TACStudios
at master 6.9 kB view raw
1using System; 2using System.IO; 3using System.Net; 4 5using Unity.Plastic.Newtonsoft.Json; 6 7using Codice.Client.Common.WebApi; 8using Codice.Client.Common.WebApi.Responses; 9using Codice.CM.Common; 10using Codice.LogWrapper; 11using ErrorResponse = PlasticGui.WebApi.Responses.ErrorResponse; 12 13namespace Unity.PlasticSCM.Editor.WebApi 14{ 15 internal static class WebRestApiClient 16 { 17 internal static class PlasticScm 18 { 19 internal static TokenExchangeResponse TokenExchange(string unityAccessToken) 20 { 21 Uri endpoint = mWebApiUris.GetFullUri( 22 string.Format(TokenExchangeEndpoint, unityAccessToken)); 23 24 try 25 { 26 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(endpoint); 27 request.Method = "GET"; 28 request.ContentType = "application/json"; 29 return GetResponse<TokenExchangeResponse>(request); 30 } 31 catch (Exception ex) 32 { 33 mLog.ErrorFormat( 34 "Unable to exchange tokens '{0}': {1}", 35 endpoint.ToString(), ex.Message); 36 37 mLog.DebugFormat( 38 "StackTrace:{0}{1}", 39 Environment.NewLine, ex.StackTrace); 40 41 return null; 42 } 43 } 44 45 internal static NewVersionResponse GetLastVersion(Edition plasticEdition) 46 { 47 Uri endpoint = mWebApiUris.GetFullUri( 48 WebApiEndpoints.LastVersion.NewVersion, 49 "9.0.0.0", 50 WebApiEndpoints.LastVersion.GetEditionString(plasticEdition), 51 WebApiEndpoints.LastVersion.GetPlatformString()); 52 53 try 54 { 55 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(endpoint); 56 request.Method = "GET"; 57 request.ContentType = "application/json"; 58 59 return GetResponse<NewVersionResponse>(request); 60 } 61 catch (Exception ex) 62 { 63 mLog.ErrorFormat( 64 "Unable to retrieve new versions from '{0}': {1}", 65 endpoint.ToString(), ex.Message); 66 67 mLog.DebugFormat( 68 "StackTrace:{0}{1}", 69 Environment.NewLine, ex.StackTrace); 70 71 return null; 72 } 73 } 74 75 internal static CurrentUserAdminCheckResponse IsUserAdmin( 76 string organizationName, 77 string authToken) 78 { 79 Uri endpoint = mWebApiUris.GetFullUri( 80 IsUserAdminEnpoint, 81 organizationName); 82 83 try 84 { 85 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(endpoint); 86 request.Method = "GET"; 87 request.ContentType = "application/json"; 88 89 string authenticationToken = "Basic " + authToken; 90 91 request.Headers.Add( 92 HttpRequestHeader.Authorization, authenticationToken); 93 94 return GetResponse<CurrentUserAdminCheckResponse>(request); 95 } 96 catch (Exception ex) 97 { 98 mLog.ErrorFormat( 99 "Unable to retrieve is user admin '{0}': {1}", 100 endpoint.ToString(), ex.Message); 101 102 mLog.DebugFormat( 103 "StackTrace:{0}{1}", 104 Environment.NewLine, ex.StackTrace); 105 106 return new CurrentUserAdminCheckResponse 107 { 108 Error = BuildLoggedErrorFields(ex, endpoint) 109 }; 110 } 111 } 112 113 internal static SubscriptionDetailsResponse GetSubscriptionDetails( 114 string organizationName, 115 string authToken) 116 { 117 Uri endpoint = mWebApiUris.GetFullUri( 118 SubscriptionDetailsEndpoint, 119 organizationName); 120 121 try 122 { 123 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(endpoint); 124 request.Method = "GET"; 125 request.ContentType = "application/json"; 126 127 string authenticationToken = "Basic " + authToken; 128 129 request.Headers.Add( 130 HttpRequestHeader.Authorization, authenticationToken); 131 132 return GetResponse<SubscriptionDetailsResponse>(request); 133 } 134 catch (Exception ex) 135 { 136 mLog.ErrorFormat( 137 "Unable to retrieve subscription details '{0}': {1}", 138 endpoint.ToString(), ex.Message); 139 140 mLog.DebugFormat( 141 "StackTrace:{0}{1}", 142 Environment.NewLine, ex.StackTrace); 143 144 return null; 145 } 146 } 147 const string TokenExchangeEndpoint = "api/oauth/unityid/exchange/{0}"; 148 const string IsUserAdminEnpoint = "api/cloud/organizations/{0}/is-user-admin"; 149 const string SubscriptionDetailsEndpoint = "api/cloud/organizations/{0}/subscription-details"; 150 151 static readonly PlasticWebApiUris mWebApiUris = PlasticWebApiUris.BuildDefault(); 152 } 153 154 static TRes GetResponse<TRes>(WebRequest request) 155 { 156 using (WebResponse response = request.GetResponse()) 157 using (StreamReader reader = new StreamReader(response.GetResponseStream())) 158 { 159 string json = reader.ReadToEnd(); 160 161 if (string.IsNullOrEmpty(json)) 162 return default(TRes); 163 164 return JsonConvert.DeserializeObject<TRes>(json); 165 } 166 } 167 168 static ErrorResponse.ErrorFields BuildLoggedErrorFields( 169 Exception ex, Uri endpoint) 170 { 171 LogException(ex, endpoint); 172 173 return new ErrorResponse.ErrorFields 174 { 175 ErrorCode = ErrorCodes.ClientError, 176 Message = ex.Message 177 }; 178 } 179 180 static void LogException(Exception ex, Uri endpoint) 181 { 182 mLog.ErrorFormat( 183 "There was an error while calling '{0}': {1}", 184 endpoint.ToString(), ex.Message); 185 186 mLog.DebugFormat( 187 "StackTrace:{0}{1}", 188 Environment.NewLine, ex.StackTrace); 189 } 190 191 static readonly ILog mLog = PlasticApp.GetLogger("WebRestApiClient"); 192 } 193}