1
0
mirror of https://github.com/bitwarden/server synced 2026-01-06 10:34:01 +00:00

[PM-14476] Avoid multiple lookups in dictionaries (#4973)

* Avoid multiple lookups in dictionaries

* Consistency in fallback to empty CollectionIds

* Readability at the cost of lines changed

* Readability

* Changes after running dotnet format
This commit is contained in:
Henrik
2025-06-02 18:18:28 +02:00
committed by GitHub
parent 2c4393cc16
commit 8bac7f0145
44 changed files with 179 additions and 212 deletions

View File

@@ -64,39 +64,39 @@ public class CurrentContext : ICurrentContext
HttpContext = httpContext;
await BuildAsync(httpContext.User, globalSettings);
if (DeviceIdentifier == null && httpContext.Request.Headers.ContainsKey("Device-Identifier"))
if (DeviceIdentifier == null && httpContext.Request.Headers.TryGetValue("Device-Identifier", out var deviceIdentifier))
{
DeviceIdentifier = httpContext.Request.Headers["Device-Identifier"];
DeviceIdentifier = deviceIdentifier;
}
if (httpContext.Request.Headers.ContainsKey("Device-Type") &&
Enum.TryParse(httpContext.Request.Headers["Device-Type"].ToString(), out DeviceType dType))
if (httpContext.Request.Headers.TryGetValue("Device-Type", out var deviceType) &&
Enum.TryParse(deviceType.ToString(), out DeviceType dType))
{
DeviceType = dType;
}
if (!BotScore.HasValue && httpContext.Request.Headers.ContainsKey("X-Cf-Bot-Score") &&
int.TryParse(httpContext.Request.Headers["X-Cf-Bot-Score"], out var parsedBotScore))
if (!BotScore.HasValue && httpContext.Request.Headers.TryGetValue("X-Cf-Bot-Score", out var cfBotScore) &&
int.TryParse(cfBotScore, out var parsedBotScore))
{
BotScore = parsedBotScore;
}
if (httpContext.Request.Headers.ContainsKey("X-Cf-Worked-Proxied"))
if (httpContext.Request.Headers.TryGetValue("X-Cf-Worked-Proxied", out var cfWorkedProxied))
{
CloudflareWorkerProxied = httpContext.Request.Headers["X-Cf-Worked-Proxied"] == "1";
CloudflareWorkerProxied = cfWorkedProxied == "1";
}
if (httpContext.Request.Headers.ContainsKey("X-Cf-Is-Bot"))
if (httpContext.Request.Headers.TryGetValue("X-Cf-Is-Bot", out var cfIsBot))
{
IsBot = httpContext.Request.Headers["X-Cf-Is-Bot"] == "1";
IsBot = cfIsBot == "1";
}
if (httpContext.Request.Headers.ContainsKey("X-Cf-Maybe-Bot"))
if (httpContext.Request.Headers.TryGetValue("X-Cf-Maybe-Bot", out var cfMaybeBot))
{
MaybeBot = httpContext.Request.Headers["X-Cf-Maybe-Bot"] == "1";
MaybeBot = cfMaybeBot == "1";
}
if (httpContext.Request.Headers.ContainsKey("Bitwarden-Client-Version") && Version.TryParse(httpContext.Request.Headers["Bitwarden-Client-Version"], out var cVersion))
if (httpContext.Request.Headers.TryGetValue("Bitwarden-Client-Version", out var bitWardenClientVersion) && Version.TryParse(bitWardenClientVersion, out var cVersion))
{
ClientVersion = cVersion;
}
@@ -190,14 +190,14 @@ public class CurrentContext : ICurrentContext
private List<CurrentContextOrganization> GetOrganizations(Dictionary<string, IEnumerable<Claim>> claimsDict, bool orgApi)
{
var accessSecretsManager = claimsDict.ContainsKey(Claims.SecretsManagerAccess)
? claimsDict[Claims.SecretsManagerAccess].ToDictionary(s => s.Value, _ => true)
var accessSecretsManager = claimsDict.TryGetValue(Claims.SecretsManagerAccess, out var secretsManagerAccessClaim)
? secretsManagerAccessClaim.ToDictionary(s => s.Value, _ => true)
: new Dictionary<string, bool>();
var organizations = new List<CurrentContextOrganization>();
if (claimsDict.ContainsKey(Claims.OrganizationOwner))
if (claimsDict.TryGetValue(Claims.OrganizationOwner, out var organizationOwnerClaim))
{
organizations.AddRange(claimsDict[Claims.OrganizationOwner].Select(c =>
organizations.AddRange(organizationOwnerClaim.Select(c =>
new CurrentContextOrganization
{
Id = new Guid(c.Value),
@@ -214,9 +214,9 @@ public class CurrentContext : ICurrentContext
});
}
if (claimsDict.ContainsKey(Claims.OrganizationAdmin))
if (claimsDict.TryGetValue(Claims.OrganizationAdmin, out var organizationAdminClaim))
{
organizations.AddRange(claimsDict[Claims.OrganizationAdmin].Select(c =>
organizations.AddRange(organizationAdminClaim.Select(c =>
new CurrentContextOrganization
{
Id = new Guid(c.Value),
@@ -225,9 +225,9 @@ public class CurrentContext : ICurrentContext
}));
}
if (claimsDict.ContainsKey(Claims.OrganizationUser))
if (claimsDict.TryGetValue(Claims.OrganizationUser, out var organizationUserClaim))
{
organizations.AddRange(claimsDict[Claims.OrganizationUser].Select(c =>
organizations.AddRange(organizationUserClaim.Select(c =>
new CurrentContextOrganization
{
Id = new Guid(c.Value),
@@ -236,9 +236,9 @@ public class CurrentContext : ICurrentContext
}));
}
if (claimsDict.ContainsKey(Claims.OrganizationCustom))
if (claimsDict.TryGetValue(Claims.OrganizationCustom, out var organizationCustomClaim))
{
organizations.AddRange(claimsDict[Claims.OrganizationCustom].Select(c =>
organizations.AddRange(organizationCustomClaim.Select(c =>
new CurrentContextOrganization
{
Id = new Guid(c.Value),
@@ -254,9 +254,9 @@ public class CurrentContext : ICurrentContext
private List<CurrentContextProvider> GetProviders(Dictionary<string, IEnumerable<Claim>> claimsDict)
{
var providers = new List<CurrentContextProvider>();
if (claimsDict.ContainsKey(Claims.ProviderAdmin))
if (claimsDict.TryGetValue(Claims.ProviderAdmin, out var providerAdminClaim))
{
providers.AddRange(claimsDict[Claims.ProviderAdmin].Select(c =>
providers.AddRange(providerAdminClaim.Select(c =>
new CurrentContextProvider
{
Id = new Guid(c.Value),
@@ -264,9 +264,9 @@ public class CurrentContext : ICurrentContext
}));
}
if (claimsDict.ContainsKey(Claims.ProviderServiceUser))
if (claimsDict.TryGetValue(Claims.ProviderServiceUser, out var providerServiceUserClaim))
{
providers.AddRange(claimsDict[Claims.ProviderServiceUser].Select(c =>
providers.AddRange(providerServiceUserClaim.Select(c =>
new CurrentContextProvider
{
Id = new Guid(c.Value),
@@ -504,20 +504,20 @@ public class CurrentContext : ICurrentContext
private string GetClaimValue(Dictionary<string, IEnumerable<Claim>> claims, string type)
{
if (!claims.ContainsKey(type))
if (!claims.TryGetValue(type, out var claim))
{
return null;
}
return claims[type].FirstOrDefault()?.Value;
return claim.FirstOrDefault()?.Value;
}
private Permissions SetOrganizationPermissionsFromClaims(string organizationId, Dictionary<string, IEnumerable<Claim>> claimsDict)
{
bool hasClaim(string claimKey)
{
return claimsDict.ContainsKey(claimKey) ?
claimsDict[claimKey].Any(x => x.Value == organizationId) : false;
return claimsDict.TryGetValue(claimKey, out var claim) ?
claim.Any(x => x.Value == organizationId) : false;
}
return new Permissions