1
0
mirror of https://github.com/bitwarden/server.git synced 2025-06-30 07:36:14 -05:00

Use all organization memberships for LaunchDarkly user context, better separate context kinds (#2807)

* Use all organization memberships for LaunchDarkly context

* Use simpler null check

Co-authored-by: Oscar Hinton <Hinton@users.noreply.github.com>

* Remove unnecessary interpolation

Co-authored-by: Oscar Hinton <Hinton@users.noreply.github.com>

* Remove unnecessary interpolation

Co-authored-by: Oscar Hinton <Hinton@users.noreply.github.com>

* Fully spell out organizations

* Use client type for context separation decisions

---------

Co-authored-by: Oscar Hinton <Hinton@users.noreply.github.com>
This commit is contained in:
Matt Bishop
2023-03-20 11:48:45 -04:00
committed by GitHub
parent e667908a06
commit 3d0ca908ff
2 changed files with 94 additions and 21 deletions

View File

@ -104,18 +104,42 @@ public class LaunchDarklyFeatureService : IFeatureService, IDisposable
{
var builder = LaunchDarkly.Sdk.Context.MultiBuilder();
if (currentContext.UserId.HasValue)
switch (currentContext.ClientType)
{
var user = LaunchDarkly.Sdk.Context.Builder(currentContext.UserId.Value.ToString());
user.Kind(LaunchDarkly.Sdk.ContextKind.Default);
builder.Add(user.Build());
}
case Identity.ClientType.User:
{
var ldUser = LaunchDarkly.Sdk.Context.Builder(currentContext.UserId.Value.ToString());
ldUser.Kind(LaunchDarkly.Sdk.ContextKind.Default);
if (currentContext.OrganizationId.HasValue)
{
var org = LaunchDarkly.Sdk.Context.Builder(currentContext.OrganizationId.Value.ToString());
org.Kind("org");
builder.Add(org.Build());
if (currentContext.Organizations?.Any() ?? false)
{
var ldOrgs = currentContext.Organizations.Select(o => LaunchDarkly.Sdk.LdValue.Of(o.Id.ToString()));
ldUser.Set("organizations", LaunchDarkly.Sdk.LdValue.ArrayFrom(ldOrgs));
}
builder.Add(ldUser.Build());
}
break;
case Identity.ClientType.Organization:
{
var ldOrg = LaunchDarkly.Sdk.Context.Builder(currentContext.OrganizationId.Value.ToString());
ldOrg.Kind("organization");
builder.Add(ldOrg.Build());
}
break;
case Identity.ClientType.ServiceAccount:
{
var ldServiceAccount = LaunchDarkly.Sdk.Context.Builder(currentContext.UserId.Value.ToString());
ldServiceAccount.Kind("service-account");
builder.Add(ldServiceAccount.Build());
var ldOrg = LaunchDarkly.Sdk.Context.Builder(currentContext.OrganizationId.Value.ToString());
ldOrg.Kind("organization");
builder.Add(ldOrg.Build());
}
break;
}
return builder.Build();