diff --git a/src/Microsoft.SqlTools.ServiceLayer/Connection/ConnectionService.cs b/src/Microsoft.SqlTools.ServiceLayer/Connection/ConnectionService.cs index 534e7b89..5a96a6c7 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/Connection/ConnectionService.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/Connection/ConnectionService.cs @@ -28,8 +28,9 @@ namespace Microsoft.SqlTools.ServiceLayer.Connection /// Main class for the Connection Management services /// public class ConnectionService - { + { public const string AdminConnectionPrefix = "ADMIN:"; + internal const string PasswordPlaceholder = "******"; private const string SqlAzureEdition = "SQL Azure"; /// @@ -1268,6 +1269,13 @@ namespace Microsoft.SqlTools.ServiceLayer.Connection { try { + if (!connStringParams.IncludePassword) + { + info.ConnectionDetails.Password = ConnectionService.PasswordPlaceholder; + } + + info.ConnectionDetails.ApplicationName = "sqlops-connection-string"; + connectionString = BuildConnectionString(info.ConnectionDetails); } catch (Exception e) diff --git a/src/Microsoft.SqlTools.ServiceLayer/Connection/Contracts/GetConnectionStringParams.cs b/src/Microsoft.SqlTools.ServiceLayer/Connection/Contracts/GetConnectionStringParams.cs index 5d8d0f43..408ec136 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/Connection/Contracts/GetConnectionStringParams.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/Connection/Contracts/GetConnectionStringParams.cs @@ -14,5 +14,10 @@ namespace Microsoft.SqlTools.ServiceLayer.Connection.Contracts /// URI of the owner of the connection /// public string OwnerUri { get; set; } + + /// + /// Indicates whether the password should be return in the connection string + /// + public bool IncludePassword { get; set; } } } diff --git a/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/Connection/ConnectionServiceTests.cs b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/Connection/ConnectionServiceTests.cs index 4a3bb506..76efb1e8 100644 --- a/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/Connection/ConnectionServiceTests.cs +++ b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/Connection/ConnectionServiceTests.cs @@ -4,6 +4,7 @@ // using System.Data; using System.Data.Common; +using System.Threading.Tasks; using Microsoft.SqlTools.ServiceLayer.Connection; using Microsoft.SqlTools.ServiceLayer.Connection.Contracts; using Microsoft.SqlTools.ServiceLayer.IntegrationTests.Utility; @@ -115,9 +116,14 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.Connection ConnectionService service = ConnectionService.Instance; var result = LiveConnectionHelper.InitLiveConnectionInfo(); var requestContext = new Mock>(); + + requestContext.Setup(x => x.SendResult(It.Is((connectionString) => connectionString.Contains("Password=" + ConnectionService.PasswordPlaceholder)))) + .Returns(Task.FromResult(new object())); + var requestParams = new GetConnectionStringParams() { - OwnerUri = result.ConnectionInfo.OwnerUri + OwnerUri = result.ConnectionInfo.OwnerUri, + IncludePassword = false }; await service.HandleGetConnectionStringRequest(requestParams, requestContext.Object);