101 lines
4.6 KiB
C#
101 lines
4.6 KiB
C#
using Sarand.BusinessMgr.Net.Core.Web.App;
|
|
using Sarand.BusinessMgr.Net.Standard.Base.App;
|
|
using Sarand.Net.Standard.Base.App;
|
|
using Sarand.Net.Standard.Base.Core;
|
|
using Sarand.Net.Standard.Base.Dbas;
|
|
using Sarand.Net.Standard.Base.Security;
|
|
using Sarand.Net.Standard.Base.Utils;
|
|
using Sarand.Net.Standard.Dbas.Data;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
|
|
namespace Sarand.BusinessMgr.Net.Core.Web.Helpers
|
|
{
|
|
//=======================================================================
|
|
// Session Context utility functions.
|
|
//=======================================================================
|
|
public static class SbmSessionContextHelper_Web
|
|
{
|
|
//-------------------------------------------------------------------
|
|
// Data members.
|
|
private static String className = typeof(SbmSessionContextHelper_Web).Name;
|
|
|
|
//-------------------------------------------------------------------
|
|
// Session Contexts.
|
|
//-------------------------------------------------------------------
|
|
public static SbmSessionContext GetSessionContext (ushort idx)
|
|
{
|
|
SbmApplication_Web app = SbmGlobals_Web.Application;
|
|
return app.GetSessionContext(idx);
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Session Contexts for User Email Address
|
|
//-------------------------------------------------------------------
|
|
/// <summary>
|
|
/// Identify the session context that corresponds with the BusinessMgr
|
|
/// database for the specified user by email address.
|
|
/// </summary>
|
|
public static List<ushort> GetSessionContextIdxsForContextUserEmail(String dbIdentifier, String emailAddress)
|
|
{
|
|
String alias_SecurityItem = "SecItm";
|
|
String alias_Affiliate = "Affil";
|
|
List<ushort> sessionContextIdxs = new List<ushort>();
|
|
if (StringUtil.IsEmpty(emailAddress)) return sessionContextIdxs;
|
|
if (SacsSystem.DebugMode) SaLogger.Info($"{SysUtil.Fn} Searching for database. Identifier: {dbIdentifier}. Email address: {emailAddress}");
|
|
|
|
// Get the session context indices defined by the application.
|
|
SbmApplication_Web app = SbmGlobals_Web.Application;
|
|
foreach (ushort sessionContextIdx in app.GetSessionContextIdxs())
|
|
{
|
|
// Retrieve the session context.
|
|
SbmSessionContext sessionContext = app.GetSessionContext(sessionContextIdx);
|
|
if (sessionContext == null)
|
|
{
|
|
SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve SessionContext for idx: " + sessionContextIdx);
|
|
continue;
|
|
}
|
|
// Verify Db Identifier.
|
|
List<string> dbIdentifiers = app.GetDbIdentifiers(sessionContext);
|
|
if (!dbIdentifiers.ContainsCI(dbIdentifier))
|
|
continue;
|
|
ISacsDatabase db = app.GetBusMgrDatabase(sessionContext);
|
|
if (db == null)
|
|
{
|
|
SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve Database for idx: " + sessionContextIdx);
|
|
continue;
|
|
}
|
|
if (SacsSystem.DebugMode) SaLogger.Info($"{SysUtil.Fn} Database: " + db.DatabaseName);
|
|
|
|
// Query to check for Security Item matching the email with associated Affiliate.
|
|
// NB This is done independently for each database in case there are different
|
|
// DBMSs involved with different value formatting or syntax rules.
|
|
DbQuery qry = new DbQuery(db.DbmsType);
|
|
qry.Tables.Add(SaSecurityDbDfn.GetTableName(SaSecurityDbDfn.TableIdx.SaSecItem), alias_SecurityItem);
|
|
qry.Columns.Add(SaSecurityDbDfn.GetColumnNameQual(SaSecurityDbDfn.ColumnIdx.SaSecItem_Id, alias_SecurityItem));
|
|
qry.Columns.Add(SaSecurityDbDfn.GetColumnNameQual(SaSecurityDbDfn.ColumnIdx.SaSecItem_Id, alias_SecurityItem));
|
|
qry.Filters.Add(SaSecurityDbDfn.GetColumnNameQual(SaSecurityDbDfn.ColumnIdx.SaSecItem_EmailAddress, alias_SecurityItem) + "='" + DbQuery.FormatForCondition(emailAddress) + "'");
|
|
// Join to the Affiliate table.
|
|
DbQueryJoin joinAffiliate = new DbQueryJoin(DbJoinType.FullOuter);
|
|
joinAffiliate.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Affiliate), alias_Affiliate);
|
|
joinAffiliate.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_UserId, alias_Affiliate) + "=" + SaSecurityDbDfn.GetColumnNameQual(SaSecurityDbDfn.ColumnIdx.SaSecItem_Id, alias_SecurityItem));
|
|
|
|
// Execute query.
|
|
using (DbResultSet resultSet = DbResultSet_DataReader.ExecuteQuery(db, qry.BuildQuery()))
|
|
{
|
|
if (resultSet != null && resultSet.NextRecord())
|
|
{
|
|
if (SacsSystem.DebugMode) SaLogger.Info($"{SysUtil.Fn} Database contains email: " + db.DatabaseName);
|
|
sessionContextIdxs.Add(sessionContextIdx);
|
|
}
|
|
}
|
|
}
|
|
return sessionContextIdxs;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
}
|
|
//=======================================================================
|
|
}
|