Added git.sshDisplay{Port|Host} to hide port forward.

Running gitblit in a container it's easy to expose the ssh on the default port.
Using git.sshDisplayPort/git.sshDisplayHost you can expose the forwarded address
as the official location.
diff --git a/src/main/distrib/data/defaults.properties b/src/main/distrib/data/defaults.properties
index cc42d90..272eec0 100644
--- a/src/main/distrib/data/defaults.properties
+++ b/src/main/distrib/data/defaults.properties
@@ -112,6 +112,18 @@
 # RESTART REQUIRED
 git.sshBindInterface = 
 
+# Manually specify the hostname to use in advertised SSH repository urls.
+# This may be useful in complex forwarding setups.
+#
+# SINCE 1.7.0
+git.sshDisplayHost = 
+
+# Manually specify the port to use in advertised SSH repository urls.
+# This may be useful in complex forwarding setups.
+#
+# SINCE 1.7.0
+git.sshDisplayPort = 
+
 # Specify the SSH key manager to use for retrieving, storing, and removing
 # SSH keys.
 #
diff --git a/src/main/java/com/gitblit/servlet/SparkleShareInviteServlet.java b/src/main/java/com/gitblit/servlet/SparkleShareInviteServlet.java
index 69c254c..d2ddc2c 100644
--- a/src/main/java/com/gitblit/servlet/SparkleShareInviteServlet.java
+++ b/src/main/java/com/gitblit/servlet/SparkleShareInviteServlet.java
@@ -89,6 +89,8 @@
 			response.getWriter().append("SSH is not active on this server!");

 			return;

 		}

+		int sshDisplayPort = settings.getInteger(Keys.git.sshDisplayPort, sshPort);

+

 		// extract repo name from request

 		String repoUrl = request.getPathInfo().substring(1);

 

@@ -112,6 +114,10 @@
 		if (!StringUtils.isEmpty(url) && url.indexOf("localhost") == -1) {

 			host = new URL(url).getHost();

 		}

+		String sshDisplayHost = settings.getString(Keys.git.sshDisplayHost, "");

+		if(sshDisplayHost.isEmpty()) {

+			sshDisplayHost = host;

+		}

 

 		UserModel user;

 		if (StringUtils.isEmpty(username)) {

@@ -141,7 +147,7 @@
 		StringBuilder sb = new StringBuilder();

 		sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");

 		sb.append("<sparkleshare><invite>\n");

-		sb.append(MessageFormat.format("<address>ssh://{0}@{1}:{2,number,0}/</address>\n", user.username, host, sshPort));

+		sb.append(MessageFormat.format("<address>ssh://{0}@{1}:{2,number,0}/</address>\n", user.username, sshDisplayHost, sshDisplayPort));

 		sb.append(MessageFormat.format("<remote_path>/{0}</remote_path>\n", model.name));

 		int fanoutPort = settings.getInteger(Keys.fanout.port, 0);

 		if (fanoutPort > 0) {

diff --git a/src/main/java/com/gitblit/transport/ssh/SshDaemon.java b/src/main/java/com/gitblit/transport/ssh/SshDaemon.java
index 0ff5c28..4756d96 100644
--- a/src/main/java/com/gitblit/transport/ssh/SshDaemon.java
+++ b/src/main/java/com/gitblit/transport/ssh/SshDaemon.java
@@ -200,14 +200,22 @@
 	}
 
 	public String formatUrl(String gituser, String servername, String repository) {
-		if (sshd.getPort() == DEFAULT_PORT) {
+		IStoredSettings settings = gitblit.getSettings();
+
+		int port = sshd.getPort();
+		int displayPort = settings.getInteger(Keys.git.sshDisplayPort, port);
+		String displayServername = settings.getString(Keys.git.sshDisplayHost, "");
+		if(displayServername.isEmpty()) {
+			displayServername = servername;
+		}
+		if (displayPort == DEFAULT_PORT) {
 			// standard port
-			return MessageFormat.format("ssh://{0}@{1}/{2}", gituser, servername,
+			return MessageFormat.format("ssh://{0}@{1}/{2}", gituser, displayServername,
 					repository);
 		} else {
 			// non-standard port
 			return MessageFormat.format("ssh://{0}@{1}:{2,number,0}/{3}",
-					gituser, servername, sshd.getPort(), repository);
+					gituser, displayServername, displayPort, repository);
 		}
 	}
 
diff --git a/src/main/java/com/gitblit/transport/ssh/WelcomeShell.java b/src/main/java/com/gitblit/transport/ssh/WelcomeShell.java
index 852756a..267082a 100644
--- a/src/main/java/com/gitblit/transport/ssh/WelcomeShell.java
+++ b/src/main/java/com/gitblit/transport/ssh/WelcomeShell.java
@@ -200,13 +200,18 @@
 		}
 
 		private String formatUrl(String hostname, int port, String username) {
-			if (port == 22) {
+			int displayPort = settings.getInteger(Keys.git.sshDisplayPort, port);
+			String displayHostname = settings.getString(Keys.git.sshDisplayHost, "");
+			if(displayHostname.isEmpty()) {
+				displayHostname = hostname;
+			}
+			if (displayPort == 22) {
 				// standard port
-				return MessageFormat.format("{0}@{1}/REPOSITORY.git", username, hostname);
+				return MessageFormat.format("{0}@{1}/REPOSITORY.git", username, displayHostname);
 			} else {
 				// non-standard port
 				return MessageFormat.format("ssh://{0}@{1}:{2,number,0}/REPOSITORY.git",
-						username, hostname, port);
+						username, displayHostname, displayPort);
 			}
 		}
 	}
diff --git a/src/main/java/com/gitblit/transport/ssh/commands/SshCommand.java b/src/main/java/com/gitblit/transport/ssh/commands/SshCommand.java
index f18b99b..06b0e8d 100644
--- a/src/main/java/com/gitblit/transport/ssh/commands/SshCommand.java
+++ b/src/main/java/com/gitblit/transport/ssh/commands/SshCommand.java
@@ -16,6 +16,7 @@
  */
 package com.gitblit.transport.ssh.commands;
 
+import com.gitblit.IStoredSettings;
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.net.MalformedURLException;
@@ -73,15 +74,20 @@
 
 	protected String getRepositoryUrl(String repository) {
 		String username = getContext().getClient().getUsername();
-		String hostname = getHostname();
-		int port = getContext().getGitblit().getSettings().getInteger(Keys.git.sshPort, 0);
-		if (port == 22) {
+		IStoredSettings settings = getContext().getGitblit().getSettings();
+		String displayHostname = settings.getString(Keys.git.sshDisplayHost, "");
+		if(displayHostname.isEmpty()) {
+			displayHostname = getHostname();
+		}
+		int port = settings.getInteger(Keys.git.sshPort, 0);
+		int displayPort = settings.getInteger(Keys.git.sshDisplayPort, port);
+		if (displayPort == 22) {
 			// standard port
-			return MessageFormat.format("{0}@{1}/{2}.git", username, hostname, repository);
+			return MessageFormat.format("{0}@{1}/{2}.git", username, displayHostname, repository);
 		} else {
 			// non-standard port
 			return MessageFormat.format("ssh://{0}@{1}:{2,number,0}/{3}",
-					username, hostname, port, repository);
+					username, displayHostname, displayPort, repository);
 		}
 	}