using Microsoft.Extensions.Configuration; using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Dbas; using Sarand.Net.Standard.Base.Email; using Sarand.Net.Standard.Base.IO; using Sarand.Net.Standard.Base.Utils; using Sarand.Net.Standard.Dbas.Data; using Saxonite.Net.Core.Web.Base.Consoles; using Saxonite.Net.Standard.Base.App; using Saxonite.Net.Standard.Base.Consoles; using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Saxonite.Net.Core.Web.Base.App { //======================================================================= public abstract class SaxApplication_Web : SaxApplication_Base { //------------------------------------------------------------------- // Data members. protected Sax.InstanceType instanceType; protected String environmentName = ""; // Session context. protected class SessionContextData_Web { public SessionContextData_Web(SaxSessionContext_Web sessionContext) { SessionContext = sessionContext; } public SaxSessionContext_Web SessionContext { get; } public Dictionary Databases { get; } = new Dictionary(); public ISacsDatabase CoreDatabase { get { return Databases.GetValue(Sax.Database.Core, null); } } public ISacsDatabase SupportDatabase { get { return Databases.GetValue(Sax.Database.Support, null); } } } //------------------------------------------------------------------- // Protected construction. protected SaxApplication_Web() { WebApp = this; System_Web = new SaxSystem_Web(); } protected override void Dispose(bool disposing) { if (disposing) { WebApp = null; System_Web = null; } base.Dispose(disposing); } //------------------------------------------------------------------- // Globals. public static SaxApplication_Web WebApp { get; private set; } public override SaxSystem System { get { return System_Web; } } public SaxSystem_Web System_Web { get; private set; } // Application instance. public override Sax.InstanceType InstanceType { get { return instanceType; } } public override String EnvironmentName { get { return environmentName; } } public bool Development { get; protected set; } public String LoggingRootFolder { get; protected set; } = ""; // Application components. public abstract String SessionCookieName { get; } public virtual SaxSessionContext SessionContext { get; protected set; } public abstract SaxAppConfig AppConfig { get; } public SaxConsoleHelper_Web ConsoleHelper_Web { get; protected set; } public override IDatabaseInfo CreateDbInfo(SaxSessionContext sessionContext, Sax.Database databaseType) { return new DbDataItem.DatabaseInfo(GetDatabase(sessionContext, databaseType)); } // Configuration. public IConfiguration Configuration { get; protected set; } public IConfiguration SaxConfiguration { get; protected set; } //------------------------------------------------------------------- // Logging. protected void LogApplicationStart(String fn) { // Log application start. List applicationParams = new List(); applicationParams.Add("Host", SaxSystem.ComputerName); applicationParams.Add("Version", Sax.Version.GetFullVersion()); applicationParams.Add("Instance", InstanceType.ToString() + (!StringUtil.IsEmpty(AppConfig.Instance) ? " [" + AppConfig.Instance + "]" : "")); applicationParams.Add("Configuration", SaxSystem.DebugMode ? "Debug" : "Release"); applicationParams.Add("Environment", EnvironmentName); if (!StringUtil.IsBlank(AppConfig.Databases.Core.Location)) applicationParams.Add("Database - Core", AppConfig.Databases.Core.Location); if (!StringUtil.IsBlank(AppConfig.Databases.Support.Location)) applicationParams.Add("Database - Support", AppConfig.Databases.Support.Location); applicationParams.Add("Application root", SaxSystem.ApplicationFolder); if (!StringUtil.IsEmpty(AppConfig.Documents.RootFolder)) applicationParams.Add("Documents root", AppConfig.Documents.RootFolder); applicationParams.Add("Email context", AppConfig.Email.Context + (!StringUtil.IsEmpty(EmailConfig.SMTP.Server) ? " [" + EmailConfig.SMTP.Server + "]" : "")); SaLogger.Info(fn + " Application start." + applicationParams.Select(item => StringUtil.PadRight(item.Item1 + ":", 20, ' ') + item.Item2).Concat("", "\n\t"), true); if (StringUtil.IsEmpty(EmailConfig.SMTP.Server) || StringUtil.IsEmpty(EmailConfig.Message.AddressFrom)) SaLogger.Warn(fn + " Incomplete email configuration.", true); } //------------------------------------------------------------------- protected void InitialiseTemporaryLoggingFolder() { // Default logging folder - in case of startup failure. try { foreach (String folder in new String[] { @"D:\Sarand\Projects\User\AHoward\VS2017\Saxonite\Logs" }) { if (DirectoryUtil.DirectoryExists(folder)) { SaLogger.LogFolder = folder; break; } } } catch (Exception) { } } //------------------------------------------------------------------- } //======================================================================= }