Allow connections on non-default port (#462)

* Allow custom port

* Update unit tests for port property
This commit is contained in:
Karl Burtram
2017-09-21 08:26:13 -07:00
committed by GitHub
parent c90fd3410d
commit 60aad9cf7e
5 changed files with 109 additions and 55 deletions

View File

@@ -83,19 +83,26 @@ namespace Microsoft.SqlTools.ServiceLayer.Admin
DefaultDatabaseInfoParams optionsParams,
RequestContext<DefaultDatabaseInfoResponse> requestContext)
{
var response = new DefaultDatabaseInfoResponse();
ConnectionInfo connInfo;
AdminService.ConnectionServiceInstance.TryFindConnection(
optionsParams.OwnerUri,
out connInfo);
if (taskHelper == null)
try
{
taskHelper = CreateDatabaseTaskHelper(connInfo);
}
var response = new DefaultDatabaseInfoResponse();
ConnectionInfo connInfo;
AdminService.ConnectionServiceInstance.TryFindConnection(
optionsParams.OwnerUri,
out connInfo);
response.DefaultDatabaseInfo = DatabaseTaskHelper.DatabasePrototypeToDatabaseInfo(taskHelper.Prototype);
await requestContext.SendResult(response);
if (taskHelper == null)
{
taskHelper = CreateDatabaseTaskHelper(connInfo);
}
response.DefaultDatabaseInfo = DatabaseTaskHelper.DatabasePrototypeToDatabaseInfo(taskHelper.Prototype);
await requestContext.SendResult(response);
}
catch (Exception ex)
{
await requestContext.SendError(ex.ToString());
}
}
/// <summary>
@@ -105,31 +112,38 @@ namespace Microsoft.SqlTools.ServiceLayer.Admin
CreateDatabaseParams databaseParams,
RequestContext<CreateDatabaseResponse> requestContext)
{
var response = new DefaultDatabaseInfoResponse();
ConnectionInfo connInfo;
AdminService.ConnectionServiceInstance.TryFindConnection(
databaseParams.OwnerUri,
out connInfo);
try
{
var response = new DefaultDatabaseInfoResponse();
ConnectionInfo connInfo;
AdminService.ConnectionServiceInstance.TryFindConnection(
databaseParams.OwnerUri,
out connInfo);
if (taskHelper == null)
{
taskHelper = CreateDatabaseTaskHelper(connInfo);
if (taskHelper == null)
{
taskHelper = CreateDatabaseTaskHelper(connInfo);
}
DatabasePrototype prototype = taskHelper.Prototype;
DatabaseTaskHelper.ApplyToPrototype(databaseParams.DatabaseInfo, taskHelper.Prototype);
Database db = prototype.ApplyChanges();
if (db != null)
{
taskHelper = null;
}
await requestContext.SendResult(new CreateDatabaseResponse()
{
Result = true,
TaskId = 0
});
}
DatabasePrototype prototype = taskHelper.Prototype;
DatabaseTaskHelper.ApplyToPrototype(databaseParams.DatabaseInfo, taskHelper.Prototype);
Database db = prototype.ApplyChanges();
if (db != null)
catch (Exception ex)
{
taskHelper = null;
}
await requestContext.SendResult(new CreateDatabaseResponse()
{
Result = true,
TaskId = 0
});
await requestContext.SendError(ex.ToString());
}
}
/// <summary>
@@ -138,21 +152,28 @@ namespace Microsoft.SqlTools.ServiceLayer.Admin
internal static async Task HandleGetDatabaseInfoRequest(
GetDatabaseInfoParams databaseParams,
RequestContext<GetDatabaseInfoResponse> requestContext)
{
ConnectionInfo connInfo;
AdminService.ConnectionServiceInstance.TryFindConnection(
databaseParams.OwnerUri,
out connInfo);
DatabaseInfo info = null;
if (connInfo != null)
{
info = GetDatabaseInfo(connInfo);
}
{
try
{
ConnectionInfo connInfo;
AdminService.ConnectionServiceInstance.TryFindConnection(
databaseParams.OwnerUri,
out connInfo);
DatabaseInfo info = null;
if (connInfo != null)
{
info = GetDatabaseInfo(connInfo);
}
await requestContext.SendResult(new GetDatabaseInfoResponse(){
DatabaseInfo = info
});
await requestContext.SendResult(new GetDatabaseInfoResponse(){
DatabaseInfo = info
});
}
catch (Exception ex)
{
await requestContext.SendError(ex.ToString());
}
}
/// <summary>
@@ -177,15 +198,21 @@ namespace Microsoft.SqlTools.ServiceLayer.Admin
XmlDocument xmlDoc = CreateDataContainerDocument(connInfo, databaseExists);
CDataContainer dataContainer;
// add alternate port to server name property if provided
var connectionDetails = connInfo.ConnectionDetails;
string serverName = !connectionDetails.Port.HasValue
? connectionDetails.ServerName
: string.Format("{0},{1}", connectionDetails.ServerName, connectionDetails.Port.Value);
// check if the connection is using SQL Auth or Integrated Auth
if (string.Equals(connInfo.ConnectionDetails.AuthenticationType, "SqlLogin", StringComparison.OrdinalIgnoreCase))
if (string.Equals(connectionDetails.AuthenticationType, "SqlLogin", StringComparison.OrdinalIgnoreCase))
{
var passwordSecureString = BuildSecureStringFromPassword(connInfo.ConnectionDetails.Password);
var passwordSecureString = BuildSecureStringFromPassword(connectionDetails.Password);
dataContainer = new CDataContainer(
CDataContainer.ServerType.SQL,
connInfo.ConnectionDetails.ServerName,
serverName,
false,
connInfo.ConnectionDetails.UserName,
connectionDetails.UserName,
passwordSecureString,
xmlDoc.InnerXml);
}
@@ -193,7 +220,7 @@ namespace Microsoft.SqlTools.ServiceLayer.Admin
{
dataContainer = new CDataContainer(
CDataContainer.ServerType.SQL,
connInfo.ConnectionDetails.ServerName,
serverName,
true,
null,
null,