public ActionResult GenerateOtp(ReviewerType reviewerType) { var careManager = CurrentUser.CareManager.FirstOrDefault(); if (careManager == null) { return(HttpNotFound()); } // Clears expired OTPs. var now = DateTime.UtcNow; var otpsToRemove = careManager.Otps.Where(otp => otp.Expires < now).ToList(); if (otpsToRemove.Count > 0) { db.Otps.RemoveRange(otpsToRemove); db.SaveChanges(); } // Generates Otp newOtp = null; var random = new Random(); for (var n = 0; n < 10; n++) { using (var db = new ApplicationDbContext()) { newOtp = new Otp() { CareManagerId = careManager.CareManagerId, VerificationCode = string.Format("{0:0000}", random.Next(10000)), Expires = DateTime.UtcNow.AddMonths(1), ReviewerType = reviewerType }; db.Otps.Add(newOtp); try { db.SaveChanges(); Log(LogType.CareManager, "OTPを生成しました。", new { newOtp.CareManagerId, newOtp.ReviewerType, newOtp.VerificationCode }); return(Json(new { otp = newOtp })); } catch (DbUpdateException) { // Continues to try another random code. } } } // Failed to generate. return(Json(new { otp = (Otp)null })); }
/// <summary> /// Adds a review to CareManager /// </summary> /// <param name="careManagerId"></param> /// <param name="reviewerType"></param> /// <param name="rating"></param> /// <param name="comment"></param> /// <param name="reply"></param> protected void AddReview(int careManagerId, ReviewerType reviewerType, int rating, string comment, string reply = null) { var review = new Review() { // Layer 4 IpAddress = Request.UserHostAddress, Host = Request.UserHostName, // Application Layer PartitionKey = careManagerId.ToString(), ReviewerType = reviewerType, Rating = rating, Comment = comment, Reply = reply }; TableHelper <Review> .Table.Insert(review); }