Thursday, 30 April 2015

Remote Requires Https Attribute

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.Mvc;
using System.Configuration;

 
namespace Nrccua.MvcBase.Filters
{
    public partial class RemoteRequireHttpsAttribute
       : RequireHttpsAttribute
    {
        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            if (filterContext == null)
            {
                throw new ArgumentException("Filter Context");
            }
 
            if (filterContext != null && filterContext.HttpContext != null)
            {
                
                if (filterContext.HttpContext.Request.IsSecureConnection)
                {
                    return;
                }
 
                var currentUrl = filterContext.HttpContext.Request.Url;
                if (currentUrl.Scheme.Equals(Uri.UriSchemeHttps, StringComparison.CurrentCultureIgnoreCase))
                {
                    return;
                }
 
                if (string.Equals(filterContext.HttpContext.Request.Headers["X-Forwarded-Proto"], "https", StringComparison.InvariantCultureIgnoreCase))
                {
                    return;
                }
 
                if (filterContext.HttpContext.Request.IsLocal)
                {
                    return;
                }
 
                var val = ConfigurationManager.AppSettings["RequireSSL"].Trim();
                var requireSsl = bool.Parse(val);
                if (!requireSsl)
                {
                    return;
                }
 
 
            }
 
            base.OnAuthorization(filterContext);
        }
    }
}