Skip to content

Commit 079cff7

Browse files
authored
Merge pull request #10143 from NuGet/agr-msi-fixup
Statistics and Auditing storage access update.
2 parents b3855a8 + e34e89c commit 079cff7

3 files changed

Lines changed: 84 additions & 36 deletions

File tree

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) .NET Foundation. All rights reserved.
1+
// Copyright (c) .NET Foundation. All rights reserved.
22
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
33

44
namespace NuGetGallery.Services
@@ -7,5 +7,7 @@ public interface IBlobStorageConfiguration
77
{
88
string ConnectionString { get; }
99
bool ReadAccessGeoRedundant { get; }
10+
string MsiClientId { get; }
11+
bool UseMsi { get; }
1012
}
1113
}

src/NuGetGallery.Services/Configuration/SimpleBlobStorageConfiguration.cs

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) .NET Foundation. All rights reserved.
1+
// Copyright (c) .NET Foundation. All rights reserved.
22
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
33

44
namespace NuGetGallery.Services
@@ -17,10 +17,24 @@ public bool ReadAccessGeoRedundant
1717
private set;
1818
}
1919

20-
public SimpleBlobStorageConfiguration(string connectionString, bool readAccessGeoRedundant)
20+
public bool UseMsi
21+
{
22+
get;
23+
private set;
24+
}
25+
26+
public string MsiClientId
27+
{
28+
get;
29+
private set;
30+
}
31+
32+
public SimpleBlobStorageConfiguration(string connectionString, bool readAccessGeoRedundant, bool useMsi, string msiClientId)
2133
{
2234
ConnectionString = connectionString;
2335
ReadAccessGeoRedundant = readAccessGeoRedundant;
36+
UseMsi = useMsi;
37+
MsiClientId = msiClientId;
2438
}
2539
}
2640
}

src/NuGetGallery/App_Start/DefaultDependenciesModule.cs

Lines changed: 65 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -721,26 +721,42 @@ private static void RegisterDeleteAccountService(ContainerBuilder builder, Confi
721721
private static void RegisterStatisticsServices(ContainerBuilder builder, IGalleryConfigurationService configuration)
722722
{
723723
// when running on Windows Azure, download counts come from the downloads.v1.json blob
724-
builder.Register(c => new SimpleBlobStorageConfiguration(configuration.Current.AzureStorage_Statistics_ConnectionString, configuration.Current.AzureStorageReadAccessGeoRedundant))
724+
builder.Register(c => new SimpleBlobStorageConfiguration(
725+
configuration.Current.AzureStorage_Statistics_ConnectionString,
726+
configuration.Current.AzureStorageReadAccessGeoRedundant,
727+
configuration.Current.AzureStorageUseMsi,
728+
configuration.Current.AzureStorageMsiClientId))
725729
.SingleInstance()
726730
.Keyed<IBlobStorageConfiguration>(BindingKeys.PrimaryStatisticsKey);
727731

728-
builder.Register(c => new SimpleBlobStorageConfiguration(configuration.Current.AzureStorage_Statistics_ConnectionString_Alternate, configuration.Current.AzureStorageReadAccessGeoRedundant))
732+
builder.Register(c => new SimpleBlobStorageConfiguration(
733+
configuration.Current.AzureStorage_Statistics_ConnectionString_Alternate,
734+
configuration.Current.AzureStorageReadAccessGeoRedundant,
735+
configuration.Current.AzureStorageUseMsi,
736+
configuration.Current.AzureStorageMsiClientId))
729737
.SingleInstance()
730738
.Keyed<IBlobStorageConfiguration>(BindingKeys.AlternateStatisticsKey);
731739

732740
builder.Register(c =>
733741
{
734742
var blobConfiguration = c.ResolveKeyed<IBlobStorageConfiguration>(BindingKeys.PrimaryStatisticsKey);
735-
return new CloudBlobClientWrapper(blobConfiguration.ConnectionString, blobConfiguration.ReadAccessGeoRedundant);
743+
return CreateCloudBlobClientWrapper(
744+
blobConfiguration.ConnectionString,
745+
blobConfiguration.UseMsi,
746+
blobConfiguration.MsiClientId,
747+
blobConfiguration.ReadAccessGeoRedundant);
736748
})
737749
.SingleInstance()
738750
.Keyed<ICloudBlobClient>(BindingKeys.PrimaryStatisticsKey);
739751

740752
builder.Register(c =>
741753
{
742754
var blobConfiguration = c.ResolveKeyed<IBlobStorageConfiguration>(BindingKeys.AlternateStatisticsKey);
743-
return new CloudBlobClientWrapper(blobConfiguration.ConnectionString, blobConfiguration.ReadAccessGeoRedundant);
755+
return CreateCloudBlobClientWrapper(
756+
blobConfiguration.ConnectionString,
757+
blobConfiguration.UseMsi,
758+
blobConfiguration.MsiClientId,
759+
blobConfiguration.ReadAccessGeoRedundant);
744760
})
745761
.SingleInstance()
746762
.Keyed<ICloudBlobClient>(BindingKeys.AlternateStatisticsKey);
@@ -1432,33 +1448,11 @@ private static void ConfigureForAzureStorage(ContainerBuilder builder, IGalleryC
14321448
{
14331449
if (completedBindingKeys.Add(dependent.BindingKey))
14341450
{
1435-
CloudBlobClientWrapper blobClient;
1436-
if (!configuration.Current.AzureStorageUseMsi)
1437-
{
1438-
blobClient = new CloudBlobClientWrapper(dependent.AzureStorageConnectionString, configuration.Current.AzureStorageReadAccessGeoRedundant);
1439-
}
1440-
else
1441-
{
1442-
if (string.IsNullOrWhiteSpace(configuration.Current.AzureStorageMsiClientId))
1443-
{
1444-
#if DEBUG
1445-
blobClient = CloudBlobClientWrapper.UsingDefaultAzureCredential(
1446-
dependent.AzureStorageConnectionString,
1447-
readAccessGeoRedundant: configuration.Current.AzureStorageReadAccessGeoRedundant);
1448-
#else
1449-
blobClient = CloudBlobClientWrapper.UsingMsi(
1450-
dependent.AzureStorageConnectionString,
1451-
readAccessGeoRedundant: configuration.Current.AzureStorageReadAccessGeoRedundant);
1452-
#endif
1453-
}
1454-
else
1455-
{
1456-
blobClient = CloudBlobClientWrapper.UsingMsi(
1457-
dependent.AzureStorageConnectionString,
1458-
configuration.Current.AzureStorageMsiClientId,
1459-
configuration.Current.AzureStorageReadAccessGeoRedundant);
1460-
}
1461-
}
1451+
CloudBlobClientWrapper blobClient = CreateCloudBlobClientWrapper(
1452+
dependent.AzureStorageConnectionString,
1453+
configuration.Current.AzureStorageUseMsi,
1454+
configuration.Current.AzureStorageMsiClientId,
1455+
configuration.Current.AzureStorageReadAccessGeoRedundant);
14621456
builder.RegisterInstance(blobClient)
14631457
.AsSelf()
14641458
.As<ICloudBlobClient>()
@@ -1502,6 +1496,40 @@ private static void ConfigureForAzureStorage(ContainerBuilder builder, IGalleryC
15021496
.SingleInstance();
15031497
}
15041498

1499+
private static CloudBlobClientWrapper CreateCloudBlobClientWrapper(
1500+
string connectionString,
1501+
bool useMsi,
1502+
string msiClientId,
1503+
bool useStorageReadAccessGeoRedundant)
1504+
{
1505+
if (!useMsi)
1506+
{
1507+
return new CloudBlobClientWrapper(connectionString, useStorageReadAccessGeoRedundant);
1508+
}
1509+
else
1510+
{
1511+
if (string.IsNullOrWhiteSpace(msiClientId))
1512+
{
1513+
#if DEBUG
1514+
return CloudBlobClientWrapper.UsingDefaultAzureCredential(
1515+
connectionString,
1516+
readAccessGeoRedundant: useStorageReadAccessGeoRedundant);
1517+
#else
1518+
return CloudBlobClientWrapper.UsingMsi(
1519+
connectionString,
1520+
readAccessGeoRedundant: useStorageReadAccessGeoRedundant);
1521+
#endif
1522+
}
1523+
else
1524+
{
1525+
return CloudBlobClientWrapper.UsingMsi(
1526+
connectionString,
1527+
msiClientId,
1528+
useStorageReadAccessGeoRedundant);
1529+
}
1530+
}
1531+
}
1532+
15051533
private static IAuditingService CombineAuditingServices(IEnumerable<IAuditingService> services)
15061534
{
15071535
if (!services.Any())
@@ -1540,7 +1568,11 @@ private static void RegisterAuditingServices(ContainerBuilder builder, string st
15401568
builder.Register(c =>
15411569
{
15421570
var configuration = c.Resolve<IAppConfiguration>();
1543-
return new CloudBlobClientWrapper(configuration.AzureStorage_Auditing_ConnectionString, configuration.AzureStorageReadAccessGeoRedundant);
1571+
return CreateCloudBlobClientWrapper(
1572+
configuration.AzureStorage_Auditing_ConnectionString,
1573+
configuration.AzureStorageUseMsi,
1574+
configuration.AzureStorageMsiClientId,
1575+
configuration.AzureStorageReadAccessGeoRedundant);
15441576
})
15451577
.SingleInstance()
15461578
.Keyed<ICloudBlobClient>(BindingKeys.AuditKey);
@@ -1630,4 +1662,4 @@ private static void RegisterTyposquattingServiceHelper(ContainerBuilder builder,
16301662
.SingleInstance();
16311663
}
16321664
}
1633-
}
1665+
}

0 commit comments

Comments
 (0)