private void UpdateDetails(object sender, EventArgs e)
        {
            string requestURL            = App.apiPath + App.productsApiPath + App.countryContextPathSuffix;
            HttpResponseMessage response =
                HttpRequestSender.SendHttpRequest(requestURL, viewModel.Item, HttpMethod.Put, true).GetAwaiter().GetResult();

            requestURL = App.apiPath + App.productsApiPath + "/" + viewModel.Item.Id + App.countryContextPathSuffix;
            response   = HttpRequestSender.SendHttpRequest(requestURL, null, HttpMethod.Get, true).GetAwaiter().GetResult();

            if (!response.IsSuccessStatusCode)
            {
                label_InfoForUser.Text      = "Product details update failed.";
                label_InfoForUser.TextColor = Color.Red;
                return;
            }

            string editedItemStream = response.Content.ReadAsStringAsync()
                                      .GetAwaiter().GetResult();

            Item editedItem = JsonConvert.DeserializeObject <Item>(editedItemStream);

            viewModel.Item = editedItem;
            UpdatePageDetails();
            ChangeDetailsEditMode(sender, e);
            label_InfoForUser.Text      = "Product details update succeded.";
            label_InfoForUser.TextColor = Color.Green;
            //App.Current.MainPage = new MainPage();
        }
Esempio n. 2
0
        public async Task WhenErrorReceivedAnExceptionIsThown()
        {
            using (var httpListener = new TestHttpListener(HttpStatusCode.Forbidden))
                using (var httpRequestSender = new HttpRequestSender())
                {
                    var requestMessage = new HttpRequestMessage(HttpMethod.Get, httpListener.ListeningUrl);
                    var doRequest      = httpRequestSender.SendHttpRequest(requestMessage);

                    await Assert.ThrowsAsync <HttpRequestException>(() => doRequest);
                }
        }
Esempio n. 3
0
        private async void OnAuthCompletedAsync(object sender, AuthenticatorCompletedEventArgs e)
        {
            string UserInfoUrl = "https://www.googleapis.com/oauth2/v2/userinfo";

            var authenticator = sender as OAuth2Authenticator;

            if (authenticator != null)
            {
                authenticator.Completed -= OnAuthCompletedAsync;
                authenticator.Error     -= OnAuthErrorAsync;
            }

            GoogleUserModel user = null;

            if (e.IsAuthenticated)
            {
                // If the user is authenticated, request their basic user data from Google
                // UserInfoUrl = https://www.googleapis.com/oauth2/v2/userinfo
                var request  = new OAuth2Request("GET", new Uri(UserInfoUrl), null, e.Account);
                var response = request.GetResponseAsync().GetAwaiter().GetResult();
                if (response != null)
                {
                    // Deserialize the data and store it in the account store
                    string userJson = response.GetResponseTextAsync().GetAwaiter().GetResult();
                    user = JsonConvert.DeserializeObject <GoogleUserModel>(userJson);

                    await DisplayAlert("Successful authorization", "Google have granted your credentials.", "OK");

                    string requestForBearerTokenURL = App.apiPath + App.usersApiPath + "/LogInUsingGoogleAccount?idToken="
                                                      + e.Account.Properties["id_token"];

                    HttpResponseMessage responseForBearerToken =
                        HttpRequestSender.SendHttpRequest(requestForBearerTokenURL, user, HttpMethod.Post).GetAwaiter().GetResult();

                    string bearerTokenString = responseForBearerToken.Content.ReadAsStringAsync()
                                               .GetAwaiter().GetResult();

                    if (bearerTokenString == "null")
                    {
                        label_InfoForUser.Text      = "Service could not start session.";
                        label_InfoForUser.TextColor = Color.Red;
                        return;
                    }

                    TokenModel bearerToken = JsonConvert.DeserializeObject <TokenModel>(bearerTokenString);

                    BearerTokenModel.Instance.Token = bearerToken.Token;
                    App.Current.MainPage            = new MainPage();
                    return;
                }
            }

            await DisplayAlert("Unsuccessful authorization", "Google have not granted your credentials", "OK");
        }
Esempio n. 4
0
        public void WhenErrorReceivedAnExceptionIsThown()
        {
            using (var testHttpListener = new TestHttpListener(HttpStatusCode.Forbidden, null))
            {
                using (HttpRequestSender apiRequestSender = new HttpRequestSender())
                {
                    HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Get, testHttpListener.ListeningUrl);

                    Assert.ThrowsAsync <HttpRequestException>(async() => await apiRequestSender.SendHttpRequest(requestMessage));
                }
            }
        }
Esempio n. 5
0
        async void Save_Clicked(object sender, EventArgs e)
        {
            string requestURL            = App.apiPath + App.productsApiPath + App.countryContextPathSuffix;
            HttpResponseMessage response =
                HttpRequestSender.SendHttpRequest(requestURL, Item, HttpMethod.Post, true).GetAwaiter().GetResult();

            if (!response.IsSuccessStatusCode)
            {
                return;
            }

            MessagingCenter.Send(this, "AddItem", Item);
            await Navigation.PopModalAsync();
        }
Esempio n. 6
0
        public async Task WhenSuccessReceivedResponseIsReturned()
        {
            using (var httpListener = new TestHttpListener(HttpStatusCode.OK))
                using (var httpRequestSender = new HttpRequestSender())
                {
                    var requestMessage = new HttpRequestMessage(HttpMethod.Get, httpListener.ListeningUrl);
                    var response       = await httpRequestSender.SendHttpRequest(requestMessage);

                    Assert.Equal(
                        httpRequestSender.UserAgent,
                        response.RequestMessage.Headers.GetValues("User-Agent").First()
                        );
                }
        }
Esempio n. 7
0
        async Task ExecuteLoadItemsCommand()
        {
            if (IsBusy)
            {
                return;
            }

            IsBusy = true;

            try
            {
                if (App.currentConnectionType == ConnectionType.Offline)
                {
                    Items = App.offlineSync.OfflineItems;
                }
                else
                {
                    if (Items == null)
                    {
                        Items = new ObservableCollection <Item>();
                    }
                    Items.Clear();
                    //var items = await DataStore.GetItemsAsync(true);

                    string requestURL            = App.apiPath + App.productsApiPath + App.countryContextPathSuffix;
                    HttpResponseMessage response =
                        HttpRequestSender.SendHttpRequest(requestURL, null, HttpMethod.Get, true).GetAwaiter().GetResult();

                    string responseString = response.Content.ReadAsStringAsync()
                                            .GetAwaiter().GetResult();
                    var items = JsonConvert.DeserializeObject <IEnumerable <Item> >(responseString);

                    foreach (var item in items)
                    {
                        Items.Add(item);
                    }
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex);
            }
            finally
            {
                IsBusy = false;
            }
        }
Esempio n. 8
0
        private void LogMeIn(object sender, EventArgs e)
        {
            string    requestForRefreshTokenURL = App.apiPath + App.usersApiPath + "/LogIn";
            UserModel userData = new UserModel(entry_Username.Text, entry_Password.Text);

            HttpResponseMessage responseForRefreshToken =
                HttpRequestSender.SendHttpRequest(requestForRefreshTokenURL, userData, HttpMethod.Post).GetAwaiter().GetResult();

            string refreshTokenString = responseForRefreshToken.Content.ReadAsStringAsync()
                                        .GetAwaiter().GetResult();

            if (refreshTokenString == "null")
            {
                label_InfoForUser.Text      = "There is not such user with that password.";
                label_InfoForUser.TextColor = Color.Red;
                return;
            }

            TokenModel refreshToken = JsonConvert.DeserializeObject <TokenModel>(refreshTokenString);

            try
            {
                SecureStorage.SetAsync(App.refreshTokenStorageName, refreshToken.Token);
                SecureStorage.SetAsync(App.usernameStorageName, entry_Username.Text);
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex);
            }

            bool result = StartSession(refreshToken);

            if (!result)
            {
                label_InfoForUser.Text      = "Server could not start new session.";
                label_InfoForUser.TextColor = Color.Red;
            }
            else
            {
                App.Current.MainPage = new MainPage();
            }
        }
Esempio n. 9
0
        private void RegisterMe(object sender, EventArgs e)
        {
            string    requestURL = App.apiPath + App.usersApiPath + "/Register";
            UserModel userData   = new UserModel(entry_Username.Text, entry_Password.Text);

            HttpResponseMessage response =
                HttpRequestSender.SendHttpRequest(requestURL, userData, HttpMethod.Post).GetAwaiter().GetResult();

            if (response.IsSuccessStatusCode)
            {
                label_InfoForUser.Text      = "User account created.";
                label_InfoForUser.TextColor = Color.Green;
            }
            else
            {
                label_InfoForUser.Text      = "This username is already taken.";
                label_InfoForUser.TextColor = Color.Red;
            }

            return;
        }
Esempio n. 10
0
        private bool StartSession(TokenModel refreshToken)
        {
            string requestForBearerTokenURL = App.apiPath + App.usersApiPath + "/StartSession";

            HttpResponseMessage responseForBearerToken =
                HttpRequestSender.SendHttpRequest(requestForBearerTokenURL, refreshToken, HttpMethod.Post).GetAwaiter().GetResult();

            string bearerTokenString = responseForBearerToken.Content.ReadAsStringAsync()
                                       .GetAwaiter().GetResult();

            if (bearerTokenString == "null")
            {
                return(false);
            }

            TokenModel bearerToken = JsonConvert.DeserializeObject <TokenModel>(bearerTokenString);

            BearerTokenModel.Instance.Token = bearerToken.Token;

            return(true);
        }
        private void ChangeQuantity(object sender, EventArgs e)
        {
            int quantityChange;

            if (!int.TryParse(entry_QuantityChange.Text, out quantityChange))
            {
                label_InfoForUser.Text      = "Quantity change must have only number.";
                label_InfoForUser.TextColor = Color.Red;
                return;
            }

            string requestURL            = App.apiPath + App.productsApiPath + "/" + viewModel.Item.Id + "?quantityChange=" + entry_QuantityChange.Text;
            HttpResponseMessage response =
                HttpRequestSender.SendHttpRequest(requestURL, null, HttpMethod.Put, true).GetAwaiter().GetResult();

            if (!response.IsSuccessStatusCode)
            {
                label_InfoForUser.Text = "Quantity change failed.";
                if (response.StatusCode == System.Net.HttpStatusCode.Conflict)
                {
                    label_InfoForUser.Text += " Quantity can not be negative.";
                }
                label_InfoForUser.TextColor = Color.Red;
                return;
            }

            requestURL = App.apiPath + App.productsApiPath + "/" + viewModel.Item.Id + App.countryContextPathSuffix;
            response   = HttpRequestSender.SendHttpRequest(requestURL, null, HttpMethod.Get, true).GetAwaiter().GetResult();

            string editedItemStream = response.Content.ReadAsStringAsync()
                                      .GetAwaiter().GetResult();

            Item editedItem = JsonConvert.DeserializeObject <Item>(editedItemStream);

            viewModel.Item = editedItem;
            UpdatePageDetails();
            label_InfoForUser.Text      = "Quantity change succeded.";
            label_InfoForUser.TextColor = Color.Green;
            //App.Current.MainPage = new MainPage();
        }
        private async void DeleteItemAsync(object sender, EventArgs e)
        {
            var userWantToDeleteProduct = await DisplayAlert("Delete product?", "Deletion of this product will be permanent", "Yes", "No");

            if (!userWantToDeleteProduct)
            {
                return;
            }

            string requestURL            = App.apiPath + App.productsApiPath + "/" + viewModel.Item.Id;
            HttpResponseMessage response =
                HttpRequestSender.SendHttpRequest(requestURL, null, HttpMethod.Delete, true).GetAwaiter().GetResult();

            if (!response.IsSuccessStatusCode)
            {
                label_InfoForUser.Text      = "Product deletion failed. You have necessary permitions?";
                label_InfoForUser.TextColor = Color.Red;
                return;
            }

            App.Current.MainPage = new MainPage();
        }
Esempio n. 13
0
        async Task ExecuteLoadItemsCommand()
        {
            if (IsBusy)
            {
                return;
            }

            IsBusy = true;

            try
            {
                if (Items == null)
                {
                    Items = new ObservableCollection <CountryContextModel>();
                }
                Items.Clear();

                string requestURL            = App.apiPath + App.countriesApiPath;
                HttpResponseMessage response =
                    HttpRequestSender.SendHttpRequest(requestURL, null, HttpMethod.Get, true).GetAwaiter().GetResult();

                string responseString = response.Content.ReadAsStringAsync()
                                        .GetAwaiter().GetResult();
                var items = JsonConvert.DeserializeObject <IEnumerable <CountryContextModel> >(responseString);

                foreach (var item in items)
                {
                    Items.Add(item);
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex);
            }
            finally
            {
                IsBusy = false;
            }
        }