public ActionResult Vote(int[] ids, DateTime?expirationDate) { if (expirationDate != null && DateTime.Now > expirationDate.Value) { return(Json(new { success = false, responseText = "Poll has expired." })); } var userIp = Request.UserHostAddress; var poll = _unitOfWork.Answers.GetPoll(ids[0]); if (Session["Voted-Poll" + poll.Id] != null || Request.Cookies["Voted-Poll" + poll.Id] != null || _unitOfWork.UniqueVisitors.HasAnsweredPoll(userIp, poll.Id)) { if (Session["Voted-Poll" + poll.Id] == null) { Session["Voted-Poll" + poll.Id] = true; } if (Request.Cookies["Voted-Poll" + poll.Id] == null) { var cookie = new HttpCookie("Voted-Poll" + poll.Id, "true"); cookie.Expires.AddYears(10); Response.SetCookie(cookie); } return(Json(new { success = false, responseText = "You've already participated in this poll." })); } foreach (var id in ids) { var answer = _unitOfWork.Answers.Get(id); answer.Votes++; } Session["Voted-Poll" + poll.Id] = true; var httpCookie = new HttpCookie("Voted-Poll" + poll.Id, "true"); httpCookie.Expires.AddYears(10); Response.SetCookie(httpCookie); if (_unitOfWork.UniqueVisitors.Exists(userIp)) { var user = _unitOfWork.UniqueVisitors.Get(userIp); user.PollsParticipated.Add(poll); } else { var visitor = new UniqueVisitor { IpAdress = userIp, PollsParticipated = new List <Poll> { poll } }; _unitOfWork.UniqueVisitors.Add(visitor); } _unitOfWork.Complete(); return(Json(new { success = true })); }
public void UniqueVisitor_Basic() { UniqueVisitor visitor; visitor = new UniqueVisitor(); Assert.AreNotEqual(Guid.Empty, visitor.ID); Assert.IsTrue(Helper.Within(visitor.IssueDateUtc, DateTime.UtcNow, TimeSpan.FromSeconds(1.0))); Assert.AreNotEqual(visitor, new UniqueVisitor()); Assert.AreNotEqual(new UniqueVisitor().GetHashCode(), new UniqueVisitor().GetHashCode()); // OK, this could happen once every few billion test runs }
public void UniqueVisitor_Serialize() { UniqueVisitor v1, v2; string cookie; v1 = new UniqueVisitor(); cookie = v1.ToString(); v2 = new UniqueVisitor(cookie); Assert.AreEqual(v1, v2); Assert.AreEqual(v1.ID, v2.ID); Assert.AreEqual(v1.IssueDateUtc, v2.IssueDateUtc); }
public void Add(UniqueVisitor visitor) { Context.UniqueVisitors.Add(visitor); }