Skip to content

Commit

Permalink
FEATURE: Added support for Windows SSO authentication in Windows plat…
Browse files Browse the repository at this point in the history
…form.
  • Loading branch information
cprieto committed Aug 23, 2013
1 parent a5e2b8d commit 8fe644c
Show file tree
Hide file tree
Showing 25 changed files with 334 additions and 157 deletions.
10 changes: 5 additions & 5 deletions .idea/artifacts/agent.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 0 additions & 14 deletions .idea/libraries/com_google_dexmaker_dexmaker_mockito_1_0.xml

This file was deleted.

11 changes: 11 additions & 0 deletions .idea/libraries/mockito.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion agent/agent.iml
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@
<SOURCES />
</library>
</orderEntry>
<orderEntry type="library" name="com.google.dexmaker:dexmaker-mockito:1.0" level="project" />
<orderEntry type="module-library" scope="TEST">
<library>
<CLASSES>
Expand All @@ -51,6 +50,7 @@
<SOURCES />
</library>
</orderEntry>
<orderEntry type="library" name="mockito" level="project" />
</component>
</module>

2 changes: 1 addition & 1 deletion agent/src/META-INF/MANIFEST.MF
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
Manifest-Version: 1.0
Class-Path: lib/common.jar lib/jtds-1.2.7.jar
Class-Path: common.jar jtds-1.2.7.jar

5 changes: 4 additions & 1 deletion agent/src/org/tsqlt/runner/agent/ConnectionBuilder.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
package org.tsqlt.runner.agent;

import jetbrains.buildServer.agent.BuildAgentConfiguration;
import org.jetbrains.annotations.NotNull;

import java.sql.Connection;
import java.sql.SQLException;

public interface ConnectionBuilder {
Connection getConnection() throws SQLException, ClassNotFoundException;
Connection getConnection(@NotNull BuildAgentConfiguration configuration) throws SQLException, ClassNotFoundException;
}
7 changes: 5 additions & 2 deletions agent/src/org/tsqlt/runner/agent/DomainUser.java
Original file line number Diff line number Diff line change
Expand Up @@ -52,9 +52,12 @@ public String toString() {
}

public static DomainUser create(Map<String, String> properties){
DomainUser domainUser = new DomainUser(properties.get(PropertyNames.USER_DOMAIN));
String domainAndUser = properties.containsKey(PropertyNames.USER_DOMAIN)
? properties.get(PropertyNames.USER_DOMAIN) : "";

DomainUser domainUser = new DomainUser(domainAndUser);
boolean useWinAuth = properties.containsKey(PropertyNames.WINDOWS_AUTH)
? Boolean.getBoolean(PropertyNames.WINDOWS_AUTH) : false;
? Boolean.parseBoolean(properties.get(PropertyNames.WINDOWS_AUTH)) : false;
if (useWinAuth)
domainUser.setUseNtlm(useWinAuth);

Expand Down
36 changes: 16 additions & 20 deletions agent/src/org/tsqlt/runner/agent/JtdsConnectionStringBuilder.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import org.jetbrains.annotations.NotNull;

import java.util.Map;
import java.util.Set;

public class JtdsConnectionStringBuilder {
private final String server;
Expand All @@ -12,48 +11,45 @@ public class JtdsConnectionStringBuilder {
private final String domain;
private final int port;
private final Map<String, String> options;
private final boolean useWindowsAuth;

public JtdsConnectionStringBuilder(@NotNull ServerInstance serverInstance, @NotNull String database, String domain, Map<String, String> options){
public JtdsConnectionStringBuilder(@NotNull ServerInstance serverInstance, @NotNull String database, String domain, Map<String, String> options, boolean useWindowsAuth) {
server = serverInstance.getServer();
port = serverInstance.getPort();
instance = serverInstance.getInstance();

this.database = database;
this.domain = domain;
this.options = options;
this.useWindowsAuth = useWindowsAuth;
}

public JtdsConnectionStringBuilder(@NotNull ServerInstance serverInstance, @NotNull String database) {
this(serverInstance, database, null, null);
this(serverInstance, database, null, null, false);
}

public JtdsConnectionStringBuilder(@NotNull ServerInstance serverInstance, @NotNull String database, String domain){
this(serverInstance, database, domain, null);
public JtdsConnectionStringBuilder(@NotNull ServerInstance serverInstance, @NotNull String database, String domain) {
this(serverInstance, database, domain, null, false);
}

@Override
public String toString() {
StringBuilder sb = new StringBuilder("jdbc:jtds:sqlserver://");
sb.append(String.format("%s:%s", server, port));
sb.append(String.format("/%s", database));
sb.append(server).append(":").append(port);
sb.append("/").append(database);

if (instance != null)
sb.append(String.format(";instance=%s", instance));
if (instance != null && !instance.isEmpty())
sb.append(";instance=").append(instance);

if (domain != null && !domain.isEmpty())
sb.append(String.format(";domain=%s", domain));
sb.append(";domain=").append(domain);

if (options != null && !options.isEmpty())
sb.append(processOptions(options));

return sb.toString();
}
for (String option : OptionHelper.filter(options.keySet()))
sb.append(";").append(option).append("=").append(options.get(option));

private String processOptions(@NotNull Map<String, String> options){
StringBuilder sb = new StringBuilder();
Set<String> keys = options.keySet();
for (String key : keys){
sb.append(String.format(";%s=%s", key, options.get(key)));
}
if (useWindowsAuth)
sb.append(";useNTLMv2=true");

return sb.toString();
}
Expand Down
28 changes: 28 additions & 0 deletions agent/src/org/tsqlt/runner/agent/OptionHelper.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package org.tsqlt.runner.agent;

import java.util.List;
import java.util.Set;
import java.util.Vector;

public final class OptionHelper {
private static final List<String> invalidOptions = new Vector<String>() {{
add("domain");
add("useNTMLv2");
add("instance");
add("user");
add("password");
}};

public static List<String> filter(Set<String> options) {
List<String> validOptions = new Vector<String>();
for (String option : options){
if (isValid(option))
validOptions.add(option);
}
return validOptions;
}

public static boolean isValid(String option) {
return invalidOptions.contains(option) == false;
}
}
64 changes: 5 additions & 59 deletions agent/src/org/tsqlt/runner/agent/ServerInstance.java
Original file line number Diff line number Diff line change
@@ -1,68 +1,14 @@
package org.tsqlt.runner.agent;

import org.jetbrains.annotations.NotNull;
import org.tsqlt.runner.common.PropertyNames;

import java.util.Map;

public class ServerInstance {
private String server;
private int port;
private final String instance;

public ServerInstance(@NotNull String input) {
if (input.contains("\\")) {
String[] parsed = input.split("\\\\", 2);
setServer(parsed[0]);
instance = parsed[1];
} else {
setServer(input);
instance = null;
}
}

public interface ServerInstance {
@NotNull
public String getServer(){
return server;
}
String getServer();

private void setServer(@NotNull String server) {
if (server.contains(":")) {
String[] parsed = server.split(":", 2);
this.server = transformLocalAddress(parsed[0]);
this.port = Integer.parseInt(parsed[1]);
} else {
this.server = transformLocalAddress(server);
port = 1433;
}
}

@NotNull
public static String transformLocalAddress(@NotNull String input) {
if (input.toLowerCase().equals("(local)") || input.trim().equals("."))
return "127.0.0.1";
return input;
}
String getInstance();

public String getInstance(){
return instance;
}

public boolean hasInstance(){
return instance != null && !instance.isEmpty();
}

@Override
public String toString() {
return hasInstance() ? String.format("%s\\%s", server, instance) : server;
}

@NotNull
public static ServerInstance create(@NotNull Map<String, String> options){
return new ServerInstance(options.get(PropertyNames.SERVER_INSTANCE));
}
boolean hasInstance();

public int getPort() {
return port;
}
int getPort();
}
72 changes: 72 additions & 0 deletions agent/src/org/tsqlt/runner/agent/ServerInstanceImpl.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
package org.tsqlt.runner.agent;

import org.jetbrains.annotations.NotNull;
import org.tsqlt.runner.common.PropertyNames;

import java.util.Map;

public class ServerInstanceImpl implements ServerInstance {
private String server;
private int port;
private final String instance;

public ServerInstanceImpl(@NotNull String input) {
if (input.contains("\\")) {
String[] parsed = input.split("\\\\", 2);
setServer(parsed[0]);
instance = parsed[1];
} else {
setServer(input);
instance = null;
}
}

@Override
@NotNull
public String getServer(){
return server;
}

private void setServer(@NotNull String server) {
if (server.contains(":")) {
String[] parsed = server.split(":", 2);
this.server = transformLocalAddress(parsed[0]);
this.port = Integer.parseInt(parsed[1]);
} else {
this.server = transformLocalAddress(server);
port = 1433;
}
}

@NotNull
public static String transformLocalAddress(@NotNull String input) {
if (input.toLowerCase().equals("(local)") || input.trim().equals("."))
return "127.0.0.1";
return input;
}

@Override
public String getInstance(){
return instance;
}

@Override
public boolean hasInstance(){
return instance != null && !instance.isEmpty();
}

@Override
public String toString() {
return hasInstance() ? String.format("%s\\%s", server, instance) : server;
}

@NotNull
public static ServerInstance create(@NotNull Map<String, String> options){
return new ServerInstanceImpl(options.get(PropertyNames.SERVER_INSTANCE));
}

@Override
public int getPort() {
return port;
}
}
Loading

0 comments on commit 8fe644c

Please sign in to comment.