Exemplo n.º 1
0
    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();
            }
        }
    }
Exemplo n.º 2
0
        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);
            }
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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
            }
        }
Exemplo n.º 5
0
        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
                });
            }
        }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
        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);
        }
Exemplo n.º 8
0
        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());
        }
Exemplo n.º 9
0
    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);
            }
        }
    }
Exemplo n.º 10
0
    // 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");
        }
    }
Exemplo n.º 11
0
        /// <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));
            }
        }
Exemplo n.º 12
0
    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");
    }
Exemplo n.º 13
0
 /// <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)
 {
 }
Exemplo n.º 14
0
 public abstract void OnRequestSuccess(IWebApiRequest request, IWebApiResponse response);
Exemplo n.º 15
0
        private static void SetResponseContent <T>(IWebApiResponse response, T content)
        {
            string rawResponse = JsonSerializer.Serialize(content);

            response.Content.Returns(rawResponse);
        }
Exemplo n.º 16
0
 /// <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)
 {
 }
Exemplo n.º 17
0
 /// <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)
 {
 }
Exemplo n.º 18
0
 /// <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)
 {
 }
Exemplo n.º 19
0
 /// <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;
 }
Exemplo n.º 21
0
 /// <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)
 {
 }
Exemplo n.º 22
0
 public static void AddHref <THREF>(this IWebApiResponse target, Val2Type <THREF> type, string value)
 {
     target.Hrefs.Add(type.ToString().ToLower(), value?.ToLower());
 }
Exemplo n.º 23
0
 /// <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)
 {
 }
Exemplo n.º 24
0
 /// <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);
        }
Exemplo n.º 26
0
 /// <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));
            }
        }
Exemplo n.º 28
0
 /// <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)
 {
 }
Exemplo n.º 29
0
 /// <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)
 {
 }
Exemplo n.º 30
0
 /// <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}")
 {
 }