fix(headless): complete connected movement gate
This commit is contained in:
parent
fd9559a063
commit
3f3401257c
11 changed files with 756 additions and 48 deletions
|
|
@ -23,7 +23,8 @@ internal sealed class HeadlessProcessHost : IDisposable
|
|||
TextWriter diagnostics,
|
||||
ILiveSessionOperations? sessionOperations = null,
|
||||
TimeProvider? timeProvider = null,
|
||||
IHeadlessProcessContentFactory? contentFactory = null)
|
||||
IHeadlessProcessContentFactory? contentFactory = null,
|
||||
HeadlessDirectCredentials? directCredentials = null)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(configuration);
|
||||
ArgumentNullException.ThrowIfNull(paths);
|
||||
|
|
@ -34,6 +35,12 @@ internal sealed class HeadlessProcessHost : IDisposable
|
|||
throw new HeadlessConfigurationException(
|
||||
"Headless run mode requires at least one session.");
|
||||
}
|
||||
if (directCredentials is not null
|
||||
&& configuration.Sessions.Count != 1)
|
||||
{
|
||||
throw new HeadlessConfigurationException(
|
||||
"Direct credentials require exactly one configured session.");
|
||||
}
|
||||
HeadlessStaticStateAudit.ValidateProcessIsolation();
|
||||
|
||||
_diagnostics = new HeadlessDiagnosticWriter(diagnostics);
|
||||
|
|
@ -61,10 +68,19 @@ internal sealed class HeadlessProcessHost : IDisposable
|
|||
HeadlessSessionDescriptor descriptor = candidate
|
||||
?? throw new HeadlessConfigurationException(
|
||||
"Headless run mode cannot contain a null session.");
|
||||
HeadlessCredentialSecret secret =
|
||||
credentials.Resolve(
|
||||
if (directCredentials is not null)
|
||||
{
|
||||
descriptor = WithAccount(
|
||||
descriptor,
|
||||
directCredentials.User);
|
||||
}
|
||||
HeadlessCredentialSecret secret = directCredentials is null
|
||||
? credentials.Resolve(
|
||||
descriptor.Id,
|
||||
descriptor.Credential);
|
||||
descriptor.Credential)
|
||||
: new HeadlessCredentialSecret(
|
||||
"command-line",
|
||||
directCredentials.Password);
|
||||
HeadlessProcessContentOwner.HeadlessProcessContentLease?
|
||||
contentLease = content?.AcquireLease(descriptor.Id);
|
||||
try
|
||||
|
|
@ -111,6 +127,19 @@ internal sealed class HeadlessProcessHost : IDisposable
|
|||
internal HeadlessProcessContentSnapshot? Content =>
|
||||
_content?.CaptureSnapshot();
|
||||
|
||||
private static HeadlessSessionDescriptor WithAccount(
|
||||
HeadlessSessionDescriptor source,
|
||||
string account) =>
|
||||
new()
|
||||
{
|
||||
Id = source.Id,
|
||||
Endpoint = source.Endpoint,
|
||||
Account = account,
|
||||
Character = source.Character,
|
||||
Policy = source.Policy,
|
||||
Credential = source.Credential,
|
||||
};
|
||||
|
||||
internal async Task<HeadlessExitCode> RunAsync(
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue