110 lines
3.5 KiB
C#
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();
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
}
|
|
//=======================================================================
|
|
}
|