2using System.Collections.Generic;
4using System.Net.Http.Headers;
6using Newtonsoft.Json.Linq;
34 protected string URL =
"";
59 Debug.LogWarning(
"Exception has occurred: " + exception.Message);
60 HttpResponseMessage badRequestResponse =
new HttpResponseMessage(System.Net.HttpStatusCode.BadRequest);
62 return badRequestResponse;
70 Debug.Log(
"[APIHandler] Set Endpoint to " +
URL);
71 handlingClient.BaseAddress =
new Uri(
URL);
79 webHandlingClient.BaseAddress =
new Uri(
webURL);
87 apiHandlingClient.BaseAddress =
new Uri(
apiURL);
92 if (!url.StartsWith(
"https://", StringComparison.InvariantCultureIgnoreCase))
94 if (url.StartsWith(
"http:", StringComparison.InvariantCultureIgnoreCase))
97 Debug.LogWarning(
"URL must be a secured http endpoint for production.");
99 Debug.LogError(
"URL must be a securated http endpoint.");
104 url.Insert(0,
"https://");
112 handlingClient.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue(
"application/json"));
114 HttpResponseMessage response;
130 apiHandlingClient.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue(
"Bearer", authToken);
131 apiHandlingClient.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue(
"application/json"));
134 var graphqlRequest =
new
136 operationName =
"generateAuthCode",
137 variables =
new { input =
new { } },
138 query =
"mutation generateAuthCode($input: AuthCodeInput!) { generateAuthCode(input: $input) { code expiresAt __typename }}",
141 string jsonContent = JsonConvert.SerializeObject(graphqlRequest);
142 HttpContent requestContent =
new StringContent(jsonContent, System.Text.Encoding.UTF8,
"application/json");
143 HttpResponseMessage response;
144 object responseContent;
148 string body = await response.Content.ReadAsStringAsync();
152 JObject jsonResponse = JObject.Parse(body);
154 if (jsonResponse[
"data"] !=
null && jsonResponse[
"data"][
"generateAuthCode"] !=
null)
157 string code = jsonResponse[
"data"][
"generateAuthCode"][
"code"]?.ToString();
158 string expiresAt = jsonResponse[
"data"][
"generateAuthCode"][
"expiresAt"]?.ToString();
166 responseContent = assistedLogin;
168 else if (jsonResponse[
"errors"] !=
null)
171 string errorMessage = jsonResponse[
"errors"]?[0]?[
"message"]?.ToString() ??
"Unknown GraphQL error";
172 responseContent =
new FailureResponse { Error =
"true", Message = errorMessage };
180 Message =
"Invalid response format from server",
186 Debug.LogError($
"Error generating assisted login: {ex.Message}");
187 response =
new HttpResponseMessage(System.Net.HttpStatusCode.InternalServerError);
188 responseContent =
new FailureResponse { Error =
"true", Message = ex.Message };
196 Debug.Log($
"[Platform API] Logging in with token: {token}");
198 apiHandlingClient.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue(
"Bearer", token);
199 apiHandlingClient.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue(
"application/json"));
201 Debug.Log($
"[Platform API] Sending login with a token.");
202 HttpResponseMessage response = await
apiHandlingClient.GetAsync(
"/v2/auth/validate-signature");
203 string body = await response.Content.ReadAsStringAsync();
204 Debug.Log($
"[Platform API] Body returned as {body}");
208 responseContent = JsonConvert.DeserializeObject<
FailureResponse>(body);
211 Debug.Log($
"[Platform API] Got a valid login response!");
219 Debug.Log(
"[Platform API] Calling Login.");
222 HttpContent loginRequestContent =
new StringContent(JsonUtility.ToJson(login));
223 loginRequestContent.Headers.ContentType =
new MediaTypeWithQualityHeaderValue(
"application/json");
225 Debug.Log(
"[Platform API] Call to post api login.");
226 HttpResponseMessage response = await
handlingClient.PostAsync(
"/login", loginRequestContent);
227 string body = await response.Content.ReadAsStringAsync();
228 Debug.Log(
"[Platform API] Got response body.");
232 responseContent = JsonConvert.DeserializeObject<
FailureResponse>(body);
235 Debug.Log(
"[Platform API] Response content deserialized.");
242 handlingClient.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue(
"Bearer", authToken);
243 handlingClient.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue(
"application/json"));
245 HttpResponseMessage response = await
handlingClient.GetAsync(
string.Format(
"/user/{0}", userId));
246 string body = await response.Content.ReadAsStringAsync();
251 responseContent = JsonConvert.DeserializeObject<
FailureResponse>(body);
260 handlingClient.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue(
"Bearer", authToken);
261 handlingClient.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue(
"application/json"));
264 usersModulesRequest.
UserIds.Add(userId);
265 HttpContent loginRequestContent =
new StringContent(JsonUtility.ToJson(usersModulesRequest));
266 loginRequestContent.Headers.ContentType =
new MediaTypeWithQualityHeaderValue(
"application/json");
268 HttpResponseMessage response = await
handlingClient.PostAsync(
"/access/users", loginRequestContent);
269 string body = await response.Content.ReadAsStringAsync();
273 responseContent = JsonConvert.DeserializeObject<
FailureResponse>(body);
286 handlingClient.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue(
"Bearer", authToken);
287 handlingClient.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue(
"application/json"));
289 HttpContent joinSessionRequestContent =
new StringContent(joinData.ToJSON());
290 joinSessionRequestContent.Headers.ContentType =
new MediaTypeWithQualityHeaderValue(
"application/json");
292 HttpResponseMessage response = await
handlingClient.PostAsync(
"/event", joinSessionRequestContent);
293 string body = await response.Content.ReadAsStringAsync();
297 responseContent =
null;
303 responseContent = joinSessionResponse;
311 Debug.Log(
"[Platform API Handler] Get Module Access");
313 handlingClient.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue(
"*/*"));
315 string optionalParameters =
"";
316 if (serialNumber.Length > 0)
318 optionalParameters =
"?serial=" + serialNumber;
322 $
"[{GetType().Name}] Checking module access at: "
323 + String.Format(
"/access/user/{0}/module/{1}{2}", userId, moduleId, optionalParameters)
327 String.Format(
"/access/user/{0}/module/{1}{2}", userId, moduleId, optionalParameters)
329 string body = await response.Content.ReadAsStringAsync();
331 Debug.Log($
"[{GetType().Name}] GetModuleAccess return body: {body}");
332 object responseContent = JsonConvert.DeserializeObject<
FailureResponse>(body);
343 apiHandlingClient.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue(
"Bearer", authToken);
344 apiHandlingClient.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue(
"application/json"));
348 HttpContent heartbeatRequestContent =
new StringContent(heartbeatData.ToJSON());
349 heartbeatRequestContent.Headers.ContentType =
new MediaTypeWithQualityHeaderValue(
"application/json");
353 heartbeatRequestContent
355 string body = await response.Content.ReadAsStringAsync();
356 object responseContent = JsonConvert.DeserializeObject<
FailureResponse>(body);
359 responseContent =
null;
368 handlingClient.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue(
"Bearer", authToken);
369 handlingClient.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue(
"application/json"));
371 HttpContent completeSessionRequestContent =
new StringContent(completionData.ToJSON());
372 completeSessionRequestContent.Headers.ContentType =
new MediaTypeWithQualityHeaderValue(
"application/json");
374 HttpResponseMessage response = await
handlingClient.PostAsync(
"/event", completeSessionRequestContent);
375 string body = await response.Content.ReadAsStringAsync();
376 object responseContent = JsonConvert.DeserializeObject<
FailureResponse>(body);
379 responseContent =
null;
388 handlingClient.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue(
"Bearer", authToken);
389 handlingClient.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue(
"application/json"));
391 HttpContent sessionEventRequestContent =
new StringContent(sessionEvent.ToJSON());
392 sessionEventRequestContent.Headers.ContentType =
new MediaTypeWithQualityHeaderValue(
"application/json");
394 HttpResponseMessage response = await
handlingClient.PostAsync(
"/event", sessionEventRequestContent);
395 string body = await response.Content.ReadAsStringAsync();
396 object responseContent = JsonConvert.DeserializeObject<
FailureResponse>(body);
399 responseContent =
null;
408 handlingClient.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue(
"Bearer", authToken);
409 handlingClient.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue(
"application/json"));
411 string endpoint =
"/modules";
412 if (platform !=
null && platform.Length > 0)
414 endpoint += $
"?platform={platform}";
417 Debug.Log($
"GetModuleList built endpoint: {endpoint}");
419 HttpResponseMessage response = await
handlingClient.GetAsync(endpoint);
420 string body = await response.Content.ReadAsStringAsync();
424 var responseContent = JsonConvert.DeserializeObject<
FailureResponse>(body);
430 Debug.LogWarning(ex);
433 List<OrgModule> orgModules =
new List<OrgModule>();
434 JArray array = JArray.Parse(body);
437 var tokens = array.Children();
438 foreach (JToken selectedToken
in tokens)
441 orgModule.
Parse(selectedToken);
442 orgModules.Add(orgModule);
446 Debug.Log(orgModules.Count.ToString());
async void SendHeartbeat(string authToken, int sessionId)
HttpClient handlingClient
APIHandler(string endpointUrl)
async void GetUserModules(string authToken, int userId)
HttpResponseMessage HandleException(Exception exception)
void EnsureURLHasProtocol(ref string url)
async void JoinSession(string authToken, JoinSessionData joinData)
async void LoginWithToken(string token)
async void CompleteSession(string authToken, CompleteSessionData completionData)
HttpClient apiHandlingClient
async void Login(LoginData login)
async void SendSessionEvent(string authToken, SessionEventData sessionEvent)
void SetPlatformEndpoint(string endpointUrl)
HttpClient webHandlingClient
async void GetUserData(string authToken, int userId)
delegate void APIResponse(ResponseType type, HttpResponseMessage message, object responseData)
void SetEndpoint(string endpointUrl)
void SetWebEndpoint(string endpointUrl)
APIResponse OnAPIResponse
async void GetModuleAccess(int moduleId, int userId, string serialNumber)
async void GenerateAssistedLogin(string authToken)
async void GetModuleList(string authToken, string platform)