mirror of
https://github.com/bitwarden/server.git
synced 2025-02-18 02:11:22 +01:00
Provide anonymous user context for unauthenticated requests using LaunchDarkly (#2819)
This commit is contained in:
parent
d7b091d7d6
commit
39f884ddcc
@ -8,6 +8,7 @@ namespace Bit.Core.Services;
|
|||||||
public class LaunchDarklyFeatureService : IFeatureService, IDisposable
|
public class LaunchDarklyFeatureService : IFeatureService, IDisposable
|
||||||
{
|
{
|
||||||
private readonly LdClient _client;
|
private readonly LdClient _client;
|
||||||
|
private const string _anonymousUser = "25a15cac-58cf-4ac0-ad0f-b17c4bd92294";
|
||||||
|
|
||||||
public LaunchDarklyFeatureService(
|
public LaunchDarklyFeatureService(
|
||||||
IGlobalSettings globalSettings)
|
IGlobalSettings globalSettings)
|
||||||
@ -108,7 +109,18 @@ public class LaunchDarklyFeatureService : IFeatureService, IDisposable
|
|||||||
{
|
{
|
||||||
case Identity.ClientType.User:
|
case Identity.ClientType.User:
|
||||||
{
|
{
|
||||||
var ldUser = LaunchDarkly.Sdk.Context.Builder(currentContext.UserId.Value.ToString());
|
LaunchDarkly.Sdk.ContextBuilder ldUser;
|
||||||
|
if (currentContext.UserId.HasValue)
|
||||||
|
{
|
||||||
|
ldUser = LaunchDarkly.Sdk.Context.Builder(currentContext.UserId.Value.ToString());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// group all unauthenticated activity under one anonymous user key and mark as such
|
||||||
|
ldUser = LaunchDarkly.Sdk.Context.Builder(_anonymousUser);
|
||||||
|
ldUser.Anonymous(true);
|
||||||
|
}
|
||||||
|
|
||||||
ldUser.Kind(LaunchDarkly.Sdk.ContextKind.Default);
|
ldUser.Kind(LaunchDarkly.Sdk.ContextKind.Default);
|
||||||
|
|
||||||
if (currentContext.Organizations?.Any() ?? false)
|
if (currentContext.Organizations?.Any() ?? false)
|
||||||
@ -123,21 +135,30 @@ public class LaunchDarklyFeatureService : IFeatureService, IDisposable
|
|||||||
|
|
||||||
case Identity.ClientType.Organization:
|
case Identity.ClientType.Organization:
|
||||||
{
|
{
|
||||||
var ldOrg = LaunchDarkly.Sdk.Context.Builder(currentContext.OrganizationId.Value.ToString());
|
if (currentContext.OrganizationId.HasValue)
|
||||||
ldOrg.Kind("organization");
|
{
|
||||||
builder.Add(ldOrg.Build());
|
var ldOrg = LaunchDarkly.Sdk.Context.Builder(currentContext.OrganizationId.Value.ToString());
|
||||||
|
ldOrg.Kind("organization");
|
||||||
|
builder.Add(ldOrg.Build());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Identity.ClientType.ServiceAccount:
|
case Identity.ClientType.ServiceAccount:
|
||||||
{
|
{
|
||||||
var ldServiceAccount = LaunchDarkly.Sdk.Context.Builder(currentContext.UserId.Value.ToString());
|
if (currentContext.UserId.HasValue)
|
||||||
ldServiceAccount.Kind("service-account");
|
{
|
||||||
builder.Add(ldServiceAccount.Build());
|
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());
|
if (currentContext.OrganizationId.HasValue)
|
||||||
ldOrg.Kind("organization");
|
{
|
||||||
builder.Add(ldOrg.Build());
|
var ldOrg = LaunchDarkly.Sdk.Context.Builder(currentContext.OrganizationId.Value.ToString());
|
||||||
|
ldOrg.Kind("organization");
|
||||||
|
builder.Add(ldOrg.Build());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -41,8 +41,23 @@ public class ConfigControllerTests : IClassFixture<ApiApplicationFactory>, IAsyn
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public async Task GetConfigs()
|
public async Task GetConfigs_Unauthenticated()
|
||||||
{
|
{
|
||||||
|
_client.DefaultRequestHeaders.Authorization = null;
|
||||||
|
|
||||||
|
var response = await _client.GetAsync("/config");
|
||||||
|
response.EnsureSuccessStatusCode();
|
||||||
|
var result = await response.Content.ReadFromJsonAsync<ConfigResponseModel>();
|
||||||
|
|
||||||
|
Assert.NotNull(result);
|
||||||
|
Assert.NotEmpty(result!.Version);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task GetConfigs_Authenticated()
|
||||||
|
{
|
||||||
|
await LoginAsync();
|
||||||
|
|
||||||
var response = await _client.GetAsync("/config");
|
var response = await _client.GetAsync("/config");
|
||||||
response.EnsureSuccessStatusCode();
|
response.EnsureSuccessStatusCode();
|
||||||
var result = await response.Content.ReadFromJsonAsync<ConfigResponseModel>();
|
var result = await response.Content.ReadFromJsonAsync<ConfigResponseModel>();
|
||||||
|
Loading…
Reference in New Issue
Block a user