Пример #1
0
        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));
        }
Пример #2
0
        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"));
        }