File: VSHostObject.cs
Web Access
Project: ..\..\..\src\Containers\Microsoft.NET.Build.Containers\Microsoft.NET.Build.Containers.csproj (Microsoft.NET.Build.Containers)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using Microsoft.Build.Framework;
 
namespace Microsoft.NET.Build.Containers.Tasks;
 
internal sealed class VSHostObject
{
    private const string CredentialItemSpecName = "MsDeployCredential";
    private const string UserMetaDataName = "UserName";
    private const string PasswordMetaDataName = "Password";
    IEnumerable<ITaskItem>? _hostObject;
 
    public VSHostObject(IEnumerable<ITaskItem>? hostObject)
    {
        _hostObject = hostObject;
    }
 
    public bool ExtractCredentials(out string username, out string password, Action<string> logMethod)
    {
        bool retVal = false;
        username = password = string.Empty;
        if (_hostObject != null)
        {
            ITaskItem credentialItem = _hostObject.FirstOrDefault<ITaskItem>(p => p.ItemSpec == CredentialItemSpecName);
            if (credentialItem != null)
            {
                retVal = true;
                username = credentialItem.GetMetadata(UserMetaDataName);
                if (!string.IsNullOrEmpty(username))
                {
                    password = credentialItem.GetMetadata(PasswordMetaDataName);
                }
                else
                {
                    logMethod("HostObject credentials not detected. Falling back to Docker credential retrieval.");
                }
            }
        }
        return retVal;
    }
}