/// <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; } }
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); }