| File: Providers\UserDnsDomainDetectionProvider.cs | Web Access |
| Project: Microsoft.DotNet.Cli.InternalMicrosoft.csproj (Microsoft.DotNet.Cli.InternalMicrosoft) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. namespace Microsoft.DotNet.Cli.InternalMicrosoft; /// <summary> /// Reads Microsoft corporate identity from the current Windows environment. /// The detector reuses this stateless provider for process-wide detection. /// </summary> internal sealed class WindowsUserDnsDomainDetectionProvider : IInternalMicrosoftDetectionProvider { public string Name => "Windows USERDNSDOMAIN"; public int Stage => 1; public bool IsSupported(InternalMicrosoftDetectionContext context) => context.IsWindows; public Task<InternalMicrosoftProbeResult> DetectAsync( InternalMicrosoftDetectionContext context, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); var domain = context.GetEnvironmentVariable("USERDNSDOMAIN"); if (!InternalMicrosoftDetectionUtilities.TryGetCorporateDomain(domain, out var corporateDomain)) { return Task.FromResult(InternalMicrosoftProbeResult.NotDetected); } return Task.FromResult(new InternalMicrosoftProbeResult( true, InternalMicrosoftDetectionUtilities.NormalizeAlias(context.GetEnvironmentVariable("USERNAME")), corporateDomain)); } } /// <summary> /// Reads Microsoft corporate identity from the Windows environment visible through WSL. /// The detector reuses this stateless provider for process-wide detection. /// </summary> internal sealed class WslWindowsUserDnsDomainDetectionProvider : IInternalMicrosoftDetectionProvider { public string Name => "WSL Windows USERDNSDOMAIN"; public int Stage => 1; public bool IsSupported(InternalMicrosoftDetectionContext context) => context.IsWsl; public async Task<InternalMicrosoftProbeResult> DetectAsync( InternalMicrosoftDetectionContext context, CancellationToken cancellationToken) { var output = await context.RunProcessProbeAsync( "cmd.exe", ["/d", "/s", "/c", "set USERDNSDOMAIN&set USERNAME"], cancellationToken).ConfigureAwait(false); if (output.Failure is not null) { return InternalMicrosoftProbeResult.Failed(output.Failure); } var domain = InternalMicrosoftDetectionUtilities.GetEnvironmentVariableFromSetOutput( output.StandardOutput, "USERDNSDOMAIN"); return InternalMicrosoftDetectionUtilities.TryGetCorporateDomain(domain, out var corporateDomain) ? new InternalMicrosoftProbeResult( true, InternalMicrosoftDetectionUtilities.NormalizeAlias( InternalMicrosoftDetectionUtilities.GetEnvironmentVariableFromSetOutput( output.StandardOutput, "USERNAME")), corporateDomain) : InternalMicrosoftProbeResult.NotDetected; } }