public static CheckLicenseStatus CheckUserLicense() { // 'This is a double check // 'We check if user has access to the system (if user got a license) var objLock = new object(); lock (objLock) { if (CheckLicenseFile() != LicenseFileStatus.Valid) { throw new Exception("Invalid License File"); } var strLicense = GetLicense(); var ds = CryptDataSet.GetDataSet(strLicense); int numberOfLicenses = int.Parse(CryptDataSet.GetConfigurationValue(ds, "NumberOfLicenses")); if (numberOfLicenses == -1 || IsAccessAllowed(ds, HttpContext.Current.Session.SessionID)) { return(CheckLicenseStatus.Valid); } return(CheckLicenseStatus.Invalid); } }
public static int GetNumberOfLicenses() { var strLicense = GetLicense(); var ds = CryptDataSet.GetDataSet(strLicense); var numberOfLicenses = int.Parse(CryptDataSet.GetConfigurationValue(ds, "NumberOfLicenses")); return(numberOfLicenses); }
public static LicenseMode GetLicenseMode() { var strLicense = GetLicense(); var ds = CryptDataSet.GetDataSet(strLicense); if (ds == null) { throw new Exception("Invalid license information"); } return((LicenseMode)Convert.ToInt32(CryptDataSet.GetConfigurationValue(ds, "LicenseMode"))); }
public static string ValidateLicenseAccess(string request) { var lockObject = new object(); lock (lockObject) { var ret = string.Empty; request = LicenseInfo.Instance.Crypter.DecryptString(request); var supportInfo = request.GetSupportInfo(); // We try to load the licenses file on every request var strLicense = LicenseGear.GetLicense(); // Check if we have the licensing file set up if (string.IsNullOrEmpty(strLicense)) { // We don't have the license file ret += "&result=" + LicenseNotFound; } else { var ds = CryptDataSet.GetDataSet(strLicense); var itSelf = false; ds.Tables["dtSessions"].Select().ToList().ForEach( delegate(DataRow rw) { var lastSignal = (DateTime)rw["LastSignal"]; var signalBoundary = DateTime.Now.AddMilliseconds(-int.Parse(supportInfo["SessionRefreshTimeoutWithTolerance"])); if (lastSignal >= signalBoundary) { } else { // Session has expired // User browser isn't at AgroERP if (rw["SessionID"].ToString() == supportInfo["SessionID"]) { itSelf = true; } rw.Delete(); } }); ds.AcceptChanges(); if (itSelf) { ret += "&result=" + LicenseTimeout; LicenseGear.UpdateLicense(CryptDataSet.EncryptDataSet(ds)); } else { if (!LicenseGear.IsAccessAllowed(ds, supportInfo["SessionID"])) { // Fake Session_OnStart var doorState = DoorStateUndefined; try { var numberOfLicenses = int.Parse(CryptDataSet.GetConfigurationValue(ds, "NumberOfLicenses")); var activeLicenses = ds.Tables["dtSessions"].Rows.Count; if (numberOfLicenses != -1) { if (activeLicenses < numberOfLicenses) { // Increments one session var rw = ds.Tables["dtSessions"].NewRow(); rw["ServerName"] = supportInfo["ServerName"]; rw["SessionID"] = supportInfo["SessionID"]; rw["LastSignal"] = DateTime.Now; ds.Tables["dtSessions"].Rows.Add(rw); doorState = DoorStateOK; } else { // No more licenses doorState = DoorStateClosed; } } else { // Unlimited licenses doorState = DoorStateOK; } if (doorState == DoorStateOK) { LicenseGear.UpdateLicense(CryptDataSet.EncryptDataSet(ds)); } } catch (ThreadAbortException) { } catch (Exception ex) { // Error // We cannot allow any user access the system doorState = DoorStateError; ret += "&errorMessage=" + ex.Message; ret += "&stackTrace=" + ex; } ret += "&result=" + doorState; } else { var rwSession = ds.Tables["dtSessions"].Select("SessionID = '" + supportInfo["SessionID"] + "'").FirstOrDefault(); var lastRequest = DateTime.Now; if (rwSession["LastRequest"] != DBNull.Value) { lastRequest = (DateTime)rwSession["LastRequest"]; } var requestBoundary = DateTime.Now.AddMinutes(-int.Parse(supportInfo["SessionTimeout"])); // Is It an "Human" Request? // Yes if (lastRequest < requestBoundary) { // Session has expired // User browser isn't at AgroERP rwSession.Delete(); ret += "&result=" + SessionExpired; } else { // Resets Real Request ticket rwSession["LastRequest"] = DateTime.Now; // Resets LastSignal ticket rwSession["LastSignal"] = DateTime.Now; ret += "&result=" + RequestOK; } LicenseGear.UpdateLicense(CryptDataSet.EncryptDataSet(ds)); } } } return(ret.Substring(1) + "&guid=" + Guid.NewGuid().ToString()); } }
private void context_PostAcquireRequestState(object sender, EventArgs e) { HttpContext.Current.Trace.Warn("Warn 0"); var app = ((HttpApplication)sender); try { var lockObject = new object(); lock (lockObject) { HttpContext.Current.Trace.Warn("Warn 1"); if (LicenseGear.GetAllowedPages() == null) { HttpContext.Current.Trace.Warn("Warn 2"); #region Allowed Pages IList <string> allowedPages = new List <string>(); //allowedPages.Add("generalparameters_licensing_frmlicensingdetail_aspx"); allowedPages.Add("opened_frmaccessdenied_aspx"); allowedPages.Add("opened_frmerrorpage_aspx"); allowedPages.Add("opened_frmerrorsearch_aspx"); allowedPages.Add("opened_frmlicenseerror_aspx"); allowedPages.Add("opened_frmlicenselimitreached_aspx"); allowedPages.Add("opened_frmlicensetimeout_aspx"); allowedPages.Add("opened_frmsessionout_aspx"); allowedPages.Add("frmlogin_aspx"); app.Application["ap"] = allowedPages; HttpContext.Current.Trace.Warn("Warn 3"); LicenseGear.EncryptAllowedPages(); HttpContext.Current.Trace.Warn("Warn 4"); #endregion } } HttpContext.Current.Trace.Warn("Warn 5"); if (!app.Context.Handler.GetType().Name.ToLower().EndsWith("_aspx")) { return; } if (LicenseGear.IsAllowedPage()) { return; } if (LicenseGear.CheckLicenseFile() != LicenseGear.LicenseFileStatus.Valid) { app.Response.Redirect("~/Opened/FrmLicenseError.aspx", false); } HttpContext.Current.Trace.Warn("Warn 6"); lock (lockObject) { HttpContext.Current.Trace.Warn("Warn 7"); // We try to load the licenses file on every request string strLicense = LicenseGear.GetLicense(); HttpContext.Current.Trace.Warn("Warn 8"); if (string.IsNullOrEmpty(strLicense)) { app.Response.Redirect("~/GeneralParameters/Licensing/FrmLicensingDetail.aspx", false); } DataSet ds = CryptDataSet.GetDataSet(strLicense); int numberOfLicenses = int.Parse(CryptDataSet.GetConfigurationValue(ds, "NumberOfLicenses")); HttpContext.Current.Trace.Warn("Warn 11"); if (numberOfLicenses == -1) { // Licenças ilimitadas HttpContext.Current.Trace.Warn("Warn 12"); if (app.Context.Handler.GetType().Name.ToLower() == "default_aspx") { HttpContext.Current.Trace.Warn("Warn 13"); //Remoção por solicitação AnaCélia / Athos - 15/08/2013 //if (!((Page)app.Context.Handler).IsPostBack // && app.Request["admin"] == "1" // && app.Request["pwd"] == "AgroERPAdminUser") //{ // HttpContext.Current.Session["la"] = 1; //} HttpContext.Current.Trace.Warn("Warn 15"); } HttpContext.Current.Trace.Warn("Warn 16"); return; } string request; if (LicenseGear.GetLicenseMode() == LicenseGear.LicenseMode.ActiveSessions) { if (app.Application["Init"] == null) { request = string.Empty; request += "&ServerName=" + LicenseInfo.Instance.ServerName; new wsLicense.License().Init(LicenseInfo.Instance.Crypter.EncryptString(request.Substring(1))); HttpContext.Current.Trace.Warn("Warn 20"); app.Application["Init"] = true; } } //Remoção por solicitação AnaCélia / Athos - 15/08/2013 // A linha abaixo deve ser guardada a 7 chaves!!! //if (!((Page)app.Context.Handler).IsPostBack // && app.Request["admin"] == "1" // && app.Request["pwd"] == "AgroERPAdminUser") //{ // HttpContext.Current.Session["la"] = 1; // app.Response.Redirect("~/Default.aspx"); //} if (LicenseGear.GetLicenseMode() == LicenseGear.LicenseMode.ActiveSessions) { request = string.Empty; request += "&SessionID=" + app.Session.SessionID; request += "&SessionTimeout=" + app.Session.Timeout; request += "&ServerName=" + LicenseInfo.Instance.ServerName; request += "&SessionRefreshTimeoutWithTolerance=" + LicenseInfo.Instance.SessionRefreshTimeoutWithTolerance; var supportInfo = new wsLicense.License().ValidateLicenseAccess(LicenseInfo.Instance.Crypter.EncryptString(request.Substring(1))); var response = supportInfo.GetSupportInfo(); switch (response["result"]) { case LicenseTimeout: { app.Response.Redirect("~/Opened/FrmLicenseTimeout.aspx", false); break; } case DoorStateOK: { //app.Response.Redirect("~/Default.aspx", false); break; } case DoorStateClosed: { app.Response.Redirect("~/Opened/FrmLicenseLimitReached.aspx", false); break; } case DoorStateError: { try { string body = "<html xmlns=\"http://www.w3.org/1999/xhtml\">" + "<head>" + "<title></title>" + "</head>" + "<body style=\"font-size: 10pt; font-family: Arial\">" + "Dear All, " + "<br />" + "<br />" + " An error has happened in the system while validating license." + "<br />" + "<br />" + "<b>Date:</b> #dt_error#" + "<br />" + "<b>Error Message:</b> #dsc_error_message#" + "<br />" + "<b>Url:</b> #dsc_url#" + "<br />" + "<br />" + "<b>Stack Trace:</b>" + "<br />" + "#dsc_inner_error#" + "<br />" + "-- " + "<br />" + "<br />" + "Sent by <b>#dsc_username#</b> via AgroERP System" + "</body>" + "</html>"; body = body.Replace("#dt_error#", DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss")); body = body.Replace("#dsc_error_message#", response["errorMessage"]); body = body.Replace("#dsc_inner_error#", response["stackTrace"]); new SendMail().Send(Settings.Default.Mail_User , Settings.Default.Mail_Password , Settings.Default.Mail_Domain , Settings.Default.Mail_Server , Settings.Default.Mail_Port.ToString() , Settings.Default.Mail_Ssl , (SendMail.ExchangeSmtp)Settings.Default.Mail_SendUsing , Settings.Default.Mail_From_Email , Settings.Default.Mail_From_Name , Settings.Default.License_BugEmail , Settings.Default.License_BugSubject , new StringBuilder(body) , true , System.Net.Mail.MailPriority.High , Settings.Default.Mail_AsyncEnabled , false , null); } catch (Exception) { } app.Response.Redirect("~/Opened/FrmLicenseError.aspx", false); break; } case RequestOK: { // A licença já havia sido previamente liberada. // Esta constante significa que as requisições para o usuário estão liberadas. break; } case SessionExpired: { app.Response.Redirect("~/Opened/FrmSessionOut.aspx", false); break; } } } } } catch (Exception ex) { app.Response.Redirect("~/Opened/FrmLicenseError.aspx", false); } }