101 lines
2.4 KiB
C#
101 lines
2.4 KiB
C#
using Microsoft.Extensions.Configuration;
|
|
using Microsoft.Identity.Client;
|
|
using System.Net.Http.Headers;
|
|
|
|
namespace Shogi.AcceptanceTests.TestSetup
|
|
{
|
|
/// <summary>
|
|
/// Acceptance Test fixture for tests which assert features for Microsoft accounts.
|
|
/// </summary>
|
|
public class MsalTestFixture : IAsyncLifetime, IDisposable
|
|
{
|
|
private bool disposedValue;
|
|
private readonly IConfidentialClientApplication app;
|
|
|
|
public MsalTestFixture()
|
|
{
|
|
Configuration = new ConfigurationBuilder()
|
|
.AddJsonFile("appsettings.json")
|
|
.AddEnvironmentVariables()
|
|
.AddUserSecrets<MsalTestFixture>()
|
|
.Build();
|
|
|
|
var azure = Configuration.GetSection("Auth");
|
|
app = ConfidentialClientApplicationBuilder
|
|
.Create(azure["ClientId"])
|
|
.WithTenantId(azure["TenantId"])
|
|
.WithClientSecret(azure["SecretValue"])
|
|
.Build();
|
|
|
|
Service = new HttpClient
|
|
{
|
|
BaseAddress = new Uri(Configuration["ServiceUrl"], UriKind.Absolute)
|
|
};
|
|
|
|
|
|
publicApp = PublicClientApplicationBuilder
|
|
.Create(azure["ClientId"])
|
|
.WithTenantId("common")
|
|
.Build();
|
|
|
|
}
|
|
|
|
public IConfiguration Configuration { get; private set; }
|
|
|
|
|
|
public HttpClient Service { get; }
|
|
|
|
private IPublicClientApplication publicApp;
|
|
|
|
public async Task InitializeAsync()
|
|
{
|
|
var scopes = Configuration.GetSection("Auth:Scopes").Get<string[]>();
|
|
var authResult = await app
|
|
.AcquireTokenForClient(scopes)
|
|
.ExecuteAsync();
|
|
|
|
authResult.Should().NotBeNull();
|
|
authResult.AccessToken.Should().NotBeNullOrEmpty();
|
|
|
|
Service.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", authResult.AccessToken);
|
|
|
|
var accounts = await publicApp.GetAccountsAsync();
|
|
var password = new System.Security.SecureString();
|
|
foreach (var c in "some password")
|
|
{
|
|
password.AppendChar(c);
|
|
}
|
|
var th = await publicApp
|
|
.AcquireTokenByIntegratedWindowsAuth(scopes)
|
|
.ExecuteAsync();
|
|
//var thing = await publicApp.AcquireTokenByUsernamePassword(scopes, "Need to create a test email.", password)
|
|
//.ExecuteAsync();
|
|
}
|
|
|
|
protected virtual void Dispose(bool disposing)
|
|
{
|
|
if (!disposedValue)
|
|
{
|
|
if (disposing)
|
|
{
|
|
Service.Dispose();
|
|
}
|
|
|
|
disposedValue = true;
|
|
}
|
|
}
|
|
|
|
public Task DisposeAsync()
|
|
{
|
|
Dispose(true);
|
|
return Task.CompletedTask;
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
Dispose(disposing: true);
|
|
GC.SuppressFinalize(this);
|
|
}
|
|
}
|
|
}
|