A game about forced loneliness, made by TACStudios
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}