예제 #1
0
 /// <summary>
 /// Writes user info to SQL Server
 /// </summary>
 /// <returns>True if email exists</returns>
 public bool SaveNewUser(NewSubscription userData)
 {
     try
     {
         using (var cn = new SqlConnection(@"Data Source=(LocalDB)"))
         {
             string _sql = @"INSERT INTO [dbo].[System_Users] ([Username], [Password], [Email], [Plan], [Company], [TOSCheck], [BillingId]) VALUES(@u, @p, @e, @g, @c, @t, @b)";
             var cmd = new SqlCommand(_sql, cn);
             cmd.Parameters
                 .Add(new SqlParameter("@e", SqlDbType.NVarChar))
                 .Value = userData.Email;
             cmd.Parameters
                 .Add(new SqlParameter("@u", SqlDbType.NVarChar))
                 .Value = userData.Username;
             cmd.Parameters
                 .Add(new SqlParameter("@p", SqlDbType.NVarChar))
                 .Value = BusinessLogic.SHA1.Encode(userData.Password);
             cmd.Parameters
                 .Add(new SqlParameter("@g", SqlDbType.NVarChar))
                 .Value = userData.Plan;
             cmd.Parameters
                 .Add(new SqlParameter("@c", SqlDbType.NVarChar))
                 .Value = userData.Company;
             cmd.Parameters
                 .Add(new SqlParameter("@t", SqlDbType.Int))
                 .Value = userData.TOSCheck;
             cmd.Parameters
                 .Add(new SqlParameter("@b", SqlDbType.NVarChar))
                 .Value = userData.BillingID;
             cn.Open();
             var reader = cmd.ExecuteReader();
                 reader.Dispose();
                 cmd.Dispose();
                 CreateIntialMongoDocs(userData.Username, userData.Plan);
                 return true;
         }
     }
     catch (Exception ex)
     {
         Logger.WriteErrorLog(ex);
         return false;
     }
 }
예제 #2
0
        public ActionResult Signup(UserModel.User user, System.Web.Mvc.FormCollection collection)
        {
            if (ModelState.IsValid)
            {
                var PlanId = String.Empty;
                NewSubscription UserData = new NewSubscription();
                UserData.Email = user.BillingEmail;
                UserData.Username = user.BillingName;
                UserData.Password = user.BillingPassword;
                UserData.Plan = "Premium";
                PlanId = "d5jb";
                UserData.Company = user.Company;
                UserData.TOSCheck = Convert.ToInt32(user.TOSCheck);
                var regexItem = new Regex(@"\d");
                string email = user.BillingEmail;
                Regex regex = new Regex(@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$");
                Match match = regex.Match(email);
                if (!match.Success)
                {
                    //Bad Email
                    ModelState.AddModelError("BillingEmail", "Invalid Email");
                }
                else if (user.IsEmailValid(email))
                {
                    //Email Taken
                    ModelState.AddModelError("BillingEmail", "Email already in use");
                }
                if (user.BillingName.Length < 5)
                {
                    //Bad Username
                    ModelState.AddModelError("BillingName", "Username must be a least 5 characters in length");
                }
                else if (user.DoesUsernameExist(user.BillingName))
                {
                    //Username already exists
                    ModelState.AddModelError("BillingName", "Username is already in use");
                }
                if (user.BillingPassword != user.BillingPasswordTwo)
                {
                    //Passwords Don't Match
                    ModelState.AddModelError("BillingPassword", "Passwords do not match");

                }
                else if (user.BillingPassword.Length < 6)
                {
                    //Passwords Too Short
                    ModelState.AddModelError("BillingPassword", "Password must be at least 6 characters in length");
                }
                else if (!regexItem.IsMatch(user.BillingPassword))
                {
                    //Passwords do not contain number
                    ModelState.AddModelError("BillingPassword", "Password must contain at least one number");
                }
                if (user.Company.Length < 1)
                {
                    //Invalid Company
                    ModelState.AddModelError("Company", "Invalid Company Name");
                }
                if (!user.TOSCheck)
                {
                    //Terms of Service not checked
                    ModelState.AddModelError("General", "You must agree to terms of service");
                }
                //Write to DB if all is good
                if (ModelState.IsValid)
                {
                    CustomerRequest request = new CustomerRequest
                    {
                        CreditCard = new CreditCardRequest
                        {
                            CardholderName = collection["name"],
                            Number = collection["number"],
                            ExpirationMonth = collection["month"],
                            ExpirationYear = collection["year"],
                            CVV = collection["cvv"]
                        }
                    };
                    Result<Customer> result = Gateway.BrainTreeGateway.Customer.Create(request);
                    if (result.IsSuccess())
                    {
                        //Successful add to Braintree
                        UserData.BillingID = result.Target.Id;
                        if (user.SaveNewUser(UserData))
                        {
                            //Successful write to DB
                            try
                            {
                                Customer customer = Gateway.BrainTreeGateway.Customer.Find(UserData.BillingID);
                                string paymentMethodToken = customer.CreditCards[0].Token;
                                SubscriptionRequest subscriptionRequest = new SubscriptionRequest
                                {
                                    PaymentMethodToken = paymentMethodToken,
                                    PlanId = PlanId
                                };
                                Result<Subscription> subscriptionResult = Gateway.BrainTreeGateway.Subscription.Create(subscriptionRequest);
                                user.UpdateSubscriptionId(user.BillingName, subscriptionResult.Target.Id);
                                return RedirectToAction("Index", "Home");
                            }
                            catch (Braintree.Exceptions.NotFoundException)
                            {
                                //No customer found
                                return RedirectToAction("Error", "User");
                            }
                        }
                        else
                        {
                            //failure writing customer to database
                            return RedirectToAction("Error", "User");
                        }
                    }
                    else
                    {
                        //failure adding customer to Braintree
                        ModelState.AddModelError("General", result.Message);
                    }
                }
            }
            return View(user);
        }