76 lines
2.5 KiB
C#
76 lines
2.5 KiB
C#
using Microsoft.AspNetCore.Mvc;
|
|
using Services.Interaces;
|
|
using System.Globalization;
|
|
using System.Security.Cryptography;
|
|
using System.Text;
|
|
using Web.ViewModel.QuestionnaireVM;
|
|
|
|
namespace Web.Controllers
|
|
{
|
|
public class QuestionnaireResponseController : Controller
|
|
{
|
|
private readonly IQuestionnaireRepository _questionnaireRepository;
|
|
|
|
public QuestionnaireResponseController(IQuestionnaireRepository questionnaireRepository)
|
|
{
|
|
_questionnaireRepository = questionnaireRepository;
|
|
}
|
|
public IActionResult Index()
|
|
{
|
|
|
|
return View();
|
|
}
|
|
|
|
public IActionResult Error()
|
|
{
|
|
ViewBag.ErrorMessage = "The survey link has expired. request a new link.";
|
|
|
|
return View();
|
|
}
|
|
|
|
public IActionResult DisplayQuestionnaire(int id, string token)
|
|
{
|
|
// Check if the token is null or empty
|
|
if (string.IsNullOrEmpty(token))
|
|
{
|
|
ViewBag.ErrorMessage = "The URL is invalid. Please provide a valid token.";
|
|
return View("Error");
|
|
}
|
|
|
|
// Split the token to extract the expiration date and time
|
|
string[] tokenParts = token.Split('|');
|
|
if (tokenParts.Length != 2)
|
|
{
|
|
ViewBag.ErrorMessage = "The URL is invalid. Please provide a valid token.";
|
|
return View("Error");
|
|
}
|
|
|
|
string expiryDateTimeString = tokenParts[1];
|
|
|
|
// Parse the expiration datetime in UTC format
|
|
if (!DateTime.TryParseExact(expiryDateTimeString, "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal, out DateTime expiryDateTimeUtc))
|
|
{
|
|
ViewBag.ErrorMessage = "The URL is invalid. Please provide a valid token.";
|
|
return View("Error");
|
|
}
|
|
|
|
// Convert the expiration datetime to local time
|
|
DateTime expiryDateTimeLocal = expiryDateTimeUtc.ToLocalTime();
|
|
|
|
// Check if the token is expired (accounting for UTC+2 offset)
|
|
if (expiryDateTimeLocal < DateTime.Now.AddHours(2))
|
|
{
|
|
|
|
return RedirectToAction(nameof(Error));
|
|
}
|
|
|
|
// Retrieve the questionnaire using the numeric ID
|
|
var questionnaire = _questionnaireRepository.GetQuestionnaireWithQuestionAndAnswer(id);
|
|
|
|
return View(questionnaire);
|
|
}
|
|
|
|
|
|
|
|
}
|
|
}
|