예제 #1
0
        /// <summary>
        /// Write <seealso cref="DataModel"/> to data storage contoller at defined random index. Then write that index to CurrentCategory index collection, and save changes of category storage controller.
        /// </summary>
        /// <param name="category">Adding data</param>
        public void AddData(DataModel data, CategoryModel toCategory)
        {
            List <int> usingIndexes = GetUsingDataIndexes();

            int maxValue = dataController.Count();
            int newIndex = random.Next(0, maxValue);

            while (usingIndexes.Contains(newIndex))
            {
                newIndex = random.Next(0, maxValue);
            }

            dataController.PasteAt(SecureManager.GetIndexOf(newIndex), data);

            List <CategoryModel> categories = categoryController.ToList();

            for (int i = 0; i < categories.Count; i++)
            {
                if (categories[i].Equals(toCategory))
                {
                    CategoryModel newCategory = new CategoryModel {
                        DataIndexes = new List <int>(toCategory.DataIndexes), Name = toCategory.Name
                    };
                    newCategory.DataIndexes.Add(newIndex);
                    categoryController.PasteAt(i, newCategory);
                    break;
                }
            }
        }
예제 #2
0
        /// <summary>
        /// Replace old data by new.
        /// </summary>
        public void ReplaceData(DataModel oldData, DataModel newData)
        {
            List <int> usingIndexes = GetUsingDataIndexes();

            foreach (var index in usingIndexes)
            {
                if (dataController.Get(SecureManager.GetIndexOf(index)).Equals(oldData))
                {
                    dataController.PasteAt(SecureManager.GetIndexOf(index), newData);
                    break;
                }
            }
        }
예제 #3
0
        /// <summary>
        /// Get list of data referenced in CurrentCategory.
        /// </summary>
        /// <returns></returns>
        public List <DataModel> GetData(CategoryModel ofCategory)
        {
            List <DataModel> dataList = new List <DataModel>();

            if (ofCategory.DataIndexes.Count == 0)
            {
                return(dataList);
            }

            dataList.Capacity = ofCategory.DataIndexes.Count;
            foreach (var dataIndex in ofCategory.DataIndexes)
            {
                dataList.Add(dataController.Get(SecureManager.GetIndexOf(dataIndex)));
            }

            return(dataList);
        }
예제 #4
0
        /// <summary>
        /// Finds which category refers to this data, and remove this reference.
        /// </summary>
        /// <param name="data">Data to remove.</param>
        public void RemoveData(DataModel data)
        {
            List <CategoryModel> categories = GetCategories();

            for (int i = 0; i < categories.Count; i++)
            {
                foreach (var dataIndex in categories[i].DataIndexes)
                {
                    if (dataController.Get(SecureManager.GetIndexOf(dataIndex)).Equals(data))
                    {
                        CategoryModel newCategory = new CategoryModel {
                            DataIndexes = new List <int>(categories[i].DataIndexes), Name = categories[i].Name
                        };
                        newCategory.DataIndexes.Remove(dataIndex);
                        categoryController.PasteAt(i, newCategory);
                        return;
                    }
                }
            }
        }
예제 #5
0
        private void SecureStorage()
        {
            var dataIndexes = GetUsingDataIndexes();

            if (dataIndexes.Count == 0)
            {
                return;
            }

            List <DataModel> data = new List <DataModel>();

            foreach (var index in dataIndexes)
            {
                data.Add(dataController.Get(SecureManager.GetIndexOf(index)));
            }

            Random        rng           = new Random();
            DataGenerator generator     = new DataGenerator();
            int           storageLength = dataController.Count();

            foreach (var item in data)
            {
                for (int i = 0; i < storageLength / (50 * data.Count); i++)
                {
                    int index;
                    do
                    {
                        index = rng.Next(storageLength);
                    } while (dataIndexes.Contains(index));

                    dataController.PasteAt(SecureManager.GetIndexOf(index),
                                           new DataModel
                    {
                        Date        = item.Date,
                        Description = item.Description,
                        Login       = item.Login,
                        Password    = generator.GenerateRandomPassword(item.Password.Length)
                    });
                }
            }
        }
예제 #6
0
        private void MakePayment()
        {
            try {
                LoadingScreen.ShowLoading(this.View);

                cardPayment.Card = GatherCardDetails();

                SubmitButton.Disable();

                _paymentService.MakePayment(cardPayment, new ClientService()).ContinueWith(reponse => {
                    if (reponse.Exception != null)
                    {
                        LoadingScreen.HideLoading();
                        DispatchQueue.MainQueue.DispatchAfter(DispatchTime.Now, () => {
                            NavigationController.CloseView();

                            reponse.Exception.FlattenToJudoFailure(failureCallback);
                        });
                    }
                    else
                    {
                        var result = reponse.Result;
                        if (JudoSDKManager.Instance.ThreeDSecureEnabled && result.Response != null && result.Response.GetType() == typeof(PaymentRequiresThreeDSecureModel))
                        {
                            var threedDSecureReceipt = result.Response as PaymentRequiresThreeDSecureModel;


                            SecureManager.SummonThreeDSecure(threedDSecureReceipt, SecureWebView);
                        }
                        else
                        {
                            if (result != null && !result.HasError && result.Response.Result != "Declined")
                            {
                                var paymentreceipt = result.Response as PaymentReceiptModel;

                                if (paymentreceipt != null)
                                {
                                    // call success callback
                                    if (successCallback != null)
                                    {
                                        DispatchQueue.MainQueue.DispatchAfter(DispatchTime.Now, () => {
                                            NavigationController.CloseView();
                                            successCallback(paymentreceipt);
                                        });
                                    }
                                }
                                else
                                {
                                    var threedDSecureReceipt = result.Response as PaymentRequiresThreeDSecureModel;
                                    if (threedDSecureReceipt != null)
                                    {
                                        DispatchQueue.MainQueue.DispatchAfter(DispatchTime.Now, () => {
                                            NavigationController.CloseView();

                                            failureCallback(new JudoError {
                                                ApiError = new JudoPayDotNet.Errors.JudoApiErrorModel {
                                                    ErrorMessage = "Account requires 3D Secure but application is not configured to accept it",
                                                    ErrorType    = JudoApiError.General_Error,
                                                    ModelErrors  = null
                                                }
                                            });
                                        });
                                    }
                                    else
                                    {
                                        throw new Exception("JudoXamarinSDK: unable to find the receipt in response.");
                                    }
                                }
                            }
                            else
                            {
                                // Failure callback
                                if (failureCallback != null)
                                {
                                    var judoError = new JudoError {
                                        ApiError = result != null ? result.Error : null
                                    };
                                    var paymentreceipt = result != null ? result.Response as PaymentReceiptModel : null;

                                    if (paymentreceipt != null)
                                    {
                                        // send receipt even we got card declined
                                        DispatchQueue.MainQueue.DispatchAfter(DispatchTime.Now, () => {
                                            NavigationController.CloseView();

                                            failureCallback(judoError, paymentreceipt);
                                        });
                                    }
                                    else
                                    {
                                        DispatchQueue.MainQueue.DispatchAfter(DispatchTime.Now, () => {
                                            NavigationController.CloseView();

                                            failureCallback(judoError);
                                        });
                                    }
                                }
                            }

                            LoadingScreen.HideLoading();
                        }
                    }
                });
            } catch (Exception ex) {
                LoadingScreen.HideLoading();
                // Failure callback
                if (failureCallback != null)
                {
                    var judoError = new JudoError {
                        Exception = ex
                    };
                    DispatchQueue.MainQueue.DispatchAfter(DispatchTime.Now, () => {
                        NavigationController.CloseView();

                        failureCallback(judoError);
                    });
                }
            }
        }