Skip to content

Instantly share code, notes, and snippets.

@jaredswarts55
Last active September 2, 2021 16:15
Show Gist options
  • Select an option

  • Save jaredswarts55/6920263 to your computer and use it in GitHub Desktop.

Select an option

Save jaredswarts55/6920263 to your computer and use it in GitHub Desktop.
Delegating Handler for user dependency injection.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http.OData.Routing;
namespace Project.WebService.Authorization
{
using System.Net.Http;
using System.Threading;
using Autofac;
using Project.Data.Base;
using Project.Data.Contexts;
using Project.Model.Authentication;
using Project.Model.Data;
using Project.Service.Data.Base;
public class AuthorizationMessageHandler : DelegatingHandler
{
protected override System.Threading.Tasks.Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
{
//var apiKeyHeaderValue = request.GetQueryNameValuePairs().FirstOrDefault(x => x.Key.ToLower() == "apikey");
var apiKeyHeaderValue = request.Headers.FirstOrDefault(x => x.Key.ToLower() == "x-apikey");
if (apiKeyHeaderValue.Value == null)
{
return base.SendAsync(request, cancellationToken);
}
var userService = (IUserService)request.GetDependencyScope().GetService(typeof(IUserService));
var apikeyGuid = Guid.Parse(apiKeyHeaderValue.Value.First());
var user = userService.GetUser(apikeyGuid);
if (user == null)
return base.SendAsync(request, cancellationToken);
var principal = new ProjectPrincipal(new ProjectIdentity(user));
Thread.CurrentPrincipal = principal;
HttpContext.Current.User = principal;
return base.SendAsync(request, cancellationToken);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment