44using System ;
55using System . Collections . Generic ;
66using System . Diagnostics ;
7- using System . IdentityModel . Tokens . Jwt ;
87using System . IO ;
98using System . Linq ;
109using System . Net . Http ;
1514using Microsoft . AspNetCore . Builder ;
1615using Microsoft . AspNetCore . Hosting ;
1716using Microsoft . AspNetCore . TestHost ;
18- using Microsoft . Azure . Web . DataProtection ;
1917using Microsoft . Azure . WebJobs . Host . Executors ;
2018using Microsoft . Azure . WebJobs . Script . ExtensionBundle ;
19+ using Microsoft . Azure . WebJobs . Script . Grpc ;
2120using Microsoft . Azure . WebJobs . Script . Models ;
2221using Microsoft . Azure . WebJobs . Script . WebHost ;
23- using Microsoft . Azure . WebJobs . Script . WebHost . Authentication ;
2422using Microsoft . Azure . WebJobs . Script . WebHost . DependencyInjection ;
2523using Microsoft . Azure . WebJobs . Script . WebHost . Middleware ;
2624using Microsoft . Azure . WebJobs . Script . WebHost . Models ;
3432using Microsoft . Extensions . Logging ;
3533using Microsoft . Extensions . Logging . Abstractions ;
3634using Microsoft . Extensions . Options ;
37- using Microsoft . IdentityModel . Tokens ;
3835using Microsoft . WebJobs . Script . Tests ;
3936using Newtonsoft . Json . Linq ;
4037using IApplicationLifetime = Microsoft . AspNetCore . Hosting . IApplicationLifetime ;
@@ -62,10 +59,9 @@ public TestFunctionHost(string scriptPath,
6259 Action < IWebJobsBuilder > configureScriptHostWebJobsBuilder = null ,
6360 Action < IConfigurationBuilder > configureScriptHostAppConfiguration = null ,
6461 Action < ILoggingBuilder > configureScriptHostLogging = null ,
65- Action < IServiceCollection > configureScriptHostServices = null ,
66- Action < IConfigurationBuilder > configureWebHostAppConfiguration = null )
62+ Action < IServiceCollection > configureScriptHostServices = null )
6763 : this ( scriptPath , Path . Combine ( Path . GetTempPath ( ) , @"Functions" ) , configureWebHostServices , configureScriptHostWebJobsBuilder ,
68- configureScriptHostAppConfiguration , configureScriptHostLogging , configureScriptHostServices , configureWebHostAppConfiguration )
64+ configureScriptHostAppConfiguration , configureScriptHostLogging , configureScriptHostServices )
6965 {
7066 }
7167
@@ -74,9 +70,7 @@ public TestFunctionHost(string scriptPath, string logPath,
7470 Action < IWebJobsBuilder > configureScriptHostWebJobsBuilder = null ,
7571 Action < IConfigurationBuilder > configureScriptHostAppConfiguration = null ,
7672 Action < ILoggingBuilder > configureScriptHostLogging = null ,
77- Action < IServiceCollection > configureScriptHostServices = null ,
78- Action < IConfigurationBuilder > configureWebHostAppConfiguration = null ,
79- bool addTestSettings = true )
73+ Action < IServiceCollection > configureScriptHostServices = null )
8074 {
8175 _appRoot = scriptPath ;
8276
@@ -132,10 +126,7 @@ public TestFunctionHost(string scriptPath, string logPath,
132126 } )
133127 . ConfigureScriptHostAppConfiguration ( scriptHostConfigurationBuilder =>
134128 {
135- if ( addTestSettings )
136- {
137- scriptHostConfigurationBuilder . AddTestSettings ( ) ;
138- }
129+ scriptHostConfigurationBuilder . AddTestSettings ( ) ;
139130 configureScriptHostAppConfiguration ? . Invoke ( scriptHostConfigurationBuilder ) ;
140131 } )
141132 . ConfigureScriptHostLogging ( scriptHostLoggingBuilder =>
@@ -158,11 +149,7 @@ public TestFunctionHost(string scriptPath, string logPath,
158149 }
159150
160151 config . Add ( new ScriptEnvironmentVariablesConfigurationSource ( ) ) ;
161- if ( addTestSettings )
162- {
163- config . AddTestSettings ( ) ;
164- }
165- configureWebHostAppConfiguration ? . Invoke ( config ) ;
152+ config . AddTestSettings ( ) ;
166153 } )
167154 . UseStartup < TestStartup > ( ) ;
168155
@@ -198,9 +185,7 @@ public TestFunctionHost(string scriptPath, string logPath,
198185
199186 public ScriptJobHostOptions ScriptOptions => JobHostServices . GetService < IOptions < ScriptJobHostOptions > > ( ) . Value ;
200187
201- public ISecretManagerProvider SecretManagerProvider => _testServer . Host . Services . GetService < ISecretManagerProvider > ( ) ;
202-
203- public ISecretManager SecretManager => SecretManagerProvider . Current ;
188+ public ISecretManager SecretManager => _testServer . Host . Services . GetService < ISecretManagerProvider > ( ) . Current ;
204189
205190 public string LogPath => _hostOptions . LogPath ;
206191
@@ -210,11 +195,6 @@ public TestFunctionHost(string scriptPath, string logPath,
210195
211196 public async Task < string > GetMasterKeyAsync ( )
212197 {
213- if ( ! SecretManagerProvider . SecretsEnabled )
214- {
215- return null ;
216- }
217-
218198 HostSecretsInfo secrets = await SecretManager . GetHostSecretsAsync ( ) ;
219199 return secrets . MasterKey ;
220200 }
@@ -368,44 +348,13 @@ public async Task<FunctionStatus> GetFunctionStatusAsync(string functionName)
368348
369349 public async Task < HostStatus > GetHostStatusAsync ( )
370350 {
371- HttpRequestMessage request = new HttpRequestMessage ( HttpMethod . Get , "admin/host/status" ) ;
372-
373- if ( SecretManagerProvider . SecretsEnabled )
374- {
375- // use admin key
376- HostSecretsInfo secrets = await SecretManager . GetHostSecretsAsync ( ) ;
377- request . Headers . Add ( AuthenticationLevelHandler . FunctionsKeyHeaderName , secrets . MasterKey ) ;
378- }
379- else
380- {
381- // use admin jwt token
382- string token = GenerateAdminJwtToken ( ) ;
383- request . Headers . Authorization = new System . Net . Http . Headers . AuthenticationHeaderValue ( "Bearer" , token ) ;
384- }
385-
386- HttpResponseMessage response = await HttpClient . SendAsync ( request ) ;
351+ HostSecretsInfo secrets = await SecretManager . GetHostSecretsAsync ( ) ;
352+ string uri = $ "admin/host/status?code={ secrets . MasterKey } ";
353+ HttpResponseMessage response = await HttpClient . GetAsync ( uri ) ;
387354 response . EnsureSuccessStatusCode ( ) ;
388355 return await response . Content . ReadAsAsync < HostStatus > ( ) ;
389356 }
390357
391- public string GenerateAdminJwtToken ( )
392- {
393- var tokenHandler = new JwtSecurityTokenHandler ( ) ;
394- string defaultKey = Util . GetDefaultKeyValue ( ) ;
395- var key = Encoding . ASCII . GetBytes ( defaultKey ) ;
396- var tokenDescriptor = new SecurityTokenDescriptor
397- {
398- Audience = string . Format ( ScriptConstants . AdminJwtValidAudienceFormat , Environment . GetEnvironmentVariable ( EnvironmentSettingNames . AzureWebsiteName ) ) ,
399- Issuer = string . Format ( ScriptConstants . AdminJwtValidIssuerFormat , Environment . GetEnvironmentVariable ( EnvironmentSettingNames . AzureWebsiteName ) ) ,
400- Expires = DateTime . UtcNow . AddHours ( 1 ) ,
401- SigningCredentials = new SigningCredentials ( new SymmetricSecurityKey ( key ) , SecurityAlgorithms . HmacSha256Signature )
402- } ;
403- var token = tokenHandler . CreateToken ( tokenDescriptor ) ;
404- string tokenHeaderValue = tokenHandler . WriteToken ( token ) ;
405-
406- return tokenHeaderValue ;
407- }
408-
409358 public void Dispose ( )
410359 {
411360 if ( ! _isDisposed )
0 commit comments