Skip to content

Commit 98f6ff4

Browse files
authored
Merge pull request #182 from Resgrid/develop
CU-868d85dv8 More upgrade work and posthog work.
2 parents 90b172c + 127953d commit 98f6ff4

File tree

7 files changed

+93
-3
lines changed

7 files changed

+93
-3
lines changed

Providers/Resgrid.Providers.MigrationsPg/Resgrid.Providers.MigrationsPg.csproj

+1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
<PackageReference Include="FluentMigrator.Extensions.Postgres" Version="7.0.0" />
2727
<PackageReference Include="FluentMigrator.Runner.Postgres" Version="7.0.0" />
2828
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="9.0.3" />
29+
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
2930
<PackageReference Include="Quidjibo" Version="0.6.0" />
3031
</ItemGroup>
3132

Web/Resgrid.Web/Controllers/AccountController.cs

+31-3
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
using Microsoft.AspNetCore.Http;
2424
using System.Security.Claims;
2525
using Microsoft.AspNetCore.Localization;
26+
using static Microsoft.ApplicationInsights.MetricDimensionNames.TelemetryContext;
27+
using PostHog;
2628

2729
namespace Resgrid.Web.Controllers
2830
{
@@ -45,12 +47,14 @@ public class AccountController : Controller
4547
private readonly IEmailMarketingProvider _emailMarketingProvider;
4648
private readonly ISystemAuditsService _systemAuditsService;
4749
private readonly ICacheProvider _cacheProvider;
48-
50+
private readonly IPostHogClient _posthog;
51+
52+
4953
public AccountController(
5054
UserManager<IdentityUser> userManager, SignInManager<IdentityUser> signInManager,
5155
IDepartmentsService departmentsService, IUsersService usersService, IEmailService emailService, IInvitesService invitesService, IUserProfileService userProfileService,
5256
ISubscriptionsService subscriptionsService, IAffiliateService affiliateService, IEventAggregator eventAggregator, IEmailMarketingProvider emailMarketingProvider,
53-
ISystemAuditsService systemAuditsService, ICacheProvider cacheProvider)
57+
ISystemAuditsService systemAuditsService, ICacheProvider cacheProvider, IPostHogClient posthog)
5458
{
5559
_userManager = userManager;
5660
_signInManager = signInManager;
@@ -65,6 +69,7 @@ public AccountController(
6569
_emailMarketingProvider = emailMarketingProvider;
6670
_systemAuditsService = systemAuditsService;
6771
_cacheProvider = cacheProvider;
72+
_posthog = posthog;
6873
}
6974
#endregion Private Members and Constructors
7075

@@ -128,6 +133,29 @@ await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme,
128133
{
129134
var token = await ApiAuthHelper.GetBearerApiTokenAsync(model.Username, model.Password);
130135
await _cacheProvider.SetStringAsync(CacheConfig.ApiBearerTokenKeyName + $"_${userId}", token, new TimeSpan(48, 0, 0));
136+
137+
if (!String.IsNullOrWhiteSpace(TelemetryConfig.PostHogApiKey))
138+
{
139+
var email = User.Claims.FirstOrDefault(x => x.Type == ClaimTypes.Email)?.Value;
140+
var departmentId = User.Claims.FirstOrDefault(x => x.Type == ClaimTypes.PrimaryGroupSid)?.Value;
141+
var departmentName = User.Claims.FirstOrDefault(x => x.Type == ClaimTypes.Actor)?.Value;
142+
var name = User.Claims.FirstOrDefault(x => x.Type == ClaimTypes.GivenName)?.Value;
143+
var createdOn = User.Claims.FirstOrDefault(x => x.Type == ClaimTypes.OtherPhone)?.Value;
144+
145+
await _posthog.IdentifyAsync(
146+
userId,
147+
email,
148+
name,
149+
personPropertiesToSet: new()
150+
{
151+
["departmentId"] = departmentId,
152+
["departmentName"] = departmentName,
153+
},
154+
personPropertiesToSetOnce: new()
155+
{
156+
["createdOn"] = createdOn
157+
});
158+
}
131159
}
132160
}
133161
catch (Exception ex)
@@ -139,7 +167,7 @@ await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme,
139167
Response.Cookies.Delete(".AspNetCore.Identity.ApplicationC1");
140168
Response.Cookies.Delete(".AspNetCore.Identity.ApplicationC2");
141169
Response.Cookies.Delete(".AspNetCore.Identity.ApplicationC3");
142-
170+
143171
if (!String.IsNullOrWhiteSpace(returnUrl))
144172
return RedirectToLocal(returnUrl);
145173
else
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
using Microsoft.AspNetCore.Http;
2+
using PostHog.FeatureManagement;
3+
using PostHog;
4+
using System.Collections.Generic;
5+
using System.Threading.Tasks;
6+
using Resgrid.Web.Helpers;
7+
8+
namespace Resgrid.Web.Middleware
9+
{
10+
/// <summary>
11+
/// Provides context and options used to evaluate feature flags for the Resgrid application.
12+
/// </summary>
13+
/// <param name="httpContextAccessor">The <see cref="IHttpContextAccessor"/> used to get the current user's Id.</param>
14+
public class FeatureFlagContextProvider(IHttpContextAccessor httpContextAccessor)
15+
: PostHogFeatureFlagContextProvider
16+
{
17+
protected override string? GetDistinctId() =>
18+
httpContextAccessor.HttpContext?.User.Identity?.Name;
19+
20+
protected override ValueTask<FeatureFlagOptions> GetFeatureFlagOptionsAsync()
21+
{
22+
return ValueTask.FromResult(
23+
new FeatureFlagOptions
24+
{
25+
PersonProperties = new Dictionary<string, object?>
26+
{
27+
["email"] = ClaimsAuthorizationHelper.GetEmailAddress(),
28+
},
29+
Groups = [
30+
new Group("departmentId", ClaimsAuthorizationHelper.GetDepartmentId().ToString())
31+
],
32+
OnlyEvaluateLocally = true
33+
});
34+
}
35+
}
36+
}

Web/Resgrid.Web/Program.cs

+1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using Microsoft.Extensions.Logging;
99
using Resgrid.Config;
1010
using Sentry.Profiling;
11+
using PostHog;
1112

1213
namespace Resgrid.Web
1314
{

Web/Resgrid.Web/Resgrid.Web.csproj

+1
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@
5757
<PackageReference Include="OpenTelemetry.Extensions.Hosting" Version="1.11.2" />
5858
<PackageReference Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.11.1" />
5959
<PackageReference Include="OpenTelemetry.Instrumentation.Http" Version="1.11.1" />
60+
<PackageReference Include="PostHog.AspNetCore" Version="1.0.4" />
6061
<PackageReference Include="protobuf-net" Version="3.2.46" />
6162
<PackageReference Include="Sentry" Version="5.4.0" />
6263
<PackageReference Include="Sentry.AspNetCore" Version="5.4.0" />

Web/Resgrid.Web/Startup.cs

+22
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using System.Net;
66
using System.Net.Http;
77
using System.Reflection;
8+
using System.Reflection.PortableExecutable;
89
using System.Threading.Tasks;
910
using Audit.Core;
1011
using Autofac;
@@ -26,6 +27,8 @@
2627
using Microsoft.Extensions.Configuration;
2728
using Microsoft.Extensions.DependencyInjection;
2829
using Microsoft.Extensions.Logging;
30+
using PostHog.Config;
31+
using PostHog;
2932
using Resgrid.Config;
3033
using Resgrid.Framework;
3134
using Resgrid.Localization;
@@ -53,6 +56,8 @@
5356
using StackExchange.Redis;
5457
using Stripe;
5558
using IPNetwork = Microsoft.AspNetCore.HttpOverrides.IPNetwork;
59+
using Microsoft.Extensions.Http.Logging;
60+
using Resgrid.Web.Middleware;
5661

5762
namespace Resgrid.Web
5863
{
@@ -429,6 +434,23 @@ public void ConfigureServices(IServiceCollection services)
429434
services.AddSentryTunneling();
430435
}
431436

437+
if (!string.IsNullOrWhiteSpace(Config.TelemetryConfig.PostHogApiKey))
438+
{
439+
services.AddPostHog(options =>
440+
{
441+
options.PostConfigure(o =>
442+
{
443+
o.HostUrl = new Uri(TelemetryConfig.PostHogUrl);
444+
o.ProjectApiKey = TelemetryConfig.PostHogApiKey;
445+
o.SuperProperties.Add("app_name", "ResgridWeb");
446+
o.SuperProperties.Add("environment", SystemBehaviorConfig.Environment);
447+
});
448+
449+
// Enables PostHog as a provider for ASP.NET Core's feature management system.
450+
options.UseFeatureManagement<FeatureFlagContextProvider>();
451+
});
452+
}
453+
432454
this.Services = services;
433455

434456
//if (Config.ExternalErrorConfig.ApplicationInsightsEnabled)

Workers/Support/Quidjibo.Postgres/Quidjibo.Postgres.csproj

+1
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161

6262
<ItemGroup>
6363
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="9.0.3" />
64+
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
6465
<PackageReference Include="Npgsql" Version="8.0.5" />
6566
<PackageReference Include="Quidjibo" Version="0.6.0" />
6667
</ItemGroup>

0 commit comments

Comments
 (0)