chore: deploy initial code base
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
using Hangfire.Common;
|
||||
using Hangfire.Server;
|
||||
using Strata.CoreLib.Claims;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Security.Claims;
|
||||
using System.Threading;
|
||||
|
||||
namespace Strata.RxNorm.Biz.Hangfire
|
||||
{
|
||||
/// <summary>
|
||||
/// Captures Job parameters as Claims on the ThreadPrincipal running the job
|
||||
/// </summary>
|
||||
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Interface | AttributeTargets.Method)]
|
||||
public class CaptureJobParameterAttribute : JobFilterAttribute, IServerFilter
|
||||
{
|
||||
public int DatabaseGuidArgumentPosition { get; set; } = -1;
|
||||
public int StrataIdArgumentPosition { get; set; } = -1;
|
||||
|
||||
// server filters
|
||||
public void OnPerforming(PerformingContext filterContext)
|
||||
{
|
||||
var claims = new List<Claim>();
|
||||
var args = filterContext.BackgroundJob.Job.Args.ToArray();
|
||||
|
||||
if (StrataIdArgumentPosition >= 0)
|
||||
{
|
||||
var strataIdValue = string.Format(CultureInfo.CurrentCulture, $"{{{StrataIdArgumentPosition}}}", args);
|
||||
if (int.TryParse(strataIdValue, out var strataId))
|
||||
{
|
||||
claims.Add(new Claim(StrataClaims.StrataId, strataId.ToString()));
|
||||
}
|
||||
}
|
||||
|
||||
if (DatabaseGuidArgumentPosition >= 0)
|
||||
{
|
||||
var databaseGuidValue = string.Format(CultureInfo.CurrentCulture, $"{{{DatabaseGuidArgumentPosition}}}", args);
|
||||
if (Guid.TryParse(databaseGuidValue, out var databaseGuid))
|
||||
{
|
||||
claims.Add(new Claim(StrataClaims.DatabaseGuid, databaseGuid.ToString()));
|
||||
}
|
||||
}
|
||||
|
||||
if (claims.Count == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var principal = new ClaimsPrincipal(new ClaimsIdentity(claims, "hangfire_impersonation"));
|
||||
Thread.CurrentPrincipal = principal;
|
||||
}
|
||||
|
||||
public void OnPerformed(PerformedContext filterContext)
|
||||
{
|
||||
Thread.CurrentPrincipal = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user