Skip to content

Commit ab58a27

Browse files
committed
#391: Added authentication support for remote files via custom HTTP headers
1 parent 4823752 commit ab58a27

File tree

5 files changed

+30
-3
lines changed

5 files changed

+30
-3
lines changed

src/Readme.txt

+1
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ CHANGELOG
6767

6868
* New: Dropped support for Nuget package 'dotnet-reportgenerator-cli'. Use 'dotnet-reportgenerator-globaltool' instead.
6969
* New: #384: Added warning for unknown or duplicate command line arguments
70+
* New: #391: Added authentication support for remote files via custom HTTP headers
7071

7172
4.6.7.0
7273

src/ReportGenerator.Core/Generator.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ public void GenerateReport(
247247
DateTime executionTime = DateTime.Now;
248248

249249
new Reporting.ReportGenerator(
250-
new CachingFileReader(new LocalFileReader(reportConfiguration.SourceDirectories), settings.CachingDurationOfRemoteFilesInMinutes),
250+
new CachingFileReader(new LocalFileReader(reportConfiguration.SourceDirectories), settings.CachingDurationOfRemoteFilesInMinutes, settings.CustomHeadersForRemoteFiles),
251251
parserResult,
252252
reportBuilderFactory.GetReportBuilders(reportContext))
253253
.CreateReport(reportConfiguration.HistoryDirectory != null, overallHistoricCoverages, executionTime, reportConfiguration.Tag);

src/ReportGenerator.Core/Parser/FileReading/CachingFileReader.cs

+19-1
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,28 @@ internal class CachingFileReader : IFileReader
3636
/// </summary>
3737
/// <param name="localFileReader"><see cref="IFileReader"/> for loading files from local disk.</param>
3838
/// <param name="cachingDurationOfRemoteFilesInMinutes">The caching duration of code files that are downloaded from remote servers in minutes.</param>
39-
public CachingFileReader(IFileReader localFileReader, int cachingDurationOfRemoteFilesInMinutes)
39+
/// <param name="customHeadersForRemoteFiles">Custom headers (e.g. authentication headers) for remote requests.</param>
40+
public CachingFileReader(IFileReader localFileReader, int cachingDurationOfRemoteFilesInMinutes, string customHeadersForRemoteFiles)
4041
{
4142
this.localFileReader = localFileReader;
4243
this.cachingDurationOfRemoteFilesInMinutes = cachingDurationOfRemoteFilesInMinutes;
44+
45+
if (!string.IsNullOrWhiteSpace(customHeadersForRemoteFiles))
46+
{
47+
var parts = customHeadersForRemoteFiles.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
48+
49+
foreach (var part in parts)
50+
{
51+
int index = part.IndexOf('=');
52+
53+
if (index > 0 && part.Length > index + 1)
54+
{
55+
string key = part.Substring(0, index);
56+
string value = part.Substring(index + 1);
57+
HttpClient.DefaultRequestHeaders.Add(key, value);
58+
}
59+
}
60+
}
4361
}
4462

4563
/// <summary>

src/ReportGenerator.Core/Settings.cs

+7
Original file line numberDiff line numberDiff line change
@@ -65,5 +65,12 @@ public int CachingDuringOfRemoteFilesInMinutes
6565
/// Gets or sets a value indicating whether a subdirectory should be created in the target directory for each report type.
6666
/// </summary>
6767
public bool CreateSubdirectoryForAllReportTypes { get; set; } = false;
68+
69+
/// <summary>
70+
/// Gets or sets custom headers (e.g. authentication headers) for remote requests.
71+
/// Format: key1=value1;key2=value2
72+
/// Example: Authorization=Bearer <JWT>
73+
/// </summary>
74+
public string CustomHeadersForRemoteFiles { get; set; }
6875
}
6976
}

src/ReportGenerator.Core/appsettings.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
"cachingDurationOfRemoteFilesInMinutes": 10080,
1313
"disableRiskHotspots": false,
1414
"excludeTestProjects": false,
15-
"createSubdirectoryForAllReportTypes": false
15+
"createSubdirectoryForAllReportTypes": false,
16+
"customHeadersForRemoteFiles": null
1617
}
1718
}

0 commit comments

Comments
 (0)