Friday, November 11, 2016

Caching

Cache Output



Install-Package Strathweb.CacheOutput.WebApi2

1
[CacheOutput(ClientTimeSpan = 600, ServerTimeSpan = 600)]

In my example,  I am telling it to cache the results for both client and server-side for 600 sec (10 min).  There isn’t a whole lot of science behind choosing 10 minutes, and I could have written some fancy code to figure out when my scheduled job ran last but I wanted to keep it simple.

Example

using WebApi.OutputCache.V2;

public class CacheTestController : ApiController
    {
        [HttpGet]
        [CacheOutput(ClientTimeSpan = 100, ServerTimeSpan = 100)]
        public string CacheTest123()
        {
            Thread.Sleep(5000);
            return "google";
        }
 
        [HttpGet]
        public string CacheTest1234()
        {
            Thread.Sleep(5000);
            return "google";
        }
    }

Sunday, October 30, 2016

Database transactions


Database transaction with deferent function

private static bool UpdateFacility(int id,string name)
        {
            using (var con = DatabaseInfo.WebServiceConnectionFactory)
            {
                con.Open();
                using (var transaction = con.BeginTransaction())
                {

                    try
                    {
                      UpdateFirst(id,name, con, transaction);
     UpdateSecond(id,name, con, transaction);
      transaction.commit();
                    }
                    catch  
                    {
                        transaction.Rollback();
                         throw;

                    }
                }
            }
 }
 
 private static void UpdateFirst(int id,string name, IDbConnection con, IDbTransaction transaction){
 
try{
con.Execute('update quary',transaction);
}catch{throw;}
 
 }
 
 private static void UpdateSecond(int id,string name, IDbConnection con, IDbTransaction transaction){
 try{
con.Execute('update quary',transaction);
}catch{throw;}
 
 }

Wednesday, October 12, 2016

THREADING AND TASKS


Task.Run


private void button1_Click(object sender, EventArgs e)
        {
            int first=0, second = 0;
            var taskList = new List<Task>();
            taskList.Add(Task.Run(() =>
            {
                first = PrintOne(10,20);
            }));
            taskList.Add(Task.Run(() =>
            {
                second = PrintTwo(30,40);
            }));
            Task.WaitAll(taskList.ToArray());
            MessageBox.Show((first+second).ToString());
        }

        int PrintOne(int i, int k)
        {
            Thread.Sleep(5000);
            return i + k;
        }

        int PrintTwo(int i, int k)
        {
            Thread.Sleep(5000);
            return i + k;
        }


Backgroud workers


BackgroundWorker m_oWorker;

        private void button2_Click(object sender, EventArgs e)
        {
            m_oWorker = new BackgroundWorker();
            m_oWorker.DoWork += new DoWorkEventHandler(m_oWorker_DoWork);
            m_oWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(m_oWorker_RunWorkerCompleted);
            m_oWorker.WorkerReportsProgress = true;
            m_oWorker.WorkerSupportsCancellation = true;
            m_oWorker.RunWorkerAsync();
        }

        private string a = "";
        void m_oWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            Thread.Sleep(5000);
            a = "Done :)";
        }

        void m_oWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            MessageBox.Show(a);
        }


Multiple tasks


 var task = new List<Task>();
                    task.Add(Task.Run(() =>
                    {
                        EventData();
                    }));
                    task.Add(Task.Run(() =>
                    {
                        if (!string.IsNullOrWhiteSpace(userid))
                        {
                            SubAccountParticipants();
                        }
                    }));

                    Task.WaitAll(task.ToArray());

Threading file copy 


  void Copy(object o) {

            Console.WriteLine(o.ToString());
            Thread.Sleep(1000);
        }

        bool IsStop = false;
        int count = 0;
        //start
        private void button1_Click(object sender, EventArgs e)
        {
            Console.WriteLine("start coping");
            IsStop = false;
            List<string> lst = new List<string>();
            for (int i = 0; i < 10; i++)
            {
                lst.Add("files " + i);
            }

            Thread t = new Thread(new ThreadStart(() =>
            {
                while (count < lst.Count && !IsStop)
                {

                    Copy(lst[count]);
                    count++;
                }
            }));

            t.Start();
            t.Join();
            Console.WriteLine("stop coping");
        }
        //stop
        private void button2_Click(object sender, EventArgs e)
        {
            IsStop = true;
        }

Task With List


var lst = new List<string>(2000);
         var t1 = Task.Run(() =>
         {
             for (int i = 0; i < 500; i++)
             {
 
                 lst.Add($"thread 1 - {i}");
                 Thread.Sleep(100);
 
             }
 
         });
 
         var t2 = Task.Run(() =>
         {
             for (int i = 0; i < 500; i++)
             {
 
                 lst.Add($"thread 2 - {i}");
                 Thread.Sleep(100);
 
 
             }
 
         });
 
         Task.WaitAll(t1, t2);
         Console.WriteLine("End");
         Console.Read();

Tuesday, July 12, 2016

IIS

Using Custom Domains With IIS Express


 
For Visual Studio 2015 the steps in the above answers apply but the applicationhost.config file is in a new location. in your "solution" folder follow the path, this is confusing if you upgraded and would have TWO versions of applicationhost.config on your machine.

\.vs\config
Within that folder you will see your applicationhost.config file

Alternatively you could just search your solution folder for the .config file and find it that way.

I personally used the following configuration:

enter image description here

With the following in my hosts file:

127.0.0.1       jam.net
127.0.0.1       www.jam.net
And the following in my applicationhost.config file:

<site name="JBN.Site" id="2">
    <application path="/" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/" physicalPath="C:\Dev\Jam\shoppingcart\src\Web\JBN.Site" />
    </application>
    <bindings>
        <binding protocol="http" bindingInformation="*:49707:" />
            <binding protocol="http" bindingInformation="*:49707:localhost" /> 
    </bindings>
</site>
Remember to run your instance of visual studio 2015 as an administrator! If you don't want to do this every time I recomend this:

How to Run Visual Studio as Administrator by default

I hope this helps somebody, I had issues when trying to upgrade to visual studio 2015 and realized that none of my configurations were being carried over.

http://i.stack.imgur.com/1IQXV.png


Monday, July 11, 2016

Jquary Animation - beautiful

Show and hide nicely 

('input[name="isMultiple"]').on('click', this.toggleMultiple.bind(this));
  toggleMultiple(e) {
            const checked = $(e.target).is(':checked');
            if (checked) {
                $('#multipleDay').animateTo('flipInX');
                $('#singleDay').addClass('hidden');
    }
            else {
               $('#multipleDay').addClass('hidden');
               $('#singleDay').animateTo('flipInX');
            }
        },

used Animate.css

Friday, July 8, 2016

Role tags


Accee token

//authorize attribute
  public class Admin : AuthorizeAttribute
    {
        protected override bool AuthorizeCore(HttpContextBase context)
        {
            return false;
        }
    }

// controller
 public class TTTController : Controller
    {
        [Admin]
        public ActionResult Index()
        {
            return View();
        }
    }

---------------------------------------------------------------------------
EXAMPLE
--------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Principal;
using System.Text.RegularExpressions;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Properties;

namespace TownSuiteWebPortals.Classes
{
    public class PortalAcessAttribute : AuthorizeAttribute
    {

        public static readonly string[] RedirectIgnore = new string[] { "/login", "/securityquestion", "/logout", "/noaccess", "", "/" };
        private string _tag = string.Empty;
        public string RoleTags { get; set; }
        private AuthorizedError _authorize;

        protected override bool AuthorizeCore(HttpContextBase context)
        {
            var tagsOr = RoleTags.Split(new[] { "||" }, StringSplitOptions.RemoveEmptyEntries);
            var tagsAnd = RoleTags.Split(new[] { "&&" }, StringSplitOptions.RemoveEmptyEntries);
            var validRequest = false;
            if (tagsOr.Length > 1)
            {
                var valid = new List<bool>();
                foreach (var tag in tagsOr) { _tag = tag; valid.Add(IsValidRequest(context)); }
                validRequest = valid.Contains(true);
            }
            if (tagsAnd.Length > 1 || (tagsOr.Length == 1 && tagsAnd.Length == 1))
            { foreach (var tag in tagsAnd) { _tag = tag; validRequest = IsValidRequest(context); } }

            return validRequest;
        }

        protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
        {
            HandleUnAuthorizedRequest(filterContext);

        }

        private static void SetNoAccessPage(AuthorizationContext context)
        {
            context.HttpContext.Response.StatusCode = 403;
            context.Controller.ViewBag._ViewName = "NoAccess";
            context.Controller.ViewBag._Title = "Unathorized Access";
            context.Controller.ViewBag._MetaDescription = " You do not have access to the requested page.";
            context.Result = new ViewResult
            {
                ViewName = "RazorView",
                ViewData = context.Controller.ViewData,
                TempData = context.Controller.TempData
            };
        }

        private void HandleUnAuthorizedRequest(AuthorizationContext context)
        {
            switch (_authorize.ActionType)
            {
                case ActionType.LoginFail:
                    if (_authorize.IsAjax) context.Result = new HttpUnauthorizedResult(_authorize.Message);
                    else
                    {
                        if (context.HttpContext.Request.Url == null) context.HttpContext.Response.Redirect(CacheVariables.LoginPageUrl, false);
                        else context.HttpContext.Response.Redirect(GetRedirectUrl(context.HttpContext));
                    }

                    break;
                case ActionType.ToLogout:
                    context.HttpContext.Response.Redirect("~/logout", false);
                    break;
                case ActionType.ModuleLicensed:
                case ActionType.ModuleAuthorizationFail:
                    if (_authorize.IsAjax) context.Result = new HttpUnauthorizedResult(_authorize.Message);
                    else SetNoAccessPage(context);
                    break;
                default:
                    throw new ArgumentOutOfRangeException();
            }
        }

        private bool IsValidRequest(HttpContextBase context)
        {
            if (GlobalConfig.UC == null)
            {
                _authorize = context.Request.Headers["X-Requested-With"] == "XMLHttpRequest" ? new AuthorizedError
                {
                    ActionType = ActionType.LoginFail,
                    StatusCode = 302,
                    Message = "It appears you are not logged in",
                    IsAjax = true
                } : new AuthorizedError { ActionType = ActionType.LoginFail, IsAjax = false };
                return false;
            }

            if (!ModulesOk(context, _tag))
            {
                return false;
            }

            if (GlobalConfig.UserDetails.RoleTags == null)
            {
                _authorize = context.Request.Headers["X-Requested-With"] == "XMLHttpRequest" ? new AuthorizedError
                {
                    ActionType = ActionType.LoginFail,
                    StatusCode = 302,
                    Message = "It appears you are logged in but have no permissions",
                    IsAjax = true
                } : new AuthorizedError { ActionType = ActionType.LoginFail, IsAjax = false };

                return false;
            }

            if (!HasAccess(_tag))
            {
                _authorize = context.Request.Headers["X-Requested-With"] == "XMLHttpRequest" ? new AuthorizedError
                {
                    ActionType = ActionType.ModuleAuthorizationFail,
                    StatusCode = 403,
                    Message = "You do not have access to this resource",
                    IsAjax = true
                } : new AuthorizedError { ActionType = ActionType.ModuleAuthorizationFail, IsAjax = false };
                return false;
            }
            TwoFactorAuth(context);
            return true;
        }


        public static string GetRedirectUrl(HttpContextBase context)
        {
            var url = $"{CacheVariables.LoginPageUrl}";
            if (RedirectIgnore.Contains(context.Request.RawUrl) && context.Request.RawUrl != $"/{CacheVariables.LoginPageUrl}") return url;
            if (context.Request.Url != null) url = $"{CacheVariables.LoginPageUrl}?redirect={TsConvert.UriEncode(context.Request.Url.ToString())}";
            return url;
        }


        private bool ModulesOk(HttpContextBase context, string tag)
        {
            if (tag.StartsWith("WebService\\Complaints"))
            {
                if (CacheVariables.EnableComplaintPortal) return true;
                _authorize = context.Request.Headers["X-Requested-With"] == "XMLHttpRequest" ? new AuthorizedError
                {
                    ActionType = ActionType.ModuleLicensed,
                    StatusCode = 403,
                    Message = "Complaint Portal is disabled",
                    IsAjax = true
                } : new AuthorizedError { ActionType = ActionType.ModuleLicensed, IsAjax = false };
                return false;
            }
            if (tag.StartsWith("WebService\\Customer Portal"))
            {
                if (CacheVariables.EnableCustomerPortal) return true;
                _authorize = context.Request.Headers["X-Requested-With"] == "XMLHttpRequest" ? new AuthorizedError
                {
                    ActionType = ActionType.ModuleLicensed,
                    StatusCode = 403,
                    Message = "Customer Portal is disabled",
                    IsAjax = true
                } : new AuthorizedError { ActionType = ActionType.ModuleLicensed, IsAjax = false };
                return false;
            }
            if (tag.StartsWith("WebService\\EPurchasing"))
            {
                if (CacheVariables.EnableEpurchasingPortal) return true;
                _authorize = context.Request.Headers["X-Requested-With"] == "XMLHttpRequest" ? new AuthorizedError
                {
                    ActionType = ActionType.ModuleLicensed,
                    StatusCode = 403,
                    Message = "Epurchasing Portal is disabled",
                    IsAjax = true
                } : new AuthorizedError { ActionType = ActionType.ModuleLicensed, IsAjax = false };

                return false;
            }
            if (tag.StartsWith("WebService\\Recreation"))
            {
                if (CacheVariables.EnableRecreationPortal) return true;
                _authorize = context.Request.Headers["X-Requested-With"] == "XMLHttpRequest" ? new AuthorizedError
                {
                    ActionType = ActionType.ModuleLicensed,
                    StatusCode = 403,
                    Message = "Recreation Portal is disabled",
                    IsAjax = true
                } : new AuthorizedError { ActionType = ActionType.ModuleLicensed, IsAjax = false };

                return false;
            }
            if (tag.StartsWith("WebService\\Employee"))
            {
                if (CacheVariables.EnableEmployeePortal) return true;
                _authorize = context.Request.Headers["X-Requested-With"] == "XMLHttpRequest" ? new AuthorizedError
                {
                    ActionType = ActionType.ModuleLicensed,
                    StatusCode = 403,
                    Message = "Employee Portal is disabled",
                    IsAjax = true
                } : new AuthorizedError { ActionType = ActionType.ModuleLicensed, IsAjax = false };
                return false;
            }
            if (tag.StartsWith("WebService\\Facility"))
            {
                if (CacheVariables.EnableFacilityPortal) return true;
                _authorize = context.Request.Headers["X-Requested-With"] == "XMLHttpRequest" ? new AuthorizedError
                {
                    ActionType = ActionType.ModuleLicensed,
                    StatusCode = 403,
                    Message = "Facility Portal is disabled",
                    IsAjax = true
                } : new AuthorizedError { ActionType = ActionType.ModuleLicensed, IsAjax = false };

                return false;
            }

            return true;
        }

        private static bool HasAccess(string tag)
        {
            var roleTags = GlobalConfig.UserDetails.RoleTags;
            var access = false;
            switch (tag)
            {
                case "acess":
                    access = true;
                    break;
                default:
                    if (roleTags.Any(item => item == tag))
                        access = true;
                    break;
            }

            return access;
        }


        public void TwoFactorAuth(System.Web.HttpResponse response, System.Web.SessionState.HttpSessionState session, System.Web.HttpRequest request)
        {
            TwoFactorAuth(new HttpResponseWrapper(response), session, new HttpRequestWrapper(request));
        }

        private void TwoFactorAuth(HttpContextBase context)
        {
            if (context.Request.AppRelativeCurrentExecutionFilePath == "~/securityquestion") return;
            if (context.Request.AppRelativeCurrentExecutionFilePath == "~/logout") return;
            if ((GlobalConfig.TwoFactorAnswerStatus == null)) return;
            if ((context.Request.UrlReferrer != null))
            {
                if (GlobalConfig.TwoFactorAnswerStatus == "false" & context.Request.UrlReferrer.AbsolutePath.ToString() != CacheVariables.LoginPageUrl)
                {
                    _authorize = new AuthorizedError { ActionType = ActionType.ToLogout };
                }
            }
            if (context.Request.UrlReferrer != null) return;
            if (GlobalConfig.TwoFactorAnswerStatus == "false")
            {
                _authorize = new AuthorizedError { ActionType = ActionType.ToLogout };
            }
        }

        public void TwoFactorAuth(HttpResponseBase response, System.Web.SessionState.HttpSessionState session, HttpRequestBase request)
        {
            if ((GlobalConfig.TwoFactorAnswerStatus == null)) return;
            if ((request.UrlReferrer != null))
            {
                if (GlobalConfig.TwoFactorAnswerStatus == "false" & request.UrlReferrer.AbsolutePath.ToString() != CacheVariables.LoginPageUrl)
                {
                    _authorize = new AuthorizedError { ActionType = ActionType.ToLogout };
                }
            }
            if (request.UrlReferrer != null) return;
            if (GlobalConfig.TwoFactorAnswerStatus == "false")
            {
                _authorize = new AuthorizedError { ActionType = ActionType.ToLogout };
            }
        }
    }

    public enum ActionType
    {
        LoginFail,
        ToLogout,
        ModuleAuthorizationFail,
        ModuleLicensed
    }


    public class AuthorizedError
    {
        public ActionType ActionType { get; set; }
        public int StatusCode { get; set; }
        public string Message { get; set; }
        public bool IsAjax { get; set; }
    }
}


useage
 [PortalAcess(RoleTags = "WebService\\Recreation||WebService\\Facility\\ConfigurationSetup")]

Images


File Upload MVC   

  private JsonResult UploadFile(bool image = false)
        {

            var file = Request.Files[0];
            var path = image ? WebConfigurationManager.AppSettings["TempFacilityImagePath"] : WebConfigurationManager.AppSettings["TempFacilityDocPath"];
            if (file == null) return null;
            var name = Guid.NewGuid().ToString();
            string extension = Path.GetExtension(file.FileName);
            file.SaveAs($"{Server.MapPath(path)}{name}{extension}");
            return Json($"{name}{extension}", JsonRequestBehavior.AllowGet);
        }

function() {
            $(":file#physicalFiles").kendoUpload({
                async: {
                    saveUrl: "/admin/facility/uploaddoc",
                    autoUpload: true
                },
                multiple: false,
                success: function(e) {
                    var data = e.response;
                    $('#uploadedDocument').val(data);
                }
            });


-- convert byte array to image 

public static Image ToImage(this byte[] byteArrayIn)
        {
            using (var stream = new MemoryStream(byteArrayIn))
            {
                var image = Image.FromStream(stream);
                return image;
            }
        }

-- Resize Image

        public static Bitmap ResizeImage(this Image image, int width, int height)
        {
            var destRect = new Rectangle(0, 0, width, height);
            var destImage = new Bitmap(width, height);

            destImage.SetResolution(image.HorizontalResolution, image.VerticalResolution);

            using (var graphics = Graphics.FromImage(destImage))
            {
                graphics.CompositingMode = CompositingMode.SourceCopy;
                graphics.CompositingQuality = CompositingQuality.HighQuality;
                graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
                graphics.SmoothingMode = SmoothingMode.HighQuality;
                graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;

                using (var wrapMode = new ImageAttributes())
                {
                    wrapMode.SetWrapMode(WrapMode.TileFlipXY);
                    graphics.DrawImage(image, destRect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, wrapMode);
                }
            }

            return destImage;
        }

-- convert image to byte array

        public static byte[] ToByteArray(this Image image)
        {
            using (var stream = new MemoryStream())
            {
                image.Save(stream, ImageFormat.Bmp);
                return stream.ToArray();
            }
         
        }



== create thub image

 Image image = Image.FromFile(fileName);
    Image thumb = image.GetThumbnailImage(120, 120, ()=>false, IntPtr.Zero);
    thumb.Save(Path.ChangeExtension(fileName, "thumb"));


Reduce image size without losing qality

Bitmap newImage = new Bitmap(newWidth, newHeight);
using (Graphics gr = Graphics.FromImage(newImage))
{
    gr.SmoothingMode = SmoothingMode.HighQuality;
    gr.InterpolationMode = InterpolationMode.HighQualityBicubic;
    gr.PixelOffsetMode = PixelOffsetMode.HighQuality;
    gr.DrawImage(srcImage, new Rectangle(0, 0, newWidth, newHeight));
}

Wednesday, July 6, 2016

Session maintain with globle class


using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Xml.Linq;
using System.Diagnostics;
using System.Collections.Specialized;
using System.Configuration;
using System.Text;
using System.Text.RegularExpressions;
using System.Web;
using System.Web.Caching;
using System.Web.SessionState;
using System.Web.Security;
using System.Web.Profile;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Web.Configuration;
namespace TownSuiteWebPortals
{

    public class GlobalConfig
    {


        public static string Url
        {
            get
            {
                return System.Configuration.ConfigurationManager.AppSettings["ServiceUrl"].ToString();
            }
        }
        public static readonly string DevKey = "zSodcUpzUMSDacpwjGge";

        public static readonly string DevName = "Procom Data Services Inc. Web Portals";

        public static readonly LibTsDto.ReportType ReportExportType = LibTsDto.ReportType.PDF;


        public static bool IsLoggedIn
        {
            get
            {
                return UC != null;
            }

        }




        public static LibTsDto.UserCredentials UC
        {
            get
            {
                System.Web.HttpContext context = System.Web.HttpContext.Current;
                if (context.Session["Cred"] != null)
                {
                    return (LibTsDto.UserCredentials)context.Session["Cred"];
                }
                return null;
            }
            set
            {
                System.Web.HttpContext context = System.Web.HttpContext.Current;
                context.Session["Cred"] = value;
            }
        }

        public LibTsDto.Logins.LoginResponse UserDetailsInst
        {
            get
            {
                return UserDetails;
            }
        }
        public static LibTsDto.Logins.LoginResponse UserDetails
        {
            get
            {
                var context = System.Web.HttpContext.Current;
                if (context.Session["UserDetailsFromLogin"] != null)
                {
                    return (LibTsDto.Logins.LoginResponse)context.Session["UserDetailsFromLogin"];
                }
                return new LibTsDto.Logins.LoginResponse();
            }
            set
            {
                var context = System.Web.HttpContext.Current;
                context.Session["UserDetailsFromLogin"] = value;
            }
        }


        public static string UsersEmail
        {
            get
            {
                System.Web.HttpContext context = System.Web.HttpContext.Current;
                if (context.Session["UserInfo"] != null)
                {
                    return context.Session["UserInfo"].ToString();
                }
                else
                {
                    return "";
                }
            }
            set
            {
                System.Web.HttpContext context = System.Web.HttpContext.Current;
                context.Session["UserInfo"] = value;
            }
        }


        public static List<string> CustCodes
        {
            get
            {
                System.Web.HttpContext context = System.Web.HttpContext.Current;
                return (List<string>)context.Session["CustCodes"];
            }
            set
            {
                System.Web.HttpContext context = System.Web.HttpContext.Current;
                context.Session["CustCodes"] = value;
            }
        }

        public static LibTsDto.FinancialAccess.MiscCustAccountInfo MiscCustAccountInfo
        {
            get
            {
                System.Web.HttpContext context = System.Web.HttpContext.Current;
                return (LibTsDto.FinancialAccess.MiscCustAccountInfo)context.Session["MiscCustAccountInfo"];
            }
            set
            {
                System.Web.HttpContext context = System.Web.HttpContext.Current;
                context.Session["MiscCustAccountInfo"] = value;
            }
        }



        //Property Details
        public static List<string> PropertyList
        {
            get
            {
                System.Web.HttpContext context = System.Web.HttpContext.Current;
                return (List<string>)context.Session["PropertyList"];
            }
            set
            {
                System.Web.HttpContext context = System.Web.HttpContext.Current;
                context.Session["PropertyList"] = value;
            }
        }

        private static string CertSubject { get; set; }
        private static string CertIssuer { get; set; }
        private static string CertSerialNumber { get; set; }
        private static string CertThumbPrint { get; set; }
        private static bool EnableSsLValidation { get; set; }


        public static bool customXertificateValidation(object sender, System.Security.Cryptography.X509Certificates.X509Certificate cert, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors error)
        {


            if (EnableSsLValidation == true)
            {

                if (CertSubject == cert.Subject & CertIssuer == cert.Issuer & CertSerialNumber == cert.GetSerialNumberString() & CertThumbPrint == cert.GetCertHashString())
                {
                    return true;
                }


                TownSuiteWebPortals.Trace.LogMessage("Invalid SSL Cert Configuration Detected");
                return false;

            }

            return true;

        }


        public static string GetUserPassword(string value)
        {
            try
            {
                string[] lines = value.Split(new string[] { "[**]" }, StringSplitOptions.None);

                return lines[1];
            }
            catch (Exception ex)
            {
                TownSuiteWebPortals.Trace.TrapErrors(ex);
                return "";
            }
        }


        public static string GetUserKey(string value)
        {
            try
            {
                string[] lines = value.Split(new string[] { "[**]" }, StringSplitOptions.None);

                return lines[1];
            }
            catch (Exception ex)
            {
                TownSuiteWebPortals.Trace.TrapErrors(ex);
                return "";
            }
        }


        /// <summary>
        /// The Procom Local Application Directory.
        /// </summary>
        /// <value></value>
        /// <returns></returns>
        /// <remarks>This is usually something along the lines of:  C:\Users\UserName\AppData\Local\Procom</remarks>
        public static string ProcomLocalAppDataDirectory
        {
            get
            {
                string procomDir = null;
#if LINUX
                 procomDir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
#else
                procomDir = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
#endif
                procomDir = System.IO.Path.Combine(procomDir, "Procom");
                return procomDir;
            }
        }

        public static string Key
        {
            get { return "6468666761736C646B6A686633377279686B66676132383934333879725E252A5955484248566372373674383779756833776876726664777375663332377963265E25534445522A373975"; }
        }

        public static string UserMainRole
        {
            get
            {
                System.Web.HttpContext context = System.Web.HttpContext.Current;
                if (context.Session["UserMainRole"] == null)
                {
                    return "";
                }
                else
                {
                    return Convert.ToString(context.Session["UserMainRole"]);
                }
            }
            set
            {
                System.Web.HttpContext context = System.Web.HttpContext.Current;
                context.Session["UserMainRole"] = value;
            }
        }
        public static string TwoFactorAnswerStatus
        {
            get
            {
                System.Web.HttpContext context = System.Web.HttpContext.Current;
                if (context.Session["Answered"] == null)
                {
                    return null;
                }
                else
                {
                    return Convert.ToString(context.Session["Answered"]);
                }
            }
            set
            {
                System.Web.HttpContext context = System.Web.HttpContext.Current;
                context.Session["Answered"] = value;
            }
        }

        public static string NumberOfVisitsToSecurityPage
        {
            get
            {
                System.Web.HttpContext context = System.Web.HttpContext.Current;
                if (context.Session["NumberOfVisitsToSecurityPage"] == null)
                {
                    return null;
                }
                else
                {
                    return Convert.ToString(context.Session["NumberOfVisitsToSecurityPage"]);
                }
            }
            set
            {
                System.Web.HttpContext context = System.Web.HttpContext.Current;
                context.Session["NumberOfVisitsToSecurityPage"] = value;
            }
        }
        public static string AdminPortalEnabled
        {
            get
            {
                System.Web.HttpContext context = System.Web.HttpContext.Current;
                if (context.Session["AdminPortalEnabled"] == null)
                {
                    return null;
                }
                else
                {
                    return Convert.ToString(context.Session["AdminPortalEnabled"]);
                }
            }
            set
            {
                System.Web.HttpContext context = System.Web.HttpContext.Current;
                context.Session["AdminPortalEnabled"] = value;
            }
        }

        public static object ComplaintUploadedFiles
        {
            get
            {
                System.Web.HttpContext context = System.Web.HttpContext.Current;
                return context.Session["UploadedFiles"];
            }
            set
            {
                System.Web.HttpContext context = System.Web.HttpContext.Current;
                context.Session["UploadedFiles"] = value;
            }
        }
        public static object ListComplaintsAttachments
        {
            get
            {
                System.Web.HttpContext context = System.Web.HttpContext.Current;
                return context.Session["ListComplaintsAttachments"];
            }
            set
            {
                System.Web.HttpContext context = System.Web.HttpContext.Current;
                context.Session["ListComplaintsAttachments"] = value;
            }
        }
        ///' Reports Sessions
        public static LibTsDto.ReportInfo UserReport
        {
            get
            {
                System.Web.HttpContext context = System.Web.HttpContext.Current;
                var val = context.Session["UserReport"];
                if (val == null)
                {
                    return new LibTsDto.ReportInfo();
                }
                return (LibTsDto.ReportInfo)val;
            }
            set
            {
                System.Web.HttpContext context = System.Web.HttpContext.Current;
                context.Session["UserReport"] = value;
            }
        }

        public static object UserReport2
        {
            get
            {
                System.Web.HttpContext context = System.Web.HttpContext.Current;
                return context.Session["UserReport2"];
            }
            set
            {
                System.Web.HttpContext context = System.Web.HttpContext.Current;
                context.Session["UserReport2"] = value;
            }
        }

        public static object UserReport3
        {
            get
            {
                System.Web.HttpContext context = System.Web.HttpContext.Current;
                return context.Session["UserReport3"];
            }
            set
            {
                System.Web.HttpContext context = System.Web.HttpContext.Current;
                context.Session["UserReport3"] = value;
            }
        }


        ///'''''Webportal Caching Sesstions

        public static object CurrentBalanceStatementResponse
        {
            get
            {
                System.Web.HttpContext context = System.Web.HttpContext.Current;
                return context.Session["CurrentBalanceStatementResponse"];
            }
            set
            {
                System.Web.HttpContext context = System.Web.HttpContext.Current;
                context.Session["CurrentBalanceStatementResponse"] = value;
            }
        }
        public static object MeterResponseUtilcodeDetail
        {
            get
            {
                System.Web.HttpContext context = System.Web.HttpContext.Current;
                return context.Session["responseUtilcodeDetail"];
            }
            set
            {
                System.Web.HttpContext context = System.Web.HttpContext.Current;
                context.Session["responseUtilcodeDetail"] = value;
            }
        }
        public static object MeterChartResponseUtilcodeDetail
        {
            get
            {
                System.Web.HttpContext context = System.Web.HttpContext.Current;
                return context.Session["responseChartUtilcodeDetail"];
            }
            set
            {
                System.Web.HttpContext context = System.Web.HttpContext.Current;
                context.Session["responseChartUtilcodeDetail"] = value;
            }
        }
        public static object PeakMeterReadingResponse
        {
            get
            {
                System.Web.HttpContext context = System.Web.HttpContext.Current;
                return context.Session["PeakMeterReadingResponse"];
            }
            set
            {
                System.Web.HttpContext context = System.Web.HttpContext.Current;
                context.Session["PeakMeterReadingResponse"] = value;
            }
        }
        public static object ReprintReceiptReportResponse
        {
            get
            {
                System.Web.HttpContext context = System.Web.HttpContext.Current;
                return context.Session["ReprintReceiptReportResponse"];
            }
            set
            {
                System.Web.HttpContext context = System.Web.HttpContext.Current;
                context.Session["ReprintReceiptReportResponse"] = value;
            }
        }
        public static object CurrentBalanceStatementReportResponse
        {
            get
            {
                System.Web.HttpContext context = System.Web.HttpContext.Current;
                return context.Session["CurrentBalanceStatementReportResponse"];
            }
            set
            {
                System.Web.HttpContext context = System.Web.HttpContext.Current;
                context.Session["CurrentBalanceStatementReportResponse"] = value;
            }
        }

        public static IDbConnection SqliteLogDatabase
        {

            get
            {

                string logfile = GlobalConfig.ProcomLocalAppDataDirectory;
                logfile = System.IO.Path.Combine(logfile, "WebPortalsLog.sqlite");
                var _sqliteFactory = new System.Data.SQLite.SQLiteConnection(string.Format("Data Source={0}; Version=3", logfile));

                return _sqliteFactory;

            }
        }

        public static object KanbanUploadedFiles
        {
            get
            {
                System.Web.HttpContext context = System.Web.HttpContext.Current;
                return context.Session["KanbanCardsUploadedFiles"];
            }
            set
            {
                System.Web.HttpContext context = System.Web.HttpContext.Current;
                context.Session["KanbanCardsUploadedFiles"] = value;
            }
        }

    }
}

CS Events