Beispiel #1
0
        public IActionResult Vote(string id)
        {
            string userID = "";

            foreach (var claim in User.Claims)
            {
                //Check to see if there is an AzureID in the session
                if (claim.Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier")
                {
                    userID = claim.Value;
                }
            }
            if (userID == "")
            {
                return(RedirectToAction("AccessDenied", "Account"));
            }
            else
            {
                model.Member = _member.GetMember(userID);
                model.Seat   = _seatService.GetSeatByAzureID(userID);
            }

            //Create a Register the vote using enum vote object
            VoteOptions vote;

            if (id.Equals("Yes"))
            {
                vote = VoteOptions.Yes;
            }
            else if (id.Equals("No"))
            {
                vote = VoteOptions.No;
            }
            else if (id.Equals("Abstain"))
            {
                vote = VoteOptions.Abstain;
            }
            else
            {
                return(RedirectToAction(nameof(Index)));
            }

            //Check that the user us currently registered to vote and hasn't been signed out before they press send.
            if (_memberRegister.GetMemberStatus(userID) == 0)
            {
                return(RedirectToAction(nameof(Index)));
            }

            _logger.LogInformation("{0}- Registered Member {1} - Voted {2} in poll {3} in seat {4}", DateTime.Now, model.Member.AzureId, vote, model.Ballot.BallotName, model.Seat);
            if (_ballot.CheckIfActiveBallot())
            {
                _logger.LogInformation("{0}- Registered Member {1} - Voted {2} in poll {3} in seat {4}", DateTime.Now, model.Member.AzureId, vote, model.Ballot.BallotName, model.Seat);
                //Cast vote into database
                _vote.CastVote(model.Ballot, model.Member, vote, model.Seat);
                //Send vote via SignalR to Display
                Send_Vote(id, model.Seat, model.Member.AzureId);
            }
            else
            {
                _logger.LogInformation("{0}- Attempted vote in closed Ballot. Registered Member {1} - Voted {2} in poll {3} in seat {4}", DateTime.Now, model.Member.AzureId, vote, model.Ballot.BallotName, model.Seat);
            }
            //Redirect user back to the vote homescreen
            return(RedirectToAction(nameof(Index)));
        }