General tidy.

This commit is contained in:
Andy Howard
2024-06-13 14:32:44 +01:00
parent 0c44e9ddd3
commit bf6bb966bc
159 changed files with 1166 additions and 972 deletions
@@ -99,7 +99,6 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers
[Route("Association/Ajax/GetList")]
public IActionResult Ajax_AssociationList(Model_Association model)
{
String fn = GetType().Name + ".Ajax_AssociationList";
AjaxResponse_AssociationList responseData = new AjaxResponse_AssociationList(model);
String messageTitle = Localiser["association.caption.associations"];
@@ -201,7 +200,6 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers
[Route("Association/Ajax/GetItem")]
public IActionResult Ajax_GetItem(Model_Association model)
{
String fn = GetType().Name + ".Ajax_GetItem";
String messageTitle = Localiser["association.caption.association"];
AjaxResponse_Association responseData = new AjaxResponse_Association(model);
@@ -219,7 +217,7 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers
SbmAssociation association = AccountMgr.GetAssociationById(associationId);
if (association == null)
{
SaLogger.Warn(fn + " Failed to retrieve association for Id: '" + model.AssociationId + "'");
SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve association for Id: '" + model.AssociationId + "'");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.found"]));
}
@@ -240,7 +238,6 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers
[Route("Association/Ajax/StoreItem")]
public IActionResult Ajax_StoreItem(Model_Association model)
{
String fn = GetType().Name + ".Ajax_StoreItem";
String messageTitle = Localiser["association.caption.association"];
AjaxResponse_Association responseData = new AjaxResponse_Association(model);
@@ -259,12 +256,12 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers
bool associationExists = StringUtil.ToBool(model.AssociationExists);
if (associationExists && !SysId.IsValid(associationId))
{
SaLogger.Warn(fn + " Id not specified for existing Association.");
SaLogger.Warn($"{SysUtil.Fn} Id not specified for existing Association.");
return Json(responseData.SetGoHome(messageTitle, Localiser["msg.error.system"]));
}
if (!associationExists && SysId.IsValid(associationId))
{
SaLogger.Warn(fn + " Id specified for new Association: '" + model.AssociationId + "'");
SaLogger.Warn($"{SysUtil.Fn} Id specified for new Association: '" + model.AssociationId + "'");
return Json(responseData.SetGoHome(messageTitle, Localiser["msg.error.system"]));
}
@@ -272,7 +269,7 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers
SbmAssociation association = AccountMgr.GetAssociationById(associationId);
if (association == null && SysId.IsValid(associationId))
{
SaLogger.Warn(fn + " Failed to retrieve association for Id: '" + model.AssociationId + "'");
SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve association for Id: '" + model.AssociationId + "'");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.found"]));
}
@@ -370,7 +367,7 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers
{
if (!AccountMgr.InsertAssociation(association, DbUpdateInfo))
{
SaLogger.Warn(fn + " Failed to insert association: " + AccountMgr.ErrorStateMessage);
SaLogger.Warn($"{SysUtil.Fn} Failed to insert association: " + AccountMgr.ErrorStateMessage);
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.insert.failed"] + "\n\n" + AccountMgr.ErrorStateMessage));
}
responseData.SetNotification(messageTitle, Localiser["msg.item.created"]);
@@ -379,7 +376,7 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers
{
if (!AccountMgr.UpdateAssociation(association, DbUpdateInfo))
{
SaLogger.Warn(fn + " Failed to update association [Id:" + SysId.ToString(association.Id) + "]: " + AccountMgr.ErrorStateMessage);
SaLogger.Warn($"{SysUtil.Fn} Failed to update association [Id:" + SysId.ToString(association.Id) + "]: " + AccountMgr.ErrorStateMessage);
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.update.failed"] + "\n\n" + AccountMgr.ErrorStateMessage));
}
responseData.SetNotification(messageTitle, Localiser["msg.item.updated"]);
@@ -35,8 +35,6 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers
[HttpGet]
public IActionResult Index()
{
String fn = GetType().Name + ".Index";
if (!ValidUserSession)
return RedirectToAction("", "");
@@ -23,7 +23,7 @@ using static Sarand.BusinessMgr.Net.Standard.Base.App.Sbm.Config.Database;
namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers
{
//=======================================================================
public class SbmController_Portal : SbmController_Base
public class SbmController_Portal : SbmController_Web
{
//-------------------------------------------------------------------
// Data members.
@@ -55,24 +55,22 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers
/// </summary>
protected bool SignUserIn(ISbmUserContext userContext, String dbIdentifier, SaSecurityItem securityItemUser, SbmAffiliate affiliateUser, List<SysIdString> supervisedOrganisations, SbmAssociation associationOrganisation, SbmAffiliate affiliateOrganisation, bool keepLoggedIn, ref String errorMessage)
{
String fn = GetType().Name + ".SignUserIn";
// Validate Security Item and Affiliate, just in case - should have been done before arriving here!
if (securityItemUser == null)
{
SaLogger.Error(fn + " Unable to sign account in - null security item.");
SaLogger.Error($"{SysUtil.Fn} Unable to sign account in - null security item.");
errorMessage = Localiser["security.msg.signin.invalid"];
return false;
}
if (affiliateUser == null)
{
SaLogger.Error(fn + " Unable to sign account in - null affiliate.");
SaLogger.Error($"{SysUtil.Fn} Unable to sign account in - null affiliate.");
errorMessage = Localiser["security.msg.signin.invalid"];
return false;
}
if (!affiliateUser.IsStatusCurrent)
{
SaLogger.Error(fn + " Unable to sign account in - affiliate is not active. Email: " + securityItemUser.EmailAddress);
SaLogger.Error($"{SysUtil.Fn} Unable to sign account in - affiliate is not active. Email: {securityItemUser.EmailAddress}");
errorMessage = Localiser["security.msg.signin.invalid"];
return false;
}
@@ -80,19 +78,19 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers
// Organisation.
if (associationOrganisation == null)
{
SaLogger.Error(fn + " Unable to sign account in - null organisation association.");
SaLogger.Error($"{SysUtil.Fn} Unable to sign account in - null organisation association.");
errorMessage = Localiser["security.msg.signin.invalid"];
return false;
}
if (associationOrganisation.AssociationType != Sbm.AssociationType.Internal)
{
SaLogger.Error(fn + " Unable to sign account in - organisation association is not type 'Internal'.");
SaLogger.Error($"{SysUtil.Fn} Unable to sign account in - organisation association is not type 'Internal'.");
errorMessage = Localiser["security.msg.signin.invalid"];
return false;
}
if (affiliateOrganisation == null)
{
SaLogger.Error(fn + " Unable to sign account in - null organisation affiliate.");
SaLogger.Error($"{SysUtil.Fn} Unable to sign account in - null organisation affiliate.");
errorMessage = Localiser["security.msg.signin.invalid"];
return false;
}
@@ -109,7 +107,7 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers
securityItemUser.LastInvalidLoginAt = DateTime.MinValue;
if (!securityConsoleForUser.UpdateSecurityItem(securityItemUser, DbUpdateInfo))
{
SaLogger.Warn(fn + " Failed to update security item for " + securityItemUser.EmailAddress + ": " + securityConsoleForUser.ErrorStateMessage);
SaLogger.Warn($"{SysUtil.Fn} Failed to update security item for {securityItemUser.EmailAddress}: {securityConsoleForUser.ErrorStateMessage}");
errorMessage = Localiser["security.msg.signin.invalid"];
return false;
}
@@ -118,11 +116,11 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers
affiliateUser.KeepLoggedIn_Portal = keepLoggedIn;
if (!accountMgrForUser.UpdateAffiliate(affiliateUser, DbUpdateInfo))
{
SaLogger.Warn(fn + " Failed to update affiliate for " + securityItemUser.EmailAddress + ": " + accountMgrForUser.ErrorStateMessage);
SaLogger.Warn($"{SysUtil.Fn} Failed to update affiliate for {securityItemUser.EmailAddress}: {accountMgrForUser.ErrorStateMessage}");
errorMessage = Localiser["security.msg.signin.invalid"];
return false;
}
SaLogger.Info(fn + " User session opened for " + securityItemUser.EmailAddress, true);
SaLogger.Info($"{SysUtil.Fn} User session opened for {securityItemUser.EmailAddress}", true);
}
// Create session.
@@ -139,7 +137,6 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers
/// <summary>Populate the user's profile contact details to the session.</summary>
protected bool RefreshSessionProfileContact(SaSecurityItem securityItemUser, SbmAffiliate affiliateUser, List<SysIdString> supervisedOrganisations, SbmAssociation associationOrganisation, SbmAffiliate affiliateOrganisation)
{
String fn = GetType().Name + ".RefreshSessionProfileContact";
SbmSessionData_Portal sessionData = SessionData_Portal;
SysId affiliateIdUser = sessionData?.User.AffiliateId ?? null;
if (!SysId.IsValid(affiliateIdUser)) return false;
@@ -180,7 +177,7 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers
String keepLoggedInCookieValue = GenerateKeepLoggedInCookieValue();
int cookieExpiresDays = Math.Max(Sbm.Config.Security.SignIn.KeepLoggedIn.CookieExpiresDays_Min, Math.Min(Sbm.Config.Security.SignIn.KeepLoggedIn.CookieExpiresDays_Max, AppConfig.Security.SignIn.KeepLoggedIn.CookieExpiresDays));
SetResponseCookie(CookieName_KeepLoggedIn, keepLoggedInCookieValue, DateTime.Now.AddDays(cookieExpiresDays), true);
SaLogger.Info(this.GetType().Name + ".SetKeepLoggedInCookie 'Keep Logged In' cookie set. Value: " + keepLoggedInCookieValue);
SaLogger.Info($"{SysUtil.Fn} 'Keep Logged In' cookie set. Value: {keepLoggedInCookieValue}");
}
/// <summary>Set the 'Keep Logged In' response cookie to expired with no data.</summary>
@@ -189,7 +186,7 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers
if (StringUtil.IsEmpty(GetRequestCookie(CookieName_KeepLoggedIn))) return;
// Clear cookie by setting expiry date in the past.
SetResponseCookie(CookieName_KeepLoggedIn, "", DateTime.Today.AddDays(-7), true);
SaLogger.Info(GetType().Name + ".ClearKeepLoggedInCookie 'Keep Logged In' cookie cleared.");
SaLogger.Info($"{SysUtil.Fn} 'Keep Logged In' cookie cleared.");
}
//-------------------------------------------------------------------
@@ -269,7 +266,7 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers
keepLoggedInParams.AffiliateIdUser = linkParams.Get(ParamName_KeepLoggedIn_AffiliateIdUser).ToSysId();
keepLoggedInParams.AssociationIdOrganisation = linkParams.Get(ParamName_KeepLoggedIn_AssociationIdOrganisation).ToSysId();
}
if (DebugMode) SaLogger.Info(GetType().Name + ".ExtractKeepLoggedInParams UserAccountId: " + SysId.ToString(keepLoggedInParams.AffiliateIdUser));
if (DebugMode) SaLogger.Info($"{SysUtil.Fn} UserAccountId: {SysId.ToString(keepLoggedInParams.AffiliateIdUser)}");
return keepLoggedInParams;
}
@@ -1,4 +1,5 @@
using Microsoft.AspNetCore.Mvc;
using NPOI.SS.Formula.Functions;
using Sarand.BusinessMgr.Net.Core.Web.App;
using Sarand.BusinessMgr.Net.Core.Web.Helpers;
using Sarand.BusinessMgr.Net.Core.Web.Portal.Models;
@@ -43,7 +44,6 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers
[Route("Security/Ajax/Signin")]
public IActionResult Ajax_Signin(Model_Security model)
{
String fn = GetType().Name + ".Ajax_Signin";
AjaxResponse_Signin responseData = new AjaxResponse_Signin(model);
String messageTitle = Localiser["label.signin"];
@@ -76,45 +76,51 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers
// User's security item.
SaSecurityItem securityItemUser = GetSecurityItemForSignin(securityConsoleForUser, model);
disposableItems.Add(securityItemUser);
if (securityItemUser == null)
{
SaLogger.Warn(fn + " Failed to retrieve Security Item. Database: " + busMgrDatabase.DatabaseName + ". Email: " + model.EmailAddress);
SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve Security Item. Database: {busMgrDatabase.DatabaseName}. Email: {model.EmailAddress}.");
continue;
}
if (!securityItemUser.PasswordMatches(model.Password))
{
SaLogger.Warn($"{SysUtil.Fn} Supplied password doesn't match Security Item. Database: {busMgrDatabase.DatabaseName}. Email: {model.EmailAddress}.");
continue;
}
disposableItems.Add(securityItemUser);
// User's affiliate.
SbmAffiliate affiliateUser = GetAffiliateForSignin(accountMgrForUser, model, securityItemUser);
disposableItems.Add(affiliateUser);
if (affiliateUser == null)
{
SaLogger.Warn(fn + " Failed to retrieve Affiliate for signin. Database: " + busMgrDatabase.DatabaseName + ". UserId: " + SysId.ToString(securityItemUser.Id));
SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve Affiliate for signin. Database: {busMgrDatabase.DatabaseName}. UserId: {SysId.ToString(securityItemUser.Id)}.");
continue;
}
disposableItems.Add(affiliateUser);
// User's supervised organisations.
List<SysIdString> supervisedOrganisations = accountMgrForUser.GetAffiliatesSupervisedBy(affiliateUser.Id);
if (supervisedOrganisations.IsEmpty())
{
SaLogger.Warn(fn + " User has no supervised organisations. Database: " + busMgrDatabase.DatabaseName + ". Email: " + model.EmailAddress);
SaLogger.Warn($"{SysUtil.Fn} User has no supervised organisations. Database: {busMgrDatabase.DatabaseName}. Email: {model.EmailAddress}.");
continue;
}
userContext.RefreshUser(securityItemUser, affiliateUser, supervisedOrganisations);
// User's organisation association.
SbmAssociation associationOrganisation = GetOrganisationAssociationForSignIn(accountMgrForUser, model, affiliateUser, supervisedOrganisations);
SbmAssociation associationOrganisation = GetOrganisationAssociationForSignIn(accountMgrForUser, model, userContext);
disposableItems.Add(associationOrganisation);
if (associationOrganisation == null)
{
SaLogger.Warn(fn + " Failed to identify Organisation Association. Database: " + busMgrDatabase.DatabaseName + ". Email: " + model.EmailAddress);
SaLogger.Warn($"{SysUtil.Fn} Failed to identify Organisation Association. Database: {busMgrDatabase.DatabaseName}. Email: {model.EmailAddress}.");
continue;
}
disposableItems.Add(associationOrganisation);
// User's organisation affiliate.
SbmAffiliate affiliateOrganisation = accountMgrForUser.GetAffiliateById(associationOrganisation?.Id ?? null);
SbmAffiliate affiliateOrganisation = accountMgrForUser.GetAffiliateById(associationOrganisation?.AffiliateIdOwner ?? null);
disposableItems.Add(affiliateOrganisation);
if (affiliateOrganisation == null)
{
SaLogger.Warn(fn + " Failed to retrieve Affiliate for organisation. Database: " + busMgrDatabase.DatabaseName + ". Id: " + SysId.ToString(associationOrganisation?.Id ?? null));
SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve Affiliate for organisation. Database: {busMgrDatabase.DatabaseName}. Id: " + SysId.ToString(associationOrganisation?.Id ?? null));
continue;
}
@@ -127,7 +133,7 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers
}
if (!(SessionData_Portal?.ValidUserSession ?? false))
{
SaLogger.Warn(fn + " Failed to identify Suitable database. Email: " + model.EmailAddress);
SaLogger.Warn($"{SysUtil.Fn} Failed to identify Suitable database. Email: {model.EmailAddress}.");
return Json(responseData.SetControlError(nameof(model.EmailAddress), model.Localiser["security.msg.signin.invalid"]));
}
@@ -140,13 +146,11 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers
//-------------------------------------------------------------------
private SaSecurityItem GetSecurityItemForSignin(SaSecurityConsole securityConsoleForUser, Model_Security model)
{
String fn = GetType().Name + ".GetSecurityItemForSignin";
// Retrieve security item by email address.
SaSecurityItem securityItemUser = securityConsoleForUser.GetUserByEmail(model.EmailAddress);
if (securityItemUser == null)
{
SaLogger.Warn(fn + " Failed to retrieve Security Item for email: " + model.EmailAddress, true);
SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve Security Item for email: {model.EmailAddress}.", true);
return null;
}
@@ -157,8 +161,8 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers
securityItemUser.InvalidLoginCount++;
securityItemUser.LastInvalidLoginAt = DateTime.Now;
if (!securityConsoleForUser.UpdateSecurityItem(securityItemUser, DbUpdateInfo))
SaLogger.Warn(fn + " Failed to store invalid sign-in attempt against User: " + model.EmailAddress + ". " + AccountMgr.ErrorStateMessage, true);
SaLogger.Warn(fn + " Attempt to sign-in to User " + model.EmailAddress + " with invalid password. Attempt: " + securityItemUser.InvalidLoginCount, true);
SaLogger.Warn($"{SysUtil.Fn} Failed to store invalid sign-in attempt against User: {model.EmailAddress}. {AccountMgr.ErrorStateMessage}", true);
SaLogger.Warn($"{SysUtil.Fn} Attempt to sign-in to User {model.EmailAddress} with invalid password. Attempt: {securityItemUser.InvalidLoginCount}.", true);
securityItemUser.Dispose(); securityItemUser = null;
return null;
}
@@ -169,8 +173,6 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers
//-------------------------------------------------------------------
private SbmAffiliate GetAffiliateForSignin(SbmAccountMgr accountMgrForUser, Model_Security model, SaSecurityItem securityItemUser)
{
String fn = GetType().Name + ".GetAffiliateForSignin";
// Identify the contact asociated with the security item.
SbmAffiliate.Params prmAffiliate = new SbmAffiliate.Params();
prmAffiliate.UserId = securityItemUser.Id;
@@ -179,14 +181,14 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers
if (affiliate == null)
{
SaLogger.Warn(fn + " Failed to retrieve Affiliate for User Id: " + SysId.ToString(securityItemUser.Id) + ". Email: " + model.EmailAddress, true);
SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve Affiliate for User Id: {SysId.ToString(securityItemUser.Id)}. Email: {model.EmailAddress}.", true);
return null;
}
// Validate status.
if (affiliate.Status != SaStatus.Current)
{
SaLogger.Warn(fn + " Invalid Affiliate status for User Id: " + SysId.ToString(securityItemUser.Id) + ". Email: " + model.EmailAddress + ". Found: " + affiliate.Status.ToString() + ". Expected: Current.", true);
SaLogger.Warn($"{SysUtil.Fn} Invalid Affiliate status for User Id: {SysId.ToString(securityItemUser.Id)}. Email: {model.EmailAddress}. Found: {affiliate.Status.ToString()}. Expected: Current.", true);
affiliate.Dispose(); affiliate = null;
return null;
}
@@ -195,21 +197,46 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers
}
//-------------------------------------------------------------------
private SbmAssociation GetOrganisationAssociationForSignIn(SbmAccountMgr accountMgrForUser, Model_Security model, SbmAffiliate affiliateUser, List<SysIdString> supervisedOrganisations)
/// <summary>
/// Identify the organisation for the user to login to - either last selected (via SysParam) or first in list.
/// </summary>
private SbmAssociation GetOrganisationAssociationForSignIn(SbmAccountMgr accountMgrForUser, Model_Security model, SbmUserContext userContext)
{
String fn = GetType().Name + ".GetOrganisationAssociationForSignIn";
foreach (SysIdString supervisedOrganisation in supervisedOrganisations)
// Previously selected organisation is stored in user params (SysParam table).
SbmSysParamCache sysParamCache = new SbmSysParamCache(userContext);
SysId affiliateIdOrganisation = StringUtil.ToSysId(sysParamCache.GetUserParamValue(SbmSysParamCache.ParamName_SelectedCompany));
SbmAssociation associationOrganisation = null;
foreach (SysIdString supervisedOrganisation in userContext.User.SupervisedOrganisations)
{
SbmAssociation associationOrganisation = accountMgrForUser.GetAssociationByOwnerTypeTarget(supervisedOrganisation.Id, Sbm.AssociationType.Internal, supervisedOrganisation.Id);
if (associationOrganisation == null)
SbmAssociation associationOrganisationCandidate = accountMgrForUser.GetAssociationByOwnerTypeTarget(supervisedOrganisation.Id, Sbm.AssociationType.Internal, supervisedOrganisation.Id);
if (associationOrganisationCandidate == null)
{
SaLogger.Warn(fn + " Failed to retrieve internal association for affiliate Id: " + SysId.ToString(supervisedOrganisation.Id));
SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve internal association for affiliate Id: {SysId.ToString(supervisedOrganisation.Id)}.");
continue;
}
return associationOrganisation;
if (associationOrganisationCandidate.AffiliateIdOwner.Equals(affiliateIdOrganisation))
{
// Previously selected organisation.
associationOrganisation = associationOrganisationCandidate;
break;
}
if (associationOrganisation == null)
// Make a note of the first organisation in case none selected.
associationOrganisation = associationOrganisationCandidate;
}
SaLogger.Warn(fn + " Failed to retrieve any internal associations for supervised organisations. Email: " + model.EmailAddress);
return null;
if (associationOrganisation != null)
{
// Make a note of the selection.
sysParamCache.SetUserParamValue(SbmSysParamCache.ParamName_SelectedCompany, SysId.ToString(associationOrganisation.AffiliateIdOwner));
}
else
SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve any internal associations for supervised organisations. Email: {model.EmailAddress}.");
if (sysParamCache.Modified)
{
sysParamCache.Store();
SaLogger.Info($"{SysUtil.Fn} User params stored.");
}
return associationOrganisation;
}
//-------------------------------------------------------------------
@@ -223,7 +250,6 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers
[Route("Security/Ajax/KeepLoggedIn")]
public ActionResult Ajax_KeepLoggedIn(Model_Security model)
{
String fn = GetType().Name + ".Ajax_KeepLoggedIn";
AjaxResponse_KeepLoggedIn responseData = new AjaxResponse_KeepLoggedIn();
// Validate session and referrer.
@@ -258,7 +284,6 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers
[Route("Security/Ajax/SignOut")]
public ActionResult Ajax_SignOut(Model_Security model)
{
String fn = GetType().Name + ".Ajax_SignOut";
AjaxResponse_SignOut responseData = new AjaxResponse_SignOut(model);
String messageTitle = Localiser["label.signout"];
@@ -272,14 +297,14 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers
SbmAffiliate affiliateUser = AccountMgr.GetAffiliateById(SessionData_Portal.User.AffiliateId);
if (affiliateUser == null)
{
SaLogger.Warn(fn + " System error - failed to retrieve account details.");
SaLogger.Warn($"{SysUtil.Fn} System error - failed to retrieve account details.");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.system"]));
}
// Clear user session.
String emailAddress = SessionData.User.EmailAddress;
CloseUserSession();
SaLogger.Info(fn + " User session closed for " + emailAddress, true);
SaLogger.Info($"{SysUtil.Fn} User session closed for {emailAddress}.", true);
// Clear 'Keep Logged In' cookie.
ClearKeepLoggedInCookie();
@@ -329,7 +354,6 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers
[Route("Security/Ajax/StorePassword")]
public ActionResult Ajax_StorePassword(Model_Security model)
{
String fn = GetType().Name + ".Ajax_StorePassword";
AjaxResponse_ChangePassword responseData = new AjaxResponse_ChangePassword(model);
String messageTitle = Localiser["security.caption.change.password"];
@@ -372,7 +396,7 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers
}
else
{
SaLogger.Warn(fn + " 'Request Password' parameters supplied but invalid. Email: " + requestPasswordParams.EmailAddress + ". SecurityItemId: " + SysId.ToString(requestPasswordParams.SecurityItemId) + ". AffiliateId: " + SysId.ToString(requestPasswordParams.AffiliateId));
SaLogger.Warn($"{SysUtil.Fn} 'Request Password' parameters supplied but invalid. Email: {requestPasswordParams.EmailAddress}. SecurityItemId: {SysId.ToString(requestPasswordParams.SecurityItemId)}. AffiliateId: {SysId.ToString(requestPasswordParams.AffiliateId)}.");
if (securityItemUser != null) securityItemUser.Dispose(); securityItemUser = null;
if (affiliateUser != null) affiliateUser.Dispose(); affiliateUser = null;
sessionContextForUser = null;
@@ -432,10 +456,10 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers
securityItemUser.PasswordHistory.RemoveAt(securityItemUser.PasswordHistory.Count - 1);
if (!securityConsole.UpdateSecurityItem(securityItemUser, DbUpdateInfo))
{
SaLogger.Warn(fn + " Failed to change password for " + securityItemUser.EmailAddress + ": " + securityConsole.ErrorStateMessage);
SaLogger.Warn($"{SysUtil.Fn} Failed to change password for {securityItemUser.EmailAddress}: {securityConsole.ErrorStateMessage}");
return Json(responseData.SetControlError(nameof(model.Password), Localiser["security.msg.change.password.failed"]));
}
SaLogger.Info(fn + " Password changed for " + securityItemUser.EmailAddress, true);
SaLogger.Info($"{SysUtil.Fn} Password changed for {securityItemUser.EmailAddress}.", true);
}
// Cleanup. NB The Security Item and/or Affiliate aren't disposed when the method
@@ -468,7 +492,6 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers
[Route("Security/Ajax/RequestPassword")]
public ActionResult Ajax_RequestPassword(Model_Security model)
{
String fn = GetType().Name + ".Ajax_RequestPassword";
AjaxResponse_RequestPassword responseData = new AjaxResponse_RequestPassword(model);
String messageTitle = Localiser["security.caption.request.password"];
@@ -510,16 +533,16 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers
emailData.Subject = Localiser["security.caption.request.password"];
PopulateRequestPasswordEmailBody(emailConsole, userContext, emailData, securityItemUser, affiliateUser);
if (emailConsole.SendEmail(emailData))
SaLogger.Info(fn + " Password request email sent to " + model.EmailAddress, true);
else SaLogger.Warn(fn + " Failed to send password request email to " + model.EmailAddress);
SaLogger.Info($"{SysUtil.Fn} Password request email sent to {model.EmailAddress}.", true);
else SaLogger.Warn($"{SysUtil.Fn} Failed to send password request email to {model.EmailAddress}.");
}
else SaLogger.Warn(fn + " Unable to send password request email to " + model.EmailAddress + " - affiliate is not active");
else SaLogger.Warn($"{SysUtil.Fn} Unable to send password request email to {model.EmailAddress} - affiliate is not active");
}
else SaLogger.Warn(fn + " Unable to send password request email to " + model.EmailAddress + " - affiliate does not exist. UserId: " + SysId.ToString(securityItemUser.Id));
else SaLogger.Warn($"{SysUtil.Fn} Unable to send password request email to {model.EmailAddress} - affiliate does not exist. UserId: {SysId.ToString(securityItemUser.Id)}.");
}
}
}
else SaLogger.Warn(fn + " Unable to send password request email to " + model.EmailAddress + " - security item does not exist.");
else SaLogger.Warn($"{SysUtil.Fn} Unable to send password request email to {model.EmailAddress} - security item does not exist.");
}
}
}
@@ -591,17 +614,17 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers
{
List<String> values = new List<String>();
if (!StringUtil.IsBlank(DbIdentifier))
values.Add("DbIdentifier: " + DbIdentifier);
values.Add($"DbIdentifier: {DbIdentifier}");
if (!StringUtil.IsBlank(EmailAddress))
values.Add("Email: " + EmailAddress);
values.Add($"Email: {EmailAddress}");
if (SysId.IsValid(SecurityItemId))
values.Add("SecurityItemId: " + SysId.ToString(SecurityItemId));
values.Add($"SecurityItemId: {SysId.ToString(SecurityItemId)}");
if (SysId.IsValid(AffiliateId))
values.Add("AffiliateId: " + SysId.ToString(AffiliateId));
values.Add($"AffiliateId: {SysId.ToString(AffiliateId)}");
if (DateUtil.IsValid(ExpiresAt))
values.Add("Expires: " + DateUtil.FormatXmlDateTime(ExpiresAt));
values.Add($"Expires: {DateUtil.FormatXmlDateTime(ExpiresAt)}");
if (!StringUtil.IsBlank(Token))
values.Add("Token: " + Token);
values.Add($"Token: {Token}");
return values;
}
/// <summary>Verifiy that the email and account Ids are populated and the data hasn't expired.</summary>
@@ -63,7 +63,6 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers
[HttpGet, HttpPost]
public IActionResult ChangePassword(Model_Security model)
{
String fn = GetType().Name + ".ChangePassword";
bool validSessionRequired = true;
if (Request.Method.EqualsCI(HttpMethods.Get))
@@ -74,7 +73,7 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Portal.Controllers
RequestPasswordParams requestPasswordParams = ExtractRequestPasswordLinkParams(encryptedParams);
if (requestPasswordParams.IsValid())
{
String logPrefix = fn + " 'Request Password' parameters supplied but ";
String logPrefix = $"{SysUtil.Fn} 'Request Password' parameters supplied but ";
String logSuffix = requestPasswordParams.GetValidParams().Concat("", " ", ".");
// User may be defined on any one of the BusinessMgr databases - need to find out which.
// Identify session contexts with a BusMgr database that hosts the specified email address.