private void CreateAccount() { if (passwordLabel.text != confPasswordLabel.text) { errorLabel.color = Color.red; errorLabel.text = "Passwords do not match."; passwordLabel.text = ""; confPasswordLabel.text = ""; } else { IWebApiResponse response = webApi.CreateUser(usernameLabel.text, passwordLabel.text, nameLabel.text); if (response is ErrorResponse) { errorLabel.color = Color.red; errorLabel.text = (response as ErrorResponse).displayError; } else { PlayerPrefs.SetString("email", usernameLabel.text); PlayerPrefs.SetString("password", passwordLabel.text); ShowMainMenu(); } } }
public async Task CachesManyRequestSeparatelyAsyncTest( string responseHeaderNameToAdd, string queryParams, [Frozen] IList <Element> responseElements, [CustomizeWith(typeof(MemoryCacheMethodAutoFixture))][Frozen] MiddlewareContext context, [CustomizeWith(typeof(ExpiresHeaderAutoFixture))][Frozen] IWebApiResponse response, IFixture fixture) { var options = CreateRequestOptions(queryParams); context.Request.Options.Returns(options); SetResponseHeader(response, responseHeaderNameToAdd, fixture.Create <string>()); SetResponseContent(response, responseElements); // Do the first request var middleware = new CacheMiddleware(); await middleware.OnRequestAsync(context, (r, t) => Task.FromResult(response)); // Do individual requests to see if they are taken from the cache options.EndpointQuery.Clear(); foreach (var element in responseElements) { options.PathSuffix = element.Id; var elementResponse = await middleware.OnRequestAsync(context, (r, t) => throw new InvalidOperationException("should not be hit")); var elementObject = JsonSerializer.Deserialize <Element>(elementResponse.Content); elementObject.Should().BeEquivalentTo(element); } }
public async Task SingleRequestAsyncTest( string responseHeaderNameToAdd, [CustomizeWith(typeof(MemoryCacheMethodAutoFixture))][Frozen] MiddlewareContext context, [Frozen] IWebApiResponse response, IFixture fixture) { context.Request.Options.Returns(CreateRequestOptions()); SetResponseHeader(response, responseHeaderNameToAdd, fixture.Create <string>()); // Do the request var middleware = new CacheMiddleware(); var liveResponse = await middleware.OnRequestAsync(context, (r, t) => Task.FromResult(response)); liveResponse.Should().BeSameAs(response); }
public override void OnRequestSuccess(IWebApiRequest request, IWebApiResponse response) { #if UNITY_EDITOR Game.Logger.LogWithGreen("[WebAPI] Response: " + request.Uri, response.Body); #endif string accessToken; if (response.Headers.TryGetValue("X-Set-Access-Token", out accessToken)) { this.accessToken = accessToken; #if UNITY_EDITOR Game.Logger.LogWithPurple("[WebAPI] AccessToken: " + accessToken); #endif } }
private static void SetResponseHeader(IWebApiResponse response, string headerName, string headerValue) { if (string.IsNullOrEmpty(headerName)) { return; } if (response.ResponseHeaders is Dictionary <string, string> dictionary) { dictionary[headerName] = headerValue; } else { response.ResponseHeaders.Returns(new Dictionary <string, string> { [headerName] = headerValue }); } }
public async Task ManyRequestAsyncTest( string responseHeaderNameToAdd, string queryParams, [Frozen] IList <Element> responseElements, [CustomizeWith(typeof(MemoryCacheMethodAutoFixture))][Frozen] MiddlewareContext context, [Frozen] IWebApiResponse response, IFixture fixture) { context.Request.Options.Returns(CreateRequestOptions(queryParams)); SetResponseHeader(response, responseHeaderNameToAdd, fixture.Create <string>()); SetResponseContent(response, responseElements); // Do the request var middleware = new CacheMiddleware(); var liveResponse = await middleware.OnRequestAsync(context, (r, t) => Task.FromResult(response)); liveResponse.Should().BeEquivalentTo(response); }
public async Task CachesSingleRequestAsyncTest( string responseHeaderNameToAdd, [CustomizeWith(typeof(MemoryCacheMethodAutoFixture))][Frozen] MiddlewareContext context, [CustomizeWith(typeof(ExpiresHeaderAutoFixture))][Frozen] IWebApiResponse response, IFixture fixture) { context.Request.Options.Returns(CreateRequestOptions()); SetResponseHeader(response, responseHeaderNameToAdd, fixture.Create <string>()); // Do the first request var middleware = new CacheMiddleware(); await middleware.OnRequestAsync(context, (r, t) => Task.FromResult(response)); // Repeat the request to see if it's taken from the cache var cachedResponse = await middleware.OnRequestAsync(context, (r, t) => throw new InvalidOperationException("should not be hit")); cachedResponse.Should().BeEquivalentTo(response); }
public IWebApiResponse GetResponseObject <T>(string relativeUrl, string method, Dictionary <string, string> headers, string body) where T : IWebApiResponse, new() { string trimmedRelative = relativeUrl.Trim('/') + '/'; Uri loginUri = new Uri(WebApiRootUrl + trimmedRelative); HttpClient client = new HttpClient(loginUri, method, headers, body); if (!client.IsError()) { T login = new T(); IWebApiResponse webApiResponse = login as IWebApiResponse; webApiResponse.FromJsonData(client.GetJsonData()); return(login); } return(client.GetError()); }
private void GetLeaderboardTop10() { IWebApiResponse response = webApi.GetResponseObject <LeaderboardListResponse>("tapthat/leaderboard", "POST", null, new Dictionary <string, string>() { { "top", "10" } }); if (response is ErrorResponse) { //TODO: show user error here Debug.Log((response as ErrorResponse).displayError); } else { foreach (var responseRow in response as LeaderboardListResponse) { SetLeaderboardLabel(responseRow.rank, responseRow.name, responseRow.totalTaps); } } }
// Use this for initialization void Start() { webApi = new WebApi(); IWebApiResponse loginApiResponse = webApi.Login(PlayerPrefs.GetString("email"), PlayerPrefs.GetString("password")); if (loginApiResponse is ErrorResponse) { PushMessage((loginApiResponse as ErrorResponse).displayError, 5); } else { loginResponse = loginApiResponse as LoginResponse; } if (loginResponse != null) { IWebApiResponse tapsResponse = webApi.GetResponseObject <TapsResponse>("tapthat/taps", "POST", null, new Dictionary <string, string>() { { "authToken", loginResponse.authToken } }); if (tapsResponse is ErrorResponse) { PushMessage((tapsResponse as ErrorResponse).displayError, 5); } else { TapsResponse leaderboardResponse = tapsResponse as TapsResponse; int totalTaps = leaderboardResponse.totalTaps; string msg = string.Format("Welcome back {0}, {1} bubble taps from before added", loginResponse.name, totalTaps); PushMessage(msg, 5); tapCount = totalTaps; } StartCoroutine("UpdateTaps"); } }
/// <summary> /// Creates a specific exception derived from <see cref="BadRequestException"/> from a response. /// </summary> /// <param name="request">The request.</param> /// <param name="response">The response.</param> /// <returns>The exception.</returns> /// <exception cref="ArgumentNullException"><paramref name="request"/> or <paramref name="response"/> is <c>null</c>.</exception> public static BadRequestException CreateFromResponse(IWebApiRequest request, IWebApiResponse <ErrorObject> response) { if (request == null) { throw new ArgumentNullException(nameof(request)); } if (response == null) { throw new ArgumentNullException(nameof(response)); } switch (response.Content.Message.ToLowerInvariant()) { case var message when message.StartsWith("id list too long; this endpoint is limited to", StringComparison.InvariantCultureIgnoreCase): return(new ListTooLongException(request, response)); case var message when message.StartsWith("page out of range. Use page values", StringComparison.InvariantCultureIgnoreCase): return(new PageOutOfRangeException(request, response)); default: return(new BadRequestException(request, response, BadRequestError.GenericBadRequest)); } }
private IEnumerable UpdateTaps() { if (loginResponse != null) { Debug.Log("sending delta " + tapDelta); Dictionary <string, string> args = new Dictionary <string, string>() { { "authToken", loginResponse.authToken }, { "delta", tapDelta.ToString() } }; tapDelta = 0; IWebApiResponse tapsResponse = webApi.GetResponseObject <TapsResponse>("tapthat/taps", "POST", null, args); if (tapsResponse is ErrorResponse) { PushMessage((tapsResponse as ErrorResponse).displayError, 5); } else { TapsResponse leaderboardResponse = tapsResponse as TapsResponse; LeaderboardResponse nextRank = null; LeaderboardResponse previousRank = null; if (leaderboardResponse.rank != 0) { foreach (LeaderboardResponse nearRank in leaderboardResponse.leaderboard) { if (nextRank != null && previousRank != null) { break; } if (nearRank.rank == leaderboardResponse.rank - 1) { nextRank = nearRank; continue; } else if (nearRank.rank == leaderboardResponse.rank + 1) { previousRank = nearRank; continue; } } } if (nextRank == null) { nextRankLabel.enabled = false; } else { nextRankLabel.enabled = true; nextRankLabel.text = nextRank.name + ": " + nextRank.totalTaps; } if (previousRank == null) { previousRankLabel.enabled = false; } else { previousRankLabel.enabled = true; previousRankLabel.text = previousRank.name + ": " + previousRank.totalTaps; } } } yield return(new WaitForSeconds(leaderboardDelay)); StartCoroutine("UpdateTaps"); }
/// <summary> /// Creates a new <see cref="MissingScopesException"/>. /// </summary> /// <param name="request">The original request.</param> /// <param name="response">The response.</param> /// <exception cref="ArgumentNullException"><paramref name="request"/> or <paramref name="response"/> is <c>null</c>.</exception> public MissingScopesException(IWebApiRequest request, IWebApiResponse <ErrorObject> response) : base(request, response, AuthorizationError.MissingScopes) { }
public abstract void OnRequestSuccess(IWebApiRequest request, IWebApiResponse response);
private static void SetResponseContent <T>(IWebApiResponse response, T content) { string rawResponse = JsonSerializer.Serialize(content); response.Content.Returns(rawResponse); }
/// <summary> /// Creates a new <see cref="UnexpectedStatusException" />. /// </summary> /// <param name="request">The original request.</param> /// <param name="response">The response.</param> /// <param name="message">The message.</param> /// <exception cref="ArgumentNullException"><paramref name="request"/> or <paramref name="message"/> is <c>null</c>.</exception> public UnexpectedStatusException(IWebApiRequest request, IWebApiResponse <string>?response, string message) : base(request, response, message) { }
/// <summary> /// Creates a new <see cref="TooManyRequestsException"/>. /// </summary> /// <param name="request">The original request.</param> /// <param name="response">The response.</param> /// <exception cref="ArgumentNullException"><paramref name="request"/> or <paramref name="response"/> is <c>null</c>.</exception> public TooManyRequestsException(IWebApiRequest request, IWebApiResponse <ErrorObject> response) : base(request, response, response?.Content.Message ?? string.Empty) { }
/// <summary> /// Creates a new <see cref="RequestException" />. /// </summary> /// <param name="request">The original request.</param> /// <param name="response">The response.</param> /// <param name="message">The message.</param> /// <param name="innerException">The inner exception.</param> /// <exception cref="ArgumentNullException"><paramref name="request"/> or <paramref name="message"/> is <see langword="null"/>.</exception> public RequestException(IWebApiRequest request, IWebApiResponse <string>?response, string message, Exception innerException) : base(request, response, message, innerException) { }
/// <summary> /// Creates a new <see cref="BadRequestException"/>. /// </summary> /// <param name="request">The original request.</param> /// <param name="response">The response.</param> /// <param name="error">The error.</param> /// <exception cref="ArgumentNullException"><paramref name="request"/> or <paramref name="response"/> is <c>null</c>.</exception> public BadRequestException(IWebApiRequest request, IWebApiResponse <ErrorObject> response, BadRequestError error) : base(request, response, response?.Content.Message ?? string.Empty) { this.BadRequestError = error; }
/// <summary> /// Creates a new <see cref="AuthorizationRequiredException"/>. /// </summary> /// <param name="request">The original request.</param> /// <param name="response">The response.</param> /// <param name="error">The error.</param> /// <exception cref="ArgumentNullException"><paramref name="request"/>, <paramref name="response"/> or <paramref name="error"/> is <c>null</c>.</exception> public AuthorizationRequiredException(IWebApiRequest request, IWebApiResponse <ErrorObject> response, AuthorizationError error) : base(request, response, response?.Content.Message ?? string.Empty) { this.AuthorizationError = error; }
/// <summary> /// Creates a new <see cref="ServiceUnavailableException"/>. /// </summary> /// <param name="request">The original request.</param> /// <param name="response">The response.</param> /// <exception cref="ArgumentNullException"><paramref name="request"/> or <paramref name="response"/> is <see langword="null"/>.</exception> public ServiceUnavailableException(IWebApiRequest request, IWebApiResponse <ErrorObject> response) : base(request, response, response?.Content.Message ?? string.Empty) { }
public static void AddHref <THREF>(this IWebApiResponse target, Val2Type <THREF> type, string value) { target.Hrefs.Add(type.ToString().ToLower(), value?.ToLower()); }
/// <summary> /// Creates a new <see cref="ListTooLongException"/>. /// </summary> /// <param name="request">The original request.</param> /// <param name="response">The response.</param> /// <exception cref="ArgumentNullException"><paramref name="request"/> or <paramref name="response"/> is <c>null</c>.</exception> public ListTooLongException(IWebApiRequest request, IWebApiResponse <ErrorObject> response) : base(request, response, BadRequestError.ListTooLong) { }
/// <summary> /// Creates a new <see cref="RestrictedToGuildLeadersException"/>. /// </summary> /// <param name="request">The original request.</param> /// <param name="response">The response.</param> /// <exception cref="ArgumentNullException"><paramref name="request"/> or <paramref name="response"/> is <see langword="null"/>.</exception> public RestrictedToGuildLeadersException(IWebApiRequest request, IWebApiResponse <ErrorObject> response) : base(request, response, AuthorizationError.AccessRestrictedToGuildLeaders) { }
public async Task RequestIsNotSplitNotBulkTest([Frozen] MiddlewareContext context, [Frozen] IWebApiResponse response, Element element) { var options = new WebApiRequestOptions { BulkQueryParameterIdsName = "ids", EndpointPath = "/some/endpoint", EndpointQuery = new Dictionary <string, string>() }; context.Request.Options.Returns(options); string rawResponse = JsonSerializer.Serialize(element); response.Content.Returns(rawResponse); var middleware = new RequestSplitterMiddleware(); var finalResponse = await middleware.OnRequestAsync(context, (c, t) => Task.FromResult(response)); finalResponse.Should().BeEquivalentTo(response); }
/// <summary> /// Creates a new <see cref="InvalidAccessTokenException"/>. /// </summary> /// <param name="request">The original request.</param> /// <param name="response">The response.</param> /// <exception cref="ArgumentNullException"><paramref name="request"/> or <paramref name="response"/> is <c>null</c>.</exception> public InvalidAccessTokenException(IWebApiRequest request, IWebApiResponse <ErrorObject> response) : base(request, response, AuthorizationError.InvalidKey) { }
/// <summary> /// Creates a specific exception derived from <see cref="AuthorizationRequiredException"/> from a response. /// </summary> /// <param name="request">The request.</param> /// <param name="response">The response.</param> /// <returns>The exception.</returns> /// <exception cref="ArgumentNullException"><paramref name="request"/> or <paramref name="response"/> is <c>null</c>.</exception> public static AuthorizationRequiredException CreateFromResponse(IWebApiRequest request, IWebApiResponse <ErrorObject> response) { if (request == null) { throw new ArgumentNullException(nameof(request)); } if (response == null) { throw new ArgumentNullException(nameof(response)); } switch (response.Content.Message.ToLowerInvariant()) { case "invalid key": case "invalid access token": return(new InvalidAccessTokenException(request, response)); case var message when message.StartsWith("requires scope", StringComparison.InvariantCultureIgnoreCase) || message.StartsWith("requires at least one scope from", StringComparison.InvariantCultureIgnoreCase): return(new MissingScopesException(request, response)); case "membership required": return(new MembershipRequiredException(request, response)); case "access restricted to guild leaders": return(new RestrictedToGuildLeadersException(request, response)); case "endpoint requires authentication": default: return(new AuthorizationRequiredException(request, response, AuthorizationError.RequiresAuthorization)); } }
/// <summary> /// Creates a new <see cref="MembershipRequiredException"/>. /// </summary> /// <param name="request">The original request.</param> /// <param name="response">The response.</param> /// <exception cref="ArgumentNullException"><paramref name="request"/> or <paramref name="response"/> is <c>null</c>.</exception> public MembershipRequiredException(IWebApiRequest request, IWebApiResponse <ErrorObject> response) : base(request, response, AuthorizationError.MembershipRequired) { }
/// <summary> /// Creates a new <see cref="PageOutOfRangeException"/>. /// </summary> /// <param name="request">The original request.</param> /// <param name="response">The response.</param> /// <exception cref="ArgumentNullException"><paramref name="request"/> or <paramref name="response"/> is <c>null</c>.</exception> public PageOutOfRangeException(IWebApiRequest request, IWebApiResponse <ErrorObject> response) : base(request, response, BadRequestError.PageOutOfRange) { }
/// <summary> /// Creates a new <see cref="UnexpectedStatusException" />. /// </summary> /// <param name="request">The original request.</param> /// <param name="response">The response.</param> /// <exception cref="ArgumentNullException"><paramref name="request"/> or <paramref name="response"/> is <c>null</c>.</exception> public UnexpectedStatusException(IWebApiRequest request, IWebApiResponse <string> response) : this(request, response, $"Unexpected HTTP status code: {(int?)response?.StatusCode ?? 0}") { }