using EnvelopeGenerator.Common; using EnvelopeGenerator.Web.Models; using EnvelopeGenerator.Web.Services; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Primitives; using System.Diagnostics; namespace EnvelopeGenerator.Web.Controllers { public class HomeController : BaseController { private readonly EnvelopeService _envelopeService; public HomeController(DatabaseService databaseService, LoggingService loggingService, EnvelopeService envelopeService): base(databaseService, loggingService) { _envelopeService = envelopeService; } [HttpGet] [Route("/")] public IActionResult Index() { return View(); } [HttpPost] [Route("/")] public IActionResult DebugEnvelopes() { try { StringValues passwordFromForm = HttpContext.Request.Form["password"]; string passwordFromConfig = database.GetAppSetting("Config:AdminPassword"); if (passwordFromConfig == null) { ViewData["error"] = "No admin password configured!"; return View("Index"); } if (passwordFromForm.Count != 1) { ViewData["error"] = "No admin password configured!"; return View("Index"); } string password = passwordFromForm[0]; if (password == null) { ViewData["error"] = "No password supplied!"; return View("Index"); } if (password != passwordFromConfig) { ViewData["error"] = "Wrong Password!"; return View("Index"); } List envelopes = _envelopeService.LoadEnvelopes(); return View(envelopes); } catch (Exception e) { ViewData["error"] = "Unknown error!"; return View("Index"); } } [HttpGet] [Route("/EnvelopeKey/{EnvelopeReceiverId}")] public IActionResult ShowEnvelope() { string envelopeKey = (string)HttpContext.Request.RouteValues["EnvelopeReceiverId"]; EnvelopeResponse response = _envelopeService.LoadEnvelope(envelopeKey); if (response.Envelope.UseAccessCode) { bool accessCodeAlreadyRequested = database.Models.receiverModel.AccessCodeAlreadyRequested(response.Receiver.Email, response.Envelope.Id); if (!accessCodeAlreadyRequested) { // Send email with password bool actionResult = database.Services.actionService.RequestAccessCode(response.Envelope, response.Receiver); bool result = database.Services.emailService.SendDocumentAccessCodeReceivedEmail(response.Envelope, response.Receiver); } return Redirect($"/EnvelopeKey/{envelopeKey}/Locked"); } else { ViewData["EnvelopeKey"] = envelopeKey; return View(); } } [HttpPost] [Route("/EnvelopeKey/{EnvelopeReceiverId}/Locked")] public IActionResult ShowEnvelopePost() { string envelopeKey = (string)HttpContext.Request.RouteValues["EnvelopeReceiverId"]; StringValues accessCodeFromForm = HttpContext.Request.Form["access_code"]; if (accessCodeFromForm.Count == 0) { return Redirect($"/EnvelopeKey/{envelopeKey}/Locked"); } if (accessCodeFromForm.Count > 1) { return Redirect($"/EnvelopeKey/{envelopeKey}/Locked"); } EnvelopeResponse response = _envelopeService.LoadEnvelope(envelopeKey); string accessCode = response.Receiver.AccessCode; if (string.IsNullOrEmpty(accessCodeFromForm[0])) { return Redirect($"/EnvelopeKey/{envelopeKey}/Locked"); } if (accessCode.Equals(accessCodeFromForm[0], StringComparison.Ordinal)) { bool actionResult = database.Services.actionService.EnterCorrectAccessCode(response.Envelope, response.Receiver); ViewData["EnvelopeKey"] = envelopeKey; return View("ShowEnvelope"); } else { bool actionResult = database.Services.actionService.EnterIncorrectAccessCode(response.Envelope, response.Receiver); return Redirect($"/EnvelopeKey/{envelopeKey}/Locked"); } } [HttpGet] [Route("/EnvelopeKey/{EnvelopeReceiverId}/Locked")] public IActionResult EnvelopeLocked() { ViewData["EnvelopeKey"] = HttpContext.Request.RouteValues["EnvelopeReceiverId"]; return View(); } [HttpGet] [Route("/EnvelopeKey/{EnvelopeReceiverId}/Success")] public IActionResult EnvelopeSigned() { ViewData["EnvelopeKey"] = HttpContext.Request.RouteValues["EnvelopeReceiverId"]; return View(); } [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] public IActionResult Error() { return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier }); } } }