public ActionResult Add(MemberShipViewModel memberShip) { if (ModelState.IsValid) { MemberShip newMembership = new MemberShip() { Email = memberShip.Email, Id = Guid.NewGuid(), Name = memberShip.Name }; memberShipService.Insert(newMembership); return(RedirectToAction("Index")); } return(View(memberShip)); }
public async Task <ActionResult> BecomeMember(MemberShipViewModel model) { if (ModelState.IsValid) { if (model.SelectedMembershipType.ToLowerInvariant() != "memberfull" && model.SelectedMembershipType.ToLowerInvariant() != "memberassociate") { ModelState.AddModelError("", "Select a membership type first"); return(View(model)); } if (!await this.RoleManager.RoleExistsAsync(model.SelectedMembershipType)) { ModelState.AddModelError("", "Invalid membership type"); return(View(model)); } var membershipFees = "10.00"; if (model.SelectedMembershipType == "MemberFull") { membershipFees = "20.00"; } string expiryDatePlaceHolder = "2018-10-01"; System.Net.WebClient w = new System.Net.WebClient(); //POST has some optional configurations - recommended w.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded"; w.Encoding = System.Text.Encoding.UTF8; string webAddress = "https://island.manukau.ac.nz/BankFiction2/Transactions/Reservation"; string data = "[email protected]&MerchantPassword=nice.coffee&CardNo={0}&CardType={1}&CardSecurity={2}&CardHolder={3}&CardExpiry={4}&Amount={5}"; string cardOwner = HttpUtility.UrlEncode(model.CardOwner); data = String.Format(data, model.CardNumber, model.CardType, model.CSC, cardOwner, expiryDatePlaceHolder, membershipFees); //POST - another difference from GET is method UploadString string responseJson = w.UploadString(webAddress, data); //To work with JSON we add a "using" statement at the top of this document -- using Newtonsoft.Json; Reservation reservation = JsonConvert.DeserializeObject <Reservation>(responseJson); if (!reservation.IsReserved) { ModelState.AddModelError("", "Payment with given card details failed, try again!"); return(View(model)); } ApplicationUser user = System.Web.HttpContext.Current.GetOwinContext().GetUserManager <ApplicationUserManager>().FindById(System.Web.HttpContext.Current.User.Identity.GetUserId()); try { var roles = await UserManager.GetRolesAsync(user.Id); await UserManager.RemoveFromRolesAsync(user.Id, roles.ToArray()); await UserManager.UpdateAsync(user); this.UserManager.AddToRole(user.Id, model.SelectedMembershipType); user.MembershipPayId = reservation.TransactionId.ToString(); user.MemberExpireAt = DateTime.UtcNow.AddYears(1); await UserManager.UpdateAsync(user); model.Success = true; var authenticationManager = HttpContext.GetOwinContext().Authentication; authenticationManager.SignOut(); var identity = UserManager.CreateIdentity(user, DefaultAuthenticationTypes.ApplicationCookie); authenticationManager.SignIn(new Microsoft.Owin.Security.AuthenticationProperties() { IsPersistent = true }, identity); } catch (Exception exception) { ViewBag.Message = "Things broke!"; Debug.WriteLine(exception); //this.Log.Error(exception); return(View(model)); } } // If we got this far, something failed, redisplay form return(View("Success")); }