Files
OperationsMgr-CSharp/SaOperationsMgrWeb/Web/Controllers/HomeController.cs
T
2020-03-06 16:07:06 +00:00

110 lines
3.5 KiB
C#

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Sarand.Core.Base;
using Sarand.Core.Security;
using Sarand.OperationsMgr.Core.App;
using Sarand.OperationsMgr.Web.App;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Sarand.OperationsMgr.Web.Controllers
{
//=======================================================================
public class HomeController : Controller_Base
{
//-------------------------------------------------------------------
// Construction.
public HomeController (OpnLocaliser localiser) : base(localiser)
{
}
//-------------------------------------------------------------------
// Home - Index.
public IActionResult Index (Models.Model_Home_Index model)
{
Logger.Debug(GetType().Name + ".Index");
if (HttpContext.Session != null)
{
foreach (var sessionKey in HttpContext.Session.Keys)
{
Logger.Debug(GetType().Name + ".Index Session key: " + sessionKey);
}
}
// Actions.
if (model.FormAction.EqualsCI(Localiser.GetText("form.action.login")))
{
// Validate login properties.
if (StringUtil.IsEmpty(model.UserCode))
model.AddWarningMessage(Localiser.GetHtmlText("msg.warn.login.userCode.missing"));
// Retrieve session context.
OpnSessionContext sessionContext = null;
if (model.OK)
{
sessionContext = GetSessionContext(model.InstanceIdx);
if (sessionContext == null)
{
model.AddWarningMessage(Localiser.GetHtmlText("msg.warn.sessionContext.unknown"));
}
}
// Retrieve security console.
SaSecurityConsole securityConsole = null;
if (model.OK)
{
securityConsole = OpnGlobals.ConsoleHelper.GetSecurityConsole(sessionContext);
if (securityConsole == null)
model.AddWarningMessage(Localiser.GetHtmlText("msg.warn.securityConsole.unavailable"));
}
// Retrieve and validate user.
SaSecurityItem secItemUser = null;
if (model.OK)
{
secItemUser = securityConsole.GetUserByCode(model.UserCode);
if (secItemUser == null)
model.AddWarningMessage(Localiser.GetHtmlText("msg.warn.login.credentials.invalid"));
}
// Start user session.
if (model.OK)
{
if (OpenUserSession(sessionContext, secItemUser.Id, secItemUser.Code, secItemUser.Description))
Logger.Info("User logged in: " + secItemUser.Description + ". Instance: " + sessionContext.InstanceCode);
}
}
else if (model.FormAction.EqualsCI(Localiser.GetText("form.action.logout")))
{
// Make a note of the session index for the login form.
model.InstanceIdx = model.SessionIdx;
// Clear user session.
// NB Session Data may not be available, eg. if session has timed out.
if (SessionData != null)
{
String userName = SessionData.User.Name;
String instanceCode = OpnSystem.GetInstanceCode(SessionData.Instance);
Logger.Info("User logging out: " + userName + ". Instance: " + instanceCode);
}
else Logger.Warn("User logging out - session has expired.");
CloseUserSession();
}
else if (model.SessionExpired != null)
model.AddWarningMessage(Localiser.GetHtmlText("msg.warn.session.expired"));
return View(model);
}
//-------------------------------------------------------------------
public IActionResult Error ()
{
return View();
}
//-------------------------------------------------------------------
}
//=======================================================================
}