Skip to content

Instantly share code, notes, and snippets.

View bjcull's full-sized avatar
💲
Helping people get paid

Ben Cull bjcull

💲
Helping people get paid
View GitHub Profile
@bjcull
bjcull / CustomRequireHttpsFilter.cs
Created May 15, 2015 06:50
An improved HTTPS redirection filter for ASP.NET MVC.
public class CustomRequireHttpsFilter : RequireHttpsAttribute
{
protected override void HandleNonHttpsRequest(AuthorizationContext filterContext)
{
// The base only redirects GET, but we added HEAD as well. This avoids exceptions for bots crawling using HEAD.
// The other requests will throw an exception to ensure the correct verbs are used.
// We fall back to the base method as the mvc exceptions are marked as internal.
if (!String.Equals(filterContext.HttpContext.Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase)
&& !String.Equals(filterContext.HttpContext.Request.HttpMethod, "HEAD", StringComparison.OrdinalIgnoreCase))
@bjcull
bjcull / SubdomainRoute.cs
Created February 18, 2015 10:22
A class to detect the subdomain and pass it through as a route parameter
public class SubdomainRoute : RouteBase
{
public override RouteData GetRouteData(HttpContextBase httpContext)
{
if (httpContext.Request == null || httpContext.Request.Url == null)
{
return null;
}
var host = httpContext.Request.Url.Host;
@bjcull
bjcull / AutoHotKey.ahk
Last active August 29, 2015 14:07
Key remapping for running windows on a mac. AutoHotKey on Windows side, Karabiner on Mac side.
; The below line is for debugging key presses in the key history.
; #InstallKeybdHook
; Turn my useless right alt key into a rad delete key
RAlt::Delete
; Capture the custom remapped playback keys from the mac keyboard remapper
<+<^F7::Send,{Media_Prev}
<+<^F8::Send,{Media_Play_Pause}
<+<^F9::Send,{Media_Next}
@bjcull
bjcull / bootstrapSwitch.js
Created July 24, 2014 06:04
Angular directive for bootstrap-switch | http://www.bootstrap-switch.org/
.directive('bootstrapSwitch', [
function() {
return {
restrict: 'A',
require: '?ngModel',
link: function(scope, element, attrs, ngModel) {
element.bootstrapSwitch();
element.on('switchChange.bootstrapSwitch', function(event, state) {
if (ngModel) {
@bjcull
bjcull / BaseController.cs
Created July 14, 2014 04:29
Return ModelState errors gracefully to an AJAX request
protected ActionResult JsonFormResponse(JsonRequestBehavior jsonRequestBehaviour = JsonRequestBehavior.DenyGet)
{
if (ModelState.IsValid)
{
return new HttpStatusCodeResult(200);
}
var errorList = new List<JsonValidationError>();
foreach (var key in ModelState.Keys)
{
@bjcull
bjcull / AuthorizeRedirect.cs
Last active September 27, 2015 13:33
Authorize attribute that redirects to view if you're logged in but don't have permission
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class AuthorizeRedirect : AuthorizeAttribute
{
public string RedirectUrl = "~/Error/Unauthorized";
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
base.HandleUnauthorizedRequest(filterContext);
if (filterContext.RequestContext.HttpContext.User.Identity.IsAuthenticated)
@bjcull
bjcull / nav-wizard.bootstrap.css
Last active March 5, 2017 22:30
Wizard style navigation tabs for bootstrap
.nav-pills.nav-wizard > li {
position: relative;
overflow: visible;
border-right: 15px solid transparent;
border-left: 15px solid transparent;
}
.nav-pills.nav-wizard > li + li {
margin-left: 0;
}
.nav-pills.nav-wizard > li:first-child {
@bjcull
bjcull / WordDocumentAttribute.cs
Created January 30, 2014 03:52
A Filter Attribute that lets you download an ASP.NET MVC View as a Word Document
public class WordDocumentAttribute : ActionFilterAttribute
{
public string DefaultFilename { get; set; }
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
var result = filterContext.Result as ViewResult;
if (result != null)
result.MasterName = "~/Views/Shared/_LayoutWord.cshtml";
@bjcull
bjcull / HttpsWebServiceHostFactory.cs
Created September 12, 2013 01:07
Dynamically creates https endpoints for Configurationless WCF (Restful)
public class HttpsWebServiceHostFactory : WebServiceHostFactory
{
protected override System.ServiceModel.ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
{
WebServiceHost host = new WebServiceHost(serviceType, baseAddresses);
foreach (Uri baseAddress in baseAddresses)
{
WebHttpBinding binding = CreateRestBinding(baseAddress);
ServiceEndpoint endpoint = host.AddServiceEndpoint(serviceType.GetInterfaces()[0], binding, baseAddress);
@bjcull
bjcull / HttpsServiceHostFactory.cs
Created September 12, 2013 01:06
Dynamically create https endpoints for configurationless WCF
public class HttpsServiceHostFactory : ServiceHostFactory
{
protected override System.ServiceModel.ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
{
ServiceHost host = new ServiceHost(serviceType, baseAddresses);
foreach (Uri baseAddress in baseAddresses)
{
BasicHttpBinding binding = CreateSoapBinding(baseAddress);