/// <summary> /// Initialize the Petra server and connect to the database /// </summary> /// <param name="AConfigName">just provide the server config file, plus AutoLogin and AutoLoginPasswd</param> public static TServerManager Connect(string AConfigName) { if (File.Exists(AConfigName)) { new TAppSettingsManager(AConfigName); } else { new TAppSettingsManager(); } new TLogging(TAppSettingsManager.GetValue("Server.LogFile")); CommonNUnitFunctions.InitRootPath(); Catalog.Init(); TServerManager.TheServerManager = new TServerManager(); DBAccess.GDBAccessObj = new TDataBase(); DBAccess.GDBAccessObj.EstablishDBConnection(TSrvSetting.RDMBSType, TSrvSetting.PostgreSQLServer, TSrvSetting.PostgreSQLServerPort, TSrvSetting.PostgreSQLDatabaseName, TSrvSetting.DBUsername, TSrvSetting.DBPassword, "", "Ict.Testing.NUnitPetraServer.TPetraServerConnector.Connect DB Connection"); bool SystemEnabled; string WelcomeMessage; IPrincipal ThisUserInfo; Int32 ClientID; TConnectedClient CurrentClient = TClientManager.ConnectClient( TAppSettingsManager.GetValue("AutoLogin").ToUpper(), TAppSettingsManager.GetValue("AutoLoginPasswd"), "NUNITTEST", "127.0.0.1", TFileVersionInfo.GetApplicationVersion().ToVersion(), TClientServerConnectionType.csctLocal, out ClientID, out WelcomeMessage, out SystemEnabled, out ThisUserInfo); // the following values are stored in the session object DomainManager.GClientID = ClientID; DomainManager.CurrentClient = CurrentClient; UserInfo.GUserInfo = (TPetraPrincipal)ThisUserInfo; TSetupDelegates.Init(); TSystemDefaultsCache.GSystemDefaultsCache = new TSystemDefaultsCache(); DomainManager.GetSiteKeyFromSystemDefaultsCacheDelegate = @TSystemDefaultsCache.GSystemDefaultsCache.GetSiteKeyDefault; TUserDefaults.InitializeUnit(); StringHelper.CurrencyFormatTable = DBAccess.GDBAccessObj.SelectDT("SELECT * FROM PUB_a_currency", "a_currency", null); return((TServerManager)TServerManager.TheServerManager); }
/// <summary> /// Initialize the Petra server and connect to the database /// </summary> /// <param name="AConfigName">just provide the server config file, plus AutoLogin and AutoLoginPasswd</param> public static TServerManager Connect(string AConfigName) { TDBTransaction LoginTransaction; bool CommitLoginTransaction = false; bool SystemEnabled; string WelcomeMessage; Int32 ClientID; Int64 SiteKey; if (!File.Exists(AConfigName) && (AConfigName.Length > 0)) { TLogging.Log("cannot find config file " + Path.GetFullPath(AConfigName)); Environment.Exit(-1); } TSession.InitThread("NUnitPetraServer.TPetraServerConnector.Connect", AConfigName); CommonNUnitFunctions.InitRootPath(); Catalog.Init(); TServerManager.TheServerManager = new TServerManager(); ErrorCodeInventory.Init(); // initialise the cached tables and the delegates TSetupDelegates.Init(); TDataBase db = DBAccess.Connect( "Ict.Testing.NUnitPetraServer.TPetraServerConnector.Connect DB Connection"); // we need a serializable transaction, to store the session LoginTransaction = db.BeginTransaction(IsolationLevel.Serializable); try { TClientManager.PerformLoginChecks(TAppSettingsManager.GetValue("AutoLogin").ToUpper(), TAppSettingsManager.GetValue("AutoLoginPasswd"), "NUNITTEST", "127.0.0.1", out SystemEnabled, LoginTransaction); CommitLoginTransaction = true; } catch (EPetraSecurityException) { // We need to set this flag to true here to get the failed login to be stored in the DB!!! CommitLoginTransaction = true; } finally { if (CommitLoginTransaction) { LoginTransaction.Commit(); } else { LoginTransaction.Rollback(); } } TConnectedClient CurrentClient = TClientManager.ConnectClient( TAppSettingsManager.GetValue("AutoLogin").ToUpper(), TAppSettingsManager.GetValue("AutoLoginPasswd"), "NUNITTEST", "127.0.0.1", TFileVersionInfo.GetApplicationVersion().ToVersion(), TClientServerConnectionType.csctLocal, out ClientID, out WelcomeMessage, out SystemEnabled, out SiteKey, db); // the following values are stored in the session object DomainManager.GClientID = ClientID; DomainManager.CurrentClient = CurrentClient; DomainManager.GSiteKey = SiteKey; TSetupDelegates.Init(); db.CloseDBConnection(); return((TServerManager)TServerManager.TheServerManager); }
/// main method public static void Main(string[] args) { new TAppSettingsManager(); new TLogging(); if (!TAppSettingsManager.HasValue("YmlGzFile") || !TAppSettingsManager.HasValue("Action")) { TLogging.Log("sample call: -C:../../etc/TestServer.config -Action:dump -YmlGzFile:test.yml.gz"); TLogging.Log("sample call: -C:../../etc/TestServer.config -Action:load -YmlGzFile:test.yml.gz"); Environment.Exit(-1); } string YmlFile = TAppSettingsManager.GetValue("YmlGzFile"); string Action = TAppSettingsManager.GetValue("Action"); TLogging.DebugLevel = TAppSettingsManager.GetInt32("Server.DebugLevel", 0); TSession.InitThread(); ErrorCodeInventory.Init(); TServerManager.TheServerManager = new TServerManager(); // initialise the cached tables and the delegates TSetupDelegates.Init(); bool ExitWithError = false; try { if (Action == "dump") { if (!DumpYmlGz(YmlFile)) { ExitWithError = true; } } else if (Action == "load") { if (!LoadYmlGz(YmlFile)) { ExitWithError = true; } } } catch (Exception e) { TLogging.Log(e.ToString()); ExitWithError = true; } TServerManager.TheServerManager.StopServer(); if (TAppSettingsManager.GetValue("interactive", "true") == "true") { Console.WriteLine("Please press Enter to continue..."); Console.ReadLine(); } if (ExitWithError) { Environment.Exit(-1); } }
/// <summary> /// initialise the server for each Web Request /// </summary> private static bool Init() { string ConfigFileName = string.Empty; // make sure the correct config file is used string Instance = HttpContext.Current.Request.Url.ToString().Replace("http://", "").Replace("https://", ""); Instance = Instance.Substring(0, Instance.IndexOf(".")).Replace("op_", "op").Replace("op", "op_"); // for demo etc if (!Instance.StartsWith("op_")) { Instance = "op_" + Instance; } ConfigFileName = "/home/" + Instance + "/etc/PetraServerConsole.config"; if (File.Exists(ConfigFileName)) { // we are in a multi tenant hosting scenario } else if (Environment.CommandLine.Contains("/appconfigfile=")) { // this happens when we use fastcgi-mono-server4 ConfigFileName = Environment.CommandLine.Substring( Environment.CommandLine.IndexOf("/appconfigfile=") + "/appconfigfile=".Length); if (ConfigFileName.IndexOf(" ") != -1) { ConfigFileName = ConfigFileName.Substring(0, ConfigFileName.IndexOf(" ")); } } else { // this is the normal behaviour when running with local http server ConfigFileName = AppDomain.CurrentDomain.BaseDirectory + Path.DirectorySeparatorChar + "web.config"; } TTypedDataTable.ResetStaticVariables(); TPdfPrinter.ResetStaticVariables(); THTTPUtils.ResetStaticVariables(); TSharedDataCache.TMPartner.ResetStaticVariables(); TServerManagerBase.ResetStaticVariables(); TClientManager.ResetStaticVariables(); TSession.InitThread("TOpenPetraOrgSessionManager.Init", ConfigFileName); if (HttpContext.Current != null) { HttpContext.Current.Server.ScriptTimeout = Convert.ToInt32( TimeSpan.FromMinutes(TAppSettingsManager.GetInt32("WebRequestTimeOutInMinutes", 15)). TotalSeconds); } // if the Login Method is called: reset cookie, ignore any old session if ((HttpContext.Current != null) && (HttpContext.Current.Request.PathInfo == "/Login")) { TSession.CloseSession(); TSession.InitThread("TOpenPetraOrgSessionManager.Init Reset", ConfigFileName); } Catalog.Init(); ErrorCodeInventory.Init(); ErrorCodeInventory.BuildErrorCodeInventory(typeof(Ict.Petra.Shared.PetraErrorCodes)); ErrorCodeInventory.BuildErrorCodeInventory(typeof(Ict.Common.Verification.TStringChecks)); TServerManager.TheServerManager = new TServerManager(); // initialise the cached tables and the delegates TSetupDelegates.Init(); TLogging.LogAtLevel(4, "Server has been initialised"); return(true); }
/// <summary> /// initialise the server once for everyone /// </summary> public static bool Init() { if (ConfigFileName == string.Empty) { // make sure the correct config file is used if (Environment.CommandLine.Contains("/appconfigfile=")) { // this happens when we use fastcgi-mono-server4 ConfigFileName = Environment.CommandLine.Substring( Environment.CommandLine.IndexOf("/appconfigfile=") + "/appconfigfile=".Length); if (ConfigFileName.IndexOf(" ") != -1) { ConfigFileName = ConfigFileName.Substring(0, ConfigFileName.IndexOf(" ")); } } else { // this is the normal behaviour when running with local http server ConfigFileName = AppDomain.CurrentDomain.BaseDirectory + Path.DirectorySeparatorChar + "web.config"; } } new TAppSettingsManager(ConfigFileName); new TLogging(TSrvSetting.ServerLogFile); TLogging.DebugLevel = TAppSettingsManager.GetInt16("Server.DebugLevel", 0); TSession.InitThread(); if (TLogging.DebugLevel >= 4) { TLogging.Log("TOpenPetraOrgSessionManager.Init"); TLogging.Log(HttpContext.Current.Request.PathInfo); } if (HttpContext.Current != null) { HttpContext.Current.Server.ScriptTimeout = Convert.ToInt32( TimeSpan.FromMinutes(TAppSettingsManager.GetInt32("WebRequestTimeOutInMinutes", 15)). TotalSeconds); } // if the Login Method is called: reset cookie, ignore any old session if ((HttpContext.Current != null) && (HttpContext.Current.Request.PathInfo == "/Login")) { TSession.CloseSession(); TSession.InitThread(); } if (TServerManager.TheServerManager == null) { Catalog.Init(); TServerManager.TheServerManager = new TServerManager(); try { // initialise the cached tables TSetupDelegates.Init(); } catch (Exception e) { TLogging.Log(e.Message); TLogging.Log(e.StackTrace); throw; } TLogging.Log("Server has been initialised"); return(true); } if (DomainManager.CurrentClient != null) { if (DomainManager.CurrentClient.FAppDomainStatus == TSessionStatus.adsStopped) { TLogging.Log("There is an attempt to reconnect to stopped session: " + DomainManager.CurrentClient.ClientName); if (HttpContext.Current.Request.PathInfo == "/IsUserLoggedIn") { // we want a clean json response saying the user is not logged in TSession.CloseSession(); return(true); } Dictionary <string, object> result = new Dictionary <string, object>(); result.Add("resultcode", "error"); result.Add("error", THTTPUtils.SESSION_ALREADY_CLOSED); HttpContext.Current.Response.Status = "403 " + THTTPUtils.SESSION_ALREADY_CLOSED; HttpContext.Current.Response.Write(JsonConvert.SerializeObject(result)); HttpContext.Current.Response.Flush(); HttpContext.Current.Response.Close(); HttpContext.Current.Response.End(); return(false); } // TLogging.Log("Init(): WebService Method name that got called: " + HttpContext.Current.Request.PathInfo); if (HttpContext.Current.Request.PathInfo != "/PollClientTasks") { DomainManager.CurrentClient.UpdateLastAccessTime(); } } return(false); }
/// <summary> /// initialise the server once for everyone /// </summary> public static bool Init() { if (ConfigFileName == string.Empty) { // make sure the correct config file is used if (Environment.CommandLine.Contains("/appconfigfile=")) { // this happens when we use fastcgi-mono-server4 ConfigFileName = Environment.CommandLine.Substring( Environment.CommandLine.IndexOf("/appconfigfile=") + "/appconfigfile=".Length); if (ConfigFileName.IndexOf(" ") != -1) { ConfigFileName = ConfigFileName.Substring(0, ConfigFileName.IndexOf(" ")); } } else { // this is the normal behaviour when running with local http server ConfigFileName = AppDomain.CurrentDomain.BaseDirectory + Path.DirectorySeparatorChar + "web.config"; } } new TAppSettingsManager(ConfigFileName); new TSrvSetting(); new TLogging(TSrvSetting.ServerLogFile); TLogging.DebugLevel = TAppSettingsManager.GetInt16("Server.DebugLevel", 0); if (HttpContext.Current != null) { HttpContext.Current.Server.ScriptTimeout = Convert.ToInt32( TimeSpan.FromMinutes(TAppSettingsManager.GetInt32("WebRequestTimeOutInMinutes", 15)). TotalSeconds); } // if the Login Method is called: reset cookie, ignore any old session if ((HttpContext.Current != null) && (HttpContext.Current.Request.PathInfo == "/Login")) { TSession.Clear(); } if (TServerManager.TheServerManager == null) { Catalog.Init(); TServerManager.TheServerManager = new TServerManager(); try { TServerManager.TheCastedServerManager.EstablishDBConnection(); TSystemDefaultsCache.GSystemDefaultsCache = new TSystemDefaultsCache(); DomainManager.GetSiteKeyFromSystemDefaultsCacheDelegate = @TSystemDefaultsCache.GSystemDefaultsCache.GetSiteKeyDefault; TLanguageCulture.Init(); // initialise the cached tables TSetupDelegates.Init(); TUserDefaults.InitializeUnit(); } catch (Exception e) { TLogging.Log(e.Message); TLogging.Log(e.StackTrace); throw; } TLogging.Log("Server has been initialised"); return(true); } if (DomainManager.CurrentClient != null) { if (DomainManager.CurrentClient.FAppDomainStatus == TSessionStatus.adsStopped) { TLogging.Log("There is an attempt to reconnect to stopped session: " + DomainManager.CurrentClient.ClientName); HttpContext.Current.Response.Status = "404 " + THTTPUtils.SESSION_ALREADY_CLOSED; HttpContext.Current.Response.End(); } // TLogging.Log("Init(): WebService Method name that got called: " + HttpContext.Current.Request.PathInfo); if (HttpContext.Current.Request.PathInfo != "/PollClientTasks") { DomainManager.CurrentClient.UpdateLastAccessTime(); } } return(false); }
/// <summary> /// Initialize the Petra server and connect to the database /// </summary> /// <param name="AConfigName">just provide the server config file, plus AutoLogin and AutoLoginPasswd</param> public static TServerManager Connect(string AConfigName) { TDBTransaction LoginTransaction; bool CommitLoginTransaction = false; bool SystemEnabled; string WelcomeMessage; IPrincipal ThisUserInfo; Int32 ClientID; if (File.Exists(AConfigName)) { new TAppSettingsManager(AConfigName); } else if (AConfigName.Length > 0) { TLogging.Log("cannot find config file " + Path.GetFullPath(AConfigName)); Environment.Exit(-1); } else { new TAppSettingsManager(); } new TLogging(TAppSettingsManager.GetValue("Server.LogFile")); CommonNUnitFunctions.InitRootPath(); Catalog.Init(); TServerManager.TheServerManager = new TServerManager(); DBAccess.GDBAccessObj = new TDataBase(); DBAccess.GDBAccessObj.EstablishDBConnection(TSrvSetting.RDMBSType, TSrvSetting.PostgreSQLServer, TSrvSetting.PostgreSQLServerPort, TSrvSetting.PostgreSQLDatabaseName, TSrvSetting.DBUsername, TSrvSetting.DBPassword, "", "Ict.Testing.NUnitPetraServer.TPetraServerConnector.Connect DB Connection"); LoginTransaction = DBAccess.GDBAccessObj.BeginTransaction(IsolationLevel.RepeatableRead, ATransactionName: "Ict.Testing.NUnitPetraServer.TPetraServerConnector.Connect (Unit Test Login)"); try { TClientManager.PerformLoginChecks(TAppSettingsManager.GetValue("AutoLogin").ToUpper(), TAppSettingsManager.GetValue("AutoLoginPasswd"), "NUNITTEST", "127.0.0.1", out SystemEnabled, LoginTransaction); CommitLoginTransaction = true; } catch (EPetraSecurityException) { // We need to set this flag to true here to get the failed login to be stored in the DB!!! CommitLoginTransaction = true; } finally { if (CommitLoginTransaction) { DBAccess.GDBAccessObj.CommitTransaction(); } else { DBAccess.GDBAccessObj.RollbackTransaction(); } } TConnectedClient CurrentClient = TClientManager.ConnectClient( TAppSettingsManager.GetValue("AutoLogin").ToUpper(), TAppSettingsManager.GetValue("AutoLoginPasswd"), "NUNITTEST", "127.0.0.1", TFileVersionInfo.GetApplicationVersion().ToVersion(), TClientServerConnectionType.csctLocal, out ClientID, out WelcomeMessage, out SystemEnabled, out ThisUserInfo); // the following values are stored in the session object DomainManager.GClientID = ClientID; DomainManager.CurrentClient = CurrentClient; UserInfo.GUserInfo = (TPetraPrincipal)ThisUserInfo; TSetupDelegates.Init(); TSystemDefaultsCache.GSystemDefaultsCache = new TSystemDefaultsCache(); DomainManager.GetSiteKeyFromSystemDefaultsCacheDelegate = @TSystemDefaultsCache.GSystemDefaultsCache.GetSiteKeyDefault; TUserDefaults.InitializeUnit(); StringHelper.CurrencyFormatTable = DBAccess.GDBAccessObj.SelectDT("SELECT * FROM PUB_a_currency", "a_currency", null); return((TServerManager)TServerManager.TheServerManager); }